wô =tmmo

17
MC計算の高速化について 神前 純一 (KEK) LHC が切り拓く新しい物理@ICEPP 2009年4月3日

Upload: others

Post on 01-May-2022

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: wô =tmMo

MC計算の高速化について

神前 純一 (KEK)

LHC が切り拓く新しい物理@ICEPP 2009年4月3日

Page 2: wô =tmMo

「きっかけ」と概要- 2008年1月頃D. Rainwater氏から「MC計算をGPUを使って行うことにより、高速化することができないか」とのアイディアが出された。

このアイディアの検証を   K. Hagiwara、J. Kanzaki、N. Okamura(KEK)   T. Steltzer、D. Rainwaterで行っている。

- NVIDIA製の GPU board とホスト用の PC を導入

- CUDAを使用し software 開発を行った

- QED、QCDの基本過程の amplitude、そして断面積の計算を行い、CPU上で同様の計算を行う場合と比較し、結果、および計算速度についての検討を行った

Page 3: wô =tmMo

• GPU (Graphics Processing Unit): PCやworkstationで画像出力を担う近年、Game 等の 3D Graphics の出力などのために高い能力が要求されるようになった。

• 主要なメーカーはNVIDIAとAMD/ATIだが、NVIDIAから提供されている開発環境の「CUDA」を利用することにより C/C++ を用いた科学技術計算への応用が容易になった。

- 既に物理・科学以外の幅広い分野で応用されている特に image 処理、graphics 出力、金融関連の simulation、、

- 物理・科学でも流体力学、天体物理学、医療分野での画像処理

  KEKでも最近、CUDAに関連する講習会が行われた(2009年2月) 

GPUについて

Page 4: wô =tmMo

GPUの構造(Processor)• Multi Processor- 8個の thread processor から構成される- 1つの multi processor 上で1つ以上の thread block が実行される- 同じ命令が実行される• 最新のGPUでは multi processor あたり一つの倍精度演算器• 複数の multi processor により一つのGPUを構成 30 x 8 → 240 thread processor (GT200)

11

NVIDIA GT200 (T10) !"#

– ($%) 240 &!'()*+,-).

– ($%) 1.44 GHz /012

3 1 TFLOPS/GPU, IEEE754 456

– 789+,-).:;<

1 =!>56?@AB ($%) 86.4 GFLOPS/GPU

– CDEFGHIJF'

512-bit K 800 MHz DDR B 102.4 GB/s

L,MN8CDE

'()*OP7QMRS

12

!"#$%&'(

• 1 )*!"#$%&'(+,– 8 -*./'0$%&'(

(.1234$%&'() 567

– 1 )*!"#$%&'(5

1 )89*./'0:%';

(<=) >?@

– A30BCDEFGHIJ./'0.KLM32NO

– 8192 - (G80) / 16384 (GT200) * 32 P'1/L.Q

– 16 KB *RSTU2

(16 VN;567)

