Есть ли недостатки, побочные эффекты или другие проблемы, о которых я должен знать при использовании опции "Многопроцессорная компиляция" в проектах Visual Studio для С++? Или, чтобы сформулировать вопрос другим способом, почему этот параметр отключен по умолчанию в Visual Studio?
Есть ли недостатки в "многопроцессорной компиляции" в Visual Studio?
Ответ 1
Несовместимые параметры и языковые функции
Опция/MP
несовместима с некоторыми параметрами компилятора и языковыми функциями. Если вы используете несовместимый параметр компилятора с опцией/MP
, компилятор выдает предупреждение D9030 и игнорирует параметр/MP
. Если вы используете несовместимую языковую функцию, компилятор выдает ошибку C2813, то заканчивается или продолжается в зависимости от текущего уровня предупреждения компилятора.
Примечание:
Большинство параметров несовместимы, потому что, если они были разрешены, одновременно исполняемые компиляторы будут записывать свой вывод одновременно с консолью или в конкретный файл. В результате выход будет смешиваться и искажаться. В некоторых случаях комбинация опций ухудшит производительность.
И он дает таблицу, в которой перечислены параметры компилятора и языковые функции, которые несовместимы с /MP
:
#import
директива препроцессора (преобразует типы в библиотеке типов в классы С++, а затем записывает эти классы в заголовочный файл)/E
,/EP
(Копирует вывод препроцессора на стандартный вывод (stdout))/Gm
(Включает инкрементную перестройку)/showIncludes
(Записывает список включенных файлов в стандартную ошибку (stderr))/Yc
(Записывает предварительно скомпилированный файл заголовка)
Вместо отключения этих других параметров по умолчанию (и включив /MP
по умолчанию), Visual Studio заставляет вас вручную отключать/предотвращать эти функции и включать /MP
.
Ответ 2
Из нашего опыта были найдены следующие основные проблемы:
- просматривать информацию, неспособную построить из-за нескольких проектов, вызывающих bscmake в одно и то же время (бесполезная информация в настоящее время поэтому должна быть удалена как настройка проекта)
- ошибки компоновщика из-за проблем с зависимостями и проблем с порядком сборки, что вы обычно не видите при нормальном построении
- Пакетные сборки не используют многопроцессорную компиляцию, по крайней мере, это было верно для редакций VS 2008-2008 годов
- предупреждения, сгенерированные из предварительно скомпилированных заголовков, несовместимы, это происходит, когда вы создаете stdafx и можете игнорировать, но при выполнении перестройки он генерирует это сообщение
Однако выше перечисленные проблемы конфигурации, которые вы можете решить, в противном случае она должна быть включена, так как это ускорит сборку.
Ответ 3
Поскольку многопроцессорная компиляция несовместима со многими другими параметрами компиляции, а также имеет более высокий уровень использования системных ресурсов. Разработчик должен решить, стоит ли для него это делать. Вы можете найти полную документацию здесь: http://msdn.microsoft.com/en-us/library/bb385193.aspx