CUDA 툴킷(toolkit)은 32비트, 64비트로 나뉘어서 배포되는데, 64비트 패키지에는 32비트 바이너리를 제공하지 않는다. 예를 들어, 64비트 툴킷을 설치했다면 32비트 프로그램을 빌드하고 싶어도 라이브러리 링크 문제 때문에 빌드가 불가능하다는 뜻이다. CUDA 툴킷이 설치된 폴더를 살펴보면 bin, bin64, lib, lib64 따위로 구분이 되어 있음에도 불구하고 이렇게 불편하게 만들어 놓은 것은 쉽게 이해가지 않는다.
그러나, 실제로는 32비트, 64비트 CUDA 툴킷을 한 폴더에 설치해도 문제는 없다. 직접적으로 설치 파일을 실행하여 두 패키지를 모두 설치하려고 하면 설치 프로그램이 이를 감지하여 하나를 제거하지만, 수동으로 필요한 파일들을 해당 폴더에 복사해도 상관없다. 복사해야 하는 항목은 다음과 같으며, 이 방법은 CUDA 툴킷 3.1 버전에서도 동작했다.
1. 먼저, 32비트 CUDA 툴킷을 설치하고, CUDA\bin 폴더 안의 파일들을 복사해둔다.
2. 32비트 CUDA 툴킷을 제거하고, 64비트 CUDA 툴킷을 설치한다.
3. 64비트 CUDA 툴킷을 설치하면 bin, bin64, lib, lib64 폴더가 모두 생성되어 있을텐데, 단순히 미리 복사해둔 32비트 CUDA 툴킷의 바이너리를 해당 폴더에 넣어주면 된다. 특히, nvcc.profile 파일도 반드시 복사해야 한다.
웃긴 일이긴 하지만, 64비트 CUDA 툴킷은 32비트 라이브러리도 제공하기 때문에, 미리 32비트 CUDA 툴킷에서 lib 항목까지 복사할 필요는 없다. 이와 같은 방식으로 32비트 / 64비트 CUDA 툴킷을 하나의 폴더로 운영할 수 있다. 다만, 64비트 툴킷을 설치했기 때문에 환경변수인 CUDA_INC_PATH, CUDA_LIB_PATH는 64비트 폴더들을 가리키고 있을 것이다. 따라서, 32비트 CUDA 프로그램을 빌드할 때는 환경 변수를 사용하지 말고 직접 bin, lib 폴더를 지정해야 한다.
32비트 CUDA 프로그램을 빌드하고자 한다면, 프로젝트 프로퍼티의 CUDA 빌드 룰에서 32비트 nvcc.exe가 있는 경로를 지정해줘야 한다. 그림의 Path to nvcc.exe라는 항목을 자세히 살펴보라.
이것을 'Use Alternate path to CUDA specified below'으로 설정하고, 바로 밑의 항목에 32비트 nvcc.exe가 있는 경로를 적어주면 된다.
모든 과정을 제대로 설정했다면, 프로그램을 빌드해보라. 문제없이 깨끗하게 빌드할 수 있을 것이다.
* 덧글(2011.1.6) : CUDA Toolkit 3.1의 경우, 64 비트 버전을 설치하더라도 32 비트 바이너리, 라이브러리를 같이 설치해준다. 앞으로 계속 이와 같은 방식으로 배포할 것 같다. (진작부터 이랬어야 한다)
그러나, 실제로는 32비트, 64비트 CUDA 툴킷을 한 폴더에 설치해도 문제는 없다. 직접적으로 설치 파일을 실행하여 두 패키지를 모두 설치하려고 하면 설치 프로그램이 이를 감지하여 하나를 제거하지만, 수동으로 필요한 파일들을 해당 폴더에 복사해도 상관없다. 복사해야 하는 항목은 다음과 같으며, 이 방법은 CUDA 툴킷 3.1 버전에서도 동작했다.
1. 먼저, 32비트 CUDA 툴킷을 설치하고, CUDA\bin 폴더 안의 파일들을 복사해둔다.
2. 32비트 CUDA 툴킷을 제거하고, 64비트 CUDA 툴킷을 설치한다.
3. 64비트 CUDA 툴킷을 설치하면 bin, bin64, lib, lib64 폴더가 모두 생성되어 있을텐데, 단순히 미리 복사해둔 32비트 CUDA 툴킷의 바이너리를 해당 폴더에 넣어주면 된다. 특히, nvcc.profile 파일도 반드시 복사해야 한다.
웃긴 일이긴 하지만, 64비트 CUDA 툴킷은 32비트 라이브러리도 제공하기 때문에, 미리 32비트 CUDA 툴킷에서 lib 항목까지 복사할 필요는 없다. 이와 같은 방식으로 32비트 / 64비트 CUDA 툴킷을 하나의 폴더로 운영할 수 있다. 다만, 64비트 툴킷을 설치했기 때문에 환경변수인 CUDA_INC_PATH, CUDA_LIB_PATH는 64비트 폴더들을 가리키고 있을 것이다. 따라서, 32비트 CUDA 프로그램을 빌드할 때는 환경 변수를 사용하지 말고 직접 bin, lib 폴더를 지정해야 한다.
32비트 CUDA 프로그램을 빌드하고자 한다면, 프로젝트 프로퍼티의 CUDA 빌드 룰에서 32비트 nvcc.exe가 있는 경로를 지정해줘야 한다. 그림의 Path to nvcc.exe라는 항목을 자세히 살펴보라.
이것을 'Use Alternate path to CUDA specified below'으로 설정하고, 바로 밑의 항목에 32비트 nvcc.exe가 있는 경로를 적어주면 된다.
모든 과정을 제대로 설정했다면, 프로그램을 빌드해보라. 문제없이 깨끗하게 빌드할 수 있을 것이다.
* 덧글(2011.1.6) : CUDA Toolkit 3.1의 경우, 64 비트 버전을 설치하더라도 32 비트 바이너리, 라이브러리를 같이 설치해준다. 앞으로 계속 이와 같은 방식으로 배포할 것 같다. (진작부터 이랬어야 한다)