Запуск программы CUDA в Visual Studio 2010 (ОШИБКА из-за 32-битной или 64-битной компиляции)

Это вопрос, который является побочным продуктом другого опубликованного вопроса, который можно найти по следующей ссылке:

CUDA - связывание ошибок с примером свертки

VS2008 не компилирует cuda

В приведенной выше ссылке и в нескольких других сообщениях по той же теме они заявляют, что если вы скомпилируете 32-битную cuda, это решит ваши проблемы сборки / компиляции ...

Может ли кто-нибудь помочь направить меня к статье, в которой будет показано, как ссылаться на 32-битную CUDA. Это не имеет смысла. когда вы загружаете инструментарий CUDA, вы можете выбрать 64- или 32-разрядную версию. Оба не скачиваются. Так эти люди просто скачивают 32-битную версию CUDA? Это кажется смешным, и я знаю, что они не имеют в виду этого. Любая помощь будет принята с благодарностью.

Любая помощь относительно того, о чем они говорят, когда они говорят «ссылка на 32-битный CUDA», была бы принята с благодарностью.


СООБЩЕНИЯ ОБ ОШИБКАХ (как в предыдущих сообщениях)

1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library
1>TestForCuda.cu.obj : error LNK2019: unresolved external symbol _cudaSetupArgument@12 referenced in function "void __cdecl __device_stub__Z10kernelTestPi(int *)" (?__device_stub__Z10kernelTestPi@@YAXPAH@Z)
1>TestForCuda.cu.obj : error LNK2019: unresolved external symbol ___cudaRegisterFunction@40 referenced in function "void __cdecl __sti____cudaRegisterAll_46_tmpxft_000022ac_00000000_3_TestForCuda_cpp1_ii_da17b9e9(void)" (?__sti____cudaRegisterAll_46_tmpxft_000022ac_00000000_3_TestForCuda_cpp1_ii_da17b9e9@@YAXXZ)
1>TestForCuda.cu.obj : error LNK2019: unresolved external symbol ___cudaRegisterFatBinary@4 referenced in function "void __cdecl __sti____cudaRegisterAll_46_tmpxft_000022ac_00000000_3_TestForCuda_cpp1_ii_da17b9e9(void)" (?__sti____cudaRegisterAll_46_tmpxft_000022ac_00000000_3_TestForCuda_cpp1_ii_da17b9e9@@YAXXZ)
1>TestForCuda.cu.obj : error LNK2019: unresolved external symbol ___cudaUnregisterFatBinary@4 referenced in function "void __cdecl __cudaUnregisterBinaryUtil(void)" (?__cudaUnregisterBinaryUtil@@YAXXZ)
1>TestForCuda.cu.obj : error LNK2019: unresolved external symbol _cudaLaunch@4 referenced in function "enum cudaError __cdecl cudaLaunch(char *)" (??$cudaLaunch@D@@YA?AW4cudaError@@PAD@Z)
1>C:\Users\misc\Documents\Visual Studio 2010\Projects\TestForCuda\Test_Configuration\TestForCuda.exe : fatal error LNK1120: 5 unresolved externals
1>
1>Build FAILED.

