CUDA, unresolved external symbol
Поставил
NVIDIA GPU Computing SDK 4.1
Настроил для работы в VS
Открываю проект
..\NVIDIA GPU Computing SDK 4.1\CUDALibraries\src\batchCUBLAS\batchCUBLAS_vs2010.sln
Билдаю его, всё окей.
Беру свой проект:
Код:
#include "cuda.h"
#include <cuda_runtime.h>
#include "device_launch_parameters.h"
.....
void CUDAtest()
{
cudaDeviceProp devProp;
cudaGetDeviceProperties(&devProp,0);
int i;
}
int _tmain(int argc, _TCHAR* argv[])
{
....
CUDAtest();
return 0;
}
#include <cuda_runtime.h>
#include "device_launch_parameters.h"
.....
void CUDAtest()
{
cudaDeviceProp devProp;
cudaGetDeviceProperties(&devProp,0);
int i;
}
int _tmain(int argc, _TCHAR* argv[])
{
....
CUDAtest();
return 0;
}
error LNK2019: unresolved external symbol _cudaGetDeviceProperties@8 referenced in function "void __cdecl CUDAtest(void)" (?CUDAtest@@YAXXZ)
Что не так сделал?
Проект в прикепленном файле.
Некоторые настройки проекта:
Скрин 1
скрин 2
Инструкция, по которой настраивал VS(сорри, что как код, думал под спойлер засунуть, но тут такового похоже нет):
Код:
Порядок проделанной работы:
Установил VS C++ 2005 (Express Edition), затем ставится NVidia SDK и toolkit. При этом должны создаться системные переменные:
(название переменной = значение, соответствует моей системе и тем каталогам, кот. я указал при установке)
CUDA_BIN_PATH = D:\Programs\CUDA toolkit 2.0\bin
CUDA_INC_PATH = D:\Programs\CUDA toolkit 2.0\include
CUDA_LIB_PATH = D:\Programs\CUDA toolkit 2.0\lib
NVSDKCUDA_ROOT = D:\Programs\CUDA SDK 2.02.0811.0240
В инструкции CUDA_2_Quickstart_Guide.pdf прочел, что надо проверить установлено ли все как надо. Запускаю в cmd команду 'nvcc -V', выводит следующее:
nucc: NVIDIA (R) Cuda compiler driver
Copyright (C) 2005-2007 NUIDIfl Corporation
Built on Wed_Jul_16_12:57:50_PDT_2008
Cuda compilation tools, release 2.0, V0.2.1221
Но для этого надо зайти в каталог
C:\CUDA\bin\
т.е. этот путь не прописан в PATH. Соответственно и SDK тоже не прописан.
Открываем regedit и ищем, например CUDA_INC_PATH. ТАм же будет пееменная Path. Открываем её и видем что-то вроде
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\\v4.1\bin
Убираем двойной слеш и всё начинает работать.
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\bin
Затем на одном форуме прочитал небольшой TODO:
Зайти в Tools > Options > Projects and Solutions > VC++ Directories
вкладка Executable files
добавить новый параметр и ввести D:\Programs\CUDA SDK 2.02.0811.0240\bin, либо $(CUDA_BIN_PATH)
вкладка Include files
добавить новый параметр и ввести D:\Programs\CUDA toolkit 2.0\include, либо $(CUDA_INC_PATH)
добавить новый параметр и ввести D:\Programs\CUDA SDK 2.02.0811.0240\common\inc, либо $(NVSDKCUDA_ROOT)\common\inc
вкладка Library files
добавить новый параметр и ввести D:\Programs\CUDA toolkit 2.0\lib, либо $(CUDA_LIB_PATH)
добавить новый параметр и ввести D:\Programs\CUDA SDK 2.02.0811.0240\common\lib, либо $(NVSDKCUDA_ROOT)\common\lib
Однако в VS 2010 теперь всё не совсем так. Понадобится подредактировать Property Sheets.
1.Open your solution in the Visual Studio IDE.
2.From the View menu, select "Other Windows" -> "Property Manager" menu item. The Property Manager window appears docked on the left of the IDE by default.
Лкикаем дебаг или релиз и там кликаем
Microsoft.Cpp.Win32.user
Дальше всё аналогично
Зайти в папочку (у вас понятно путь может быть другой)
C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA CUDA SDK\doc\syntax_highlighting\visual_studio_8
и прочитал readme.txt
в нем написано как настроить подсветку синтаксиса в вижуал студио для ку файлов
Typically you should include the following headers:
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
Установил VS C++ 2005 (Express Edition), затем ставится NVidia SDK и toolkit. При этом должны создаться системные переменные:
(название переменной = значение, соответствует моей системе и тем каталогам, кот. я указал при установке)
CUDA_BIN_PATH = D:\Programs\CUDA toolkit 2.0\bin
CUDA_INC_PATH = D:\Programs\CUDA toolkit 2.0\include
CUDA_LIB_PATH = D:\Programs\CUDA toolkit 2.0\lib
NVSDKCUDA_ROOT = D:\Programs\CUDA SDK 2.02.0811.0240
В инструкции CUDA_2_Quickstart_Guide.pdf прочел, что надо проверить установлено ли все как надо. Запускаю в cmd команду 'nvcc -V', выводит следующее:
nucc: NVIDIA (R) Cuda compiler driver
Copyright (C) 2005-2007 NUIDIfl Corporation
Built on Wed_Jul_16_12:57:50_PDT_2008
Cuda compilation tools, release 2.0, V0.2.1221
Но для этого надо зайти в каталог
C:\CUDA\bin\
т.е. этот путь не прописан в PATH. Соответственно и SDK тоже не прописан.
Открываем regedit и ищем, например CUDA_INC_PATH. ТАм же будет пееменная Path. Открываем её и видем что-то вроде
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\\v4.1\bin
Убираем двойной слеш и всё начинает работать.
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\bin
Затем на одном форуме прочитал небольшой TODO:
Зайти в Tools > Options > Projects and Solutions > VC++ Directories
вкладка Executable files
добавить новый параметр и ввести D:\Programs\CUDA SDK 2.02.0811.0240\bin, либо $(CUDA_BIN_PATH)
вкладка Include files
добавить новый параметр и ввести D:\Programs\CUDA toolkit 2.0\include, либо $(CUDA_INC_PATH)
добавить новый параметр и ввести D:\Programs\CUDA SDK 2.02.0811.0240\common\inc, либо $(NVSDKCUDA_ROOT)\common\inc
вкладка Library files
добавить новый параметр и ввести D:\Programs\CUDA toolkit 2.0\lib, либо $(CUDA_LIB_PATH)
добавить новый параметр и ввести D:\Programs\CUDA SDK 2.02.0811.0240\common\lib, либо $(NVSDKCUDA_ROOT)\common\lib
Однако в VS 2010 теперь всё не совсем так. Понадобится подредактировать Property Sheets.
1.Open your solution in the Visual Studio IDE.
2.From the View menu, select "Other Windows" -> "Property Manager" menu item. The Property Manager window appears docked on the left of the IDE by default.
Лкикаем дебаг или релиз и там кликаем
Microsoft.Cpp.Win32.user
Дальше всё аналогично
Зайти в папочку (у вас понятно путь может быть другой)
C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA CUDA SDK\doc\syntax_highlighting\visual_studio_8
и прочитал readme.txt
в нем написано как настроить подсветку синтаксиса в вижуал студио для ку файлов
Typically you should include the following headers:
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
А в VC++ Directories Library Directories прописал $(CUDA_LIB_PATH)/$(PlatformName); Всё заработало.
Вот только у меня вопроc: что за переменные CudaToolkitLibDir и CudaToolkitIncludeDir в проимерах из SDK, ведь из вреестре нет. Или это обратная совместимость?
.lib добавь к проекту.
Цитата:
.lib добавь к проекту.
См. скрин 2, вроде ж добавлен cudart.lib, или что-то не так? Прописал еще "cuda.lib", "cublas.lib", но естессно никакого эффекта. Если в примере из SDK убрать cudart.lib, то действительно появляется такая же ошибка, как и в моём. Вот только в моём что прописывай cudart.lib в Additional Dependencies, что не прописывай - один черт выдает ошибку.