英特尔C ++编译器作为微软的替代品?

时间:2009-12-30 20:07:51

标签: c++ visual-studio ide compiler-construction

有人在这里使用英特尔C ++编译器而不是微软的Visual c + +编译器吗?

我非常有兴趣听听您在集成,性能和构建时间方面的经验。

8 个答案:

答案 0 :(得分:26)

英特尔编译器是最先进的C ++编译器之一,它具有许多优于例如Microsoft Visual C ++编译器的优点,并且有一个主要缺点。优点包括:

  • 非常好的SIMD支持,据我所知,编译器对SIMD指令的支持最好。

  • 支持自动并行化(多核优化)以及手动(通过OpenMP),并且同时做得非常好。

  • 支持CPU调度,这非常重要,因为它允许编译器在程序运行时将处理器作为优化指令的目标。据我所知,这是唯一可用的C ++编译器,除非G ++已将它们引入其中。

  • 它经常附带优化的库,例如数学和图像库。

然而,它有一个主要缺点,如上所述的调度程序只能在Intel CPU上运行,这意味着AMD CPU上将省略高级优化。有一种解决方法,但它仍然是编译器的一个主要问题。

要解决调度程序问题,可以替换使用在AMD处理器上运行的版本生成的调度程序代码,例如可以使用Agner Fog's asmlib library替换编译器生成的调度程序函数。关于调度问题的更多信息,以及对某些主题的更详细的技术解释,可以在Optimizing software in C++论文中找到 - 也来自Anger(真的值得一读)。

在个人方面,我使用了英特尔c ++编译器和Visual Studio 2005,它运行得很完美,我没有遇到微软特定语言扩展的任何问题,它似乎理解我使用的那些,但也许是提到的那些John Knoeller与我在项目中的不同。

虽然我喜欢英特尔编译器,但我目前正在使用微软C ++编译器,这仅仅是因为英特尔编译器需要额外的投资。我只会使用英特尔编译器作为Microsofts或GNU编译器的替代品,如果性能对我的项目至关重要,并且我有一个财务部分;)

答案 1 :(得分:5)

我只有一次使用此编译器的经验,编译STLPort。 MSVC花了大约5分钟来编译它,ICC编译了一个多小时。看来他们的模板编译速度很慢。除此之外,我只听到了很多好消息。

这里有一些有趣的事情:

  

英特尔的编译器可以产生不同的   每个代码片段的版本   针对特定版本进行优化的版本   处理器和/或指令集   (SSE2,SSE3等)。系统检测到   它正在运行哪个CPU并选择   相应的最佳代码路径;该   CPU调度程序,因为它被称为。

     

“但是,英特尔CPU调度员   不仅检查哪条指令   set也支持CPU,它也是   检查供应商ID字符串,“Fog   细节,“如果供应商字符串说   'GenuineIntel'然后它使用了   最佳代码路径。如果CPU不是   在大多数情况下,来自英特尔   将运行最慢的版本   代码,即使CPU是完全的   兼容更好的版本。“

OSnews文章here

答案 2 :(得分:5)

我没有在工作/个人中使用英特尔C ++编译器(我希望我愿意)。

我会用它,因为它有:

  • 出色的内联汇编程序支持。对于x86和x64平台,英特尔C ++支持英特尔和AT& T(GCC)汇编语法。 Visual C ++只能处理英特尔汇编语法,仅适用于x86。

  • 支持SSE3,SSSE3和SSE4指令集。 Visual C ++支持SSE和SSE2。

  • 基于EDG C++,它具有完整的 ISO / IEC 14882:2003标准实现。这意味着您可以使用/学习每个C ++功能。

答案 3 :(得分:3)

我在之前的工作中尝试使用英特尔C ++。 IIRC,确实以牺牲编译时间为代价生成了更高效的代码。我们没有把它用于生产用途,原因是我不记得了。

与MSVC相比,一个重要的区别是英特尔编译器支持C99。

答案 4 :(得分:3)

有趣的是,我发现英特尔编译器比Visual C ++更频繁地崩溃。它的诊断比VC更清晰,更清晰。因此,编译器可能会提供未通过VC提供的诊断,或者在VC没有提供的情况下崩溃,从而使您的转换更加昂贵。

但是,我相信英特尔的编译器允许您与CRT之类的Microsoft运行时链接,从而降低了转换成本。

如果您正在与托管代码进行互操作,则应该坚持使用Microsoft的编译器。

最近的英特尔编译器在浮点重基准测试中实现了明显更好的性能,并且在整数繁重的基准测试中类似于Visual C ++。但是,它会根据程序以及您是否使用链接时代码生成或配置文件引导优化而有很大差异。如果性能对您至关重要,那么在做出选择之前,您需要对应用程序进行基准测试。我只是说,如果你正在进行科学计算,那么值得花时间进行调查。

英特尔允许您对其编译器进行为期一个月的免费试用,因此您可以自己尝试这些内容。

答案 5 :(得分:3)

自从英特尔Parallel Studio首次发布以来,我一直在使用英特尔C ++编译器,到目前为止,我还没有感受到回归的诱惑。这里是dis / advantage的概述以及(一些明显的)观察。

<强>优点

  • 并行化(矢量化,OpenMP,SSE)在其他编译器中是无与伦比的。
  • 工具集简直太棒了。我当然是在谈论分析。
  • 包含优化库,例如线程构建块(好的,所以微软用PPL复制TBB),数学核心库(标准例程,以及一些实现有MPI(!!!)支持),集成性能基元等等。什么是这些图书馆也在不断发展。

<强>缺点

  • 加速仅限英特尔。嗯嗯!但是,我并不担心,因为在服务器端,我所要做的就是选择Intel机器。我没问题,有些人可能。
  • 你不能真的做OSS或类似的东西,因为项目文件格式不同。是的,你可以同时拥有VS和IPS文件格式,但这很奇怪。每当您进行更改时,您都会迷失在同步项目选项中。顺便说一下,英特尔的编译器的选项数量是两倍。
  • 编译器更挑剔。设置不兼容的项目设置太容易了,它会给你一个神秘的编译错误,而不是一个很好的有意义的解释。
  • 在Visual Studio之上需要额外的费用。

<强>中立

  • 我认为性能论证不再强大,因为很多库如Thrust或Microsoft AMP都允许你使用GPGPU,无论如何都会超出你的cpu
  • 我建议有兴趣参加试用并试用一些代码的人,包括图书馆。 (是的,库很好,但C风格的界面可能会让你发疯。)

答案 6 :(得分:2)

上一次我工作的公司比较两者大约一年前(可能是2)。英特尔编译器生成更快的代码,通常只有一点点快,但在某些情况下相当多。

但它无法处理我们所依赖的某些MS语言扩展,因此我们最终坚持使用MS。我们将它与VS 2005进行了比较。而且我正在煞费苦心地记住英特尔编译器无法处理的MS扩展。如果我记得的话,我会回来编辑这篇文章。

答案 7 :(得分:2)

英特尔C ++编译器具有令人惊叹的(人类)支持。与微软交谈可能需要几天时间。我的非平凡问题在10分钟内通过聊天解决(包括会员验证时间)。

编辑:我已经与微软谈过他们的产品(例如Office 2007)中的问题,甚至报告了一个错误。虽然我最终取得了成功,但其产品和组织层次结构的整体规模和复杂性令人生畏。