Transcript PPT - KEK

Graphic Card を使った
高性能計算
石川健一 (広島大学)
共同研究者 尾崎裕介
A04班
ワークショップ「計算科学による素粒子・原子核・宇宙の融合」
2008年12月1日ー2日
1
1.とりあえず背景
 格子QCD 計算でしんどい所
 一階の差分方程式=大規模疎行列連立一次方程式を大量に解く必
要がある。
 ホッピング行列(係数 (U とかγ)付一階差分)
 1    U  ( n )
4
M (n, m ) 
 1    U  ( m ) n  ˆ , m
†
n  ˆ , m

 1
 解く連立方程式 (Wilson型) Dw =1-κM
(Overlap型) Dov = m – Dw / sqrt( Dw^+ Dw )
Dx=b
 ホッピング行列は倍精度計算で格子点あたり ~ 3 Byte/Flop 要求
2
2. GPUの動向
 GPU (AMD-ATI, Nvidia)
リアルタイムでのグラフィック処理を要求するため高いス
ループットで計算ができる。
高い並列度、高いメモリバンド幅
グラフィック以外の用途にこの計算リソースを使う
=> GPGPU
 すでに“Lattice QCD as a video game”,
[G.I.Egri, Z.Fodor, S.D.Katz, D.Nogradi, K.K.Szabo, hep-lat/0611022].
 NVIDIA G80 arch. > 300 GFlops(SP)
 Lattice Wilson kernel > 30 GFlops
 Graphic API (OpenGL)
30GFlops
3
2. GPUの動向
 GPGPU開発言語
CUDA (Nvidia) (C extension)
 My experience with CUDA (GeForce
8800 GTX)
[NO WARRANTY CUDA
code:http://theo.phys.sci.hiroshimau.ac.jp/~ishikawa/CUDA/CudaQCDSolver_0.06.tar
.gz]
 Hopping matrix mult (16^4) can also
achieve > 40 GFlops. (13% sustained
speed)
 性能:
単精度の場合
要求1.5Byte/Flop
GPUカードは
 すでに単精度で~1TFlops
 倍精度計算も可能~100GFlops
(100GByte/s)/(1000GFlop/s)=0.1Byte/
 オンボードメモリは 1GByte
Flop
 オンボードメモリ-GPU間バンド幅
メモリバンド幅で制限されるので性
100GByte/s
能は 100/1.5=67GFlops予想
 ボトルネックはホストーカード間データ
転送 PCI-E G2(x16) 2~4GByte/s?
4
2. GPUの動向
 性能: [C.Rebbi et. al., PoS(LATTICE 2008)045]
GFix してバンド幅
を節約しているけど
70-90GFlops で
る!(単精度)
5
3.CUDA Programming
 My experience with CUDA (GeForce 8800 GTX)
Cuda code example:
Link variable times 2-Spinor code
Almost C language
For Single site data,
w , y : 2  spinor,
for   1, 2 and
U : SU ( 3 ) matrix
a  1, 2 , 3
3
w(a, ) 
 U ( a , b ) y (b ,  )
b 1
6
3.CUDA Programming
 My experience with CUDA (GeForce 8800 GTX)
Device
CUDA Programming model
Grid 1
Single Program Multiple Data (SPMD)
Single Thread Multiple Stream?
Nested threading.
Grid / Block / Thread
Thread ID + Block ID (Corresponds to MPI RANK)
Block has local memory shared by threads in a
block.
Block
(0, 0)
Block
(1, 0)
Block
(2, 0)
Block
(0, 1)
Block
(1, 1)
Block
(2, 1)
Block (1, 1)
Grid for 16^3x32 lattice
Block for 4^3x2 lattice
Thread Thread Thread Thread Thread
(0, 0)
(1, 0)
(2, 0)
(3, 0)
(4, 0)
Thread Thread Thread Thread Thread
(0, 1)
(1, 1)
(2, 1)
(3, 1)
(4, 1)
Thread Thread Thread Thread Thread
(0, 2)
(1, 2)
(2, 2)
(3, 2)
(4, 2)
Thread for single site
Spinor data are vector loaded [100GFlop/sec]
on the shared memory on each block. They are
reused by (max 8 times/ min 4 times).
Link fields are loaded via Texture Fetching 7
mechanism (Cached).
単精度計算で倍精度計算を行う
4.
Mixed precision / Inner-Outer solver


Flexible Preconditioner 可能な反復法で計算
Richardson 反復(Iterative refinement)法を基に作る
( 0 ) [ given
r and x satisfy
(1) [Solve
Av  r in single
r  b  Ax .
(double prec.) ]
precision]
( 2 ) q  Av
[doble prec.]
(3) x  x  v
[doble prec.]
(4) r  r  q
[doble prec.]
[ new r and x still satisfy
r  b  Ax .]
( 5 ) [Check |r| and goto (1)]




単精度で解ききっていれば、倍精度の解を得るのにRefinment 反復は
3-5回。
演算量はすべて倍精度で計算するときより増えるが単精度計算の効率
や速さが良いときは全体で速くなる。
Intel 系は確かに SSE2などを使うとキャッシュやメモリバンド幅、レジスタ
の利用率があがり全体で2倍の速度上昇があった。
GPU計算をここに使うことで更なるスピードアップ
8
4. 単精度計算で倍精度計算を行う
 GPUを使って実験してみた
