首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译AVX2程序

编译AVX2程序
EN

Stack Overflow用户
提问于 2014-12-24 22:37:11
回答 2查看 18.1K关注 0票数 5

我已经写了一个程序与AVX的内部,它可以很好地使用Ubuntu12.4LTS和GCC 4.6与以下编译行: g++ -g -Wall -mavx ProgramName.cc -o ProgramName

当我将编译器更新到4.7和4.8.1版本以支持16位AVX2内部函数时,问题就开始了,而在gcc 4.6中不支持

目前,更新的gcc版本可以正确编译AVX和AVX2程序。然而,当我运行程序时,它给了我以下错误:非法指令(核心转储),尽管它是在gcc 4.6上运行的

我的问题是:编译和运行AVX和AVX2内部函数的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-12-24 23:47:16

如果你告诉gcc使用AVX2,它就会这样做,不管你的CPU是否支持它们。这对交叉编译或检查gcc的代码生成很有用,但对运行程序没有特别的帮助。如果您的程序因非法指令异常而崩溃,很可能是因为您的CPU不支持AVX2扩展。

在i386和x86-64平台上(以及在某些其他情况下),您可以指定gcc选项-march=native来为主机指令代码生成代码。编译后的代码可能无法在另一台功能较少的机器上运行,但它应该允许您使用机器的所有功能。

虽然-march=native是生成可执行文件的一个很好的解决方案,但它实际上对编写代码没有太大帮助;您仍然需要为目标的体系结构定制instrinsics,并且编写能够利用CPU功能而不依赖它们的代码变得复杂。我不知道有什么好的C解决方案,但是有几个C++模板框架可用。

票数 8
EN

Stack Overflow用户

发布于 2019-04-29 12:29:25

升级到gcc 4.8可能会引入AVX512,因此您需要将为您的机器生成的instr mix限制为只有AVX2。

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

https://stackoverflow.com/questions/27638497

复制
相关文章

相似问题

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