wô =tmmo
TRANSCRIPT
![Page 1: wô =tmMo](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/1.jpg)
MC計算の高速化について
神前 純一 (KEK)
LHC が切り拓く新しい物理@ICEPP 2009年4月3日
![Page 2: wô =tmMo](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/2.jpg)
「きっかけ」と概要- 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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/3.jpg)
• 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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/4.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/5.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/6.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/7.jpg)
我々の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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/8.jpg)
比較のためのプログラム• 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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/9.jpg)
比較のためのプログラム• 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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/10.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/11.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/12.jpg)
計算速度の比較(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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/13.jpg)
計算速度の比較(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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/14.jpg)
# 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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/15.jpg)
計算速度の比較(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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/16.jpg)
計算速度の比較(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](https://reader033.vdocument.in/reader033/viewer/2022050214/626e74fcacd1493dea2bce2e/html5/thumbnails/17.jpg)
結果とまとめ• Graphic Processor (GPU) の上でかなり広範囲の program を実行することが出来る• 計算結果についても問題ない。• 同等の program を CPU と GPU で実行させ、計算時間を比較した。我々の環境で GPU を用いることで10倍から100倍(以上)の計算速度が得られた。
✴ 大きな規模の program の compile に問題がある可能性✴ 良い performance を得るには code に工夫(know-how)が必要- メモリアクセス - 条件分岐- Loop 構造 - 実行時パラメター
✴ 倍精度計算のサポートが不足。
→ 何でも簡単に高速になる「夢の装置」ではないけれど、 いろいろな、そし
て大きな応用可能性がある。