CUDA †
Debian(squeeze) に CUDA 5.0 を導入して動かしてみました。
CUDA について †
- CUDA とは
NVIDIAが提供するGPU向けのC言語の統合開発環境(cf. Wikipedia)
- CUDA 用語
GPU | Graphical Processing Unit | |
GPGPU | General-Purpose Graphical Processing Unit | 汎用的な計算に用いるGPU |
| | |
SP | Streaming Processor | 演算装置。今では これを CUDAコア と呼ぶ。 |
MP | Multi-Processors | 次のSMと同じ (?) |
SM | Streaming Multiprocessor | チップ上に置かれた演算部。内部にいくつもの SP がある。Kepler 以降はSMXと呼ばれる(後述)。 |
GPC | Graphics Processing Cluster | SMX 2基をまとめたもの。 |
| | |
Fermi | | ひとつ前の世代 の GPU。SM 中の SP は 32個(16グループx2個)。 |
Kepler | | 最新の世代 の GPU。 SMは SMX と呼ばれるようになり、その中のCUDAコア数は 192個(16グループx12個)。 |
- CUDA でできること
- CUDA が利用できるGPUs
- CUDA に似たプロジェクト
- OpenCL
私の理解では、CUDAと同様にコンパイラを含んだ SDK(ソフトウエア開発キット)である。
CUDA が nVIDIA の GPU に特化しているのに対して、OpenCL は異なるハードウエアの混在を意識しているようである。
実際の SDK には様々な種類があるらしい。
(cf. Wikipedia)
- OpenMP
私の理解では、コンパイラとは別にライブラリとして整備したものである。
プログラム中に「ディレクティブ」を挿入することで、並列環境でも非並列環境でも動作するプログラムとして書けるのが特徴。
(cf. Wikipedia)
- MPI(Message Passing Interface)
OpenMP と同様にライブラリとして並列処理を整備したもの。個人的にはずっと以前から名前は知っていた。
具体的なライブラリは、Open MPI とか MPICH とかがある。
(cf. Wikipedia)
ハードウエアの装着 †
- 購入したもの
玄人志向 グラフィックボード GeForce GTX660 2GB OCモデル PCI-E デュアルファン GF-GTX660-E2GHD/DF/OC/A(価格COM)
- 情報
ベースとなるコア | GK106 |
Total amount of global memory: | 2048 MBytes (2147287040 bytes) |
( 5) Multiprocessors x (192) CUDA Cores/MP: | 960 CUDA Cores |
GPU Clock rate: | 1072 MHz (1.07 GHz) |
Memory Clock rate: | 3004 Mhz |
Memory Bus Width: | 192-bit |
- 理論性能
cf. Nordic Hardware
・単精度 | 1クロックで CUDA コアあたり 最大2演算できる(ただし制約は大きい)。 | → 2.054 TFLOPS | (2054 GFLOPS) |
・倍精度 | 1クロックで SMX あたり最大16演算できる(ただし制約は大きい)。 | → 0.086 TFLOPS | (86GFLOPS) |
- 取り付け時の注意
- PCIExpress x16 のポートの他に、もう一枚分のスペースを使うことになる。
- マザーボードに挿した上で、別途、グラフィックボードに電源を供給する必要がある。
起動時に BIOS を設定し、マザーボードのグラフィックスボードを利用するようにし、
取り付けたグラフィックカードを利用しないようにする。
むしろ、グラフィックカードとして使用しないとサンプルプログラムのいくつかは動かない!
開発環境(ソフトウエア)の整備 †
- 参考URL
- Masteries
- ぬうぱんの備忘録とか
これを見ると、CUDA 5 (Ubuntu11.10用) は現行の Debian ではうまくいかないようである。
そこで、Ubuntu10.04用を試すことにする。
- ダウンロード
- ドライバの導入スクリプトの実行
- root で bash NVIDIA-Linux-x86_64-310.32.run
- DKMS(Dynamic Kernel Module Support)を Yes にするとうまくいかなかった。No にする。
- CUDA本体の導入スクリプトの実行
- root で bash cuda_5.0.35_linux_64_ubuntu10.04-1.run
- 指示に従って処理する。
・グラフィックドライバは導入しないつもりだった。しかし、そうするとサンプルプログラムがコンパイルできない。
→ sudo cuda_5.0.35_linux_64_ubuntu10.04-1.run -silent -driver でドライバだけインストールするように指示されるが、うまく導入できない。
→ そこで前述のドライバを別途導入した。
- 確認
サンプルプログラムのページで make してうまくいけばよい。
ちなみに、サンプルプログラム matrixMulCUBLAS を実行すると、487 GFlops 程度
また、サンプルプログラムで描画するものは、むしろ nVIDIA GPU をグラフィックボードにしないと機能しないことがわかった。