英特尔编译器"运行时CPU调度"功能:非SSE2处理器坏了?

时间:2016-11-27 12:20:00

标签: c++ c icc intel-composer

因此,我们希望在启用运行时CPU调度的情况下使用Intel C编译器(这是在Windows平台上)。我们使用选项 / arch:IA32 / QaxSSE2 ,但 / QxFoo 选项。根据我们的理解,这应该产生一个在任何 IA32(x86)处理器上运行的二进制文件,但仍然在实际支持SSE2指令集的处理器上使用SSE2优化的代码路径。

然而,测试显示,在处理器没有 SSE2支持(例如Pentium III)的情况下,二进制文件将崩溃,并且#34;非法指令"例外!有趣的是,只删除 / QaxSSE2 ,并保留其他任何内容,生成一个在处理器上完全正常的二进制文件,而不支持 SSE2。

另一个有趣的观察是:使用 / arch:IA32 / QaxSSE2 / Ob0 (禁用inlining!)生成一个二进制文件,它在处理器上也可以完美地运行,而不需要 SSE2支持。

此时似乎运行时CPU调度会提高" base"的CPU需求。 SSE2的代码路径,无论 / arch:IA32 选项如何。或者函数内联运行时CPU调度不能一起使用。但我们在英特尔文档中未发现任何提及此问题。这是非常重要的信息,因此我们认为这需要在文档中提及!

任何人都可以确认观察结果或澄清发生了什么吗?

谢谢!

0 个答案:

没有答案