13

アセンブリ命令レベルでコードをプロファイリングする場合、最新の CPU が命令をシリアルまたはインオーダーで実行しないことを考えると、命令ポインターの位置は実際には何を意味するのでしょうか? たとえば、次の x64 アセンブリ コードがあるとします。

mov RAX, [RBX];         // Assume a cache miss here.
mov RSI, [RBX + RCX];   // Another cache miss.             
xor R8, R8;        
add RDX, RAX;           // Dependent on the load into RAX.
add RDI, RSI;           // Dependent on the load into RSI.

命令ポインターが最も多くの時間を費やすのはどの命令ですか? 私はそれらすべてについて良い議論を考えることができます:

  • mov RAX, [RBX]キャッシュミスであるため、おそらく数百サイクルかかります。
  • mov RSI, [RBX + RCX]これも数百サイクルかかりますが、おそらく前の命令と並行して実行されます。命令ポインターがこれらのいずれかにあるとはどういう意味ですか?
  • xor R8, R8おそらく順不同で実行され、メモリのロードが完了する前に終了しますが、命令ポインターは、前のすべての命令も終了するまでここに留まる可能性があります。
  • add RDX, RAXはパイプライン ストールを生成しますRAX。これは、低速のキャッシュ ミス ロード後に の値が実際に使用される命令であるためです。
  • add RDI, RSIへの負荷に依存しているため、 も失速しRSIます。
4

2 に答える 2