インテル アーキテクチャ コード アナライザーとして知られる IACA は、インテル CPU に対するコード スケジューリングを評価するための高度なツールです。これは 3 つのモードで動作します:
機能とアプリケーション:
使用法:
IACA の使用方法は、プログラミング言語によって異なります。
C/C :
必要な IACA ヘッダーを含めます(iacaMarks.h) し、ターゲット ループの周囲に開始マーカーと終了マーカーを配置します:
/* C or C++ Usage */ while(cond){ IACA_START /* Innermost Loop Body */ /* ... */ } IACA_END
アセンブリ (x86):
指定するマジック バイト パターンを挿入します。マーカー手動:
/* NASM Usage */ mov ebx, 111 ; Start marker bytes db 0x64, 0x67, 0x90 ; Start marker bytes .innermostlooplabel: ; Loop body ; ... jne .innermostlooplabel ; Conditional Branch Backwards to Top of Loop mov ebx, 222 ; End marker bytes db 0x64, 0x67, 0x90 ; End marker bytes
コマンドライン呼び出し:
適切なパラメーターを使用してコマンド ラインから IACA を呼び出します。
iaca.sh -64 -arch HSW -graph insndeps.dot foo
これにより、Haswell CPU 上の 64 ビット バイナリ foo が分析され、分析レポートと Graphviz が生成されます。
出力の解釈:
出力レポートは、ターゲット コードのスケジューリングとボトルネックに関する詳細情報を提供します。たとえば、次のアセンブリ スニペットを考えてみましょう:
.L2: vmovaps ymm1, [rdi+rax] ;L2 vfmadd231ps ymm1, ymm2, [rsi+rax] ;L2 vmovaps [rdx+rax], ymm1 ; S1 add rax, 32 ; ADD jne .L2 ; JMP
このコードの周囲にマーカーを挿入して分析すると、IACA はレポート (要約) を行う可能性があります:
Throughput Analysis Report -------------------------- Block Throughput: 1.55 Cycles Throughput Bottleneck: FrontEnd, PORT2_AGU, PORT3_AGU [Port Pressure Breakdown] | Instruction --------------------------|----------------- | | vmovaps ymm1, ymmword ptr [rdi+rax*1] | 0.5 CP | | 1.5 CP | vfmadd231ps ymm1, ymm2, ymmword ptr [rsi+rax*1] | 1.5 CP | vmovaps ymmword ptr [rdx+rax*1], ymm1 | 1 CP | add rax, 0x20 | 0 CP | jnz 0xffffffffffffffec
この出力から、IACA は次のことを識別しますHaswell フロントエンドとポート 2 および 3 の AGU がボトルネックとなります。これは、ポート 7 で処理されるストア命令を最適化するとパフォーマンスが向上する可能性があることを示唆しています。
制限:
IACA にはいくつかの制限があります:
以上がインテル アーキテクチャ コード アナライザー (IACA) は、インテル CPU のコード パフォーマンスの分析と最適化にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。