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 oo1 D oe D ee1 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