コードがコンパイラーによってベクトル化されているかどうかはどのようにしてわかりますか?


9

ルックアップと計算のコストに対するJed Brownの回答で例示されているように、ベクトル化された浮動小数点演算とベクトル化されていない浮動小数点演算を使用すると、コードがはるかに高速になります。最新のコンパイラの多くは、自動ベクトル化を実行できると主張しています。コードのどの部分が正常にベクトル化されているのですか?

回答:


10

すべての近代的なヴィンテージのインテル(R)コンパイラーでは、-O3 -vec-report3。最適化レベル3は、それがベクトル化しようとしていることを保証し、ベクトルレポートは、それが何をしているのかを教えてくれます。

ベクトル化に関するGNUページでは、最適化レベル3ではデフォルトでオンになっていると記載されていますが、vec-reportに相当するものを見つけることができません。


迅速な返答に感謝致します。-vec-report3について知りませんでした。この種のこと(自動ベクトル化)に関してコンパイラーの設定はありますか?
マシューエメット

インテルのコンパイラーは非常に優れていますが、インテルのチップに限られます。正しいプラグマをすべて追加するだけです(#pragma ivdepが最も簡単です)GCC 4.7は大幅に改善されていますが、同僚(Openmpプラグマ内でのベクトル化がないなど)のあるコードを調べてみました。
aterrel

1
IntelコンパイラがAMDチップのベクトル化でどのように機能するかを再確認することをお勧めします。古い問題がまだ存在していることは100%わかりません。
Bill Barth

2
@BillBarthはい、まだ問題があります。最適化の通知を参照してください(多くの場所で、software.intel.com / sites / products / collat​​eral / hpc / compilers /…など )。AMDは、Intelが競争力を失うのではなく、反競争的であることを開示するよう要求する法廷闘争に勝利しました。en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Criticism Agner
Jed Brown

@JedBrown、確かにSSEはまだ奇妙ですが、AVXのストーリーは何ですか?これらのリンクは、問題はないことを示しています(両方の会社がAVXを実装しているため)が、ブルドーザーマシンではテストしていません。
Bill Barth

8

GNUコンパイラコレクション内-ftree-vectorizer-verbose=nnは、が0から6までであるオプションがあり、icc/ と同様の情報を出力しifortます。


5

GNUコンパイラでは、追加-Wa,-ahl=asm.sすると、生成されたアセンブリコードがにダンプされasm.sます。

Intelコンパイラでは、追加-fcode-asm -Faasm.sすると生成されたコードがにダンプされasm.sます。

次に、アセンブリコードを検査して、ベクトルの浮動小数点演算を探します。


コードが実際にベクトル化されているかどうかを判断するための信頼できる唯一の方法は、アセンブリの出力を検査することです。コードをベクトル化するという主張について、コンパイラが正直であることを要求するものは何もありません。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.