person Chris    schedule 25.01.2013    source источник
comment
Что значит, оба не скачиваются? У меня не было проблем с компиляцией 64-битных проектов, использующих 64-битный CUDA, с Visual Studio 2010. Я подозреваю, что я не единственный :) Попробуйте начать заново с нуля. stackoverflow.com/questions/11332488/cuda -4-2-toolbox-vs2010 /   -  person Roger Dahl    schedule 25.01.2013
comment
После повторной установки всего, также создайте новый проект с помощью мастера создания проекта (File | New | Project), выберите шаблон проекта в NVIDIA | CUDA, создайте 64-битную конфигурацию с Configuration Manager, скомпилируйте и запустите. Если это сработает, переместите существующие файлы в новый проект. Если это не сработает, происходит что-то очень странное.   -  person Roger Dahl    schedule 25.01.2013
comment
спасибо Роджер, попробую переустановить. В Visual Studio у меня нет опции x64 для платформы (в диспетчере конфигурации) в моем проекте. Во всех статьях, которые я прочитал относительно этого сообщения об ошибке VS, говорится, что платформа проекта VS должна быть такой же (32/64), что и версия CUDA, которая у вас есть. Я читал статьи Microsoft, в которых говорилось, как изменить платформу с 32 на 64, но, похоже, у меня нет такой возможности. Я попробую переустановить VS2010. Еще раз спасибо   -  person Chris    schedule 25.01.2013
comment
Я не уверен, что 64-битные инструменты сборки включены по умолчанию в установку Visual Studio. При установке Visual Studio убедитесь, что установлен флажок для 64-разрядных инструментов. Если это единственная проблема, возможно, вам не придется переустанавливать. Просто запустите установку Visual Studio еще раз, чтобы настроить.   -  person Roger Dahl    schedule 25.01.2013
comment
хорошо, в этом есть смысл. Я попробую и отправлю ответ, если он сработает. Благодарность!   -  person Chris    schedule 25.01.2013
comment
Повторная установка почти никогда не поможет, поэтому, пожалуйста, не делайте этого. В любом вопросе недостаточно информации, чтобы помочь. Не могли бы вы предоставить следующую информацию: (1) Вы импортировали проект VS2005 в VS2010, аналогичный другому вопросу? Если нет, то как вы создали свой проект. (2) Вы пытаетесь создать 32- или 64-разрядную платформу (Win32 или x64)? (3) Какова командная строка для этапа компиляции? (4) Что такое командная строка компоновщика?   -  person Greg Smith    schedule 25.01.2013
comment
Проект, который я пытался скомпилировать, был проектом VS2010, который я создал с нуля. Это был тестовый код, который я скачал из Интернета. На самом деле у меня было две проблемы ...   -  person Chris    schedule 31.01.2013
comment
1-я проблема: в разделе «Настройка сборки» вам необходимо выбрать версию CUDA для сборки. Я выбрал самую высокую из показанных версий, которая была «CUDA 4.2 (.targets, .props)». Проблема заключалась в том, что я связался с CUDA версии 5.0. Когда я говорю «связанный», я имею в виду связанный параметр, который вы можете найти в строке меню VS2010 в «Project =› Properties = ›Configuration properties =› Linker ». Когда вы попадаете в это меню, у вас есть возможность добавить «Дополнительные каталоги библиотеки». Я связался с CUDA версии 5.0.   -  person Chris    schedule 31.01.2013
comment
Я еще не понял, почему у меня нет CUDA v5.0 в разделе «Настройка сборки»… но это другой вопрос на другой день.   -  person Chris    schedule 31.01.2013
comment
Вторая проблема: я работаю на Windows 7 (64-разрядная версия), процессор - 64-разрядный (четырехъядерный Intel), загруженный мной набор инструментов / SDK CUDA был 64-разрядным, но я пытался выполнить отладку на платформе Win32. Да, я знал, что мне нужно скомпилировать / собрать с использованием подходящей битовой платформы, но по незнанию я не мог понять, как изменить «платформу» на x64. В инструкциях в Интернете эта опция уже была доступна в раскрывающемся списке «Платформа». Я читал более поздние статьи, в которых говорилось, что VS может отлаживать только в Win32, но может компилироваться в Win32 или x64 (неправда), что еще больше напугало меня.   -  person Chris    schedule 31.01.2013
comment
Продолжение второй проблемы: если вы впервые используете платформу x64, вариант x64 НЕ будет отображаться в раскрывающемся списке «Платформа». Вы должны создать «новую» платформу. Когда вы это сделаете, вам нужно выбрать x64 в раскрывающемся списке «Копировать настройки из:». Я хочу сказать, что пробовал это раньше, и в раскрывающемся списке «Копировать настройки:» не было опции x64. Я либо упустил из виду параметр x64 «Копировать параметр из:» ранее… либо этот параметр был добавлен после того, как я выполнил пользовательскую установку, предложенную Роджером (я хотел бы вспомнить / был более наблюдательным по этому поводу).   -  person Chris    schedule 31.01.2013
comment
Как бы то ни было, после выполнения обоих этих действий (не одного… а обоих) код CUDA был успешно скомпилирован. Я просто хотел еще раз поблагодарить всех за помощь! Заставил меня двигаться в правильном направлении!   -  person Chris    schedule 31.01.2013


