Visual Studio의 CUDA Project 설정하기

초기 세팅에 관한 포스트는 CUDA 초기 세팅 (Ver 4.1 기준)에서 다루었다. 이번에는 Visual Studio 10의 설정에서 CUDA를 설정, 컴파일하는 과정을 기록한다.

[Visual Studio Project 생성 예제]

CUDA 4.1이 정상적으로 설치되었다고 가정하고, 프로젝트를 생성한다.

  1. 프로젝트는 Win32 Console Application (Visual C++)로 하고 ‘Empty project’에서 시작한다.
  2. 파일을 하나 작성한다.
    #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;
    }
  3. Solution Explorer에서 project를 선택하고 ‘Build Customizations’를 클릭한다. 정상적으로 CUDA가 설치되어 있다면 CUDA 4.1 타겟이 윈도우에 보일 것이다. 이것에 체크한다.
    만일 설치되지 않았거나 지워졌다면, CUDA Toolkit가 설치된 디렉토리의 ‘extrasvisual_studio_integrationMSBuildExtensions’ 에 있는모든 파일을 ‘C:Program Files (x86)MSBuildMicrosoft.Cppv4.0BuildCustomizations’ 에 복사한다.
  4. 세팅이 올바르게 되어 있으면 다음처럼 .cu 파일 안에서도 .cpp 파일과 같은 화면으로 보일 것이다.

    참고) CUDA 관련 함수들이 올바로 인텔리센스에 나오게 하려면 CUDA의 헤더 파일들을 명시적으로 기입해주어야 한다.

  5. 컴파일을 수행한다. 컴파일은 문제 없이 수행되지만, 링크 에러가 발생할 것이다. 나는 property sheet 수정을 이용해 해결할 것이다.

 

[Visual Studio project default property sheet 수정]

CUDA 4.1을 설치한 후에는 기본적인 perperty sheet인 “Microsoft.Cpp.Win32.user” 파일이 살짝 변경된다. 하지만 빌드하기 편하게 몇가지 것들을 더 수정한다.
이 작업은 한 번만 수행하면 된다.

cudart.lib 설정

  1. View – Property Manager (메뉴 마지막에서 두 번째) 를 선택한다. Property Manager 도킹 창이 나타난다.
  2. Microsoft.Cpp.Win32.user property page를 연다.
  3. Linker – Input – Addtional Dependencies에 cudart.lib 파일을 추가한다. 기존 항목은 *절대* 지워서는 안 된다.
  4. 변경 전: 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)
  5. 변경 후: 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)’를 추가하라.