1

私の質問は、iPhone、iPod、および iPad に固有のものです。アーキテクチャが大きな違いを生むと想定しているためです。どこかに(おそらくさまざまなチップの)仕様があるか、特定の命令ごとに T を測定する信頼できる方法があることを願っています。プロセッサの総使用時間や使用メモリなどを測定するために、いくつものツールを使用できることはわかっています。より低いレベルで定量化したいと考えています。

これで、アルゴリズムの主要部分を何回通過したかを知ることができました。たとえばn * (n-1)、単純な実装では時間を反復し、別の実装ではn(最良の場合) とn + n * (n-1)(最悪の場合) の間を反復します。また、命令 (+ - = % * /、および論理ステートメント) の総数を合理的にカウントし、それらのカウントを比較することもできますが、それは各操作の重みが同じであると仮定した場合です。また、論理ステートメント(if、else、for、while)と数学演算子の実際の時間値を重み付けする方法がわかりません...毎回「+」と同じくらい「if」ですこれを使って?この情報がどこにあるのか知りたいです。

したがって、明確にするために、私の目標は、CPU (または GPU または任意の U) にどれだけのプロセッサ時間を要求しているかを調べて、プロセッサ時間に最適なアルゴリズムを設計できるようにすることです。iOS ハードウェアをどこから始めたらよいか教えてもらえますか?

編集:開発者ポータルのClockServices.cと SIMD へのこのリンクは、これに興味のある人にとっては良い出発点かもしれません。今夜、あと数杯コーヒーを飲めば乗り切れるかもしれません ;)

4

2 に答える 2

2

最新のプラットフォームでは、プロセッサ時間だけが制限要因ではありません。多くの場合、メモリアクセスはです。

それでも、プロセッサ時間:
プロセッサ負荷の見積もりでの基本的なアプローチは問題ありませんが、賢明です。一般的なプラットフォームの知識に基づいて、コストの大まかな見積もりを行います。

この記事の表1は、.NETでの一般的なプリミティブ操作の時間を示しています。プラットフォームは異なる場合がありますが、相対的な時間は通常非常に似ています。たぶん、iStuff用のものを見つけることができます-あるいは作ることさえできます-。

(プロセッサ/命令セットのマニュアルを除いて、他のプラットフォームでこれほど徹底的なものに出くわしたことはありませんが、アセンブリ命令を扱っています)

メモリの局所性:
キャッシュミスは数百サイクルのコストがかかる可能性があり、ディスクアクセスは1000倍になります。したがって、メモリアクセスパターンを制御する(つまり、ワーキングセットを減らし、キャッシュに適した方法でデータを再構築してアクセスする)ことは、アルゴリズムを評価する上で重要な部分です。

于 2011-01-06T11:17:56.180 に答える
0

xCodeには、各機能/操作のパフォーマンスを測定するための機器があり、それらを簡単に使用できます。

于 2011-01-06T10:28:12.910 に答える