2016-06-27 3 views
-1

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とのベンチマークをコンパイル

+3

コードを投稿することもできますか? – harold

+3

これは実際に使用しているAVX命令に依存します.SAEの同等のものよりも利点がありません。しかし、あなたのコードを見ることなく、我々は推測できますが、これはあまり建設的ではありません。適切なコードを[mcve]として投稿してください。 –

+0

'/ arch:AVX'はベクトル化以上の効果があります。つまり、/ arch:AVXを指定せずにAVX組み込み関数を試してみると動作しません。 –

答えて

2

、実行時間はAVX <からほぼ確実

最悪です - mixing legacy SSE with 256bit AVX instructions without a vzeroupperから、> SSE遷移遅延。

Using AVX CPU instructions: Poor performance without "/arch:AVX"

のx64バイナリが、おそらくスカラーFP数学のための従来のSSE2命令を使用して参照してください。 すべて AVXを有効にしたコードをコンパイルする場合は、これらの命令でVEXエンコーディングを使用する必要があります。しかし、ライブラリ関数の呼び出しについては、まだvzeroupperが必要です。

あなたのx86 32ビットバイナリは、おそらくライブラリ関数呼び出しでさえ、AVX関数間で従来のSSE2命令を使用していない可能性があります。


編集:i7-3820 is 32nm SandyBridge-E、ないIvybridgeの、私のミス。 SnBとIvBの違いについて興味があるなら、Agner Fog's microarch pdfタグwikiを見てください。

私はAVXがあなたのIvBのSSEよりもスピードアップが少ないと言っていると思います。 IvBの主な新機能の1つは、mov-eliminationです。 movdqa xmm,xmm register-> registerは、実行ユニットを必要とせずに、名前変更ステージでゼロ遅延で処理されます。

1台のコンピュータでAVXの移行の遅延が見られる場合は、別のライブラリやコンパイラのバージョンでコンパイルしている可能性があります。

これ以上の回答が必要な場合は、実際の数字を箇条書きリストに入力してください。

+0

なぜOPはSandy Bridgeではトランジション遅延を観測しますが、Ivy Bridgeでは観測できません。 OPは、「Ivy Bridgeプロセッサ(i7-3770)で上記の構成をテストしたが、avx instrincisのx64とx86の実行時間の実行時間は同じだったが、avx組み込み関数はsseに対して何の改善も見せなかった。したがって、アイビーブリッジでAVXを使用した場合、OPでx86-64のパフォーマンスが低下することはありません。 –

+0

@ Zboson:ああ、私は彼が彼のi7-3xxx CPUの1つにIvBを呼んでいることに気付かなかった。私は数字を見て、彼らが両方のIvBであることを見たので、彼らは彼らが同じ君主であると仮定し、彼はperfの違いについて言っていたものを逃した。見やすい書式(箇条書きリストや表のような)で実際の数字のいくつかは、これをより良い質問にするために長い道のりになります。 –

+0

とにかく、OPが異なるコンピュータ上の異なるコンパイラやライブラリを使用していた場合、そのうちの1人が自動的にvzeroupperを実行したのでしょうか? –

関連する問題