• .WX3Y*Z[&'1– \]^_,`aZ[

– 32 P'1bc,defcghi

(IEEE754 jklmn)

– FADD, FMUL o*hi+ IEEE754 pq,FMA (rs) tu

– vi,wxy+zc{|*}

– Special Function Unit (SFU) EF~�zc{|,���cJ�>�

��,���i�������5�G

(jkl)

– GT200 +,!"#$%&'(t�uE

1 )*�kldefcghi

�>��G,FMA (rs) tu

SP SP

SP SP

SP SP

SP SP

RSTU2

./'0$%&'(

SFU SFU

DP

8

Multi Processor

Page 5: wô =tmMo

GPUの構造(Thread)

21

!"#$%&'

• !"#$()*+,– !"#$

– -.(/012

– !"#$34#5

– !"#$6789:(

• 1 ;<=2 ;<=>9?

3 ;<

• 34#5@9A

/B 512 !"#$

• C;<(/BDEF? (512, 512, 64)

• GHI(34#5JK>LMN8O(!"#$P

QR(S'TU4V#DWX-.YL>NZ

• [\]^%_`6\]

(ab)

• __syncthreads() XQcNM12

• BdY?

blockDim.{x, y, z} Xef

– g_#$

– !"#$34#56789:(

• 1 ;<>9? 2 ;<

• BdY?

gridDim.{x, y, z} Xef

• /B (65535, 65535, 1)

!"#$34#5

!"#$

g_#$

blockDim.x

blockDim.y

gridDim.x

gridDim.y

\]

^%_

GHI(!"#$34#5?=

GHI(S'TU4V#D

WX-.YLMZ

• Thread: プログラムの実行の最小単位• Thread Block: threadの集合。一つの multi processor 上で実行される

• Grid: Thread block の集合。CPUから一回の関数呼び出しで実行することが出来る。

• 実行される各 thread から、自分の thread ID(thread block 内の自分の位置)、および block ID (自分の所属する thread block の grid 内での位置)を知ることが出来る。

• Warp: 「同時に」同じ命令を実行する thread からなる物理的な単位(= 32 threads)

Page 6: wô =tmMo

GPUの構造(メモリ)• CPU(ホスト)とGPU(デバイス)のメモリ空間は異なり、お互いのメモリを直接アクセスする事はできない。→ 専用の API によりデータ転送を行う

• Memory及びregisters• Registers: • Shared Memory: 同一の thread block 内の thread によって共有される。register と同程度に高速。16KB/multi processor。On chip

• Global Memory: • Off chip• 全ての thread 間で共有 24

!"#"$%

• !"#&'– CPU (()*) +

GPU ($,-)) .!"#&'/

0123()*45$,-)!"#6789:;)

<=23>=/?.@6ABC+/DE>FGH

– ()*+$,-).'.$IJKL/MN.

API 6OPQ.RABC+SDE>TH

• $,-).!"#UV

– WX)J

– YZ!"#

• [\]^_!"#

• `a.)W^bcd^:efTg)W^b'D

YZhi>TH

• ,\:j\k#:*S1lim3WX)J+`

noepqDTH

• 16 KB / r%]_d;^s

– tdI,%!"#

• [k]^_!"#

(DRAM)

• TuQ.)W^b'DYZhi>TH

$,-)

)W^b_d;^s

YZ

!"#

YZ

!"#

tdI,%!"#

)W^b_d;^s

YZ

!"#

YZ

!"#

()*

!-\!"#

CPU

j9

CPU

j9

MN API D$IJKL

CPU

j9

CPU

j9

!-\!"#

vw^xy vw^xy

Page 7: wô =tmMo

我々のGPU環境

• 2008年5月 NVIDIA製 GeForce 9800GTX を導入(2万8000円)

• 2009年12月 GeForce GTX280(5万円)

• Host PCIntel Core2 Duo 3GHz + 4GB memoryFedora8 64bit

GTX280 9800GTX

Multi Processor 30 16

SP 240 128

Global Memory 1GB 500MB

Constant Memory 64KB 64KB

Shared Memory/block 16KB 16KB

Registers/block 16384 8192

Warp Size 32 32

Clock Rate 1.30GHz 1.67GHz

倍精度サポート有り

Page 8: wô =tmMo

比較のためのプログラム• CUDA環境にHELAS(Helicity Amplitude 計算ライブラリ)を移植(HeGET)

• 乱数をCPUで生成 → GPUへ転送• GPUで  Phase Space の生成+PDF weightの計算+Amplitude の計  → 断面積の計算を行い結果をCPUへ転送する。この段階の計算時間を測定する

• CPUで動作する同じ構造の program を作成し、対応する部分の計算時間を測定し、比較する。

• 断面積計算の結果の検証のため MadGraph/MadEvent による断面積の計算を行った。また FORTRAN version の HELAS を用い BASES により断面積を計算させる program を作成した。

Page 9: wô =tmMo

比較のためのプログラム• MadGraph により amplitude を計算する FORTRAN code を作成し、それを GPU/CPU で使える C/C++ code へ変換する(いずれも final state particle の数が多い場合は MadGraph 自身の modification が必要)• QED: uu → n-photonsQCD: gg → n-gluons, uu → n-gluons, uu → uu + n-gluonsの各プロセスを用いて• 全断面積が正しく計算されているか• 計算時間の速度の比較

を検証した。• 計算速度は thread に割り当てられた register の数、また block あたりの thread の数に大きく依存する。• pp collision @ 14 TeV+CTEQ6L1• 単精度での結果

Page 10: wô =tmMo

QED Process

