3

AVX拡張機能をサポートするプロセッサ用にコンパイルされた場合(たとえば適用可能)、キーを同時に-m64 -march=corei7-avx -mtune=corei7-avx使用することは理にかなっていますか?コンパイラが3セットの命令( 、、 )を同時に-mfpmath=both -mavx使用するほどではありませんか?または、スカラー(ある意味で)とベクトルのみの場合はどうでしょうか。i87SSEAVXi87AVX

4

2 に答える 2

5

AVXレジスタは、SSEレジスタの拡張にすぎません。SSE命令とAVX命令を組み合わせて、使用可能なレジスターの数を増やすことはできません(x87命令とAVX命令を混在させることはできますが-mfpmath=both、この場合はこれが行われると思います)。

たとえば、このページの「AVXとSSEの混合」の説明を参照してください。

于 2012-12-05T12:37:41.843 に答える
3

通常、これは必要ありません。gccは、レジスターのプレッシャーが高く、価値がある場合にx87を使用することを決定するのに十分賢いとは思いません。

x87およびSSE/AVX命令は、通常のx86 CPU(IntelおよびAMD)で同じFP実行ユニットをめぐって競合するため、それらをインターリーブしてもスループットが向上することはありません。

通常は、を使用する必要があります(これは、、またはそれ以上-mfpmath=sseで使用する場合はAVXを意味します。x86-64のデフォルトは、であるため、AFAIKのすべてを変更するだけです。-mavx-mfpmath=sse -march=nativesse-mfpmath=sse-m32

の主な利点は-mfpmath=both、レジスタの総数が増えることですが、x87レジスタスタックの管理には、多くの場合、追加の命令が必要です。x87とAVXの間でデータを移動するには、ストア/リロード(ストア転送ラウンドトリップ、Haswellで最大6サイクルのレイテンシ、http://agner.org/optimize/)もかかるため、2つの独立したセットがある場合にのみ非常に役立ちます。コンパイラがインターリーブするための計算。それ以外の場合は、通常のスピル/リロードよりも優れていません。

前回見たgcc -O3 -mfpmath=bothとき、結果は印象的ではありませんでした。https : //godbolt.org/g/p2KLECは、gcc5.4がいくつかのストア/リロードを使用してx87とxmm(AVX)レジスタ間でデータをバウンスすることを示しています。定数の一部をメモリに保持する方がよいでしょう。

于 2018-04-25T11:13:42.647 に答える