使用gcc 4.6.1在mex中启用AVX指令
Enable AVX instructions with mex using gcc 4.6.1
我想弄乱一些AVX的内在函数。如果可能的话,我希望gcc专门使用AVX,类似于visual studio中的/arch:AVX
。有没有一种方法可以在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
。有谁知道我应该使用哪面旗帜,以及如何让我接受它?默认情况下,它似乎使用SSE指令(查看汇编输出,我看到一些mulsd
s),但我不想将SSE与AVX混合,因为我在这里读到它可能会导致问题。
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
寄存器,这很奇怪。
我发现mex使用这种格式:
mex -v CFLAGS='$CFLAGS -Wall' LDFLAGS='$LDFLAGS -w' yprime.c
你应该试着去掉第一个$符号。-mtune=corei7-avx应该是正确的。
- 编译时未启用intel oneApi CUDA支持
- OpenGL在启用深度测试时不会丢弃我的碎片
- Visual C++GC接口如何启用它以及要包含哪个库
- 用于AVX的ln(x)的实现,m256
- 如何在自定义类中启用'auto loops'?
- 根据某个函数是否存在启用模板
- 在AVX通道中混洗的最佳方式
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 启用从"vector<const T>&"到"const vector&"的隐式转换<T>
- 如何找出引入AVX标志的内容
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- AVX 指令中寄存器和指针之间的客观差异
- 复制 -nan 表示浮点数,AVX __m256 复制后显示 0
- 如何确定我的处理器有多少个 AVX 寄存器?
- 在 Eclipse 上启用 C++17 以使用 'std::byte'
- VS2008中的AVX-512指令库
- 确保特征将 AVX 矢量化用于特定操作
- 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告
- 如何为一段代码启用 -permissive
- 使用gcc 4.6.1在mex中启用AVX指令