Cuda параллельная генерация кода в Visual Studio
У меня есть пара проектов C++ в решении Visual Studio 2012. Эти проекты содержат большое количество файлов, и я использую /MP для ускорения генерации кода.
Мне было интересно, есть ли способ ускорить также NVCC подобным образом. Использование /MP в проекте, содержащем ядра CUDA, не дает никаких преимуществ во время компиляции, и я вижу только одно ядро в работе.
Итак, вопрос: как я могу использовать свой многоядерный ПК для ускорения компиляции CUDA?
2 ответа
Начиная с CUDA 5.5, nvcc
не имеет эквивалента MSVC /MP, поэтому любой параллелизм сборки для файлов.cu должен исходить из инструмента сборки, который вызывает NVCC.
Если вы можете собирать с использованием GNU Make (например, под Cygwin или в системе Linux/Unix/OS X), вы можете использовать его функциональность параллельного построения, используя -j
опция, которая заставляет его обрабатывать несколько рецептов параллельно.
Вот хороший пост в блоге, который перечисляет несколько вариантов параллельной сборки в Windows, некоторые из которых могут работать с NVCC.
Для настоящей распределенной / параллельной системы сборки, поддерживающей MSVC и NVCC, вы можете попробовать Incredibuild.
Вы можете использовать IncrediBuild
Но эта ошибка может произойти:
фатальная ошибка C1041: невозможно открыть базу данных программы '...'; если несколько файлов CL.EXE записывают в один и тот же файл.PDB, используйте /FS
Чтобы избежать этого, установите "Проект" -> "Свойства" -> CUDA C/C++ -> "Хост" -> "Дополнительные параметры компилятора" -> /FS.
Подробнее читайте в этом блоге.