英特尔编译器/ QxCORE-AVX2交换机以及与AMD Excavator / RyZen的兼容性

时间:2017-01-09 14:24:20

标签: icc

由于某些未知原因,英特尔决定不通过典型/ 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会有帮助吗?

2 个答案:

答案 0 :(得分:3)

事实证明/ arch:CORE-AVX2是可识别的,编译后的可执行文件包含FMA指令!我真的不明白为什么Visual Studio和ICL / help中没有列出这个选项?!?

Visual Studio中的Dropbox菜单(NO AVX2!) http://i.cubeupload.com/c1xidV.png

ICL /帮助 http://i.cubeupload.com/y2Cre6.png

答案 1 :(得分:1)

Ryzen支持这些指令集,但代码不能在AMD处理器上运行,因为它会检查处理器是否是" GenuineIntel"。关于这个问题已经进行了长时间的讨论和法律斗争。见http://www.agner.org/optimize/blog/read.php?i=49