NVBLASを試してみた

nvblas
CUDA 7.0の正式版がリリースされていたので、インストールを行いました。また、以前から気になっていたNVBLASを試してみました。

スポンサーリンク

NVBLAS

NVBLASは、BLAS(Basic Linear Algebra Subprograms)の一部の関数をGPUで実施するドロップインライブラリです。特にLinuxでは、環境変数LD_PRELOADに使用するライブラリを指定することで、プログラムの再コンパイルを行うことなく、ライブラリの変更を行うことができます。

性能比較

BLASのGPU実装(NVBLAS)とCPU実装(ATLASとOpenBLAS)のDGEMM関数の処理時間とFLOPS換算値を比較してみました。処理時間の計測とFLOPSの換算には、GNU Octaveの下記のスクリプト(dgemm.m)を用いました。

N=4000;
A=rand(N,N);
B=rand(N,N);
start=clock();
C=A*B;
elapsedTime=etime(clock(),start)
GFLOPS=2*N^3/(elapsedTime*1e+9)

BLASのCPU実装:ATLASの場合

$ LD_PRELOAD=/usr/lib/libatlas.so octave dgemm.m

結果は、1.8128秒、70.610GFLOPSでした。

BLASのCPU実装:OpenBLASの場合

$ LD_PRELOAD=/usr/lib/libopenblas.so octave dgemm.m

結果は、1.8150秒、70.525GFLOPSでした。

BLASのGPU実装:NVBLASの場合

$ LD_PRELOAD=libnvblas.so octave dgemm.m

結果は、0.93848秒、136.39GFLOPSでした。

まとめ

BLASのGPU実装であるNVBLASは、136GFLOPS(理論性能値の56%位)なので、今回のスクリプトのような大きな行列であれば、”試して見る価値がある”という印象です。一方、BLASのCPU実装であるATLASとOpenBLASは、理論値の92%位の性能が出ています。ところで、BLASのCPU実装は、ATLASよりもOpenBLASの方が早い印象があったのですが、DGEMM関数に関しては、ほとんど差が出ていません。