私はいくつかのintel-intrinsincsで書かれたCコードを持っていました。最初にavxでコンパイルした後、ssse3フラグでコンパイルした後、2つの全く異なるアセンブリコードが得られました。例えば:新しいAVX命令の構文
AVX:
vpunpckhbw %xmm0, %xmm1, %xmm2
SSSE3:
movdqa %xmm0, %xmm2
punpckhbw %xmm1, %xmm2
それはvpunpckhbw
がちょうどpunpckhbw
が、AVX 3つのオペランドの構文を使用していることは明らかです。しかし、最初の命令のレイテンシとスループットは、最後のもののレイテンシとスループットに相当しますか? 答えは私が使用しているアーキテクチャに依存しますか? It's IntelCore i5-6500ところで。
私はAgner Fogの指示表で回答を検索しようとしましたが、回答が見つかりませんでした。 Intelの仕様も助けにはなりませんでした(しかし、私が必要としていたものを見逃した可能性が高いです)。
可能であれば、新しいAVX構文を使用する方が良いですか?
* mov al、8 * :-)の昔のことをしばらくお待ちください。 – Neil
@Neil Ohはい、私は 'rep movsb'がSIMDとみなされた日を待っています。 – fuz
AVXをサポートする必要がある場合は、実行時に旧タイプの(非VEX)SSE命令とVEXでエンコードされたSSE/AVX命令を切り替える際のパフォーマンス上のペナルティがあるため、 。したがって、それは「すべてか何か」です。 –