由于某些未知原因,英特尔决定不通过典型/ arch:选项支持AVX2。 / arch:仅识别以下说明 IA32,SSE,SSE2,SSE3,AVX 。因此,如果你想为AVX2编译,你基本上被迫激活 / QxCORE-AVX2 开关。此选项的问题是它会注入检查代码。该代码在运行时检查您的cpu是否与选定的intructions兼容。如果CPU不兼容,则弹出此消息。
请确认操作系统和处理器都支持Intel(R) MOVBE,F16C,FMA,BMI,LZCNT和AVX2说明。
现在我担心由于不是 GenuineIntel ,可能会在AMD Excavator和RyZen CPU上弹出相同的消息。不幸的是我没有访问任何AMD CPU,所以我无法在真正的CPU上检查。为了让您的生活更轻松,我使用激活/ QxCORE-AVX2选项编译了这个简单的代码。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
double a, b, c;
a = 3.0;
b = 2.0;
c = 1.0;
a = a*b + c;
printf("a=%1.1f",a);
return 0;
}
这里是反编译的asm代码:http://codepad.org/KL4Vq978
我向那些了解asm代码的人提出的问题是,您是否看到了阻止在最新的AMD cpu上执行此代码的任何内容?如果是,这http://www.softpedia.com/get/Programming/Patchers/Intel-Compiler-Patcher.shtml会有帮助吗?
答案 0 :(得分:3)
事实证明/ arch:CORE-AVX2是可识别的,编译后的可执行文件包含FMA指令!我真的不明白为什么Visual Studio和ICL / help中没有列出这个选项?!?
Visual Studio中的Dropbox菜单(NO AVX2!) http://i.cubeupload.com/c1xidV.png
答案 1 :(得分:1)