CUDA™ 3.0開発環境をインストールする (Linux版)

対象 GPU CUDA 3.0 インストール CentOS 5.4

 PGIアクセラレータ™ コンパイラの使用する前に、NVIDIA社の CUDA™ 環境環境をインストールしておく必要があります。ここでは、 一例として CentOS 5.4上に CUDA 3.0環境をインストールする手順を説明します。ここでの前提は、ハードウェアシステムの中に、NVIDIA社の GPU が実装されていることとします。
2010年4月27日 Copyright © 株式会社ソフテック 加藤

必要とするハードウェア、ソフトウェア環境

 PGIアクセラレータ™ コンパイラを使用するためには、NVIDIA社の CUDA-enable な GeForce、Quadro、Tesla カードを有した CUDA ソフトウェアがインストールされたシステムが必要です。サポートされる GPU の詳細なリストは、NVIDIA の ウェブサイトでご覧下さい。www.nvidia.com/object/cuda_learn_products_jp.html
なお、現在、Linuxシステム(Red Hat/ CentOS /Fedora) に搭載している GPU ボードの型番を調べたい場合は、以下のコマンドを使用します。

[root@photon28 ~]# lspci | grep -i nVidia
04:00.0 VGA compatible controller: nVidia Corporation GT200 [GeForce GTX 280] (rev a1)
06:00.0 VGA compatible controller: nVidia Corporation GT200b [GeForce GTX 285] (rev a1)

 また、ソフトウェアでは、Linuxシステム上でNVIDIAドライバーコンポーネントをインストールしておく必要があります。 これらは、NVIDIA の Webサイト( www.nvidia.com/cuda/) からダウンロード可能です。これらは、PGIコンポーネントではありませんので、NVIDIA 社によってライセンス並びにサポートされます。さらに、最新の PGI リリースとCUDAソフトウェア、ドライバーの両方が動作する Linux システムが必要とされます。

  • NVIDIA Driver
  • CUDA Toolkit
  • GPU Computing SDK code samples

CUDA ソフトウェアのインストール

 今回は、CentOS 5.4 にインストールするため、CUDA Zone で Red Hat Enterprise Linux 5.3 用の以下のソフトウェアをダウンロードします。これらは、インストールスクリプト形式ですので、「ルート権限」でスクリプトの実行を行います。

  • devdriver_3.0_linux_64_195.36.15.run(この時点で最新ドライバー)
  • cudatoolkit_3.0_linux_64_rhel5.3.run
  • gpucomputingsdk_3.0_linux.run (任意でインストールする。今回は実装しない)

CentOS上での kernel-devel (kernel-source) 実装の確認

 CUDAのドライバーをインストールする際、kernelの一部のモジュールの再構築が必要となります。この再構築は、CUDA driverのインストーラが行いますが、一般的に言う、kernel-sourceがシステム内に存在しない場合は、予め、その実装を行っておく必要があります。この目的では、kernel driver module のリビルドですので、kernelの全ソースは必要ではなく、RedHat/CentOSの場合は、kernel-devel の実装だけでよいです。以下のように yum ユーティリティを使用して、kernel-devel をシステムに実装します。yum については、この FAQ 記事でもその使用法を紹介しています。特に、/etc/yum.conf ファイルの中に、組織のPROXY Serverを定義することを忘れないようにして下さい。
(一例)PROXY=http://proxy.softek.co.jp:3333/)

 参考 http://wiki.centos.org/HowTos/I_need_the_Kernel_Source

[root@photon29 ~]# yum install kernel-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.oss.eznetsols.org
 * base: ftp.oss.eznetsols.org
 * centosplus: ftp.oss.eznetsols.org
 * contrib: ftp.oss.eznetsols.org
 * extras: ftp.oss.eznetsols.org
 * updates: ftp.oss.eznetsols.org
