2011-01-06 4 views
1

私の質問はiPhone、iPod、iPadに特有です。私はアーキテクチャが大きな違いを生み出していると考えています。私は、どこかに(おそらく様々なチップのための)仕様か、またはそれぞれの特定の命令のためにTを測定する信頼できる方法があると期待しています。私は使用されたプロセッサ時間の合計、使用されたメモリなどを測定するために任意の数のツールを使用できることを知っています。私はより低いレベルで定量化したいと思います。どのように新しいアルゴリズムの設計を最適化する操作の時間値を見つけるのですか?

私は、アルゴリズムの主要部分を何度も調べることができます。たとえば、純粋な実装ではn * (n-1)回、もう1つはn(最悪の場合)とn + n * (n-1)(最悪の場合)の間を繰り返します。私はまた、命令の総数(+ - =%* /とロジックステートメント)の合理的なカウントを行うことができ、それらのカウントを比較することができますが、それは各操作の重みが同じであると仮定しています。また、私はどのように論理的なステートメント(if、else、for、for)の実際の時間値を重み付けするか考えていません...数学的演算子と比較して... "これを使って?私はこの情報がどこにあるのか知りたいです。

わかりやすくするために、私の目標は、プロセッサ時間あたりに最適なアルゴリズムを設計できるように、CPU(またはGPUまたはU)をどれくらいのプロセッサ時間を要求するかを発見することです。誰かがiOSハードウェアをどこから始めるべきかというアイディアを教えてもらえますか?

編集:This link to ClockServices.cと開発者ポータルのSIMDは、これに興味のある方にとっては良いスタートになるかもしれません。今夜はもう少しコーヒーを飲みたいかもしれません;)

+0

私が評価したいと思っているもののほとんどはCです。私はそれに満足しています。しかし、NSArrayを使って反復するコストを知ることは良いことです。それは複雑で変わる可能性があるように聞こえる。私はどれくらいのことが分かるかわかりません...確かに基本的なCの操作を解決します;) – Rab

+0

ええ、私はそれを考えましたが、それはいいコメントです。私はあなたのようにテストを実行することを考えましたが、私は結果について2つの懸念があります。一つは、私のテストは何らかの方法で素朴なものになるということです。コンパイラが何か違うことをするときには、それが成り立たない情報について多くの作業をします。第二に、私はいくつかのデバイスがあり、いくつかは異なるチップを持っています。だから、私の大切な希望は、特定のプロセッサーのC操作の時間的価値について、近い見積もりの​​グラフを持っている人がいるかもしれないということです。 – Rab

+0

NSArrayコメントから派手な話をしました。私はNSArrayが私または何かでブルースクリーンされないことを願っています;) – Rab

答えて

2

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

それでも、プロセッサ時間:プロセッサの負荷の推定で
あなたの基本的なアプローチは、しかし、OKで、かつ賢明である:典型的なプラットフォームのあなたの知識に基づいて費用の概算を確認します。

In this article表1は、.NETにおける標準的なプリミティブ操作の時間を示しています。プラットフォームはさまざまですが、相対時間は通常非常に似ています。おそらく、あなたはiStuffを見つけることができます。

(私はプロセッサ/命令セットのマニュアルを除き、1渡って他のプラットフォーム用のそれほど徹底的に来ていないが、彼らはアセンブリ命令を扱う)

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

+0

ありがとうございます。これは本当に有用な情報です。また、私の基本的なアプローチがあまり遠くないことを知ってうれしいです。 – Rab

0

xCodeには、各機能/操作のパフォーマンスを測定するための楽器があります。

+0

私はそれらを使用します。しかし、新しいアルゴリズム設計を知らせるために必要なテストの数は、潜在的に非常に大きくなる可能性があります。対数的に指数関数的に大きくなります。だからこそ、私はさまざまな操作の計算上の複雑さに関するガイドライン(少なくとも)を見つけたいと思っています。言い換えれば、私はマニュアルを読むことができて嬉しいですが、私は言語+コンパイラ+アーキテクチャセット全体のマニュアルを書いたくありません。 – Rab

関連する問題