gpu を用いた lattice 計算

14
1 広広広広 広広広広広 広広 広広 広広

Upload: ananda

Post on 19-Mar-2016

53 views

Category:

Documents


2 download

DESCRIPTION

GPU を用いた lattice 計算. 広島大学 理学研究科 尾崎 裕介 石川 健一. もくじ. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ. Graphics Processing Unit. 主に画像処理を行う PC パーツ 滑らかな描画 リアルタイム表示 100 ~ 200 基の processer による 超並列高速計算. GPU を搭載した - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: GPU を用いた lattice 計算

1

広島大学 理学研究科 尾崎 裕介石川 健一

Page 2: GPU を用いた lattice 計算

1. Graphic Processing Unit (GPU) とは?2. Nvidia CUDA programming model3. GPU の高速化4. QCD with CUDA5. 結果6. まとめ

2

Page 3: GPU を用いた lattice 計算

3

GPU を搭載したGraphic Card

価格:  5 ~ 10 万円性能: 数百 GFLOPS ( 単精度 )

主に画像処理を行う PC パーツ滑らかな描画リアルタイム表示

100 ~ 200 基の processer による 超並列高速計算

O(a) 改良した Wilson-Dirac quark のsolver を CUDAによって作成し、GPU でどのくらい加速されたか見てみた

Gyözö I. Egri, hep-lat/0611022“Lattice QCD as a video game”

先行研究 :

→  単精度

本研究では倍精度

手軽に高性能

Page 4: GPU を用いた lattice 計算

4

10-15

10-1510-6 10-12

CPU の倍精度 solver

CPU の単精度 solver

10-1510-6 10-12

GPU の単精度 solver

単精度 solver を用いて倍精度の結果を得る手法

反復改良法、

連立方程式 (Wilson-Dirac)       Dx = b を倍精度で解く

単精度で  Dx=b を複数回解くと倍精度の解が得られるようにした方法

GPU :単精度計算が非常に高速          (300-900GFlops)単精度で解くところを GPU に担当させると全体がスピードアップ!

Page 5: GPU を用いた lattice 計算

L 次元ベクトルの和の計算例 (L=N×M)   c = a + b//=== host から呼び出される GPU code ====_global_ void vadd_kernel(float *a, float *b, float *c){ int idx = threadIdx.x+blockIdx.x*blockDim.x; c[idx] = a[idx] + b[idx];}//==== host 側  code ===void main(){ …… // GPU 上にメモリ確保 cudaMalloc((void**)&a,….); ….. // c = a+b カーネルを GPU へ投げる // thread 数 /block = N, block 数 =M で並列実行 vadd_kernel<<<M,N>>>(a,b,c);}

高い並列度をうまく利用する必要がある 5

thread : 最小の実行単位 (max 512/block)thread block :

同一の multiprocessor 上で実行される thread の集まり

(max 65535)grid : thread block の集まり     並列化されたカーネルの全体

thread 1thread 2thread 3thread 4

⋮thread N

block 1block 2block 3block 4

⋮block M

gridblock

Page 6: GPU を用いた lattice 計算

6

Nvidia CUDA Programming Guide より

できる限り並列化→ 1thread で 1 格子点の計算

できる限り高速なメモリアクセス→ GPU 上の様々なメモリ領域の最適な使い方

Page 7: GPU を用いた lattice 計算

7

Shared Memory

global Memory

•高速なメモリアクセス     (4 clock cycles)•read-write アクセス•同一 block 内の thread 間で共有•16KB/block

•device memory 上のメモリ•低速なメモリアクセス     (400 ~ 600 clock cycles)•read-write アクセス•全 thread 間で共有

    Shared Memory の有効活用

Page 8: GPU を用いた lattice 計算

8

1 格子点あたりのデータ量とロード回数•fermion : 8 回 +(1 回 )

3×4×2×4Byte=96Byte•gauge link : 2 回

3×(3-1)×2×4Byte×4=48Byte×4      SU(3) reconstruction method.•clover 項 : 1 回

21×2×2×4Byte=336Byte

fermion を shared memory に乗せた4×4×4×2×96Byte=12.3KB,

(max 16KB/block)gauge link と clover は device memory からロード

CUDA with QCD, programming strategy

データの出入り: 1584 Byte 計算量: 1896 Flop Byte/Flop = 0.83G80 バンド幅 : ~ 80GB/s予想性能:  100 GFlops!!

CUDA ブロックに 43×2 格子点をアサイン            スレッド数 =128 スレッド

Page 9: GPU を用いた lattice 計算

9

GPU ・・・ NVIDIA GeForce 8800 GTX

CPU ・・・ Intel Core 2 @2.66GHz

354.6GFLOPS

21.3GFLOPS

O(a) 改良の Wilson-Dirac quark solverBi-CGStab 法反復改良法

単精度部分を GPU が担当even-odd preconditioning

•マシン構成

•solver

Page 10: GPU を用いた lattice 計算

10

GPU を用いた場合

さらに 1/7 に

•格子サイズ 163×32quench 0.15fm

•quark 質量 [MeV]23 、 52 、 81

単精度 solver で加速効果

10-15

10-12 10-1510-6

10-12 10-1510-6

倍精度単精度

23MeV

52MeV

81MeV

GPU

Page 11: GPU を用いた lattice 計算

11

CPUGPU•quark 質量 23MeV

•格子サイズ43×883×16163×32

最大性能 17GFLOPS

今回の結果

ただし、まだ速くなるはず→ coalesced access

Page 12: GPU を用いた lattice 計算

12

格子点 0格子点 0格子点 0格子点 1格子点 1格子点 1格子点 2格子点 2格子点 2

格子点 0格子点 1格子点 2

⋮格子点 0格子点 1格子点 2

⋮格子点 0

thread 0thread 1thread 2

thread 0thread 1thread 2

4,8,or 16Byte

Page 13: GPU を用いた lattice 計算

13

Nvidia GeForce GTX 280Core 2 Duo 3.0GHz (6MB)

•non coalesced access•on shared memory 20GFLOPS

石川健一 solver

•coalesced access•on texture cache 40 ~ 50GFLOPS

hopping → 89GFLOPSclover → 100GFLOPS

倍精度 solver GPU solver

220 秒 ~ 10 秒×22

Page 14: GPU を用いた lattice 計算

14

GPU を用いると気軽に高速計算が可能。 ← 格子 QCD でも GPU は単精度計算が高速。 反復改良法を利用した GPU solver を作成した。 ← 倍精度の結果 作成した solver は O(a) の改良を行う clover 項を導入している。 GeForce 8800 GTX での結果

solver の計算性能は最大約 17GFOLPS 。 計算時間は Core 2 Duo 2.66GHz CPU の 1/7 。

GeForce GTX 280 での結果 coalesced access 導入後 40 ~ 50GFLOPS 。 Core 2 Duo 3.0GHz の 22 倍。

高速な計算には coalesced access が必要。

複数の GPU による計算。