Download - Boost study14
魔導書 Vol.3 発売記念GPGPU の今とこれから
藤田 典久 , @fjnli, id:fjnl
Boost. 勉強会 #14
1
とりあえず…• 寝坊しましたすいません…
• Boost でません• C++? 知りませんね…
2
魔導書 Vol.3 出ました !!
http://longgate.co.jp/books/grimoire-vol3.html
魔導書 Vol.3 出ました !!
http://longgate.co.jp/books/grimoire-vol3.html
書きました
#pragma acc kernels for (int i = 0; i < 100; ++i) { a[i] = a[i] + b[i]; }
魔導書 Vol.3 出ました !!• OpenACC の話を書きました– あまり込み入った話はありません
• OpenACC とは– アクセラレータ向けの言語仕様– C/C++/Fortran のコードに pragma を挿入する
ことでコンパイラに指示をする– GPU だけに限定される仕様ではない– CPU 向けコードも作れる
5
魔導書 Vol.3 出ました !!
• OpenACC に関する詳細は魔導書を参照してください
• ちょっと微妙なネタ選択だった気もする– 無料で使える実装がない– 商用コンパイラの体験版程度– GCC がサポートする計画がある様子– 仕様書は公開されており、誰でも読めます
6
--- 宣伝枠終了 ---
7
アクセラレータとは• 日本語では「演算加速装置」とも呼ばれる– 演算を支援する装置。速いは正義– CPU では性能・効率面で不十分な分野で利用され
る
• GPU (Graphics Processing Unit) – 特に 3D Graphics
• ネットワークインターフェイス (NIC)• 動画のデコーダー ・ エンコーダー
8
汎用 ?
特化• 昔の GPU• NIC• 動画のエンコーダ• RAID カード
汎用• 最近の GPU• Intel Xeon Phi• (Cell)
決められた事しか出来ない
ある程度自由にプログラミングできる
9
汎用 ?
特化• 昔の GPU• NIC• 動画のエンコーダ• RAID カード
汎用• 最近の GPU• Intel Xeon Phi• (Cell)
決められた事しか出来ない
ある程度自由にプログラミングできる
今回のターゲットはこちら側
10
イマドキのアクセラレータ• GPU– NVIDIA, AMD, Intel– 特に NVIDIA GPU– 汎用性を獲得したのは、ここ 4 、 5 年の事– 画面出力機能のない GPU(?) すらある
• Intel Xeon Phi– Intel MIC ( マイク , Meny Integrated Core) とも– GPU の対抗馬– 画面出力機能は元々ない
11
補足• AMD GPU の事をあまり知りません• 今後の説明は NVIDIA GPU を例にしていま
す• 大枠は変わらないはずです ?
12
イマドキのアクセラレータ• スモールコア ・ メニーコア– (CPU と比べると ) 遅くて– (CPU と比べると ) 小さくて多数のコアがある– (CPU と比べると ) メモリ帯域重視– データ並列向け
• 増設カードの形で提供されている– アクセラレータ単体では動かせない
13
イマドキのアクセラレータ
1: FLoating Operations Per Second, 1 秒間に何回演算できる性能があるか 京コンピュータは 11,280TFLOPS あります (Peak)2: ECC ON にすると 12.5% 減少3: 使用するメモリモジュールに依存4: 次ページにて説明
CPU GPU MIC
メーカー Intel NVIDIA Intel
モデル Xeon E5-2697v2 K40 7120P
コアクロック 3500MHz(Turbo)
875MHz(Turbo)
1330MHz(Turbo)
物理コア数 12 2880 61
SIMD 幅 (4 256bit N/A 512bit
倍精度 FLOPS(1 336GFLOPS 1430GFLOPS 1298GFLOPS
メモリ容量 768GB max.(3 12GB(2 16GB
メモリ帯域 59.7GB/s(3 288GB/s(2 352GB/s
TDP 130W 235W 300W
14
イマドキのアクセラレータ
1: FLoating Operations Per Second, 1 秒間に何回演算できる性能があるか 京コンピュータは 11,280TFLOPS あります (Peak)2: ECC ON にすると 12.5% 減少3: 使用するメモリモジュールに依存4: 次ページにて説明
CPU GPU MIC
メーカー Intel NVIDIA Intel
モデル Xeon E5-2697v2 K40 7120P
コアクロック 3500MHz(Turbo)
875MHz(Turbo)
1330MHz(Turbo)
物理コア数 12 2880 61
SIMD 幅 (4 256bit N/A 512bit
倍精度 FLOPS(1 336GFLOPS 1430GFLOPS 1298GFLOPS
メモリ容量 768GB max.(3 12GB(2 16GB
メモリ帯域 59.7GB/s(3 288GB/s(2 352GB/s
TDP 130W 235W 300W
15
イマドキのアクセラレータ
1: FLoating Operations Per Second, 1 秒間に何回演算できる性能があるか 京コンピュータは 11,280TFLOPS あります (Peak)2: ECC ON にすると 12.5% 減少3: 使用するメモリモジュールに依存4: 次ページにて説明
CPU GPU MIC
メーカー Intel NVIDIA Intel
モデル Xeon E5-2697v2 K40 7120P
コアクロック 3500MHz(Turbo)
875MHz(Turbo)
1330MHz(Turbo)
物理コア数 12 2880 61
SIMD 幅 (4 256bit N/A 512bit
倍精度 FLOPS(1 336GFLOPS 1430GFLOPS 1298GFLOPS
メモリ容量 768GB max.(3 12GB(2 16GB
メモリ帯域 59.7GB/s(3 288GB/s(2 352GB/s
TDP 130W 235W 300W
16
イマドキのアクセラレータ
1: FLoating Operations Per Second, 1 秒間に何回演算できる性能があるか 京コンピュータは 11,280TFLOPS あります (Peak)2: ECC ON にすると 12.5% 減少3: 使用するメモリモジュールに依存4: 次ページにて説明
CPU GPU MIC
メーカー Intel NVIDIA Intel
モデル Xeon E5-2697v2 K40 7120P
コアクロック 3500MHz(Turbo)
875MHz(Turbo)
1330MHz(Turbo)
物理コア数 12 2880 61
SIMD 幅 (4 256bit N/A 512bit
倍精度 FLOPS(1 336GFLOPS 1430GFLOPS 1298GFLOPS
メモリ容量 768GB max.(3 12GB(2 16GB
メモリ帯域 59.7GB/s(3 288GB/s(2 352GB/s
TDP 130W 235W 300W
17
イマドキのアクセラレータ
1: FLoating Operations Per Second, 1 秒間に何回演算できる性能があるか 京コンピュータは 11,280TFLOPS あります (Peak)2: ECC ON にすると 12.5% 減少3: 使用するメモリモジュールに依存4: 次ページにて説明
CPU GPU MIC
メーカー Intel NVIDIA Intel
モデル Xeon E5-2697v2 K40 7120P
コアクロック 3500MHz(Turbo)
875MHz(Turbo)
1330MHz(Turbo)
物理コア数 12 2880 61
SIMD 幅 (4 256bit N/A 512bit
倍精度 FLOPS(1 336GFLOPS 1430GFLOPS 1298GFLOPS
メモリ容量 768GB max.(3 12GB(2 16GB
メモリ帯域 59.7GB/s(3 288GB/s(2 352GB/s
TDP 130W 235W 300W
18
イマドキのアクセラレータ
1: FLoating Operations Per Second, 1 秒間に何回演算できる性能があるか 京コンピュータは 11,280TFLOPS あります (Peak)2: ECC ON にすると 12.5% 減少3: 使用するメモリモジュールに依存4: 次ページにて説明
CPU GPU MIC
メーカー Intel NVIDIA Intel
モデル Xeon E5-2697v2 K40 7120P
コアクロック 3500MHz(Turbo)
875MHz(Turbo)
1330MHz(Turbo)
物理コア数 12 2880 61
SIMD 幅 (4 256bit N/A 512bit
倍精度 FLOPS(1 336GFLOPS 1430GFLOPS 1298GFLOPS
メモリ容量 768GB max.(3 12GB(2 16GB
メモリ帯域 59.7GB/s(3 288GB/s(2 352GB/s
TDP 130W 235W 300W
19
SIMD
• Single Instruction Multiple Data– 1 つの命令で複数のデー
タに対して演算を行う– MMX, SSE, AVX, Altivec,
NEON 等– 各データに対して同じ演
算しか出来ない• 性能とのトレードオフ
– 256bit=8float, 4double– 512bit=16float, 8double
10 20 30 40
1 2 3 4
11 22 33 44
20
SIMT
• K40 は 2880 CUDA Core を持つが、 2880 のコアが自由自在に動けるわけではない– 32 スレッドが協調動作する– 32-way の SIMD のような動作をする
• NVIDIA はこのような動作を SIMT (Single Instruction Multiple Thread) と表現している
21
ここまでのまとめ• 並列処理はすごく速い–シングルスレッド性能は高くない– クロックの低さ以上に遅いと考える– Compare and swap あるので Lock-free しましょ
う• 前世代の NVIDA GPU は Atomic Ops 遅いですけど…
• メモリ容量が少ない–下位モデルはさらに少ない
22
イマドキのアクセラレータ
CPU1 CPU2
GPU1
GPU2
Network
HDD
QPI (Intel)HyperTransport (AMD)
PCI ExpressGen2 or Gen3 16 レーン
23
自立性• 現在のアクセラレータは子機として動作する• 親機 (CPU) がいないと起動できない• GPU– GPU の自立動作はできない– CPU の指示に従って動作する
• MIC– MIC の自立動作ができる (!= MIC だけで使える )– 実は Linux カーネルが動いている– GPU のような動作も可能
24
プログラミング• CUDA C, C++ (NVIDIA)– C/C++ベースに、若干の独自構文の追加
• Intel C, C++, Fortran (MIC)– MIC のための各種サポート
• OpenCL– 汎用の仕様 , C99ベースの言語で記述する
• OpenACC– 汎用の仕様 , pragma の挿入で記述する
25
誰が汎用アクセラレータを使うのか
• 科学技術計算– 演算性能があればあるだけ使う分野– ( 京コンピュータは CPU のみでアクセラレー
タは使っていない )
• ゲーム– 物理演算– AI– エフェクト
26
誰が汎用アクセラレータを使うのか
• ゲームでは重要度が増してきている• PS4/Xbox One の存在• PS4 と XBOX One は AMD の x86 CPU
と、 Radeonベースの GPU を使用している– もちろん GPGPU にも対応している
• NVIDIA の PhysX
27
現在のアクセラレータの問題点
• 一部分野を除いて流行っていない– プログラミングコスト
• 費用対効果が疑問• ライブラリレベルでの対応はありえる
–移植性• 全ての PC に GPGPU 対応の GPU があるとは限らない• メーカ間・世代間の非互換
– 加速しない• 万能な銀の弾丸ではない• 小回りがきかない
28
小回りがきかない• CPU 向きの処理は CPU で、
GPU 向けの処理は GPU で行いたい
• 現状のシステムではオーバーヘッドがあり難しい– PCI Express のレイテンシ– PCI Express の帯域– メモリが断絶している事
CPU1
GPU1
mem
mem
16GB/s (片 )(PCIe Gen3 x16)
200~300GB/s
~60GB/s
29
小回りがきかない• I/O は基本的にできない– CPU に任せる (1)– 遅い
• 最近、 GPU メモリを直接転送できるネットワークが登場– Infiniband (2)– GPU Direct for RDMA
CPU1
GPU1
Network
HDD
(1)
(2)
30
アクセラレータは長生きするのか
• しないと予想–より広い問題に対応できる方法に移行してい
く– でも、並列思考はなくならない
• CPU のクロックは頭打ち– ここ数年動作周波数は向上していない ( 定格 )–高々 4GHz 程度、メインストリームは 3GHz 程
度– かわりに、コア数や SIMD 幅や GPU 等の付加
機能が増えている31
APU
• AMD が APU という製品を出している– コードネーム Kaveri, A10-7850K 等– Kaveri は 3世代目 APU (Triniry, Richland)– (PS4, Xbox も APU であるが、詳細は非公開 )
• AMD の CPU と AMD の GPU を密に結合したもの–ようやく、 CPU と GPU のメモリ統合を実現
(hUMA)– CPU で扱っているポインタをそのまま GPU に渡し
てデータアクセスが可能32
APU
• Kaveri は期待できる製品だが…• 対応ソフトウエアがまだあまりない• メモリ周辺が CPU のままである– 演算性能のわりにメモリ帯域が足りない– コンシューマ向けモデルであるため、メモリ
が 2ch しかない– 38.4GB/s max. (DDR3-2400, 2ch)
33
Hyper Memory Cube (HMC)
• メモリ周辺が厳しいのは、カード型も同じ
• 次世代のメモリ規格 HMC– メモリを積み重ねて CPU の近くにおくことで
帯域を確保• NVIDIA GPU の次の世代 Volta で採用する
と NVIDIA が表明– 2015 年っぽい ?
34
APU まとめ• 下地が揃っていたのが AMD– 昔からの x86 CPU と ATI 由来の GPU– メモリ力が足りない
• NVIDIA は CPU がなかった– 次世代 : ARM + GPU (Denver)
• Intel は GPU が弱かった– 次世代 : Xeon + Phi (?)
35
まとめ• アクセラレータプログラミングが広く普及するとは思えない– でも、制限の厳しい並列プログラミングは、
なくならないと予想• 演算性能ではなくメモリが辛い–圧縮表現– キャッシュに当ててんのよ プログラミング
36