4

最新のプロセッサは、オペコードを備えているため、プロセッサなどの命令をプロセッサ上cosineで直接実行します。sin私の質問は、これらの命令が通常どのくらいのサイクルを要するかです。それらは一定の時間がかかりますか、それとも入力パラメータに依存しますか?

4

2 に答える 2

13

プロセッサのモデルによって時間は異なります。時間は通常、数十の CPU サイクルから百以上の範囲です。

(命令はプロセッサ内のさまざまなリソース [ディスパッチャ、実行ユニット、名前変更レジスタなど] を使用するため、多くの命令が消費する時間は状況によって異なります。したがって、命令が他の作業をどれだけ遅延させるかは、他に何が起こっているかによって異なります。たとえば、一部のコードがほぼ完全にロード命令とストア命令を実行している場合、非常にまれな正弦命令によって実行速度がまったく遅くならないことがあります.ただし、数十 CPU サイクルを要する命令は、通常、プロセッサ内の時間によって支配されます.実際の数値計算を行う部分です。)

実行時間は、入力パラメータによって異なる場合があります。三角関数の大きな引数は 2π を法として減らさなければならず、それ自体が複雑な問題です。

Mac OS X 数学ライブラリでは、速度、標準への準拠、アプリケーション バイナリ インターフェイスへの適合性、およびその他の機能を含むさまざまな理由から、多くの場合アセンブリ言語で独自の実装を記述します。

単に興味がある場合は、特に特定のプロセッサ モデルを指定しない限り、「数十から数百のプロセッサ サイクル」で十分な答えかもしれません。基本的に、時間は十分に長いので、正当な理由なしにこれらの操作を使用すべきではありません。(たとえば、π を 4·arctan(1) として取得するコードを見たことがあります。そうしないでください。)

質問する理由が他にある場合は、回答が絞り込めるように説明する必要があります。

于 2012-09-08T19:50:49.517 に答える
9

最新のプロセッサの「命令のサイクル」について話すことは、かなり前に困難になりました。最近のプロセッサーには複数の実行コアが含まれており、それらの動作はオーバーラップし、順不同で実行される可能性があります。

基本的な考慮事項の良い例は、Intel プロセッサ マニュアル、ボリューム 4、付録 C に記載されています。これは、レイテンシとスループットによって命令のタイミングを分類しています。レイテンシは、マイクロオペレーションを完了するために実行コアが必要とするサイクル数です。スループットは、実行ユニットが同じ命令を再び受け入れるために必要なサイクル数です。スループットは一般に、テーブルに小数の値がある場合を含め、レイテンシよりも低くなります。同じタイプの実行ユニットが複数あることによる副作用。タイプは重要で、命令が重複できるかどうかを示します。

ここで重要なメッセージが得られたかもしれません。それは、タイミングに関心のあるコードを囲む他の命令に大きく依存します。これらの他の命令は、高価な命令と同時に実行される可能性があります。その時点で、実質的に 0 サイクルかかります。または、実行ユニットが前の命令でビジーであるため、パイプラインがストールする可能性があります。コード オプティマイザーを作成するプログラマーが非常に気にかけている種類の詳細です。

マニュアルからのいくつかのサンプル データ。テーブル内の最新のコアを選択します。

  • FMUL、レイテンシ = 7、スループット = 2、FP_MUL 実行ユニット
  • FDIV、レイテンシ = 6、スループット = 5、未指定の単位
  • FSQRT、レイテンシ = 38、スループット = 43、FP_DIV 実行ユニット
  • FSIN、レイテンシ = 160 ~ 180、スループット = 130、未指定の単位

SIMD 命令のはるかに優れた強打。

行うべき唯一の意味のあることは、測定することであり、想定することではありません。

于 2012-09-08T23:39:50.213 に答える