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)

FaLang translation system by Faboba