我们一直都是情报店。所有的开发人员都使用英特尔的机器,推荐给终端用户的平台是Intel,如果终端用户想在AMD上运行,这是他们的注意事项。也许测试部门在某个地方有一台AMD机器来检查我们没有交付任何完全损坏的东西,但仅此而已。
直到几年前,我们才使用MSVC编译器,而且由于它并没有提供超出SSE级别的处理器调优选项,所以没有人太担心代码是否会偏袒一个x86供应商而不是另一个供应商。然而,最近我们一直在使用Intel编译器。我们的东西肯定会从它获得一些显著的性能好处(在我们的Intel硬件上),并且它的矢量化能力意味着更少的需要去使用asm/本质。然而,人们开始有点紧张的英特尔编译器是否真的没有做这么好的工作,AMD硬件。当然,如果您进入Intel、CRT或IPP库,您会看到大量的cpuid查询,这些查询显然设置了跳转表,以优化函数。不过,英特尔似乎不太可能为AMDs芯片做任何好事。
在这方面有任何经验的人能对这在实践中有多大的影响发表评论吗?(我们自己还没有对AMD进行任何性能测试)。
更新2010-01-04:好吧,对支持AMD的需求从来没有变得足够具体,足以让我自己做任何测试。不过,有一些关于这里、这里和这里问题的有趣读物。
更新2010-08-09:英特尔-公平贸易委员会的解决方案似乎对这个问题有一些看法--参见这篇文章的“编译器和肮脏的技巧”一节。
发布于 2009-05-08 13:10:17
买一个AMD盒子,然后在上面运行。这似乎是唯一值得负责的事情,而不是在互联网上信任陌生人;)
除此之外,我相信AMD对英特尔的部分诉讼是基于英特尔的编译器专门产生在AMD处理器上运行效率低下的代码的说法。我不知道这是否真的,但AMD似乎相信。
但即使他们没有故意这么做,英特尔的编译器无疑是专门为英特尔处理器而优化的。
当我这么说的时候,我怀疑这会有很大的不同。AMD的CPU仍将受益于编译器的所有自动矢量化和其他聪明的特性.
发布于 2009-05-08 17:08:54
显然,如果性能对您的应用程序至关重要,那么最好对硬件/编译器的所有组合进行一些测试。没有任何保证。作为局外人,我们只能给你我们的猜测/偏见。您的软件可能具有不同于我们所见过的独特特性。
我的经历:
我曾在英特尔工作,并开发了一个内部(C++)应用程序,在那里性能是至关重要的。我们试着使用英特尔的C++编译器,它总是在执行gcc的情况下使用--即使在运行配置文件、使用配置信息重新编译(据推测icc用于优化)和在完全相同的数据集中重新运行(这是在2005-2007年,现在情况可能不同了)。所以,根据我的经验,你可能会想试试gcc (除了icc和MSVC),这样你就有可能得到更好的表现,这也是问题的侧面。切换编译器应该不会太难(如果您的构建过程是合理的)。
现在我在一家不同的公司工作,IT人员进行广泛的硬件测试,有一段时间英特尔和AMD的硬件是比较相似的,但是最新一代英特尔硬件的性能明显优于AMD。因此,我相信他们购买了大量的英特尔CPU,并推荐给我们的客户谁运行我们的软件。
但是,回到英特尔编译器是否专门针对AMD硬件运行缓慢的问题。我怀疑英特尔是否会对此感到烦恼。可能是某些使用英特尔CPU架构或芯片组内部知识的优化可能在AMD硬件上运行得更慢,但我怀疑它们专门针对AMD硬件。
发布于 2010-01-05 17:02:46
我们看到的是,在Intel编译器必须对可用指令集进行运行时选择的地方,如果它不识别Intel CPU,那么它就会进入它们的“标准”代码(正如您可能预期的那样,这可能不是最优的)。
请注意,即使我使用了上面的“编译器”这个词,这主要发生在它们提供的(预编译的)库和内部代码中,它们检查指令集并调用最佳代码。
https://stackoverflow.com/questions/839667
复制相似问题