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

Как начать новый проект CUDA в Visual Studio 2008?

Это невероятно важный вопрос, но как мне начать новый проект CUDA в Visual Studio 2008? Я нашел тонны и тонны документации по вопросам, связанным с CUDA, но не знаю, как начать новый проект. Я работаю с Windows 7 x64 Visual Studio 2008 С++. Мне бы очень хотелось найти действительно действительно базовое приложение Hello World, чтобы просто выполнить компиляцию и запуск базовой программы.

Edit:

Я пробовал твои шаги Том. Я настраиваю консольное приложение. Затем я удалил файл по умолчанию .cpp, который он сбрасывает и копирует по трем файлам из проекта шаблона только для того, чтобы что-то было скомпилировано. Когда я скомпилирую это, template_gold.cpp жаловался на то, что не был включен stdafx.h, поэтому я включил это. Теперь сборка завершилась неудачей:

1>------ Build started: Project: CUDASandbox, Configuration: Debug x64 ------
1>Compiling...
1>template_gold.cpp
1>Linking...
1>LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm"
1>CUDASandbox - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
4b9b3361

Ответ 1

ПРИМЕЧАНИЕ С выпуском версии 3.2 инструментария CUDA, NVIDIA теперь включает файл правил с Toolkit, а не SDK. Поэтому я разделил этот ответ на две половины, используя правильные инструкции для вашей версии Toolkit.

ПРИМЕЧАНИЕ Эти инструкции действительны для Visual Studio 2005 и 2008. Для Visual Studio 2010 см. этот ответ.


CUDA TOOLKIT 3.2 и более поздние версии

Я рекомендую использовать файл NvCudaRuntimeApi.rules (или NvCudaDriverApi.rules при использовании API-интерфейса драйвера), предоставляемый NVIDIA, это выпущено с помощью инструментария и поддерживает последние флагов компилятора дружественным образом. Лично я бы посоветовал использовать мастер VS, но только потому, что я действительно не думаю, что вам это нужно.

Файл правил (установленный в каталог Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults) "учит" Visual Studio, как компилировать и связывать любые .cu файлы в вашем проекте в ваше приложение.

  • Создайте новый проект с использованием стандартных мастеров MS (например, пустого проекта консоли)
  • Реализовать ваш хост (последовательный) код в файлах .c или .cpp
  • Внедрите свои оболочки и ядра в файлы .cu.
  • Добавьте NvCudaRuntimeApi.rules (щелкните правой кнопкой мыши по проекту, пользовательские правила сборки, отметьте соответствующее поле), см. примечание 1
  • Добавьте библиотеку времени выполнения CUDA (щелкните правой кнопкой мыши по проекту и выберите "Свойства" , затем в Linker → "General" добавить $(CUDA_PATH)\lib\$(PlatformName) в дополнительные библиотеки и в Linker → Input add cudart.lib к дополнительным зависимостям), см. примечания [2] и [3]
  • При необходимости добавьте файлы CUDA include к пути поиска, необходимые, если вы включаете любые файлы CUDA в ваши .cpp файлы (в отличие от файлов .cu) (щелкните правой кнопкой мыши по проекту и выберите "Свойства" , затем в C/С++ → Общие добавить $(CUDA_PATH)\include в дополнительные каталоги Include), см. Примечание [3]
  • Затем просто создайте проект и файлы .cu будут скомпилированы в .obj и автоматически добавлены в ссылку.

Некоторые другие советы:

  • Измените генерацию кода, чтобы использовать статически загруженную среду выполнения C в соответствии с временем выполнения CUDA; щелкните правой кнопкой мыши по проекту и выберите "Свойства" , затем в C/С++ → "Генерация кода" измените библиотеку времени выполнения на /MT (или/MTd для отладки, и в этом случае вам нужно будет отобразить это в Runtime API → Host → Runtime Библиотека), см. Примечание [4]
  • Включить подсветку синтаксиса с помощью файла usertype.dat, включенного в SDK, см. файл readme.txt в <sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8

