Intel Architecture Code Analyzer 2.0.1

x86ソフトウェアのパフォーマンス分析に対する私のニーズは、3つのツールをカバーしています。 そのうちの1つ-Vtune XEは、おそらく最適化に出くわしたすべての人によく知られています。



残念ながら、2番目のツールはそれほど広く知られていません。 これは、AVXコードの最適化の文脈でHabréですでに言及されましたが、その範囲はやや広いです。



Vtuneが最も重要なホットスポットを発見した後(そして、多くの場合、開発者は既にそれを知っています)、実行に費やされるメジャーの数を減らすための努力をする必要がある場合があります。 ほぼ3年間、私はIntel Architecture Code Analyzerのこのような小さいながらも重要なセクションのパフォーマンスを使用してパフォーマンスを分析してきました。



それを使用するのは簡単です、ここにたった6つのステップでの再帰アルゴリズムがあります:

1.対応する.c / .cppファイルには含まれています

#include "iacaMarks.h"、

2. dll / IACAライブラリはシステムからアクセス可能な場所に配置されます。

3.ソースにマクロが追加されます

IACA_START、IACA_END

したがって、最適化されたコードの前後に。 例えば



 IACA_START
	 for(int i = 0; i <len / 32; i ++) 
	 { 
		 reg2 = _mm_load_si128((__ m128i *)src + i * 2); 
		 reg3 = _mm_load_si128((__ m128i *)src + i * 2 + 1); 
		 reg1 = reg0; 
		 reg0 = reg3; 
		 reg3 = _mm_alignr_epi8(reg3、reg2、16-1); 
		 reg2 = _mm_alignr_epi8(reg2、reg1、16-1); 
		 _mm_store_si128((__ m128i *)dst + i * 2、reg2); 
		 _mm_store_si128((__ m128i *)dst + i * 2 + 1、reg3); 
	 } 
 IACA_END


4.よく使用されるすべての最適化(残念ながらPGOを除く)を使用して、お好みのコンパイラ(これはICCであることを望みますが、GCCまたはMSVCでも問題がないことを望みます)でコンパイルします。 プロジェクト全体をリンクする必要はなく、オブジェクトを1つだけリンクする必要があります。



5.次に、コマンドラインで、結果のオブジェクトをTulaにフィードします。

iaca -64 -arch IVB -cp DATA_DEPENDENCY -mark 0 -o output.txt ssecpy.obj

IACAのオプションは次のとおりです。

-64-64ビットコードを意味します。 -32できます。

-arch IVB — IACAがIvy Bridgeでこのコードのパフォーマンスを分析する必要があることを示します。 その他の可能な値:nehalem、westmere、SNB。

-analyticは、IACAに、どの命令がデータのクリティカルパス上にあるかを示します(つまり、このコードの結果をより速く計算できるように最適化する必要がある命令)。 別の可能な値:-cp THROUGHOPUTは、IACAにプロセッサパイプラインを「プラグ」する命令を表示するように要求します。

-mark 0は、マーカーのすべてのコードマークセクションを分析するようIACAに指示します。 -mark nを指定すると、IACAはマークされたn番目のコードのみを分析します。

6.結果をよく考えて、コードを変更します(この段階では、しばしば場所を不注意に指示を並べ替えて何が起こったのかを確認します)。退屈するまで手順4〜6を繰り返します。



次に、制限について。 ツールの出力にu-opと実行ポートが記載されるという事実にもかかわらず、IACAはシミュレーターではなく、静的分析を実行します。 たとえば、分析されたコードで条件分岐命令が検出された場合、IACAは分岐が発生しないと見なします。 彼はまた、L1DとL1Iにミスがないことを信じています。 一部の命令をサポートせず、単にスキップします;出力では「!」が代わりに表示されます。



最近、SNBおよびIVBのコード分析をサポートするバージョン2.0.1がサイトに登場しました。 このドキュメントでは、その使用方法について詳しく説明し、IACAを使用して見つけることができる典型的な最適化の例をいくつか示します。 彼らは、Linux、Windowx、Mac OS Xで動作すると言いますが、私は後者を個人的に検証していません。



All Articles