초기 세팅에 관한 포스트는 CUDA 초기 세팅 (Ver 4.1 기준)에서 다루었다. 이번에는 Visual Studio 10의 설정에서 CUDA를 설정, 컴파일하는 과정을 기록한다.
[Visual Studio Project 생성 예제]
CUDA 4.1이 정상적으로 설치되었다고 가정하고, 프로젝트를 생성한다.
- 프로젝트는 Win32 Console Application (Visual C++)로 하고 ‘Empty project’에서 시작한다.
- 파일을 하나 작성한다.
#include <iostream> #include "cuda.h" #include "cuda_runtime.h" #include "device_launch_parameters.h" __global__ void kernel(void) { } __global__ void help(void) { } int main(void) { kernel<<<1, 1>>>(); printf("Hello, World!n"); return 0; }
- Solution Explorer에서 project를 선택하고 ‘Build Customizations’를 클릭한다. 정상적으로 CUDA가 설치되어 있다면 CUDA 4.1 타겟이 윈도우에 보일 것이다. 이것에 체크한다.
만일 설치되지 않았거나 지워졌다면, CUDA Toolkit가 설치된 디렉토리의 ‘extrasvisual_studio_integrationMSBuildExtensions’ 에 있는모든 파일을 ‘C:Program Files (x86)MSBuildMicrosoft.Cppv4.0BuildCustomizations’ 에 복사한다. -
세팅이 올바르게 되어 있으면 다음처럼 .cu 파일 안에서도 .cpp 파일과 같은 화면으로 보일 것이다.
참고) CUDA 관련 함수들이 올바로 인텔리센스에 나오게 하려면 CUDA의 헤더 파일들을 명시적으로 기입해주어야 한다. - 컴파일을 수행한다. 컴파일은 문제 없이 수행되지만, 링크 에러가 발생할 것이다. 나는 property sheet 수정을 이용해 해결할 것이다.
[Visual Studio project default property sheet 수정]
CUDA 4.1을 설치한 후에는 기본적인 perperty sheet인 “Microsoft.Cpp.Win32.user” 파일이 살짝 변경된다. 하지만 빌드하기 편하게 몇가지 것들을 더 수정한다.
이 작업은 한 번만 수행하면 된다.
cudart.lib 설정
- View – Property Manager (메뉴 마지막에서 두 번째) 를 선택한다. Property Manager 도킹 창이 나타난다.
- Microsoft.Cpp.Win32.user property page를 연다.
- Linker – Input – Addtional Dependencies에 cudart.lib 파일을 추가한다. 기존 항목은 *절대* 지워서는 안 된다.
- 변경 전: kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;
advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;
odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - 변경 후: kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;
advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;
odbc32.lib;odbccp32.lib;cudart.lib;%(AdditionalDependencies)
(사실 아예 새로운 property를 추가하는 것을 더 권장하지만, 주의를 충분히 기울일 경우 본 방법이 훨씬 편리하긴 하다.)
[Troubleshooting]
- .cu 파일을 작성하였으나 nvcc 컴파일러가 동작하지 않는다.
- ‘Build Customizations’를 선택해 CUDA 4.1 을 선택한다. Projec properti pages를 열어 ‘CUDA C/C++’ 항목이 추가되었는지 확인한다. 추가되지 않았다면 cu 파일에 대한 custom build rule이 제대로 적용되지 않았기 때문이다. cu 파일의 property를 열어 General – Item Type이 ‘CUDA C/C++’ 로 설정되어 있는지를 확인하자.
- #include … 로 추가한 CUDA 관련 header 파일의 경로를 찾을 수 없다고 에러가 나온다. (#include 를 선언한 줄에 커서를 가져가 마우스 오른쪽 클릭 후 나오는 context menu에서 “Open Document < … > ..” 를 선택했을 때 에러 메시지가 나오는 경우.
- 이는 정상적인 현상이다. ‘.cu’ 파일은 일반적인 C/C++ 파일 확장자가 아니다. 그러므로 ‘Additional Include Directories’에서 설정한 값이 적용되지 않는다. 정 context menu에서 header를 열고 싶다면 “Microsoft.Cpp.Win32.user” property sheet의 ‘Include Directories’에 ‘$(CudaToolkitIncludeDir)’를 추가하라.