Ответы (1)


Проект, который я пытался скомпилировать, был проектом VS2010, который я создал с нуля. Это был тестовый код, который я скачал из Интернета. На самом деле у меня было две проблемы ...

1-я проблема:

В разделе «Настройка сборки» вам необходимо выбрать версию CUDA для сборки. Я выбрал самую высокую из показанных версий, которая была «CUDA 4.2 (.targets, .props)». Проблема заключалась в том, что я связался с CUDA версии 5.0. Когда я говорю «связанный», я имею в виду связанный параметр, который вы можете найти в строке меню VS2010 в «Проект => Свойства => Свойства конфигурации => Компоновщик». Когда вы попадаете в это меню, у вас есть возможность добавить «Дополнительные каталоги библиотеки». Я связался с CUDA версии 5.0. Я еще не понял, почему у меня нет CUDA v5.0 в разделе «Настройка сборки»… но это уже другой вопрос на другой день.
Урок: какую бы версию cude вы ни связали (в меню компоновщика) - это версия, которую следует выбрать в меню «Настройка сборки».

2-я проблема:

Я работаю на Windows 7 (64-разрядная версия), процессор - 64-разрядный (четырехъядерный Intel), загруженный мной пакет SDK / инструментария CUDA был 64-разрядным, но я пытался выполнить отладку на платформе Win32. Да, я знал, что мне нужно скомпилировать / собрать с использованием подходящей битовой платформы, но по незнанию я не мог понять, как изменить «Платформу» (расположенную в меню «Диспетчер конфигурации» для вашего проекта VS) на x64. В инструкциях в Интернете показано, что вариант x64 уже доступен в раскрывающемся списке «Платформа». Я читал более поздние статьи, в которых говорилось, что VS может отлаживать только в Win32, но может компилироваться в Win32 или x64 (неправда), что еще больше напугало меня. На самом деле, если вы впервые используете платформу x64, вариант x64 НЕ будет отображаться в раскрывающемся списке «Платформа». Вы должны создать «новую» платформу. Когда вы это сделаете, вам нужно выбрать x64 в раскрывающемся списке «Копировать настройки из:». Я хочу сказать, что пробовал это раньше, и в раскрывающемся списке «Копировать настройки:» не было опции x64. Я либо упустил из виду параметр x64 «Копировать параметр из:» ранее… либо этот параметр был добавлен после того, как я выполнил пользовательскую установку, предложенную Роджером (я хотел бы вспомнить / был более наблюдательным по этому поводу). Урок: может потребоваться «создать новую» платформу в меню «диспетчера конфигурации», если вы впервые используете опцию x64 (полагаем, что отладка VS может по умолчанию быть Win32 ... но при необходимости ее легко изменить на x64).

В любом случае, после исправления обеих этих вещей (не одного… а обоих), код CUDA был успешно скомпилирован. Я просто хотел еще раз поблагодарить всех за помощь! Заставил меня двигаться в правильном направлении!

PS: Хороший учебник (не мой, но я раньше мне помогал), который поможет вам скомпилировать ваш первый код CUDA http://www.youtube.com/watch?v=1HMVg40fsg0

person Chris    schedule 31.01.2013