首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用SSE2和AVX2编译库

用SSE2和AVX2编译库
EN

Stack Overflow用户
提问于 2018-10-10 17:28:57
回答 1查看 939关注 0票数 2

使用VS2015并编译一个具有SSE2指令和AVX2指令的库(只有在CPU中检测到时才使用),如果我用/arch:AVX2编译库,但只调用SSE2指令,则会得到“非法指令”(在_mm_set1_epi32第一个SSE2指令上调用)。但是,如果我用/arch:SSE2编译库,那么在调用SSE2指令时它可以正常工作。

拱形设置相互排斥吗?如果不是的话,如何解决呢?我尝试使用相同的问题作为共享库和静态库。

这是lib:https://github.com/Auburns/FastNoiseSIMD,还有一个问题,https://github.com/Auburns/FastNoiseSIMD/issues/20,虽然我不认为它与AVX2打开并调用SSE2指令直接相关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 18:45:35

如果使用/arch:AVX/arch:AVX2进行构建,主要影响是编译器生成的所有SSE代码都将使用VEX前缀编码,从而允许更有效地调度寄存器。如果您在没有AVX或AVX2支持的系统上运行这样的代码,它实际上会导致非法指令的错误。

换句话说,您使用的_mm_set1_epi32是一个SSE2指令,但是由于您使用/arch:AVX2构建,所以它使用VEX前缀发出这些指令。/arch开关会影响显式本质、编译器生成的浮点数学、自动向量器等.

如果您希望使用由AVX2交换机支持的自动生成来支持SSE/SSE 2、AVX和AVX2平台的优化代码路径,则需要三个不同的二进制文件(EXEs或DLL)。

这篇博客文章这一个

注意,/arch:AVX/arch:AVX2之间的主要区别是编译器有时会发出FMA3指令,调度程序认为它比乘法要快得多。

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

https://stackoverflow.com/questions/52745772

复制
相关文章

相似问题

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