GPU CUDA 4.2 インストール Scientific Linux / CentOS / Red Hat EL 6.2
PGIアクセラレータ™ コンパイラの使用する前に、NVIDIA社の CUDA™ 環境環境をインストールしておく必要があります。ここでは、 一例として Sceintific Linux 6.2 (RHEL/CentOS 6.2) 上に CUDA 4.2環境をインストールする手順を説明します。ここでの前提は、ハードウェアシステムの中に、NVIDIA 社の GPU が実装されていることとします。
2012年6月11日 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@photon29 ~]# lspci | grep -i nVidia (一例) 01:00.0 VGA compatible controller: nVidia Corporation GF116 [GeForce GTX 550 Ti] (rev a1) 01:00.1 Audio device: nVidia Corporation GF116 High Definition Audio Controller (rev a1) 06:00.0 VGA compatible controller: nVidia Corporation GF100 [GeForce GTX 480] (rev a3) 06:00.1 Audio device: nVidia Corporation GF100 High Definition Audio Controller (rev a1)
また、ソフトウェアでは、Linuxシステム上でNVIDIAドライバーコンポーネントをインストールしておく必要があります。 これらは、NVIDIA の Webサイト( www.nvidia.com/cuda/) からダウンロード可能です。これらは、PGIコンポーネントではありませんので、NVIDIA 社によってライセンス並びにサポートされます。さらに、最新の PGI リリースとCUDAソフトウェア、ドライバーの両方が動作する Linux システムが必要とされます。
今回は、Scientific Linux 6.2 にインストールするため、CUDA Zone で Red Hat Enterprise Linux 6.x (64bit) 用の以下のソフトウェアをダウンロードします。これらは、インストールスクリプト形式ですので、「ルート権限」でスクリプトの実行を行います。
Scientific Linux上での kernel-devel (kernel-source) 実装の確認
CUDAのドライバーをインストールする際、kernelの一部のモジュールの再構築が必要となります。この再構築は、CUDA driverのインストーラが行いますが、一般的に言う、kernel-sourceがシステム内に存在しない場合は、予め、その実装を行っておく必要があります。この目的では、kernel driver module のリビルドですので、kernelの全ソースは必要ではなく、RedHat/CentOS/Scientific Linux の場合は、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 (既に実装されている場合は、"Nothing to do "と言ったメッセージとなる 実装されていなければ、以下のようにyumがミラーサイトからダウンロードしてインストールする。
以下は、一例です。現システムのリビジョンにより、以下のバージョン番号が異なる場合があります。) Trying other mirror. (省略) Dependencies Resolved ==================================================================================== Package Arch Version Repository Size ==================================================================================== Installing: kernel-devel x86_64 kernel-devel-2.6.32-220.17.1.el6.x86_64 x.x M Transaction Summary ==================================================================================== Install 1 Package(s) Upgrade 0 Package(s) Total download size: x.x M Is this ok [y/N]: y Downloading Packages: kernel-devel-2.6.32-220.17.1.el6.x86_64 | x.x MB 01:36 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : kernel-devel 1/1 Installed: kernel-devel-2.6.32-220.17.1.el6.x86_64 Complete! kernel-develの場所を確認する。 [[root@photon29 ~]# cd /usr/src/ [root@photon29 src]# ls kernels redhat [root@photon29 src]# cd kernels/ [kato@photon29 kernels]$ ls 2.6.32-220.17.1.el6.x86_64 2.6.32-220.el6.x86_64 [root@photon29 kernels]# cd .6.32-220.17.1.el6.x86_64 [root@photon29 2.6.18-238.12.1.el5.centos.plus-x86_64]# pwd /usr/src/kernels/2.6.32-220.17.1.el6.x86_64
CUDAドライバのインストール
CUDAのドライバーは、基本的には、X display のドライバでもありますので、これをインストールする時は、X が動作していない状態で行う必要があります。Linux システムの起動では、デフォルト Run level 5 で起動されますので、X が動作しています。これを一旦、Run level 3 に戻してから CUDA のドライバのインストールを行います。実行スクリプトの引数に、--kernel-source-path でカーネルソースの場所を明示的に指定します。スクリプト実行時に、ライセンスの許諾と 32bit OpenGL のインストールを行うかどうかの問いの後、以下のような設問が出ます。CUDA ドライバーのインストールスクリプトの実行中に、Nouveauドライバーに関するエラーが出た場合は、こちらをご参照下さい。
[root@photon29 ~]# init 3 [root@photon29 tmp]# bash devdriver_4.2_linux_64_295.41.run (以下、続く)
--kernel-source-path /usr/src/kernels/2.6.32-220.17.1.el6.x86_64 Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 295.41.......... 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:270.41.19). As part of installing this driver (version: 285.05.33), the existing driver will be uninstalled. Are you sure you want to continue? ('no' will abort installation) Yes No ※古いドライバーバージョンが実装されているので、これを削除する。Yesを選択。
もし、過去に CUDA driver を実装したことが無い場合は、このメッセージは出ません。 Install NVIDIA's 32-bit compatibility OpenGL libraries? Yes No ※Yesを選択。 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: 295.41) is now complete. OK
Nouveau kernel driverが存在するために、CUDAドライバーがインストールできない場合の対処
上記のNVIDIA ドライバーをインストールする際に、システム内に既存の Nouveau ドライバーが存在しており、NVIDIA ドライバーと競合する場合、NVIDIA インストースクリプトは、以下のようなエラーを起こします。これに対する対応方法を記します。
ERROR: The Nouveau kernel driver is currently in use by your system.
This driver is incompatible with the NVIDIA driver, and
must be disabled before proceeding. Please consult the NVIDIA driver
README and your Linux distribution's documentation for details
on how to correctly disable the Nouveau kernel driver.
For some distributions, Nouveau can be disabled by adding a file
in the modprobe configuration directory. Would you like
nvidia-installer to attempt to create this modprobe file for you?
Yes No
The modprobe configuration file to disable Nouveau,
/etc/modprobe.d/nvidia-installer-disable-nouveau.conf, has been written.
For some distributions, this may be sufficient to disable Nouveau; other
distributions may require modification of the initial ramdisk.
Please reboot your system and attempt NVIDIA driver installation again.
Note if you later wish to reenable Nouveau, you will need to delete
the file /etc/modprobe.d/nvidia-installer-disable-nouveau.conf.
OK
ERROR: Installation has failed. Please see the file '/var/log/nvidia-installer.log'
for details. You may find suggestions on fixing installation problems
in the README available on the Linux driver download page at www.nvidia.com.
OK
ここで、一旦、エラーで終了する。この後、Nouveaucd driverを disable にするための作業を行う。
root権限で、以下の操作を行います。以下の例は、Red Hat 6.0(CentOS 6.0)の kernelバージョンの例を示していますが、Red Hat 5.x 系でも同じように設定して下さい。
blacklist nouveau options nouveau modeset=0
kernel /boot/vmlinuz-2.6.32-71.29.1.el6.x86_64 ro (続く)
root=UUID=0ab095d2-83b6-411c-a245-035623352cd4 rd_NO_LUKS rd_NO_LVM (続く)
rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 (続く)
crashkernel=auto rhgb rdblacklist=nouveau quiet
CUDA toolkit のインストール
CUDA tool kit をインストールします。デフォルトのインストール先は、/usr/local/cudaです。スクリプトを実行します。インストールを行うディレクトリとして、その「ルート」の場所を指定します。/usr/local/cuda にインストールしたい場合は、/usr/local のみを指定して下さい。その後の "cuda" directory は自動的に追加されます。
[root@photon29 tmp]# bash cudatoolkit_4.2.9_linux_64_rhel6.0.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のインストールは必要ありませので、ここでは省略します。任意にインストールして下さい。なお、このインストールは、ルート特権は必要なく、個々のユーザ権限でインストール可能です。
環境変数 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:/usr/local/cuda/lib:$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-2012 NVIDIA Corporation
Built on Thu_Apr__5_00:24:31_PDT_2012
Cuda compilation tools, release 4.2, V0.2.1221
[kato@photon29 ~]$ nvcc test.c
[kato@photon29 ~]$ ./a.out
hello
[kato@photon29 ~]$ ldd a.out (shared library のリンク確認)
Scientific Linux release 6.2 (Carbon)
linux-vdso.so.1 => (0x00007fffc3110000)
libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007fdcd3d00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003780200000)
libm.so.6 => /lib64/libm.so.6 (0x0000003773e00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000377de00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003773200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003773600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003773a00000)
librt.so.1 => /lib64/librt.so.1 (0x0000003774600000)
/lib64/ld-linux-x86-64.so.2 (0x0000003772e00000)
以上で、CUDA の開発環境のセットアップは終了します。
PGIコンパイラの pgaccelinfo コマンドでGPUボード情報を出力
PGIコンパイラが既にインストールされている場合は、pgaccelinfo コマンドで、実装されているNVIDIA GPUボード情報が出力できます。
[kato@photon29 GPGPU]$ pgaccelinfo CUDA Driver Version 4020 <== この番号は、NVIDIAドライバーのバージョン番号 4.2 の意味 NVRM version: NVIDIA UNIX x86_64 Kernel Module 295.41 Fri Apr 6 23:18:58 PDT 2012 Device Number: 0 Device Name: GeForce GTX 480 Device Revision Number: 2.0 Global Memory Size: 1610285056 Number of Multiprocessors: 15 Number of Cores: 480 Concurrent Copy and Execution: Yes Total Constant Memory: 65536 Total Shared Memory per Block: 49152 Registers per Block: 32768 Warp Size: 32 Maximum Threads per Block: 1024 Maximum Block Dimensions: 1024, 1024, 64 Maximum Grid Dimensions: 65535 x 65535 x 65535 Maximum Memory Pitch: 2147483647B Texture Alignment: 512B Clock Rate: 1401 MHz Execution Timeout: No Integrated Device: No Can Map Host Memory: Yes Compute Mode: default Concurrent Kernels: Yes ECC Enabled: No Memory Clock Rate: 1848 MHz Memory Bus Width: 384 bits L2 Cache Size: 786432 bytes Max Threads Per SMP: 1536 Async Engines: 1 Unified Addressing: Yes Initialization time: 40449 microseconds Current free memory: 1539301376 Upload time (4MB): 1275 microseconds ( 744 ms pinned) Download time: 1014 microseconds ( 658 ms pinned) Upload bandwidth: 3289 MB/sec (5637 MB/sec pinned) Download bandwidth: 4136 MB/sec (6374 MB/sec pinned) Device Number: 1 Device Name: GeForce GTX 550 Ti Device Revision Number: 2.1 Global Memory Size: 1072889856 Number of Multiprocessors: 4 Number of Cores: 128 Concurrent Copy and Execution: Yes Total Constant Memory: 65536 Total Shared Memory per Block: 49152 Registers per Block: 32768 Warp Size: 32 Maximum Threads per Block: 1024 Maximum Block Dimensions: 1024, 1024, 64 Maximum Grid Dimensions: 65535 x 65535 x 65535 Maximum Memory Pitch: 2147483647B Texture Alignment: 512B Clock Rate: 1800 MHz Execution Timeout: Yes Integrated Device: No Can Map Host Memory: Yes Compute Mode: default Concurrent Kernels: Yes ECC Enabled: No Memory Clock Rate: 2050 MHz Memory Bus Width: 192 bits L2 Cache Size: 393216 bytes Max Threads Per SMP: 1536 Async Engines: 1 Unified Addressing: Yes Initialization time: 40449 microseconds Current free memory: 1007214592 Upload time (4MB): 1255 microseconds ( 756 ms pinned) Download time: 988 microseconds ( 646 ms pinned) Upload bandwidth: 3342 MB/sec (5548 MB/sec pinned) Download bandwidth: 4245 MB/sec (6492 MB/sec pinned)