11. 環境の確認
deviceQuery を実行し、CUDA が利用可能か確認する
※ GPU が対応していない、認識されない場合は以下の Device の箇所が
Device 0: "Device Emulation (CPU)"
と表示される。
以下に主要な情報について記載する
[yuhsaku@localhost release]$ ./deviceQuery
CUDA Device Query (Runtime API) version (CUDART static linking)
There is 1 device supporting CUDA
Device 0: "GeForce 9800 GT"
CUDA Driver Version: 2.30
CUDA Runtime Version: 2.30
CUDA Capability Major revision number: 1
CUDA Capability Minor revision number: 1
Total amount of global memory: 1073020928 bytes ←グローバルメモリ
Number of multiprocessors: 14
Number of cores: 112 ←コア数
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes ←ブロック別の shared メモリ
Total number of registers available per block: 8192
Warp size: 32
Maximum number of threads per block: 512 ←1 ブ ロ ッ ク 内 に 設 定 で き る
thread 数
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 262144 bytes
Texture alignment: 256 bytes
Clock rate: 1.35 GHz ←クロック
Concurrent copy and execution: Yes
Run time limit on kernels: No
Integrated: No
Support host page-locked memory mapping: No
Compute mode: Default (multiple host threads can use this device simultaneously)
11
12. 演算パフォーマンス
行列同士を積算させるプログラムをコンパイルして実行を行い検証する。
環境:CentOS5.4, Corei3、 mem4G, GeForce 9800GT
※ サンプルコードは別途参照
※CPU での処理はシングルスレッドのため、1 コアしか利用していない
512*512 の行列同士の積算
処理方法 計算時間(sec) 計算結果
CUDA(GPU) 0.005285024642944335937500000000 17614889811968.000000
CPU 0.988089084625244140625000000000 17614889811968.000000
1024*1024 の行列同士の演算
処理方法 計算時間(sec) 計算結果
CUDA(GPU) 0.032414913177490234375000000000 563314824314880.000000
CPU 32.760878086090087890625000000000 563314824314880.000000
2048*2048 の行列同士の演算
処理方法 計算時間(sec) 計算結果
CUDA(GPU) 0.254090070724487304687500000000 18020237517520896.000000
CPU 279.387372016906738281250000000000 18020239665004544.000000
512*512 1 02 4*102 4 2 04 8*20 48
1.
05 35 30 0
1
0.
95
0.9 30
25 0
0.
85
0.8
0.
75 25
0.7 20 0
0.
65
0.6 20
0.
55
512*512 10 24 *10 24 15 0 20 48 *2 04 8
0.5
0.
45 15
0.4
0.
35 10 0
0.3 10
0.
25
0.2
50
0.
15 5
0.1
0.
05
0 0 0
C U D A (G P U ) CPU C UD A(G PU ) CP U CU DA (GP U) C PU
※あまりに差が開きすぎて 1024 行列積算以降は棒グラフには表示されず。
上記実行結果から今回利用している GPU の場合は 100 倍〰 200 倍の性能が出ていることが
わかる。
12
13. 考察
今回は NVIDIA から提供されている CUDA を利用した。
今後は ATI から提供されている ATI Stream などもあることから、統合フレームワークの
OpenCL を利用した開発が効率的かと思われる。
基本的には演算処理を文字通り桁違いに速くできる(並列化できる)ので、大量の計算処理が
必要な R&D 向きかと思われる。
実際、NVIDIA(CUDA)の採用事例としても物理シミュレーションから石油・ガス探査、製
品設計、医療用画像などが挙げられている。
しかし、今回の検証で得られたことは
・ 並列処理を意識したプログラミングスキルを習得することによって個人でも新た
な可能性を生み出すことができる。
・ 「演算のみ速くできても、(フロントエンドとしての) Web サービスでは利用シー
ンがない」ではなく「常識を覆すほどの演算能力を手に入れることにより、常識を覆
す Web サービスを作ることができる可能性がある」ということを意識できる。
という点になる。
13