1

我想弄乱一些 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 指令(查看汇编输出,我看到了一些mulsds),但我不想将 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.omex 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 指令。是vmulsdAVX 指令(奇怪的是谷歌搜索它没有产生任何结果)?我也没有看到ymm正在使用的寄存器,这很奇怪。

4

1 回答 1

2

我发现 mex 使用这种格式:

mex -v CFLAGS='$CFLAGS -Wall' LDFLAGS='$LDFLAGS -w' yprime.c

您应该尝试删除第一个 $ 符号。不过,-mtune=corei7-avx 应该是正确的。

于 2013-04-22T20:33:31.157 回答