2012년 3월 8일 목요일

주분투(우분투) 리눅스에서 CUDA 환경 설정하기.

간단한 CUDA 컴파일 테스트를 하여 정상적으로 동작하는 필자의 현재 환경은 다음과 같다.

- xubuntu 11.10 64bit
- Nvidia 그래픽 드라이버 설치 (듀얼모니터 이용중)
- CUDA 툴킷 4.1 (ubuntu 11.04 64bit 용 )
- gcc 4.4.6
- g++ 4.4.6

CUDA 환경 설치에 앞서 자신의 그래픽 카드가 CUDA를 지원하는지 확인한다.

CUDA를 지원한다면 nvidia의 그래픽 카드를 설치한다.

그래픽카드 드라이버를 정상적으로 설치했다면, CUDA 툴킷을 다운로드받는다.
(위의 링크 또는 nvidia developer zone에서 받으면 된다.)

다운받은 파일의 확장명은 'run'인데 설치는 터미널에서 sh명령어를 이용하면 된다.
    'sh cudatoolkit_4.1.28_linux_64_ubuntu11.04.run'
    (당연히 root 권한이 있어야한다.)
설치하는 과정에서 path를 몇번인가 물을텐데 그냥 enter를 누르면 된다.
(대부분의 경우 default path가 좋다.)

설치를 완료하면 컴파일러를 좀더 쉽게 이용하기 위해 bash 스크립트를 수정한다.
    vi ~/.bashrc
맨 아랫줄에 다음을 입력
    export PATH
    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/lib64:$LD_LIBRARY_PATH
파일을 저장하고 빠져나와 다음을 입력
    source .bashrc
다음 명령어를 입력하여 path 설정이 올바르게 됬는지 확인.
    'nvcc --version'
nvcc의 버전이 올바르게 나온다면 제대로 된 것임.

샘플코드를 이용하여 컴파일 해 봄으로써 nvcc를 알게되겠지만
대부분의 리눅스 배포판은 gcc와 g++의 최신에 가까운 버전을 탑재하여
nvcc를 이용할 수 없게 된다. (4.4 대의 버전을 요구한다.)
gcc와 g++의 4.4 버전의 설치는 다음 명령어를 이용한다.
    sudo apt-get install gcc-4.4 g++-4.4
정상설치되면 현재 시스템에는 두가지 버전의 gcc와 g++이 존재하게 된다.
gcc와 g++의 링크를 수정함으로써 4.4버전을 default로 이용하게 한다.
    rm /usr/bin/gcc

    rm /usr/bin/g++
    ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
    ln -s /usr/bin/g++-4.4 /usr/bin/g++

이제 모든 환경 설정은 끝났다.
샘플코드를 컴파일하면 정상적으로 완료될것이다.

CUDA를 이용한 코드는 확장명이 *.cu
컴파일은 gcc가 아닌 nvcc를 이용하면 된다.
    'nvcc hello_cuda.cu'

========================================

<<추가내용>>

위의 과정을 모두 마친 후 테스트를 해보니 컴파일은 정상적으로 이루어지지만 CUDA API를 이용한 프로그램을 돌릴경우에는 '디바이스 드라이버'가 적합하지 않다는 오류가 뜨게 된다.

이를 해결하기 위해서는 cuda_zone에서 제공하는 드라이버를 다운받아서 설치해야하는데 이 과정을 추가로 설명하겠다.

다운로드 받은 드라이버를 설치하려 'sh 파일명' 명령어를 입력하면 X-window가 실행중이라 드라이버를 설치할수 없다는 error 메시지가 뜰것이다. 이를 해결하기 위해서는 콘솔모드로 재부팅을 해야하는데 아래의 과정을 따르면 된다.

 - 'vi /etc/default/grub'
 - GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 의 내용을
   GRUB_CMDLINE_LINUX_DEFAULT="text"로 변경
                     또는
   #GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
   GRUB_CMDLINE_LINUX_DEFAULT="text" 와 같이 하고 바로위줄을 주석처리 한다.
 - 저장 후 닫기
 - 'update-grub' 명령어를 이용해 부트 프로시저 변경
 - 'reboot'

위의 과정대로 재부팅을 하면 콘솔모드로 부팅이되며, ID와 패스워드를 요구할 것이다.

이제 드라이버를 설치해야 하는데, 한가지 주의할점은 "드라이버를 홈폴더 바로 아래에 저장해놓고 시작해야한다"는 것이다. 기본적으로 콘솔모드에서는 한글을 이용할 수 없기 때문에 '다운로드', '바탕화면' 등의 폴더명이 이상하게 보여 접근할 수 없게되기 때문이다.

콘솔모드에서 정상적으로 로그인했다면 gcc의 버전을 4.4에서 4.6으로 바꿔주는 작업을 다시해야한다. 이 과정은 디바이스 드라이버를 모듈로 컴파일하는 과정에서 커널을 컴파일한 gcc의 버전과 다름으로써 발생하는 문제를 차단하기 위해서 필요하다.
/usr/bin 디렉토리의 링크 gcc와 g++을 삭제하고 4.6으로 다시 만든다.(위의 내용 참조)

여기까지 모두 따라왔다면 다음 명령어를 통해 드라이버를 설치할 수 있을것이다.
    sh ~/NVIDIA-Linux-XXXXX.run

드라이버가 정상적으로 설치되었다면 다시 X-window로 부팅해야하는데 이 과정은
/etc/default/grub에서 했던 과정을 역으로 하면된다. (복사한 라인을 지우고, 주석처리한것을 해제 -->  update-grub)

이제 재부팅하여 nvcc를 이용해 컴파일한 프로그램을 실행하면 정상동작 하는것을 확인할 수 있을것이다.

댓글 없음:

댓글 쓰기