SandyBridgeプロセッサ(i7-3820)で一連のアプリケーションをベンチマークしています。 ベンチマークは2つの異なるバージョンで構成されています。 これらの2つのバージョンには同じコードが含まれていますが、最初のバージョンではsse/sse2のイントリンシックが使用され、2つ目のバージョンではavxのイントリンシックが使用されます。私はどちらかのx64またはx86上のSSE instrinsicsとバージョンをコンパイルするVisual Studioのに2015SandybridgeとIvyBridgeのsseとavxパフォーマンス
を使用していたベンチマークのコンパイルのために
、実行時間はほぼ同じです。しかし、x64のavrイントリンシクスでベンチマークをコンパイルすると、実行時間はavx instrinsiscとのベンチマークを比較して最悪(ほぼ倍)し、x86用にコンパイルされます。さらに、x86でコンパイルされたavxベンチマークの実行時間は、Sseイントリンシックスのベンチマークと比較してわずかなスピードアップ(x8%)にとどまります。
最後に、Ivy Bridgeプロセッサ(i7-3770)で上記の構成をテストし、avx instrincisのx64とx86の実行時間の実行時間は同じでした。しかし、avx組み込み関数は、sseに対して何の改善も見せませんでした。
x64用のコンパイルのためのSandy Bridge上のavxイントリンシックスのパフォーマンスが悪いとの説明はありますか?
なぜ、2つのアーキテクチャでは、sse命令に対するavx命令のスピードアップが表示されませんか。
また、arch:AVXから/ arch:SSE2への切り替えを試してみましたが、その逆もありましたが、実行時には何も変わりませんでした。しかし、私が正しいとすれば、ビジュアルスタジオの[拡張命令セットを有効にする]プロパティはベクトル化のみに影響します。
ありがとうございます。 x64のためのAVX instrinsicsとのベンチマークをコンパイル
コードを投稿することもできますか? – harold
これは実際に使用しているAVX命令に依存します.SAEの同等のものよりも利点がありません。しかし、あなたのコードを見ることなく、我々は推測できますが、これはあまり建設的ではありません。適切なコードを[mcve]として投稿してください。 –
'/ arch:AVX'はベクトル化以上の効果があります。つまり、/ arch:AVXを指定せずにAVX組み込み関数を試してみると動作しません。 –