web-dev-qa-db-ja.com

これは、スマートフォンのCPUとデスクトップのCPU速度の有効な比較ですか(Android G1と古いPentium 4デスクトップ)?

Android電話に移植されるデスクトップPCでコードを作成するときに速度の違いを見積もろうとしています。正確である必要はありませんが、適切な見積もりを行うと作成を停止できますAndroid電話でひどく遅いコード。Android G1までサポートしたいので、「ベースライン」として使用しています。

これが、比較のために古いPentium 4を使用してDhrystone MIPSで計算を実行している方法です。これは、高速テストのテストユニットになります。このドキュメントによると、Qualcomm MSM72xxを使用するG1 ARM CPUは1 MHzあたり約1 MIPSです。

http://www.techautos.com/2010/03/14/smartphone-processor-guide/

ウェブ検索の結果、G1のCPUはチップの仕様に示されている523 Mhzではなく350 Mhz程度で稼働しているというユーザーのコメントが表示されたため、G1のMIPSレーティングを350 MIPSに正しくまたは誤って割り当てています。

このウィキペディアのページには、約9700 MIPSと評価されたPentium 4 Extremeエディションが表示されています。

http://en.wikipedia.org/wiki/Instructions_per_second

これにより、Pentium 4はG1よりも約27倍高速になります。その乗数を考えると、時間のかかる操作の1つ中に、コードがPentium 4で1秒かかる場合、G1で27秒かかると推定します。

私の論理は正しいですか?それが私がG1で住みやすいようにするためにコードにいくつかの本当に痛い最適化をしなければならないことを意味するからではないことを願っています。私のロジックが正しくなく、この計算に適したアルゴリズムがある場合は、お知らせください。

-ロシュラー

7
Robert Oschler

はい、P4デスクトップは携帯電話よりもはるかに高速です。

以前は携帯電話のOSで作業していました。これは数年前のことで、XScaleとOMAP ARM CPUを使用していました。また、x86用にコンパイルされた同じコードを実行するデスクトップシミュレーターもありました。測定したことはありませんが、27xは確かにもっともらしい。

生のCPUクロック速度以外にも、多くの要因が関係しており、そのほとんどがハードウェアに関連しています。周辺機器、メモリ、バスの速度とアーキテクチャは非常に重要です。もう1つは、CPUシリコンの構築方法です。 ARM CPUは通常、よりシンプルであり、x86チップには、電力要件とチップダイサイズを向上させるパフォーマンス向上機能はありません。

最終的には、測定を行う必要があります。そして、はい、この種の組み込み作業には、エンドユーザーが「物事を住みやすくするためのコードへの苦痛な最適化」が含まれることがよくあります。これが、経験豊富な大きな理由ですARM開発者は現在、シリコンバレー周辺で大きな需要があります。すでにこれらの特殊な最適化スキルをお持ちの場合、多くの人々がそれを必要としています。


スマートフォンのコードの「時期尚早の最適化」についてコメントを追加します。

組み込みシステムのあらゆる種類の作業を行っている場合は、最適化を念頭に置いてコードを記述する必要があります。作成するすべてのコードをそのまま最適化する必要があるわけではありませんが、問題が発生する可能性が高い場所を把握しておく必要があります。

通常、埋め込み実行可能ファイルをデスクトップ上でビルドしてデバイスに転送するため、ビルド/テストサイクルはデスクトップ上よりも少なくとも1桁大きくなります。最小のコード変更の結果を確認するには数分かかる場合があります。また、組み込みデバイスのコードプロファイリングツールは、それらが存在する場合でも非常に問題があります。

したがって、組み込みデバイスのパフォーマンスチューニングを最後まで残したくないだけです。そうすることで、締め切りがあれば、徹夜で多くのプロジェクトに参加することになります。組み込みデバイスでは、パフォーマンステストは単体テストのようなものです。初めてテストに合格する必要があり、パフォーマンスが低下しないようにテストを継続する必要があります。

11
Bob Murphy

CPUにバインドされたアルゴリズムであっても、CPUの処理能力よりもパフォーマンスがはるかに優れています。コンパイラの効率(およびAndroid電話)で実行する可能性が高い、Javaを使用している場合のJVM実装)使用可能なメモリの量とメモリのサイズバス、プロセッサのキャッシュのサイズなどがすべて考慮されます。

コードの実行速度を本当に知りたい場合は、実際のコードでテストしてみてください。時間のかかるアルゴリズムを記述し(大きなデータセットでのバブルソートはうまく機能します)、両方のプラットフォームでまったく同じコードをコンパイルして、ランタイムをテストします。より完全な画像については、さまざまな機能セットを実行するいくつかの異なるアルゴリズムを試してください。

5
Mason Wheeler