Trying other mirror.
Setting up Install Process
Package kernel-devel-2.6.18-164.9.1.el5.centos.plus.x86_64 already installed 
and latest version
Nothing to do 
(既に実装されている場合は、"Nothing to do "と言ったメッセージとなる。
実装されていなければ、以下のようにyumがミラーサイトからダウンロードしてインストールする。

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.oss.eznetsols.org
 * base: ftp.oss.eznetsols.org
 * centosplus: ftp.oss.eznetsols.org
 * contrib: ftp.oss.eznetsols.org
 * extras: ftp.oss.eznetsols.org
 * updates: ftp.oss.eznetsols.org
file:///media/CentOS_5.4_Final/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 
そのようなファイルやディレクトリはありません: 
'/media/CentOS_5.4_Final/repodata/repomd.xml'
Trying other mirror.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package kernel-devel.x86_64 0:2.6.18-164.15.1.el5.centos.plus set to be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================
 Package                     Arch                  Version                             
======================================================================================
Installing:
 kernel-devel                x86_64                2.6.18-164.15.1.el5.centos.plus    
Transaction Summary
======================================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 5.3 M
Is this ok [y/N]: y
Downloading Packages:
kernel-devel-2.6.18-164.15.1.el5.centos.plus.x86_64.rpm      | 5.3 MB     00:37
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : kernel-devel                                                                                                  1/1

Installed:
  kernel-devel.x86_64 0:2.6.18-164.15.1.el5.centos.plus

Complete!

kernel-develの場所を確認する。

[root@photon29 tmp]# cd /usr/src/
[root@photon29 src]# ls
kernels  redhat
[root@photon29 src]# cd kernels/
[root@photon29 kernels]# ls
2.6.18-164.15.1.el5.centos.plus-x86_64  2.6.18-164.9.1.el5.centos.plus-x86_64
[root@photon29 kernels]# cd 2.6.18-164.15.1.el5.centos.plus-x86_64
[root@photon29 2.6.18-164.15.1.el5.centos.plus-x86_64]# pwd
/usr/src/kernels/2.6.18-164.15.1.el5.centos.plus-x86_64

CUDAドライバのインストール

 CUDAのドライバーは、基本的には、X display のドライバでもありますので、これをインストールする時は、X が動作していない状態で行う必要があります。Linux システムの起動では、デフォルト Run level 5 で起動されますので、Xが動作しています。これを一旦、Run level 3 に戻してから CUDA のドライバのインストールを行います。s実行スクリプトの引数に、--kernel-source-path でカーネルソースの場所を明示的に指定します。スクリプト実行時に、ライセンスの許諾と 32bit OpenGL のインストールを行うかどうかの問いの後、以下のような設問が出ます。

[root@photon29 ~]# init 3

[root@photon29 tmp]# bash devdriver_3.0_linux_64_195.36.15.run (以下に続く)
--kernel-source-path /usr/src/kernels/2.6.18-164.15.1.el5.centos.plus-x86_64
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 195.36.15..........

 Please read the following LICENSE and then select either "Accept" to accept the license 
 and continue with the installation, or  select "Do Not Accept" to abort the installation.

                      Accept                     Do Not Accept
※ Accept を選択
(中略)
There appears to already be a driver installed on your system (version: 190.18).  
As part of installing this driver (version:  195.36.15), the existing driver will be 
uninstalled.  Are you sure you want to continue? ('no' will abort installation)

                      Yes           No
※古いドライバーバージョンが実装されているので、これを削除する。Yesを選択。 

Install NVIDIA's 32-bit compatibility OpenGL libraries?

                      Yes           No
※Yesを選択。その後、warning メッセージを出してから、以下に続く。                                                                                                                
                                                          
Would you like to run the nvidia-xconfig utility to automatically update your 
X configuration file so that the NVIDIA X driver will be used when you restart X?  
Any pre-existing X configuration file will be backed up.

                       Yes           No
※Yesを選択 
Your X configuration file has been successfully updated.  Installation of the NVIDIA
Accelerated Graphics Driver for Linux-x86_64  (version: 195.36.15) is now complete.

                              OK 

CUDA toolkit のインストール

 CUDA tool kit をインストールします。デフォルトのインストール先は、/usr/local/cudaです。スクリプトを実行します。インストールを行うディレクトリとして、その「ルート」の場所を指定します。/usr/local/cuda にインストールしたい場合は、/usr/local のみを指定して下さい。その後の "cuda" directory は自動的に追加されます。

[root@photon29 tmp]# bash cudatoolkit_3.0_linux_64_rhel5.3.run
------
(中略)
Enter install path (default /usr/local/cuda, '/cuda' will be appended): /usr/local
A previous version of CUDA was found in /usr/local/cuda/bin (古いバージョンが残っている)
Would you like to uninstall? (yes/no/abort): yes (削除する)
(中略)
* Please read the release notes in /usr/local/cuda/doc/
* To uninstall CUDA, delete /usr/local/cuda
* Installation Complete

GPU Computing SDK code samples のインストール

 PGIコンパイラを使用する場合は、GPU Computing SDK code samplesのインストールは必要ありませので、ここでは省略します。任意にインストールして下さい。なお、このインストールは、ルート特権は必要なく、個々のユーザ権限でインストール可能です。

CUDAインストール後の Linux 設定

環境変数 PATH と LD_LIBRARY_PATH

 この環境変数の設定は、PGIコンパイラを使用するだけであるのであれば、必須ではありません。CUDA Tool Kit 内の cudaprof 等の utility を使用する場合や、CUDA C言語を使用する場合は必要ですので、予め設定しておいた方が無難でしょう。CUDAソフトウェアの置かれている場所とCUDA shared library の場所を指定するため、以下の環境変数の設定を $HOME/.bashrc 等の起動 rc ファイルに定義します。ここでは、個々のユーザ id 環境下の .bashrc に設定することにします。CUDA 2.3 以降は、/usr/local/cuda/lib と /usr/local/cuda/lib64 が存在します。64ビットの Linux の場合は、LD_LIBRARY_PATHは、/usr/local/cuda/lib64を指定します

 【64ビットLinux】LD_LIBRARY_PATH=/usr/local/cuda/lib64
 【32ビットLinux】LD_LIBRARY_PATH=/usr/local/cuda/lib

[kato@photon29 tmp]# cd 
[kato@photon29 etc]# vi .bashrc
(前略)
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
:wq
[root@photon29 etc]# 

CUDAコマンドの実行検証

 設定した PATH 環境変数等が反映された別の端末セッションを開き、CUDAコマンドを実行してみます。

[kato@photon29 ~]$ which nvcc
 /usr/local/cuda/bin/nvcc

(テストプログラム作成)
[kato@photon29 ~]$ vi test.c
main()
{printf("hello\n");}
:wq

[kato@photon29 ~]$ nvcc -V (nvcc コンパイラのバージョン確認)
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2009 NVIDIA Corporation
Built on Fri_Feb_19_19:12:59_PST_2010
Cuda compilation tools, release 3.0, V0.2.1221

[kato@photon29 ~]$ nvcc test.c
 hello.c: In function 'main':
 hello.c:2: warning: incompatible implicit declaration of built-in function 'printf'
 
[kato@photon29 ~]$ ./a.out
 hello
[kato@photon29 ~]$ ldd a.out (shared library のリンク確認)
        libcudart.so.3 => /usr/local/cuda/lib64/libcudart.so.3 (0x00002b5032964000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003e53a00000)
        libm.so.6 => /lib64/libm.so.6 (0x0000003e42000000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003e52e00000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003e41c00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003e42400000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003e42800000)
        librt.so.1 => /lib64/librt.so.1 (0x0000003e42c00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003e40c00000)

 以上で、CUDA の開発環境のセットアップは終了します。

PGIコンパイラの pgaccelinfo コマンドでGPUボード情報を出力

 PGIコンパイラが既にインストールされている場合は、pgaccelinfo コマンドで、実装されているNVIDIA GPUボード情報が出力できます。

[kato@photon29 GPGPU]$ pgaccelinfo
CUDA Driver Version            3000  <== この番号は、NVIDIAドライバーのバージョン番号 3.0の意味

Device Number:                 0
Device Name:                   GeForce GTX 280
Device Revision Number:        1.3
Global Memory Size:            1073545216
Number of Multiprocessors:     30
Number of Cores:               240
Concurrent Copy and Execution: Yes
Total Constant Memory:         65536
Total Shared Memory per Block: 16384
Registers per Block:           16384
Warp Size:                     32
Maximum Threads per Block:     512
Maximum Block Dimensions:      512, 512, 64
Maximum Grid Dimensions:       65535 x 65535 x 1
Maximum Memory Pitch:          2147483647B
Texture Alignment              256B
Clock Rate:                    1296 MHz
Initialization time:           3809456 microseconds
Current free memory            1035079424
Upload time (4MB)               905 microseconds ( 719 ms pinned)
Download time                  1136 microseconds ( 742 ms pinned)
Upload bandwidth               4634 MB/sec (5833 MB/sec pinned)
Download bandwidth             3692 MB/sec (5652 MB/sec pinned)

Device Number:                 1
Device Name:                   GeForce GTX 285
Device Revision Number:        1.3
Global Memory Size:            1073020928
Number of Multiprocessors:     30
Number of Cores:               240
Concurrent Copy and Execution: Yes
Total Constant Memory:         65536
Total Shared Memory per Block: 16384
Registers per Block:           16384
Warp Size:                     32
Maximum Threads per Block:     512
Maximum Block Dimensions:      512, 512, 64
Maximum Grid Dimensions:       65535 x 65535 x 1
Maximum Memory Pitch:          2147483647B
Texture Alignment              256B
Clock Rate:                    1476 MHz
Initialization time:           3809456 microseconds
Current free memory            1034555136
Upload time (4MB)               851 microseconds ( 717 ms pinned)
Download time                  1031 microseconds ( 740 ms pinned)
Upload bandwidth               4928 MB/sec (5849 MB/sec pinned)
Download bandwidth             4068 MB/sec (5667 MB/sec pinned)
PGI GPU 用コンパイラ情報サイト