Я также рекомендую включить поддержку Intellisense со следующей записью реестра (замените 9.0 на 8.0 для VS2005 вместо VS2008):

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"

Кстати, я бы рекомендовал избегать cutil, если это возможно, вместо этого сверните собственную проверку. Cutil не поддерживается NVIDIA, он просто пытался сохранить примеры в SDK сфокусированными на фактической разработке программ и алгоритмов и избегать повторения одних и тех же вещей в каждом примере (например, синтаксический анализ командной строки). Если вы напишете свое, тогда у вас будет намного лучший контроль и будет знать, что происходит. Например, оболочка cutilSafeCall вызывает exit(), если функция не работает - реальное приложение (в отличие от образца) должно, вероятно, обрабатывать отказ более элегантно!


CUDA TOOLKIT 3.1 и ранее

Я бы использовал файл Cuda.rules, предоставленный NVIDIA с SDK, это выпущено рядом с инструментарием и поддерживает дружественные флагов компилятора. Лично я бы посоветовал использовать мастер VS, но только потому, что я действительно не думаю, что вам это нужно.

Файл правил (в C\общем каталоге SDK) "учит" Visual Studio, как компилировать и связывать любые .cu файлы в вашем проекте в ваше приложение.

  • Создайте новый проект с использованием стандартных мастеров MS (например, пустого проекта консоли)
  • Реализовать ваш хост (последовательный) код в файлах .c или .cpp
  • Внедрите свои оболочки и ядра в файлы .cu.
  • Добавьте Cuda.rules (щелкните правой кнопкой мыши проект, пользовательские правила сборки, найдите файл правил и убедитесь, что он отмечен галочкой)
  • Добавьте библиотеку времени выполнения CUDA (щелкните правой кнопкой мыши по проекту и выберите "Свойства" , затем в Linker → "Общие" добавьте $(CUDA_LIB_PATH) в дополнительные библиотеки и в Linker → Input add cudart.lib к дополнительным зависимостям), см. примечание [2] ниже
  • При необходимости добавьте файлы CUDA include к пути поиска, необходимые, если вы включаете любые файлы CUDA в ваши .cpp файлы (в отличие от файлов .cu) (щелкните правой кнопкой мыши по проекту и выберите "Свойства" , затем в C/С++ → Общие добавить $(CUDA_INC_PATH) в дополнительные каталоги включения)
  • Затем просто создайте проект и файлы .cu будут скомпилированы в .obj и автоматически добавлены в ссылку.

Некоторые другие советы:

  • Измените генерацию кода, чтобы использовать статически загруженную среду выполнения C, чтобы соответствовать времени выполнения CUDA, щелкните правой кнопкой мыши проект и выберите "Свойства" , затем в C/С++ → "Генерация кода" измените библиотеку времени выполнения на /MT (или/MTd для отладки, в этом случае вам нужно будет отобразить это в CUDA Build Rule → Hybrid CUDA/С++ Options), см. примечание [4]
  • Включить подсветку синтаксиса с помощью файла usertype.dat, включенного в SDK, см. файл readme.txt в <sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8

Я также рекомендую включить поддержку Intellisense со следующей записью реестра (замените 9.0 на 8.0 для VS2005 вместо VS2008):

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"

Кстати, я бы рекомендовал избегать cutil, если это возможно, вместо этого сверните собственную проверку. Cutil не поддерживается NVIDIA, он просто пытался сохранить примеры в SDK сфокусированными на фактической разработке программ и алгоритмов и избегать повторения одних и тех же вещей в каждом примере (например, синтаксический анализ командной строки). Если вы напишете свое, тогда у вас будет намного лучший контроль и будет знать, что происходит. Например, оболочка cutilSafeCall вызывает exit(), если функция не работает - реальное приложение (в отличие от образца) должно, вероятно, обрабатывать отказ более элегантно!


