我想弄乱一些 AVX 内在函数。如果可能的话,我希望 gcc 专门使用 AVX,类似于/arch:AVX
在 Visual Studio 中。有没有办法在 gcc 和 mex 中做到这一点?
我尝试使用类似的东西:
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 指令(查看汇编输出,我看到了一些mulsd
s),但我不想将 SSE 与 AVX 混合,因为我在这里读到它可能会导致问题。
编辑1:
我正在使用带有 gcc 4.6.1 的 ubuntu 11.04。
编辑2:
编译:
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 指令。是vmulsd
AVX 指令(奇怪的是谷歌搜索它没有产生任何结果)?我也没有看到ymm
正在使用的寄存器,这很奇怪。