2017-08-06 15 views
0

(movdの前後に多くのavx命令があると仮定します)vmovdを使用して汎用レジスタとymmレジスタ間でデータを移動すると、ymmのfloat値が1つだけ使用されるため速度が低下しますか?vmovdにavx-sseトランジションペナルティがありますか?

+3

詳しいことはできますか? avx-sseトランジションペナルティは、非VEXエンコードSSE命令およびSSEエンコード命令を実行する場合にのみ適用されます。 'movd'の代わりに' vmovd'を使う限り、すべてがうまくいくはずです。 – fuz

+0

ありがとうございます。それが私の必要なものでした。私はそれの周りにavxのintrinsicsを使用するC++でいくつかのインラインasmを書いています。 –

+0

インラインアセンブリのみを使用し、インラインアセンブリをスクラップすることを検討してください。コンパイラは通常、この種のペナルティを回避する命令を選択するのに非常に優れています。 – fuz

答えて

2

avx-sseトランジションペナルティは、非VEXエンコードSSE命令およびSSEエンコード命令を実行する場合にのみ適用されます。 movdの代わりにvmovdを使用している限り、すべて正常です。

関連する問題