# photons# diagrams = (# photons)!

total sigma (Heget/MG-ME)

2 2 1.000 ± 0.002

3 6 1.000 ± 0.005

4 24 0.990 ± 0.005

5 120 0.998 ± 0.009

6 720 (1.025 ± 0.018)

7 5040 (0.999 ± 0.035)

8 40320 ---

• u u → n-photons • n が大きくなると diagram の数が膨大になる

• 簡単なパターンの process なので HeGET(HELAS)call と for loop を用いた、その “permutation” で書くことが出来る

• n≥6 の場合に amplitude program がそのままでは compile 出来なかった→ CUDA compiler の問題?

• その様な場合でも amplitude program を分割することにより、compile 及び実行が可能

n=6, 7 は BASES による積分計算との比較

Page 11: wô =tmMo

QED Process• u u → 4 photonsー

!"#$%&'(

) *) +)) +*) ,)) ,*) -)) -*) .)) .*) *))

!-+)

!,+)

!++)

!/012'(

3$4$5

/0678$95

:0;$;!<(=>94

!/012'(

!!! !" !# $ # " !$

$%$"

$%$&

$%$'

$%$(

$%#

$%#"

$%#&

)*+,%-.

)/0!

12324

*+567284

9+:2:!;0<=83

)*+,%-.

)/0!

!"#$%&'(

) *) +) ,) -) .) /) 0) 1) 2) *))

!,*)

!+*)

!**)

!3456'(

7$8$9

3:;<=$59

>:?$?!@(A458

!3456'(

!!! !" !# $ # " !$

$%$"

$%$&

$%$'

$%$(

$%#

$%#"

$%#&

)*+,%-.

)/0!

12324

*56782,4

95:2:!;0<+,3

)*+,%-.

)/0!

pTmax

pTmin

Page 12: wô =tmMo

計算速度の比較(QED)

Number of Photons2 3 4 5 6 7 8

sec]

µP

rocess T

ime / E

ven

t [

-210

-110

1

10

210

310

410

CPU

GPU

Permutation

Permutation

MadGraph

MadGraph (divided)

Event Process Time on GTX280

photons! uu

Preliminary

Page 13: wô =tmMo

計算速度の比較(QED)

Preliminary

Number of Photons2 3 4 5 6 7 8

Rati

o o

f P

rocess T

ime

0

20

40

60

80

100

120

140

160

180

Permutation

MadGraphMadGraph (divided)

CPU / GPU(GTX280)

Page 14: wô =tmMo

# final jetsg g → gluons gluons u u → gluons→ gluons u u → u u + gluons u u + gluons

# final jets#diagram #color #diagram #color #diagram #color

2 6 6 3 2 2 2

3 45 24 18 6 10 8

4 510 120 159 24 76 40

5 7245 720 1890 120 786 240

QCD Processes• QCD coupling のみ• pTj>20GeV, |ηj|<2.5, pTjj>20GeV• Qren = Qfac = 20GeV

Page 15: wô =tmMo

計算速度の比較(QCD)

Number of Jets in Final State2 3 4 5

sec]

µP

rocess T

ime / E

ven

t [

-210

-110

1

10

210

310

CPU

GPU

gg

gg

uu

uu

uu

uu

Event Process Time on GTX280QCD Processes

Preliminary

Page 16: wô =tmMo

計算速度の比較(QCD)

Number of Jets in Final State2 3 4 5

Rati

o o

f P

rocess T

ime

0

20

40

60

80

100

120

140

160

180

gg

uu

uu

CPU / GPU(GTX280)

Preliminary

Page 17: wô =tmMo

結果とまとめ• Graphic Processor (GPU) の上でかなり広範囲の program を実行することが出来る• 計算結果についても問題ない。• 同等の program を CPU と GPU で実行させ、計算時間を比較した。我々の環境で GPU を用いることで10倍から100倍(以上)の計算速度が得られた。

✴ 大きな規模の program の compile に問題がある可能性✴ 良い performance を得るには code に工夫(know-how)が必要- メモリアクセス - 条件分岐- Loop 構造 - 実行時パラメター

✴ 倍精度計算のサポートが不足。

→ 何でも簡単に高速になる「夢の装置」ではないけれど、 いろいろな、そし

て大きな応用可能性がある。