我想搞砸一些AVX内在函数。我希望gcc在Visual Studio中尽可能使用AVX,类似于/arch: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指令(查看程序集输出我看到一些mulsd
)但我不想将SSE与AVX混合,因为我读过here它可能导致问题。
EDIT1:
我正在使用ubuntu 11.04和gcc 4.6.1。
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指令。 vmulsd
是AVX指令(奇怪的是谷歌搜索没有产生任何结果)?我也没有看到使用的ymm
寄存器很奇怪。
答案 0 :(得分:2)
我发现mex使用这种格式:
mex -v CFLAGS ='$ CFLAGS -Wall'LDFLAGS ='$ LDFLAGS -w'yprime.c
你应该尝试删除第一个$符号。 -mtune = corei7-avx应该是正确的。