1

いくつかの AVX 組み込み関数をいじりたいと思います。/arch:AVXビジュアル スタジオと同様に、可能であれば gcc で AVX のみを使用するようにしてください。mexを使用してgccでこれを行う方法はありますか?

私は次のようなものを使ってみました:

mex -g -O $CFLAGS='$CFLAGS -march=corei7-avx' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o

しかし、コンパイラは言うeval: 1: = -march=corei7-avx: not found. どのフラグを使用する必要があり、mex にそれを受け入れさせる方法を知っている人はいますか? デフォルトでは、SSE命令を使用しているようです(アセンブリ出力を見ると、いくつかのsが表示されます)が、ここで問題を引き起こす可能性があることmulsdを読んだので、SSEとAVXを混在させたくありません。

EDIT1:

gcc 4.6.1でubuntu 11.04を使用しています。

EDIT2:

コンパイル: mex CXXOPTIMFLAGS='-mtune=corei7-avx -S' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o

収量:

movsd   -304(%rbp), %xmm1
movsd   .LC16(%rip), %xmm0
mulsd   %xmm0, %xmm1

でコンパイル: mex CXXOPTIMFLAGS='-mavx -S' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o およびmex CXXOPTIMFLAGS='-march=corei7-avx -S' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o 両方の結果:

vmovsd  -304(%rbp), %xmm1
vmovsd  .LC16(%rip), %xmm0
vmulsd  %xmm0, %xmm1, %xmm1

今、私はmulsdsse命令であると確信しています。AVX 命令ですかvmulsd(不思議なことに、結果が得られませんでした)。ymmまた、奇妙なレジスタが使用されていることもわかりません。

4

1 に答える 1