我应该担心英特尔C++编译器为AMD发出次优代码?

tim*_*day 28 c++ compiler-construction optimization intel amd-processor

我们一直是英特尔商店.所有开发人员都使用英特尔机器,最终用户的推荐平台是英特尔,如果最终用户希望在AMD上运行,那就是他们的了望.也许测试部门有一台AMD机器在哪里检查我们没有运送任何完全损坏的东西,但那是关于它的.

直到几年前我们才使用MSVC编译器,因为它并没有真正提供超出SSE级别的许多处理器调优选项,所以没有人担心代码是否有利于x86供应商而不是另一个.但是,最近我们一直在使用英特尔编译器.我们的东西肯定会从它(在我们的英特尔硬件上)获得一些显着的性能优势,并且它的矢量化功能意味着更少需要去asm/intrinsics.然而,人们开始对英特尔编译器是否真的不能为AMD硬件做得如此出色而感到有些紧张.当然,如果你进入英特尔CRT或IPP库,你会看到许多cpuid查询显然设置跳转表到优化的功能.看起来英特尔似乎不太可能为AMD芯片做任何好事.

任何有这方面经验的人都可以评论这在实践中是否是一个大问题?(我们还没有真正对AMD进行任何性能测试).

更新2010-01-04:支持AMD的需求从来没有变得足够让我自己做任何测试.还有在这个问题上一些有趣的阅读在这里,这里这里虽然.

更新2010-08-09:看来英特尔-FTC和解有话要说这个问题-请参阅"编译器和肮脏的把戏"的部分文章.

jal*_*alf 17

买一个AMD盒子然后运行它.这似乎是唯一负责任的事情,而不是信任互联网上的陌生人;)

除此之外,我认为AMD对英特尔的部分诉讼是基于英特尔编译器专门生产在AMD处理器上效率低下的代码的说法.我不知道这是不是真的,但AMD似乎也这么认为.

但即使他们没有故意这样做,毫无疑问,英特尔的编译器专门针对英特尔处理器进行了优化,而不是别的.

说到这一点,我怀疑它会产生巨大的影响.AMD CPU仍将受益于编译器的所有自动矢量化和其他聪明功能.


Tre*_*son 5

我肯定会说很明显,如果性能对您的应用程序至关重要,那么您最好对硬件/编译器的所有组合进行一些测试。没有任何保证。作为局外人,我们只能给您我们的猜测/偏见。您的软件可能具有不同于我们所见的独特特征。

我的经验:

我曾经在英特尔工作,并开发了一个性能至关重要的内部 (C++) 应用程序。我们尝试使用英特尔的 C++ 编译器,但它始终无法执行 gcc - 即使在运行配置文件后,使用配置文件重新编译(据称 icc 用于优化)并在完全相同的数据集上重新运行(这是在 2005-2007 年) ,现在情况可能有所不同)。因此,根据我的经验,您可能想尝试 gcc(除了 icc 和 MSVC),您可能会以这种方式获得更好的性能并回避问题。切换编译器应该不会太难(如果您的构建过程合理)。

现在我在另一家公司工作,IT 人员进行广泛的硬件测试,有一段时间 Intel 和 AMD 的硬件相当,但最新一代的 Intel 硬件明显优于 AMD。因此,我相信他们购买了大量英特尔 CPU,并向运行我们软件的客户推荐相同的产品。

但是,回到英特尔编译器是否专门针对 AMD 硬件运行缓慢的问题。我怀疑英特尔会为此烦恼。可能是某些使用英特尔 CPU 架构或芯片组内部知识的优化在 AMD 硬件上运行速度较慢,但​​我怀疑它们是否专门针对 AMD 硬件。

  • 现在,clang 在某些方面比 gcc 做得更好。(但不是全部)。我绝对同意在每个主要编译器上尝试整个代码库的建议。 (2认同)

小智 5

我们所看到的是,无论英特尔编译器必须对可用指令集进行运行时选择,如果它无法识别英特尔CPU,它就会进入"标准"代码(正如您所料,可能不是最佳代码) ).

请注意,即使我使用上面的"编译器"一词,这主要发生在它们提供的(预编译的)库和内在函数中,它检查指令集并调用最佳代码.