2017-01-09 28 views
2

由于某些未知原因,英特尔决定不通过典型/ arch选项支持AVX2。 /arch:仅识别以下指令IA32,SSE,SSE2,SSE3,AVX。所以如果你想编译AVX2,你基本上被迫激活/QxCORE-AVX2开关。这个选项的问题是它会注入校验码。该代码在运行时检查您的cpu是否与选定的入口兼容。如果CPU不兼容,则会弹出此消息。英特尔编译器/ QxCORE-AVX2切换器与AMD挖掘机/ RyZen的兼容性

请确认操作系统和处理器均支持英特尔(R) MOVBE,F16C,FMA,BMI,LZCNT和AVX2指令。

现在我担心的是相同的消息可能会弹出关于AMD挖掘机和RyZen由于CPU不被GenuineIntel来。不幸的是,我无法访问任何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; 
} 

这里被反编译汇编代码 http://paste.ofcode.org/38GhhFEsrxsXvVgi8aQE9Hnhttp://codepad.org/KL4Vq978

我的问题谁了解汇编代码是你看到的任何事情可能会阻止最新的AMD处理器的代码执行的人吗?如果是的话,这个http://www.softpedia.com/get/Programming/Patchers/Intel-Compiler-Patcher.shtml有帮助吗?

回答

1

的Ryzen支持这些指令集,而是因为它会检查代码将无法在AMD处理器上运行处理器是“GenuineIntel”。关于这个问题已经有很长时间的讨论和法律争论。请参阅http://www.agner.org/optimize/blog/read.php?i=49

+0

您确定它正在使用最新版本的ICC吗? – Royi

+0

我还没有尝试,但英特尔的编译器仍然有关于为英特尔微处理器保留优化的奇怪法律声明。 https://software.intel.com/en-us/articles/optimization-notice#opt-en –

相关问题