いくつかの 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
今、私はmulsd
sse命令であると確信しています。AVX 命令ですかvmulsd
(不思議なことに、結果が得られませんでした)。ymm
また、奇妙なレジスタが使用されていることもわかりません。