Подтвердить что ты не робот

Есть ли недостатки в "многопроцессорной компиляции" в Visual Studio?

Есть ли недостатки, побочные эффекты или другие проблемы, о которых я должен знать при использовании опции "Многопроцессорная компиляция" в проектах Visual Studio для С++? Или, чтобы сформулировать вопрос другим способом, почему этот параметр отключен по умолчанию в Visual Studio?

4b9b3361

Ответ 1

Документация для /MP говорит:

Несовместимые параметры и языковые функции
Опция /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