哪些x86 C++编译器本身就是多线程的?

osg*_*sgx 9 c++ compiler-construction multithreading

现在几乎每个用户在桌面上(以及大量笔记本电脑上)都有2或4个核心.高级用户拥有6-12个核心,包括amd或i7.

哪些x86/x86_64 C/C++编译器可以使用多个线程来进行编译?

已经存在类似'make -j N'的解决方案,但有时(for -fwhole-program-ipo)有最后一个大而缓慢的步骤,它依次开始.

这些中的任何一个都可以:GCC,英特尔C++编译器,Borland C++编译器,Open64,LLVM/GCC,LLVM/Clang,Sun编译器,MSVC,OpenWatcom,Pathscale,PGI,TenDRA,Digital Mars?

编译器的线程数是否有一些上限,这是多线程的?

谢谢!

Fer*_*cio 5

一些构建系统可以并行编译独立的模块,但编译器本身仍然是单线程的.我不确定通过使编译器多线程有什么好处.最耗时的编译阶段是处理所有#include依赖项,并且必须按顺序处理它们,因为各种标头之间存在潜在的依赖关系.其他编译阶段在很大程度上依赖于前几个阶段的输出,因此从并行性中获得的好处几乎没有.

  • 最耗时的是高级别(O2,O3)和-ipo优化的优化. (2认同)
  • 代码生成和全局优化也需要很长的时间,并且*可以*并行完成. (2认同)

Mar*_*sse 5

Gcc 具有-flto=n-flto=jobserver使链接步骤(使用 LTO 进行优化和代码生成)并行。根据文档,这些从 4.6 版本开始就可用,尽管我不确定它在那些早期版本中有多好。


Ste*_*end 0

对于Visual C++,我不知道它是否进行任何并行编译(我不这么认为)。对于 Visual Studio 2005 以后的版本(即 Visual C++ 8),解决方案中的项目是在解决方案依赖关系图允许的范围内并行构建的。