QPBLAS-GPU

4倍精度基本線形代数ルーチン群
QPBLASの紹介
[index]
1.  Introduction
2.  Double-double algorithm
3.  QPBLAS
4.  QPBLAS-GPU
5.  Summary
○佐々 成正1,
山田 進1, 町田 昌彦1, 今村 俊幸2, 奥田 洋司3
1日本原子力研究開発機構 システム計算科学センター 1
2 理科学研究所 計算科学研究機構 3 東京大学 新領域創成科学研究科
1. Introduction
はじめに
「京」コンピュータのような超大規模な並列計算機が
一般ユーザでも利用できる環境
大規模並列計算機の性能をフルに利用する
ため、シミュレーション手法の大規模化
演算回数が増大するため、本来無限桁である実数を有限桁で
打ち切って計算することによる誤差の累積の影響が大きくなる
倍精度演算では有効な精度の結果が得られない可能性あり
地球シミュレータで375,000次元の行列の全固有値・固有ベクトルを直接法で計算
精度は数ケタ (SC06、Yamada et. al.)
4倍精度化の方法
[対応策 → 多倍長(4倍精度)計算]
•  real*16変数を利用
計算時間がかかるため
実用的でない
•  多倍長計算用のライブラリ
•  Baileyのdouble-doubleアルゴリズム
2つの倍精度実数(real*8)を組み合わせることで4倍精度演算を実現
倍精度演算の組み合わせなので高速に計算可能
a=a.hi+a.lo
a.hi : 上位データ、 a.lo : 下位データ
倍精度の仮数部は52bitで表現しているため、この方法だと104bitで表現
(real*16の場合仮数部は112bit)
2. double-double algorithm
※2つの倍精度実数(real*8)を組み合わせて4倍精度演算を実現
・double-double型実数
a ← (aH,aL)
aH:上位データ(real*8), aL:下位データ(real*8)
52bit(仮数部)
52bit(仮数部)
104bit(仮数部)
〜[10進約32桁]
112bit(仮数部)
〜[10進約34桁]
・REAL*16型実数
[Baileyの4倍精度演算アルゴリズム]
Daileyの4倍精度演算アルゴリズム
Baileyのdouble-double
アルゴリズムによる加算 C=A+B
Baileyのdouble-double
アルゴリズムによる乗算 C=A*B
11回の演算で実現可能
24回の演算で実現可能
※コンパイラの最適化で、
計算順序変更不可
134217729(= 227+1)
上位26bit, 下位26bitのデータに分割する際に利用
3. 4倍精度化BLAS
BLAS (Basic Linear Algebra Subprograms)
線形基本演算のルーチン群 (40個)
double-doubleアルゴリズムで4倍精度化
QPBLAS
(Quadrature Precision Basic Linear Algebra Subprograms)
倍精度版[ルーチン名の接頭辞にdをつけて倍精度を表現]
call dgemm( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LCD)
4倍精度版[ルーチン名の接頭辞にddをつけて4倍精度を表現]
call ddgemm( TRANSA, TRANSB, M, N, K, ALPHAH, ALPHAL, AH, AL, LDA,
BH, BL, LDB, BETAH, BETAL, CH, CL , LCD)
(*H : 4倍精度の上位データ 、 *L : 4倍精度の下位データ)
QPBLASの性能評価
3.1 QPBLASの性能評価
※DDDOT (内積)、DDGEMV(行列ベクトル積)、DDGEMM(行列行列積)
の性能評価
使用する計算機
•  Intel/ Windows
Processor : Intel Core 2 Duo E8400 (3.0GHz) OS : Windows XP Professional Compiler : Intel Fortran 10.0 IA32
•  AMD/ Linux
Processor : Dual Core AMD Opteron Processor 2800 (2.4GHz) OS : Cent OS 4.4 Compiler : gfortran 4.1.0
3.1 DDDOTおよびDDGEMVの性能評価
・ DDDOT(内積計算)
[α ← x y]
計算時間は次元サイズ
に比例
計算時間(秒)
T
AMDの方が若干早い
0.14
0.12
0.10
0.08
0.06
0.04
0.02
0.00
0
Intel O0
Intel O2
Intel O3
AMD O0
AMD O2
AMD O3
200000 400000 600000 800000 1000000
・ DDGEMV(行列ベクトル積) 配列次元
TRANS=‘N’
計算時間は次元サイズ
の2乗に比例
最適化をしたIntelが早い
計算時間(秒)
[y ← α Ax + β y]
0.6
0.5
0.4
0.3
0.2
0.1
0
0
Intel O0
Intel O2
Intel O3
500
AMD O0
AMD O2
AMD O3
1000
配列次元
1500
2000
3.1 DDGEMMの性能評価
[C ← α AB + β C]
Intel O0
Intel O2
Intel O3
TRANSA=‘N’,TRANSB=‘N’
AMD O0
AMD O2
AMD O3
計算時間は次元サイズ
の3乗に比例
Intelの方が早い
500
1000
配列次元
1500
2000
・ DGEMMとDDGEMMの性能比較
計算時間の増加率
計算時間(秒)
140
120
100
80
60
40
20
0
0
・ DDGEMM(行列行列積)
(DDGEMMの計算時間/DGEMの計算時間)
最適化 O2,O3(Intel) DGEMMとDDGEMMの計算時間比
は最大10倍程度
30
25
20
15
10
5
0
10
250
750
1250
配列次元
1750
3.2 QPBLASの公開HP
※QPBLASの公開HP
http://ccse.jaea.go.jp/ja/download/qpblas.html
ライセンス オープンソース(2条項BSDライセンス)
[subrou^nes] Level 1
Level 2
ddswap
ddscal
ddcopy
ddaxpy
dddot
ddnorm2
ddsum
ddidmax
ddrot
ddrotg
ddrotm
ddrotmg
ddzdotc
ddzdotu
ddgemv
ddsymv
ddtrmv
ddtrsv
ddsyr
ddsyr2
ddgbmv
ddger
ddsmbv
ddtbmv
ddtbsv
ddzgerc
ddzgeru
ddzhbmv
ddzhemv
ddzher
ddzher2
Level 3
ddgemm
ddsymm
ddsyr2k
ddsyrk
ddtrmm
ddtrsm
ddzhemm
ddzher2k
ddzherk
4. QPBLAS-GPU
BLAS (Basic Linear Algebra Subprograms)
線形基本演算のルーチン群 (40個)
double-doubleアルゴリズムで4倍精度化
CUDA4.0でGPGPU用に実装
QPBLAS-GPU
(Quadrature Precision Basic Linear
Algebra Subprograms on GPUs)
倍精度版[ルーチン名の接頭辞にdをつけて倍精度を表現]
call dgemm( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LCD)
GPU4倍精度版[ルーチン名の接頭辞にgddをつけて4倍精度を表現]
call gddgemm( TRANSA, TRANSB, M, N, K, ALPHAH, ALPHAL, AH, AL, LDA,
BH, BL, LDB, BETAH, BETAL, CH, CL , LCD)
(*H : 4倍精度の上位データ 、 *L : 4倍精度の下位データ)
QPBLASの性能評価
4.1 QPBLAS-GPUの性能評価
※DDDOT (内積)、DDGEMV(行列ベクトル積)、DDGEMM(行列行列積)
の性能評価
計算機環境
•  Intel/ Linux
Processor : Intel Xeon W3565 (3.2GHz)
GPU : Tesla C2075(448core, 1.15GHz)
OS : RedHat 4.1.2
Fortran Compiler : gfortran 4.1.2
C Compiler : gcc 4.1.2
GPGPU開発環境 : CUDA4.0
※計算時間測定は純粋なGPUの計算時間ではなく、ホストメモリー デバイスメモリ間の転送時間等を含んだもの
T
[
α
←
x
y]
4.1 GDDDOTの性能評価
1.0E+00
C PU
G PU
計算時間 (sec)
1.0E-01
1.0E-02
1.0E-03
1.0E-04
1.0E-05
1.0E-06
1.0E+03
1.0E+04
1.0E+05
データサイズ
1.0E+06
1.0E+07
※GPU/CPU速度比最大5倍程度
3
4.1 GDDGEMVの性能評価 [y ← α Ax + β y]
1.0E+01
C PU
G PU
1.0E+00
計算時間 (sec)
1.0E-01
1.0E-02
1.0E-03
1.0E-04
1.0E-05
1.0E-06
1.0E+01
1.0E+02
1.0E+03
1.0E+04
データサイズ
※GPU/CPU速度比最大10倍程度
3
最大演算速度0.16GFlops(メモリ間の転送時間を含む)
4.1 GDDGEMMの性能評価 [C ← α AB + β C]
1.0E+03
C PU
G PU
1.0E+02
計算時間 (sec)
1.0E+01
1.0E+00
1.0E-01
1.0E-02
1.0E-03
1.0E-04
1.0E-05
1.0E-06
1.0E+00
3
1.0E+01
1.0E+02
データサイズ
1.0E+03
1.0E+04
※GPU/CPU速度比最大500倍程度
最大演算速度85.9GFlops(メモリ間の転送時間を含む)
4.2 QPBLAS-GPUの公開HP
※QPBLAS-­‐GPUの公開HP
http://ccse.jaea.go.jp/ja/download/
qpblas_gpu.html
ライセンス オープンソース(2条項BSDライセンス)
[subrou^nes] Level 1
Level 2
Level 3
gddswap
gddgemv gddgemm
gddscal
gddsymv
gddsymm
gddcopy
gddtrmv
gddsyr2k
gddaxpy
gddtrsv
gddsyrk
gdddot
gddsyr
gddtrmm
gddnorm2 gddsyr2
gddtrsm
gddsum
gddgbmv gddzhemm
gddidmax
gddger
gddzher2k
gddrot
gddsmbv
gddzherk
gddrotg
gddtbmv
gddrotm
gddtbsv
gddrotmg gddzgerc
gddzdotc
gddzgeru
gddzdotu gddzhbmv
gddzhemv
gddzher
gddzher2
5 公開ソフトウェア
※公開用ソフトウェア一覧HP
http://ccse.jaea.go.jp/ja/download/
software.html
1. 「京」コンピュータ用固有値
計算ライブラリ: EigenK 2. 4倍精度Basic Linear Algebra Subprograms: QPBLAS 3. 4倍精度Basic Linear Algebra Subprograms on GPU: QPBLAS-­‐GPU ※今後4倍精度ソフトウェ アを中心に拡充を予定
6. Summary
※double-double アルゴリズムを用いて
・4倍精度化BLAS (QPBLAS)の作成と公開
① 主要 40 routine
② 倍精度版gemmとの速度比は約10倍
・GPU用4倍精度化BLAS (QPBLAS-GPU)の作成と公開
① 主要 40 routine
② CUDA4.0
③ CPU版gemmとの速度比は最大500倍高速化
8