首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AVX上用AVX 2/AVX 512内核编译C++代码

在AVX上用AVX 2/AVX 512内核编译C++代码
EN

Stack Overflow用户
提问于 2017-04-25 14:30:47
回答 1查看 10.3K关注 0票数 11

我有用于各种SIMD指令集(包括AVX、AVX2和AVX512 )的内核的生产代码。可以使用类似于./configure --enable-proc=AVX CXXFLAGS="-mavx"的内容在目标机器上编译代码。

这也很好地工作在Travis CI,公开AVX的本质。我希望至少编译AVX2和AVX512版本,以查看是否所有文件都已签入。但是,为不同的ISA编译似乎并不那么容易。

一个简单的AVX2测试程序:

代码语言:javascript
复制
#include <immintrin.h>

int main(int argc, char **argv) {
    __m256d a;
    __m256d b;
    __m256d c;

    _mm256_fnmadd_pd(a, b, c);
}

在我的AVX机器(Intel Core i5-2520 M)上,它不编译:

代码语言:javascript
复制
$ g++ -Wall -Wpedantic --std=c++11 cpp.cpp -mavx2
In file included from /usr/lib/gcc/x86_64-redhat-linux/6.3.1/include/immintrin.h:79:0,
                 from cpp.cpp:3:
/usr/lib/gcc/x86_64-redhat-linux/6.3.1/include/fmaintrin.h:143:1: error: inlining failed in call to always_inline '__m256d _mm256_fnmadd_pd(__m256d, __m256d, __m256d)': target specific option mismatch
 _mm256_fnmadd_pd (__m256d __A, __m256d __B, __m256d __C)
 ^~~~~~~~~~~~~~~~

有什么方法可以编译代码吗?我不在乎跑步,我只想做烟瘾测试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-01 09:41:12

提供-march=sandybridge-march=haswell-march=knl使所有需要的特性都能转换代码。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43613577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档