Примечание

  • Вы также можете использовать правила FLEF, специфичные для Toolkit. NvCudaRuntimeApi.v3.2.rules. Это означает, что вместо поиска CUDA Toolkit в% CUDA_PATH% он будет выглядеть в% CUDA_PATH_V3_2%, что, в свою очередь, означает, что вы можете иметь несколько версий CUDA Toolkit, установленных в вашей системе, и разные проекты могут ориентироваться на разные версии. См. Также примечание [3].
  • Файл правил не может изменять настройки компиляции и компоновщика C/С++, поскольку он просто добавляет параметры компиляции для кода CUDA. Поэтому вам нужно сделать этот шаг вручную. Не забудьте сделать это для всех конфигураций!
  • Если вы хотите стабилизировать определенную версию CUDA Toolkit, вы должны заменить CUDA_PATH на CUDA_PATH_V3_2. См. Также примечание 1.
  • Наличие несоответствующей версии среды выполнения C может вызвать множество проблем; в частности, если у вас есть какие-либо ошибки в отношении LIBCMT (например, LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs) или многократно определенные символы для стандартных функций библиотеки, это должно быть вашим первым подозреваемым.

Ответ 2

Какой замечательный вопрос! Для всей документации CUDA, это то, что я всегда считал очевидным упущением... На самом деле, я очень рад, что нашел этот пост, потому что после использования CUDA довольно долгое время, t нашел официальный, правильный способ получить VS для создания программы CUDA с нуля.

Когда мне нужно запустить новую программу CUDA, я всегда просто копировал и модифицировал пример шаблон "из каталога SDK. Это может быть не совсем то, что вы ищете, потому что оно не начинается с нуля, но это быстрый способ получить проект с поддержкой CUDA, работающий в VS со всеми правильными именами проектов и файлов...

  • Сделайте копию примера шаблона "из SDK и переименуйте каталог - единственное необходимое содержимое в каталоге - это исходный код и файлы VS.sln и .vcproj
  • Переименуйте файлы .sln и .vcproj.
  • Откройте файл .sln в текстовом редакторе и переименуйте переменную Project и имя файла .vcproj в третьей строке файла
  • Откройте файл .vcproj в текстовом редакторе и переименуйте переменные Имя и RootNamespace в первых нескольких строках файла
  • Откройте проект с помощью VS и откройте страницы свойств (щелкните правой кнопкой мыши по имени проекта в панели проводника решений, выберите "Свойства" )
  • Измените имя Выходной файл на страницах свойств (в разделе "Свойства конфигурации" → "Связи" → "Общие" ). Прежде чем я изменю имя файла, я выбираю "Все конфигурации" в окне "Конфигурация", вниз и "x64" из выпадающего списка "Платформа", так как я на 64-битной системе
  • Измените имя имя файла базы данных программы на страницах свойств (в разделе "Свойства конфигурации" → "Линкера" → "Отладка" )... Прежде чем изменить имя файла, я выбираю "Отладка" и "x64" в вытягивания.

Ответ 3

  • Установите мастер CUDA VS. Он настроит VS и добавит проект CUDA в меню "новый проект".
  • Убедитесь, что у вас установлен компилятор x64 (необходимо проверить во время установки VS).
  • Проверьте, есть ли у вас x64 libs, include, nvcc dir и в пути поиска.
  • Создайте новый проект, используя шаблон CUDA.
  • Измените тип проекта на x64 и CUDA на Native (если у вас есть карта с поддержкой nv cuda) или эмуляция в противном случае.
  • В шаблоне будут созданы правила пользовательской сборки, которые компилируют файлы .cu с nvcc и другими файлами с компилятором по умолчанию.
  • if, vs пытается скомпилировать файлы .cu с компилятором C/С++, щелкните этот файл в проводнике решений и отключите компиляцию для этих файлов (красная точка на значке файла).

Дополнительную информацию об установке мастера CUDA на VS2008 можно найти здесь и здесь

[править]
Если вы не хотите использовать мастер, вам нужно вручную установить пути CUDA lib/include/nvcc и добавить пользовательские правила сборки в каждую новую программу CUDA. Для получения дополнительной информации, как это сделать, взгляните на Tom Answer.