使用Intel C ++编译器2019.4编译的简单控制台应用程序无法在Ryzen处理器上运行

时间:2019-07-14 10:29:50

标签: c++ x86 intel icc amd-processor

简单程序

#include <stdio.h>

int main()
{
    printf( "Hello, world!\n" );
}

当使用Intel C ++ Compiler 2019.4进行编译并具有以下开关时: /O3 /Qunroll /Qunroll-aggressive /QxSSE3 /QaxCORE-AVX2拒绝在运行Windows 10的Ryzen 3 1200处理器上运行。

我在控制台上看到的错误是运行该应用程序所需的处理器功能列表。所有这些功能都可以在Ryzen处理器(SSE3,AVX2,CMOV,FXSAVE等)上使用,但该应用程序无法运行。

此简单程序的完整运行时库错误如下:

  

Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2 and SSE3 instructions.

这只是一个最低限度的示例,我当然想到了一个更复杂的应用程序,但是它也不运行。

唯一的解决方法是使用/O3 /Qunroll /Qunroll-aggressive /QxSSE2开关,但这有效地禁用了AVX2自动分派和SSE3指令。

是否可以解决此问题?

2 个答案:

答案 0 :(得分:2)

即使这些指令集是可用的,也可以通过编译器发出的代码来验证它们的可用性,但不一定必须识别它们是否存在于非Intel CPU中。 Documentation明确声明诸如CORE-AVX2之类的选项仅适用于Intel处理器:

  

CORE-AVX2 可能会为英特尔生成英特尔®高级矢量扩展2(英特尔®AVX2),英特尔®AVX,SSE4.2,SSE4.1,SSE3,SSE2,SSE和SSSE3指令®处理器。针对支持英特尔®AVX2指令的英特尔®处理器进行了优化。

(备注)

  

英特尔不保证对非英特尔制造的微处理器进行任何优化的可用性,功能或有效性。

答案 1 :(得分:-3)

英特尔和Ryzen的编译方式不同,例如,英特尔使用一种体系结构编译到他的处理器,而使用Ryzen编译到他的处理器,如果您编译到英特尔并在Ryzen上执行,会发生什么?