【问题标题】:MSBuild not building with all coresMSBuild 未使用所有内核构建
【发布时间】:2012-05-03 00:03:20
【问题描述】:

我有一个使用 Visual Studios 2008 配置的项目。当我打开 IDE 并点击构建时,我系统上的所有内核都用于构建项目。但是,当我尝试从命令行构建时,只使用了 1 个核心。这是我正在运行的命令:

C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild VTK.sln /m /fl /tv:3.5 /p:Configuration=RelWithDebInfo

通过阅读文档,/m 开关似乎应该告诉 MSBuild 使用所有内核,但事实并非如此。任何想法如何使它使用所有核心?

谢谢

【问题讨论】:

    标签: visual-studio-2008 msbuild parallel-processing


    【解决方案1】:

    好吧,实际上/m 选项指定了“要构建的最大并发进程数”。也就是说,并行启动的最大msbuild.exe 进程数以并行构建您的项目(每个进程最多将构建一个项目)。与“使用所有内核”完全不同的东西。诚然,/m 选项的长格式名称 /maxcpucount 可能暗示其他情况,但它的描述应该能更好地说明正在发生的事情:

      /maxcpucount[:n]   Specifies the maximum number of concurrent processes to
                         build with. If the switch is not used, the default
                         value used is 1. If the switch is used without a value
                         MSBuild will use up to the number of processors on the
                         computer. (Short form: /m[:n])
    

    现在,如果您的解决方案不允许并行构建项目,例如因为您的每个项目都是另一个项目的依赖项(例如构建 P2 需要 P1,项目 P3 需要 P2,等等。 ) 你不会看到任何并行构建发生。根据构建完成的速度,您也不会在所有内核上看到任何相关活动(例如使用任务管理器),因为 CPU 图表的“闪烁”可能并不准确地反映实际发生的情况(请注意构建是也相当 I/O 密集型,没有显示查看 CPU 负载)。

    但是,您应该查看(例如使用进程资源管理器或任务管理器)与您拥有的内核/CPU 数量(或作为可选编号传递给/m 选项。

    您可能还想参考this SO question。同时搜索“parallel msbuild”会产生一些包含更多信息的好结果。

    【讨论】:

    • 我认为这一切都已经在我的解决方案文件中设置好了,因为当我通过 IDE 构建 .sln 文件时,我在任务管理器中看到了 4 个 cl.exe 进程。然而,当我从命令行运行它时,我在任务管理器上只看到一个 cl.exe 和一个 msbuild.exe 进程。为清楚起见,解决方案文件是使用 CMake 为我生成的。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多