数学を行うためのコードを書いたので、速く進む必要があるので、SSEとAVX命令を使用する必要があります。私はg ++でコンパイルしていますが、フラグ-O3
と-march=native
を使用していますので、SSEとAVX命令を使用していると思いますが、わかりません。私のコードのほとんどは、次のようになります。コンパイルされたコードでsse命令とavx命令が使用されているかどうかをチェックする方法は?
for(int i = 0;i<size;i++){
a[i] = b[i] * c[i];
}
は(コンパイル後に)私のコードは、SSEやAVX命令を使用場合、私が言うことができる方法はありますか?私は見ることができるアセンブリを見ることができると思うが、私はアセンブリを知らないし、コンパイラが出力するアセンブリをどのように見るかわからない。
ベクターエクステンションを使用することもできます。 – Jester
出力アセンブラ 'g ++ -S -o prog.s prog.cpp' – Galik
コンパイラの出力を調べるには:https://stackoverflow.com/questions/38552116/how-to-remove-noise-from- gcc-clang-assembly-output。 @Galik:明らかに、 'g ++ -march = native -O3 -S'を使用して、asmの出力を最適化する必要があります。また、スカラーFPコードでSSE命令が表示されることに注意してください。例えば、倍精度を追加するための 'vaddsd 'があります。 'vmulps'(packed double)、' vmulps'(packed scalar)、 'vpmulld'(packed add dword(32ビット要素)の整数)やその他のパックド整数乗算命令を探しています。 ''と '' c'を使用しています –