Использование более 4 ядер с VCBuild - PullRequest
2 голосов
/ 07 июня 2011

Я пытаюсь использовать все 12 ядер нашего сервера сборки, но не могу указать / M12 и заставить все 12 ядер работать над сборкой.Похоже, что / M4 является пределом.Это правда?Что я могу сделать, чтобы использовать все 12 ядер в наших сборках?

Я использую следующую командную строку для запуска сборки:

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe" /M12 C:\Projects\solution1.sln

Сборка обрабатывает его так, как если бы яуказал одно ядро ​​в зависимости от того, сколько времени требуется сборке, и начальный вывод, который я получаю:

1) Build started: Project: Project1, Configuration: Release

Если я использую / M4 в командной строке вместо / M12, сборка идет намного быстрее, иЯ получаю это как начальный вывод:

5) Build started: Project: Project5, Configuration: Release
1) Build started: Project: Project1, Configuration: Release
2) Build started: Project: Project2, Configuration: Release
7) Build started: Project: Project7, Configuration: Release

Я также пытался не указывать количество ядер, но он обрабатывает это так, как если бы машина имела только одно ядро, или как если бы я указал / M1.

Я проверил системную переменную среды NUMBER_OF_PROCESSORS, и она по-прежнему установлена ​​на 12.

Любая помощь с этим будет приветствоваться.

-Seth

1 Ответ

0 голосов
/ 09 июня 2011

Это может зависеть от вашей конкретной конфигурации проекта, что VCBuild не может распараллелить более четырех проектов для вашей конкретной конфигурации сборки.

Например, мое понимание (не стесняйтесь исправлять):

  1. VCBuild не может распараллелить в проект
  2. VCBuild не может распараллелить два проекта, когда "ProjectA" является предварительное условие (связано с) "ProjectB". Скорее, ProjectA будет будет построен, и тогда ProjectB будет встроенный (который ссылается на результаты из предыдущей ProjectA сборки). Тем не менее, "ProjectA.lib" может встроить параллельно "ProjectB.lib", когда они оба тогда связаны в "ProjectC.exe" (хотя ни ProjectA, ни ProjectB может быть построен параллельно ProjectC).

Итак, в зависимости от ваших проектов, кажется возможным, что VCBuild видит только максимум четыре проекта, которые могут быть построены одновременно?

(ПРИМЕЧАНИЕ: ИМХО, нет фундаментальной причины для двух вышеуказанных ограничений; скорее, у меня сложилось впечатление, что оба ограничения связаны с историческими внутренними / техническими причинами, поскольку VCBuild на самом деле не предназначен для "масштабируемого сервера сборки ».)

...