2011-06-07 7 views
2

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

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

"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

+0

Просто любопытно, будет ли он обрабатываться'/M9'? – Snowbear

+0

Возможно, вам стоит попробовать/MC (0xC = 12)? ;-) – Patrick

+0

Я на самом деле пробовал/М9 думал, что он только читает первую цифру, но это не так.Кажется, он не делает/M5 через/M9 и обрабатывает его, как если бы я набрал/M1. –

ответ

0

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

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

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

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

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