이렇게라도 기록을 해 두지 않으면 잊어버리기에...
블로그가 랩노트는 아니지만 이렇게 기록해 둡니다.

초기에는 CUDA에서 정식으로 Ubuntu linux를 (물론 Debian도) 지원하지 않았는데 요즘은 어느 정도 정식 지원이 됩니다. 하나 안타까운 건 비교적 업데이트가 빠른 Ubuntu 리눅스 특성상 CUDA에서 지원하는 Ubuntu 버전이 조금씩 느리다는 문제가 있어요.

현재 CUDA 사이트에서 공식으로 지원해주고 있는 Ubuntu linux 버전은 9.10입니다. 그래서 10.04에서는 약간 문제가 생기죠.

CUDA를 설치할 때는 다음과 같이 세 단계를 거치면 됩니다.

  1. Device Driver 설치
  2. CUDA Toolkit 설치
  3. GPU Computing SDK code sample 설치
우선 저렇게 세 가지 설치할 파일을 받습니다. 나중에 버전이 달라지면 링크가 또 달라질 것 같긴 하지만, 이 글은 구체적으로 "64-bit 버전의 Ubuntu 10.04에 CUDA 3.1을 설치할 때" 생기는 문제점에 대한 해결책을 적기 위해 쓰고 있는 것이므로 그냥 CUDA 3.1 현재 링크를 그대로 쓰도록 하겠습니다. http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux 이 링크 가서 받으시면 됩니다.

그 링크를 보시면 복잡하게 이것저것 많은데, distro에 따라 다른 걸 받을 수 있게 해 놔서 복잡할 뿐, 딱 세 개만 받으면 됩니다.
Developer Drivers for Linux (256.40), 64-bit 버전
CUDA Toolkit for Ubuntu Linux 9.10, 64-bit 버전
GPU Computing SDK code samples

저렇게 세 개 받아 두세요. 한글 버전으로 깔아둔 파이어폭스에서 다운로드 받으면 아마 홈 디렉토리의 "다운로드"라는 디렉토리에 받게 될 텐데, 나중에 좀 귀찮아질 수 있으니 경로에 한글이 들어가지 않는 다른 디렉토리로 복사해 주세요.

다 받고 나면 터미널을 여시고 다음과 같은 명령을 실행해 주세요.

sudo apt-get purge nvidia-*

그리고 sudo 명령으로 vi나 gedit 같은 편집기를 써서 /etc/modprobe.d/blacklist.conf 파일 맨 뒤에 다음과 같은 내용을 추가해 주세요.
blacklist vga16fb
blacklist nouveau
blacklist lbm-nouveau
blacklist nvidia-173
blacklist nvidia-96
blacklist nvidia-current
blacklist nvidiafb

이제 시스템을 리부팅하고 grub에서 복구 모드(recovery mode)를 선택해서 부팅해 주세요.

그리고 나서 다음과 같은 명령을 실행시켜 주세요.
telinit 3
sudo sh devdriver_3.1_linux_64_256.40.run

이러면 메뉴가 몇 개 뜨면서 설치 과정이 진행됩니다. 깔끔하게 설치가 끝나고 나면 시스템을 리부팅해 주시면 됩니다.

자, 이제 두 번째 툴킷 설치.
이 부분이 젤 쉬워요. 그냥 다음 명령을 내리면 설치가 됩니다.
sudo sh cudatoolkit_3.1_linux_64_ubuntu9.10.run

설치 다 되고 나면 홈 디렉토리의 .bashrc 파일을 열어서 맨 뒤에 다음과 같은 두 행을 추가해 주세요.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH

이제 마지막, SDK 설치 부분이 남았습니다.
SDK 설치 자체는 별로 안 어려워요. 그냥 (이번에는 sudo 하지 말고)
sh gpucomputingsdk_3.1_linux.run
라고 쳐서 실행시키면 끝

근데 문제는 실제 GPU computing 예제들을 컴파일할 때 생깁니다.

홈 디렉토리 밑의 NVIDIA_GPU_Computing_SDK/C 디렉토리로 들어가서
make
라고 치기만 하면 여러 예제 파일이 컴파일이 돼야 하는데 실제로는 그렇게 잘 안 돼요.

몇 가지 문제가 생길 수 있는데, 우선 cannot find -lXi -lXmu -lglut 이런 에러 메시지가 나올 가능성이 높습니다. 패키지가 없는 게 좀 있어서 그런데, 다음과 같은 명령을 내리면 이 문제는 해결됩니다.
sudo apt-get install libxext-dev libxi-dev x11proto-xext-dev libice-dev libsm-dev libxt-dev libxmu-headers libxmu-dev freeglut3-dev libglut3-dev

그리고 cannot find -lGL 이런 에러가 생길 수 있는데, 이건 libGL.so라는 라이브러리 링크 파일이 잘못돼 있어서 그래요. 이 문제는 다음과 같은 명령으로 해결됩니다.
sudo rm /usr/lib/libGL.so; sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so

마지막으로, 컴파일할 때 errors in surface_functions.h 이런 에러가 나올 가능성이 높아요. 이건 g++ 4.4 버전에서 오류를 철저하게 확인하면서 생기는 문제인데, NVIDIA_GPU_Computing_SDK/C/common/common.mk 파일을 열어서 처음 등장하는 NVCCFLAGS 부분을 다음과 같이 수정하면 됩니다.

NVCCFLAGS       := --compiler-options -fpermissive

위와 같은 과정을 거치고 나면 아마 잘 될 겁니다.

혹시 나중에 그냥 nvcc로 cuda 소스코드 컴파일할 때도 errors in surface_functions.h 오류가 발생하면 명령행에서 nvcc --compiler-options -fpermissive 옵션을 주면 문제가 해결될 겁니다.

참고문헌:
http://forums.nvidia.com/index.php?showtopic=172997
http://forums.nvidia.com/index.php?s=&showtopic=171590&view=findpost&p=1080631

P.S. 별 것 아닌 내용이지만 토요일 오후, 집에서 황금같은 3-4 시간을 삽질하면서 배운 비싼 내용입니다. 나 같은 삽질을 할 사람이 얼마나 있을지 모르겠지만, 삽질한 시간이 아까워서 nvidia 포럼에도 올려야 되겠어요.

+ Recent posts