Visual Studio中的"多处理器编译"有什么缺点吗?

JBe*_*ley 26 c++ compilation multiprocessing visual-studio

在Visual Studio for C++项目中使用"多处理器编译"选项时,我应该注意哪些缺点,副作用或其他问题?或者,用另一种方式表达问题,为什么在Visual Studio中默认关闭此选项?

Cor*_*lks 18

文档/MP:

不兼容的选项和语言功能
/MP选项与某些编译器选项和语言功能不兼容.如果对/MP选项使用不兼容的编译器选项,则编译器会发出警告D9030并忽略该/MP选项.如果使用不兼容的语言功能,编译器会发出错误C2813结束或继续,具体取决于当前编译器警告级别选项.
注意:
大多数选项都不兼容,因为如果允许它们,并发执行的编译器会将它们的输出同时写入控制台或特定文件.结果,输出将混合并出现乱码.在某些情况下,选项的组合会使性能变差.

它提供了一个表格,列出了与以下内容不兼容的编译器选项和语言功能/MP:

  • #import 预处理程序指令(将类型库中的类型转换为C++类,然后将这些类写入头文件)
  • /E,/EP(将预处理器输出复制到标准输出(stdout))
  • /Gm (启用增量重建)
  • /showIncludes (将包含文件列表写入标准错误(stderr))
  • /Yc (写一个预编译的头文件)

/MPVisual Studio 允许您手动禁用/阻止这些功能并启用,而不是默认禁用其他选项(并默认启用)/MP.


EdC*_*ica 10

根据我们的经验,发现的主要问题是:

  1. 浏览由于多个项目同时调用bscmake而无法构建的信息(现在无用的信息因此应作为项目设置删除)
  2. 由于依赖性问题和构建顺序问题导致的链接器失败,这是正常构建时通常不会看到的
  3. 批量构建不利用多处理器编译,至少对于2005-2008 VS版本来说肯定是这样
  4. 关于预编译头文件生成的警告是不兼容的,这在构建stdafx时会发生,可以忽略,但在进行重建时会生成此消息

但是,以上是您可以解决的配置问题,否则应该启用它,因为它将加快构建.

  • @MartinBa这些是由于项目依赖关系没有在解决方案中正确设置,如果你没有启用并行项目构建,那么你有时会侥幸逃脱它,使用更大更复杂的解决方案,你不可避免地得到链接器错误并且必须通过查找违规项目的输出 (2认同)

Som*_*ame 6

因为多处理器编译与许多其他编译选项不兼容,并且还具有更高的系统资源使用率.应由开发人员决定是否值得他.您可以在此处找到完整的文档:http://msdn.microsoft.com/en-us/library/bb385193.aspx