(GeForce 8800GTX, Core2Duo2.66GHz, PCI-E G1.1x16[peak 4GB/s],
H⇒D:1.36GB/s, H←D:1.53GB/s, D⇔G:70.8GB/s)
 Nested BiCGStab (Sakurai, Tadano)
 外側反復 BiCGStab 倍精度で CPUで計算
 内側反復 BiCGStab 単精度
• CPUで計算した場合とGPUで計算した場合の比較
 Even-Odd site preconditioned O(a)-Wilson quark
[広大M2学生 尾崎裕介君 coding/exp.]
16  32 格子 β  5 .7 クエンチ近似
3
の配位1つで実験中
GPUを使うと計算時間は
1/8に短縮される!(当社比)
367 MeV
527 MeV
m PS  640 MeV
CPUコードはもう少し改良する
余地(SSEの使用)がある。
1/4から1/5の短縮かもしれない。
9
4.
単精度計算で倍精度計算を行う
 GPUを使って実験してみた
GPUを使うと計算時間は
1/7に短縮される!(当社比)
CPUコードはもう少し改良する
余地(SSEの使用)がある。
1/4から1/5の短縮かもしれない。
全計算時間のほとんどは
内部反復に費やされている
が、GPU版は内部反復が
とても早いので外部反復の
遅さが目立つかも。
10
4.
単精度計算で倍精度計算を行う
 GPUを使って実験してみた
CPU(Fortran) only
GPU(CUDA)+CPU(C)
11
5. 今後の方針とまとめ
 並列化無しの単体のコードの書き方は分かってき
た。それなりに速度向上はできそうである。
 問題は大規模並列のときどうするか?
 リンク変数は一度GPUに送ってしまえばGPU上に取っておける。
 クォークベクトルをHost(CPU)-GPU間でやり取りしつつ、並列計算
のため Host-Host 間でデータの交換が必要。
 GPUで計算しているとき CPUは遊んでいる。
 Host-Host通信中は GPU,CPUは遊んでいる。
 遊ばせないアルゴリズムはあるか?
 Overlap fermion のときはどうするか?
 5D表現で行えば Wilsonのときと同様だが、、、どうか?
12
5. 今後の方針とまとめ
 並列化の方針、とりあえずWilson型
 領域分割法の前処理としてブロック部分の逆を取るところを GPUに任
せる
 D ee
D  
 D oe
 xe
x  
 xo
D eo 

D oo 

 be 
 , b   

 bo 
Dx  b
1

D ee
K 
  D 1 D D 1
oo
oe
ee

0 

1 
D oo 
 1  D eo D oo1 D oe D ee1
DK  

0

1
D eo D oo 


1

1
1
ブロック内の D ee , D oo の
計算をGPUに任せてはどう
か?
( DK ) z  b , x  Kz
13
5. 今後の方針とまとめ
14
空白
空白
15
1 . 5 fm
3 fm
0 . 8 fm
6 fm
u/d/s
Small
block
p/n
n
0 

1
 det  1

D oo 
 D oo D oe
 D ee
det[ D ]  det 
 0
1
1
D ee D eo 


1

1
 det[ D ee ] det[ D oo ] det[ 1  D ee D eo D oo D oe ]
 det[ D ee ] det[ D oo ] det[ Dˆ ee ]
p
 D ee
det[ D ]  det 
 0
0 

1
 det  1
D D
D oo 
 oo oe
1
1
D ee D eo 


1

 D ee
det[ D ]  det 
 0
0 

1
 det  1
D D
D oo 
 oo oe
1
D ee D eo 


1

1
1
 det[ D ee ] det[ D oo ] det[ 1  D ee D eo D oo D oe ]
 det[ D ee ] det[ D oo ] det[ Dˆ ee ]
1
 det[ D ee ] det[ D oo ] det[ 1  D ee D eo D oo D oe ]
 det[ D ee ] det[ D oo ] det[ Dˆ ee ]
[Luscher, JHEP 0305 (2003) 052 ]
( L > 6 fm?, 1/a=2GeV, 64^4 lattice)
 Nested Domain Decomposition
+Some Improvement technology. 16
3 fm
6 fm
1 . 5 fm
0 . 8 fm
or GPGPU
Accelerator
 Communication with Surface data only.
 Bandwidth can be properly treated by this
blocking.
 But Latency is limited by speed of light.
17
 GPGPU
This year NVIDA and AMD/ATI provide DP enabled architecture
 NVIDIA GT200 (Tesla 10series)
 240 SP (SP cores), 30 DP cores
 ~1,000(or 600)Glops(SP), ~90GFlops(DP)
 We expect > 60 GFlops(SP) for QCD kernel.
(assuming 10% efficiency)
 AMD/ATI RV770 (Firestream 9250)
 640 SP units, (160 DP units?)
 1.2TFlops (SP), 200 GFlops (DP)
 AMD Stream SDK
 For QCD




No ECC, check the result on the host side.
O(1000) thread programming/SIMD programming is required. (1site=1thread)
Make use of the Local memories attached each core for good efficiency.
Host device communication is limited by PCI-E x16 G2 speed
(8GB/sec (sustained at 2GB/sec))
18