CUDA 7.5を使ってみた。
2016年7月現在、最新のCUDAは7.5。色々なプラットフォームで使えるようにインストーラが用意されている。Mac OSX用にも用意されていて、簡単にインストールできる。ただし、私の環境、OSX 10.9.5では、networkインストールは出来なかった。localインストールでは問題は無かった。ソフトウェアは、幾つかのディレクトリにインストールされる。
/usr/local/cuda
/Developer/NVIDIA
/Lirary/Frameworks/CUDA.framework
などにインストールされる。重要なのは、/usr/local/cudaで、ここにパスを通しておいた方が後々便利かもしれない。
さて、このベンチマークをするに当たって、GPUに有利な計算インテンシブな行列の積 C= A*B について計測してみる。メインプログラムは、matrix.cで、ここから関数MulABを呼ぶ。このMulABを、CUDAとCPUとそれからAVX2を用いて実装して比較してみる。それぞれの実装は、gpu.cu, cpu.c, fma.cに実装されており、これを、普通にコンパイル・リンクする。
cpu: gcc -O2 matrix.c cpu.c -o matrix_cpu
avx2: gcc -O2 matrix.c fma.c -mavx2 -o matrix_fma
gpu: /usr/local/cuda/bin/nvcc -O2 matrix.c gpu.cu -o matrix_gpuもしくは、
nvcc -O2 -c gpu.cu; g++ -O2 matrix.c gpu.o -I /Developer/NVIDIA/CUDA-7.5/samples/common/inc -L /usr/local/cuda/lib -lcudart -lcuda
リンカをgccにすると、 環境変数、LD_LIBRARY_PATH に/usr/local/cuda/libを設定する必要があるかもしれない。
これらを実行させると、
cpu: 4.657794 (sec)
fma: 2.554139 (sec) (=>これはFMAは使えていない。単なる単精度用AVX2命令が使われている)
gpu: 1.209110 (sec)
gpu版にはメインメモリからGPUボードのメモリ上への送信・受信も含まれている。これらはミリセカンドのオーダで、1.3-1.5GBpsの速度が出ている。
以上のことから、確かにGPGPUは速いと言える。が、CPU版はシングルスレッドであることを考えると、結構混沌としているかもしれない。
計算環境(iMac 2013 late 21.5inch / OSX 10.9.5 / CUDA-7.5 / Xcode 6.2)