2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来

55,536 views

Published on

PFI社内セミナー
2009年12月10日 20:00-21:00(予定)
GPUコンピューティングの現状とスーパーコンピューティングの未来
発表者: 村主 崇行(プリファードインフラストラクチャー 研究開発部門・京都大学大学院 物理学第二教室)

セミナー録画URL: http://www.ustream.tv/recorded/2837689

このスライドは、発表後にみなさまからいただいた貴重な意見をもとに改訂した版です。発表時点での版はこちら: http://www.slideshare.net/pfi/20091210-gpu-2735685

Published in: Technology
3 Comments
49 Likes
Statistics
Notes
No Downloads
Views
Total views
55,536
On SlideShare
0
From Embeds
0
Number of Embeds
1,993
Actions
Shares
0
Downloads
584
Comments
3
Likes
49
Embeds 0
No embeds

No notes for slide

2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来

  1. 1. GPUコンピューティングの現状と スーパーコンピューティングの未来 村主崇行 1
  2. 2. 自己紹介 • 京都大学 物理学第二教室 天体核研究室 • 専門は宇宙物理学 「地球より大きいもの全てが対象」 • しかし、宇宙の現象は直接実験ができないの で、シミュレーションの利用がさかんです • ひょんなことからGPGPUの存在を知ったので 最近勉強しています 2
  3. 3. 宇宙物理学のシミュレーションテーマ ニュートン重力 一般相対性理論 磁気流体力学 (時空・座標) 流体力学 (プラズマ) (気体・液体) 高温・高密度物質・ 素粒子論etc ・・・ 輻射輸送 運動論(荷電粒子の (光の放出・反射・ 加速やビームなど) 吸収・伝搬) 3
  4. 4. 宇宙の研究とぼくらの生活 一般相対性理論 (時空・座標) 磁気流体力学 流体力学 (プラズマ) (気体・液体) 重力は時間を、空間を曲げる プラズマが吹き荒れる宇宙! 太陽風・宇宙天気は 「どんなにゆがんだ 人工衛星の死活問題 座標でも怖くない」 人工衛星の時計は 地上より速く進む! 核融合も実用化?! 乗り物の設計・気流 シミュレーション 気象&海洋シミュレーション 一般相対論を使わないと・・・ GPSは1日20kmも狂っていく 4
  5. 5. おことわり • 宇宙物理学には特にGPUに向いている課題が 結構あるので、僕はけっこう楽観的です。 そうでない人が聞いたら鼻につくことをお詫びしますm(_ _)m • 他の分野の事情もぜひ知りたいのです 私の誤解・無理解も多いと思いますので • 宇宙物理学にもGPU的なものに適さない課題はいっ ぱいあるので、ぜひ「GPUの次」をいっしょに考えたい と思っています • しか勉強してません。 関係の 人ごめんなさい。 にも期待してます! • 本日お話する内容は私の知識の範囲内での私的所感でして、PFI、京都大学その他 組織の公的意見とは関係ございません 5
  6. 6. もくじ 1. GPGPUとは?なぜGPUを使うのか 2. ハードウェア  演算機としてのGPU  HPC部品としてのGPU  GPUコンピュータを作ろう 3. GPUプログラミング言語と開発環境 4. GPUプログラミングの勉強のしかた 5. GPUコンピューティングの現状 6. GPUでペタコンを作ったら? 7. GPU(メニイコア)の将来、GPUの次 6
  7. 7. 1.GPUとは? 7
  8. 8. と の違い GPUはコア(計算する人)の数が多い! 周波数(ひとりの計算する速度)は1/3程度 4コア+hyper-threading 480コア (SSEを使うと16コア) 8
  9. 9. The difference between and . 米国Roadrunner 長崎大学 DEGIMAクラスタ 1億3300ドル 予算 3800万円 1,457Tflop/s ピーク性能 700Tflop/s 安い! 9
  10. 10. GPUとは?なぜGPUを使うのか? =>安価な超メニーコア計算機 • GPU(Graphics Processing Unit)とは • もともとコンピュータグラフィック(CG)描画専用の装置 • CG技術の発展にともない、GPUの仕事が多様化。 2006年後半から汎用GPU(GPGPU)へと進化 • 並列演算性能が高い • 500個程度の演算ユニット • 非常に安価 • パソコンの部品として量産されているため。 • 1T flops ~ 3万円程度 (Crayの相場は600万円/TFlops) • 価格性能は一般的なスパコンに比べ100倍ぐらい良い GPUコンピューティングが現実的に 10
  11. 11. 「GPUって240コアとかあるらしいよね」 「プログラムを240並列にするのって大変じゃないの?」 2-1.演算機としてのGPU 11
  12. 12. GPUとCPUを比べる(例) Core 2 Quad Q9550 NVIDIA 295GTX 演算器 4 (16) 480 演算性能 90.56Gflops 1788Gflops Parts Price $219 $499 Machine Price $900; 100Mflops/$ $1400; 1.3Gflops/$ Power 400W;230Mflops/W 700W;2.6Gflops/W flops = 一秒間に実数の四則計算を1回行える性能 • GPU は 1台あたりCPU の10 倍,20倍速い • 設備投資・消費電力あたりの計算能力も~10倍 • アプリケーションによっては100倍以上高速化したとの報告も多数 12 • 性能だけでみるとそこまで差はないように見えるが • 計算チップとしての設計思想がある点で決定的に違っている
  13. 13. ダイイメージ • Streaming Processor (SP)がint/floatの演算 をおこなうユニット • Streaming Processor ×8 = Streaming Multiprocessor (SM) • SM内のSPは常に同じ 命令を実行 • SP×8 = SM • SM×3 = TPC • TPC×10 = G200 • 240コアというより 30コア×8要素SIMD 13
  14. 14. アーキテクチャ模式図 命令キャッシュ • 1SPが1スレッドを担当 ワープスケジューラ • 命令は4クロックに一度 命令発行ユニット レジスタ 4096本×4バイト • 16スレッドが半ワープ SP SP 倍精度ユニット • メモリアクセスは半ワー 倍精度ユニット プごとにまとめられる SP SP 特殊関数ユニット • 32スレッドが1ワープ SP SP 特殊関数ユニット • 同じ命令を実行 SP SP ロード・ストア Shared Memory 16KB 14
  15. 15. 演算機構造 論理構造 メモリ構造 ----RWともに速い---- レジスタ 4096本×4バイト×30 Shared Memory 16KB ×30 ----Rはキャッシュ/Wは遅い---- Const Memory 64KB Texture Memory ~GB ----RWともに遅い---- Global Memory ~GB ×30 ----PCI Expressの壁---- Host Memory スレッドブロックグリッド SMはいくつかのブロックを並列に実行、ブロックの実行順は未定義 同一ブロック内ではShared Memoryを介した通信が可能 ブロック間の通信手段はGlobal Memoryのみ Const Memoryはホストからのみ書き換え可 Texture MemoryはデバイスからもW可能だがキャッシュに反映されない スレッド数は32の倍数、ブロック数は30の倍数がよい 15
  16. 16. 決定的に違う設計思想 Neharem G200 Fermi (GTX285) (2010Q1予定) ベクトル長 4 8 32 コア数 4 30 16 レジスタ数 40?×4 4096×30 4096×16? スレッド数 2×4 1024×30 ? GPUの設計:レジスタが圧倒的に多い レジスタを退避させることなく膨大な数のスレッドを駆動 様々なレイテンシを隠蔽 16
  17. 17. 最適化に対するCPUとGPUの回答 • メモリが遅いキャッシュヒエ ラルキーをつくって、小さい • 一方GPUでは キャッシュにうまいこと当てる • ただの四則演算が終わるまで スレッドをたくさ にも、数クロックが浪費されて しまうパイプラインをつかい ん立てた 結果をまたずに命令を投入 • 分岐してる時間がもたいない 分岐する方向をあらかじめ 予測してそっちの計算を進め ておく投機的実行 • スカラーの限界がみえてきた んでマルチコアにしてみた • SIMDユニットも積んでみた 17
  18. 18. • 「GPUって240コアとかあるらしいよね」 それどころか、3万並列くらいまで捌けます • 「プログラムを並列にするのって大変じゃない の?」 大変ですが、逆にとにかく並列化するだけで 性能が出るので、そういうアプリケーションな ら性能が出しやすいです 18
  19. 19. 「演算ユニットだけが速くてもねえ」 「GPUへのデータの転送がボトルネックなんでしょ?」 2-2.HPCハードウェアとしてのGPU 19
  20. 20. 計算機全体としての性能は? 多くの場合通信性能がボトルネック 典型的パソコンの模式図 1000BASE-T ホストメモリ 0.125GB/s DDR3 1600 12.8GB/s CPU演算: 90.56GFlops=362GB/s CPU 12GB 計算を L2キャッシュ⇔CPU 行う マザーボード 転送: 150GB/s キャッシュ コンピュータの 基盤 0.012GB CPUプログラムからGPU ライブラリを呼ぶ等の GPU演算: 場合で、ホストメモリか GPU PCI Express 2.0x16 1788GFlops=7152GB/s らの転送がボトルネッ 8GB/s デバイスメモリ⇔GPU 計算を行う ■■■■■■■■ クになってしまうとせっ 転送: 223.8GB/s デバイスメモリ かくのGPUの性能が生 2GB かせない!! 20
  21. 21. 「GPUクラスタ」とCPUクラスタを比べる CPU演算: GPU演算: 計算速度 CPU 90.56GFlops 1788GFlops=7152GB/s =362GB/s キャッシュ GPU GPU 主記憶 DDR3 1600 GDDR3 ■■■■■■■■ ■■■■■■■■ 転送速度 12.8GB/s 223.8GB/s デバイスメモリ デバイスメモリ 2GB 主記憶 ホストメモリ 容量 12GB 「ノード」間 1000BASE-T PCI Express 2.0x16 通信速度 0.125GB/s 8GB/s 全面的にGPU計算に移行すれば、秋葉原で 買える部品で1~2桁上の性能が手に入る。 21
  22. 22. 「パソコン内蔵型」GPUクラスタ ディスク 主電源 CPU 副電源 メモリ GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 温度計 ¥383,806 22
  23. 23. 「パソコン内蔵型」GPUクラスタ 1台で単精度7.1TFlop/s の性能、40万円 パソコンを100台ならべて Infinibandでつないだ程度 Cray 600万/TFlops 1.6TFlop/s 1億円→ ※通信性能が高い 23
  24. 24. • 「GPUへのデータの転送がボトルネックなんで しょ?」 • 「これからはGPUのようなアクセラレータを積んだ HPCが主流となる」  GPUをアクセラレータ(演算機)だと思うと転送が ボトルネックで応用は限られる。GPUはそれ自身 計算機(演算機+主記憶+通信)だと思ったほう がいいかも?  データはホストメモリではなくなるべくグラフィック メモリに置くことがGPUコンピュータでは常識 24
  25. 25. 「さきほどのマシンの作り方を説明します」 2-3.GPUコンピューターを作ろう 25
  26. 26. GPUコンピュータを手に入れよう • まあ、自作できる人なら余裕 • 残念ながら歩留まり向上のため、市販のGPU にはグラフィック表示には問題なくても全演算 機を動かすとたまに計算を間違えるものや落 ちるものが含まれている。メーカーによっては この場合でも返品や、交換に応じてくれる。 • 長崎大学ではGPUを多めに購入して自前でスクリーニン グプログラムを開発している(このへんも安さの秘密)。そ のうちスクリーニングプログラムが公開されたり、GPU計 算用チェック済みGPUが売られるようになるのでは。 26
  27. 27. 材料
  28. 28. ケース
  29. 29. フルオープン . 変形!!
  30. 30. 二連装電源、最大2250Wを供給 主電源 EGX1250EWT 1250W 副電源 SF-1000R14HE 400W 1000W
  31. 31. ケースから分離した基盤上で組立て ぶっちゃけこの部品だけ売って欲しい
  32. 32. マザーボード • GPUとの通信を司るチップを 2枚搭載、通常の2倍の速 「SuperComputer」 度で通信 • 規格上7つある汎用スロット 枠が全部大型GPU用 • 旧式のディスクやキーボー ドはバッサリ非対応 • Ultimate Supercomputing Solution for CUDA Parallel Programming (メーカー)
  33. 33. GPU
  34. 34. 搭載
  35. 35. 4枚目のGPUが色々ふさいでいる このままでは電源を入れられない \(^o^)/ オワタ USBとか ハードディスク 電源/リセット信号
  36. 36. こんなこともあろうかと・・・! 電源/リセット信号線 延長ユニット (標準付属)
  37. 37. こいつ・・・動くぞ!!
  38. 38. GPU選び 赤いGPU AMD メーカー NVIDIA 緑のGPU RADEON R5870 GPU GeForce GTX 295 39
  39. 39. 重要なのは・・・ AMD メーカー NVIDIA RADEON R5870 最高級GPU GeForce GTX 295 2700GFlops (単精度) 演算速度 1788GFlops (単精度) 544GFlops (倍精度) 149GFlops (倍精度) 153.6GB/s 転送速度 223.8GB/s ATI Stream SDK 開発環境 CUDA C Brook+ コンパイラ nvcc 開発環境、 だと私は思います 40
  40. 40. ハードウェア選び • http://en.wikipedia.org/wiki/Comparison_of_ Nvidia_graphics_processing_units が充実 • AMD版もあります。 • おすすめの NVIDIA GPU GeForce GTX 285 GeForce GTX 295 Fermi (予定) 2GBモデル 演算速度 1063GFlops 2x 894GFlops 1500GFlops? デバイスメ 2048MB 2x 896MB 6GB? モリ容量 転送速度 159.0 GB/s 2x 111.9 GB/s ? 市価(万円) 4.5 ~ 5.5 5~6 15-20? 41
  41. 41. 3.NVIDIAのGPUプログラミング言語、 CUDA C 42
  42. 42. CUDA --- NVIDIAのGPU向け開発環境 • CUDA C : ほぼC++互換の言語。GPU上でクラス も演算子オーバーロードもテンプレートも使える • ptx : GPU上の機械語に近い中間言語 • nvcc : CUDA Cのコンパイラ。 • cuda-gdb : Linux向けGPUデバッガ。 • 実行中のGPUプログラムを止めてデバッグできる • thrust : CUDA版STL • サードパーティ製, Apache License 2.0 • FFTやBLAS、その他多数のライブラリも 43
  43. 43. 例)C++で自然数1..500の平方根を求 めるプログラム const int N = 500; void calculate(float* x,float* y){ for (int i = 0; i < N; ++i) { y[i] = sqrt(x[i]); } } • これをCUDAで書き int main () { vector<float> x(N), y(N); なおしてみる for (int i = 0; i < N; ++i) { x[i] = i+1; } calculate(&x[0], &y[0]); for (int i = 0; i < N; ++i) { cout << y[i] << endl; } } 44
  44. 44. 例)自然数1..500の平方根を求めるプ ログラム,CUDA C版 #include <iostream> #include <thrust/thrust_vector.h> __global__ void calculate(float* x, float* y) { int i = threadIdx.x; y[i] = sqrt(x[i]); }  thrust_vectorはthrustを軽く ラップする独自のライブラリで int main () { す(nHDに入ってます)。完全な const int N = 500; thrust_vector<float> x(N), y(N); コードは2ページ後の黒背景 for (int i = 0; i < 500; ++i) { の部分を参照してください。 x[i] = i+1; } calculate <<<1,N>>> (x.ptr(), y.ptr()); for (int i = 0; i < 500; ++i) { cout << y[i] << endl; } } 45
  45. 45. 1..500の平方根を求めるプログラム,比較 C++ CUDA const int N = 500; const int N = 500; void calculate(float* x,float* y){ __global__ void calculate(float* x, for (int i = 0; i < N; ++i) { float* y) { y[i] = sqrt(x[i]); int i = threadIdx.x; } y[i] = sqrt(x[i]); } } int main () { int main () { vector<float> x(N), y(N); thrust_vector<float> x(N), y(N); for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) { x[i] = i+1; x[i] = i+1; } } calculate(&x[0], &y[0]); calculate <<<1,N>>> for (int i = 0; i < N; ++i) { (x.ptr(), y.ptr()); cout << y[i] << endl; for (int i = 0; i < N; ++i) { } cout << y[i] << endl; } } } CUDAではループのかわりに、カーネル関数を並列的に実行 スレッドごとにthreadIdxというのが受け取れる(MPIっぽい) 46
  46. 46. 実行してみる thrust> cat thrust_vector.cu ys = dev_ys; #include <thrust/device_vector.h> for (int i = 0 ; i < N; ++i) { #include <thrust/host_vector.h> cout << "sqrt " << xs[i] << " is " << ys[i] << #include <iostream> endl; using namespace std; } } const int N = 500; thrust> nvcc thrust_vector.cu __global__ thrust> ./a.out void calculate (float *px, float *py) { sqrt 0 is 0 int tid = threadIdx.x; sqrt 1 is 1 float x = px[tid]; sqrt 2 is 1.41421 float y = sqrtf(x); sqrt 3 is 1.73205 py[tid] = y; sqrt 4 is 2 } sqrt 5 is 2.23607 sqrt 6 is 2.44949 int main () { sqrt 7 is 2.64575 thrust::host_vector<float> xs(N),ys(N); sqrt 8 is 2.82843 thrust::device_vector<float> dev_xs(N),dev_ys(N); sqrt 9 is 3 for (int i = 0 ; i < N; ++i) { sqrt 10 is 3.16228 xs[i] = i; ・・・・・ } thrust> dev_xs = xs; calculate <<< 1 , N >>> (thrust::raw_pointer_cast(&*dev_xs.begin()), thrust::raw_pointer_cast(&*dev_ys.begin())); 47
  47. 47. ptxを生成しGPU機械語に迫る thrust> nvcc thrust_vector.cu --ptx ・・・ .entry _Z9calculatePfS_ ( thrust> less thrust_vector.ptx .param .u32 __cudaparm__Z9calculatePfS__px, .param .u32 __cudaparm__Z9calculatePfS__py) { .reg .u16 %rh<3>; thrust> less thrust_vector.cu .reg .u32 %r<8>; ・・・ .reg .f32 %f<4>; __global__ .loc 26 8 0 $LBB1__Z9calculatePfS_: void calculate (float *px, float *py) { .loc 26 10 0 int tid = threadIdx.x;//A cvt.s32.u16 %r1, %tid.x; //A float x = px[tid]; //B cvt.u16.u32 %rh1, %r1; //A float y = sqrtf(x); //C mul.wide.u16 %r2, %rh1, 4; //r2 = 4*tid.x py[tid] = y; //D ld.param.u32 %r3, } [__cudaparm__Z9calculatePfS__px]; //B ・・・ add.u32 %r4, %r3, %r2; //B ld.global.f32 %f1, [%r4+0]; //B .loc 26 12 0 sqrt.approx.f32 %f2, %f1; //C ld.param.u32 %r5, [__cudaparm__Z9calculatePfS__py]; //D add.u32 %r6, %r5, %r2; //D st.global.f32 [%r6+0], %f2; //D .loc 26 13 0 exit; $LDWend__Z9calculatePfS_: } // _Z9calculatePfS_ ・・・ 48
  48. 48. CUDA Cの利点 • C(C++)を知っていれば覚えることはわずか • GPU上で並列に実行したい関数(カーネル)には __global__などの印をつける • そして関数名<<<ブロック数,スレッド数>>>(引数, 引数,…) でカーネル呼び出し • C++言語の強力な機能がGPU上で使える。第3 者がthrustなるSTLを作れるのが何よりの証拠。 • テンプレート魔術によりホスト⇔デバイスの自動転送 はむろん、GPUの最適なスレッド数を調べてアルゴリ ズムを並列実行します • 機械語も見れて中を覗かないと落ち着かない変 態ハッカーも安心 49
  49. 49. 4.CUDAの勉強 50
  50. 50. CUDAでGPUプログラミングを勉強する • GPUコンピュータを用意 • CUDA ZONE からCUDA3点セットをダウンロードしてイ ンストール • gpgpu.org や CUDA ZONE をみて最新の成果を確認 • わからないことはNVIDIA Forum で検索&質問 • thrust (データ管理), CUFFT(), CUDPP(ソート等) • google-testでテストしながらコードを成長させる • google code で自分のコードのサイトを作って公開 • gpgpu.org や CUDA ZONEに投稿! 51
  51. 51. CUDAドライバ、CUDAツールキット(コンパイラ)、SDK(サ ンプル集)をダウンロード。ドキュメントやデバッガ、プロ ファイラもあります。 http://www.nvidia.com/object/cuda_get.html 日本語版は周回遅れなのでUSA版にGO!! 52
  52. 52. ドキュメント CUDA Programming Guide CUDAの説明が書いてあるからまず必ず読むべき CUDA Best Practices Guide 最適化に重要なことが書いてあるからぜひ読むべき CUDA Reference Manual APIのリファレンスなので印刷して手元に CUDA GDB User Manual すごいデバッガなのでぜひ使うべき CUDA PTX ISA document GPU機械語解読の手掛かり、マニアになりたい方に http://www.nvidia.com/object/tesla_software.html 53
  53. 53. GPUをつかった成果をユーザーが投稿し、査読を通る と紹介されます。何倍速くなったかが載っている。講義 の動画などもあるよ。 http://www.nvidia.com/object/cuda_home.html# 54
  54. 54. GPGPUにまつわるニュースサイト http://gpgpu.org/ 55
  55. 55. CUDAに関する質問ができる。英語版のほうが 充実はしている。日本語版も十分親切です。 http://forum.nvidia.co.jp/ 56
  56. 56. 自分のGPUコードを作って公開しよう! http://code.google.com/p/astro-attic/wiki/NHDIntroduction 57
  57. 57. GPUって使えるの? 5.GPUコンピューティングの現状 58
  58. 58. 使える。 使われている。速くなっている! コンピューター視覚 量子化学 たんぱく質 金融市場の予測 シミュレーション シミュレーション 雷のシミュレーション 疎行列の積 ロボット手術 遺伝子解析 59
  59. 59. • 宇宙物理学でも・・・ • N体計算(Hamada&Nitadori, Gordon Bell Prize!) • 流体 • Adaptive Mesh流体 (台湾国立大学) • 磁気流体(マカオ、北京) • Godunov Method (京大) • 最近GPU+AMR+MHDが出た(Peng Wang, Tom Abel) • データ解析 など 60
  60. 60. arXiv:0907.3390 台湾大学 61
  61. 61. arXiv:0908.4362 62
  62. 62. Peng Wang(Tom Abelの弟子) Stanford Univ. 博士論文 abstract GPUAMR MHD
  63. 63. 複数のコンピュータが 協力して数値計算する nHD (by 村主) こと 衝撃波のない所では、 精度を上げてシミュ 解析解をあてはめて、 レートする手法 衝撃波をきちんとシ ミュレートできる手法 • MPI GPU Full Godunov 2nd order MUSCL 3次元 一様メッシュ Euler方程式ソルバー AMRとかはとくになし 圧縮性流体の基礎方程式、粘性なし • GPUが複数装備されたマシンを複数台連結したクラスタ上 で流体計算が実行できます • Full Godunovなので、強い衝撃波、真空、何でも来いです • テスト駆動開発なのでさまざまなテストが済んでいます • BSDライセンスで公開開発中: http://code.google.com/p/astro-attic/wiki/NHDIntroduction 64
  64. 64. 計算速度 あのパソコン1台で  CPU GPU ハード Core i7 920, シングルスレッド GTX 295 , 1チップ,通信なし 問題設定 128 x 128 x 128, 斜め衝撃波問題, 0.12 sound crossing time 所要時間 8分 46.887 秒 7.509 秒 速度比 1 70 ハード Core i7 920, シングルスレッド GTX 295 , 4チップMPI 問題設定 128 x 128 x 512, Blast 問題, 1.6 sound crossing time (長辺) 所要時間 1日 2時間 39分 46秒 9分 13.437 秒 速度比 1 173 PRELIMINARY (CPU/GPUいずれも未最適化コードです) 65
  65. 65. GPUスパコンで 今世界の最先 端を走っている 国は?
  66. 66. 日本最強のスパコン • 10PFlop/s • 1230億円 • のはずだったが・・・ 68
  67. 67. 日本のGPUスパコン 158TFlop/s Gordon Bell Prize Awarded! 東工大TSUBAME 長崎大学DEGIMA 名古屋大学 1億2000万(GPU代) 予算 3800万円 1億7000万円 56Tflop/s(GPU部) ピーク性能 700Tflop/s 建設中 (単精度) ??? ?? 消費電力 150kW ??? 70
  68. 68. 京速 v.s. Cray v.s. GPU 計算力 10PFlop/s ~1PFlop/s 158TFlop/s 価格 1230億円 ??? 3800万円 C/P 1230万円/TFlops 600万円/TFlops 24万円/TFlops 計算 対象 汎用 汎用 未知数 71
  69. 69. 「真珠湾攻撃」 • 濱田・横田・似鳥さんはTree-N体コード(並列化 は困難)を190ノード760GPUで動かし、SCに出発 する直前に10倍の高速化に成功 • 長崎大学のGPUクラスタは今年度のSCでゴード ンベル賞が受賞確実視されていた。それを受け ての濱田氏の言葉(その後受賞) • 今年の受賞により日本はGPUスパコンの有効性 を世界に示すことになるだろう。だがこのままで は米国の国力に敗北する。 • 現在米国・中国で30PFlops級のGPUスパコンが 計画中
  70. 70. このままでいいのか • GPU・メニイコアは一過性のブームではない。なぜ なら1コアの速度は電磁気・量子論的限界に近づ いているので、コアをこれ以上速くできない。とな ればコアをたくさん並べるしかない • 遅かれ早かれ、高性能並列計算機はGPU型、さら にはGPUの進化したメニイコア計算機が占める • 昔のものを使いつづけたい気持ちはわかるしそう できれば科学に集中できて一番良い • のだが最先端のコンピュータはどんどん変わって いくのでそうもいかない
  71. 71. 6.GPUでペタコンを作ったら? 74
  72. 72. GPUペタコンを本気で考えてみる • とある宇宙物理学の学会で出た「ペタコンで挑み たい未解決問題」 • Vlasov方程式を解くために500TBくらいメモリが欲しい • 分子雲乱流から1stコア形成までを一様メッシュで分 解するためには10000^3 の流体計算(40TB)がしたい • 計算実行中に可視化まですませたい • この要求を真に受けてGPUスパコンを設計して みる • 真剣なので楽観的予測はなし、あくまで現在もし くは将来確実に手に入る部品のみ。ムーアの法則 等、低コスト化の効果は使わない
  73. 73. 定量的通信性能比較再訪 CPU演算: GPU演算: 計算速度 CPU 90.56GFlops 1788GFlops=7152GB/s =362GB/s キャッシュ GPU GPU 主記憶 DDR3 1600 GDDR3 ■■■■■■■■ ■■■■■■■■ 転送速度 12.8GB/s 223.8GB/s デバイスメモリ デバイスメモリ 2GB 主記憶 ホストメモリ 容量 12GB 「ノード」間 1000BASE-T PCI Express 2.0x16 通信速度 0.125GB/s 8GB/s GPUノードを複数並べようと思ったら通信が PCIExpressなみ必要。GBeでは苦労する。 76
  74. 74. 高速ネットワーク • Infiniband SDR…10Gb/s QDR … 40Gb/s (定番) • 36ポートQDRのスイッチが200万円、カード15万円 • Myrinet 20Gb/s (リーズナブル) • 32ポートのスイッチが40万円、カード6万円 • 32ポートスイッチを使って3次元トーラスを作る。12ポート をスイッチ間通信に使い、20ポートにノードをぶら下げる • ノードはFermi3枚、NIC(Network Interface Card)1枚 • 第2世代GPUの方が安価でいて今CudaZoneにあるような 研究はすべて可能なのだが、より多くの人が使えるように (Fortran,C++も動く?)高価なFermiで悲観的見積もり x+1 y+1 x+1 z+1 y+1 z+1 計算ノード スイッチ x-1 y-1 x-1 z-1 y-1 z-1
  75. 75. 新生ペタコン計画試算 構成 20×8×8×4 20×8×8×16 (5120ノード) (20480ノード) 部品 ノードあたり価格 10Pに必要な費用 Vlasovに必要な費 現行 (万円) (万円) 用(万円) Myrinet 32 40/20ノード 10240 ポートスイッチ Myrinet NIC 6 30720 Fermi GPU 15x3 230400 メモリ24G 9 46080 マザーボード、 11 56320 CPU、電源 設備費用合計 73 37億3760 149億5040 +700億 倍精度性能 0.768TFlops 11.796PFlops 47.186PFlops 10PFlops x3 ?? 消費電力 0.3Gflops/W 3.538MW 14.152MW 36億円/yr 10円/kWh 3.09億円/yr 12.36億円/yr 下がる予定
  76. 76. 現状の流体コードを(弱く)スケール させることができたら・・・? • (9*60+13)*(1.788/2)/0.768* 10000**4/(128*128*512*512*1.6) * (4.0/(3*5120)) / 86400 => 2.82342736296417(day/sound crossing) • 10000**3/(5120*3.0) * 40 / 1e9 => 2.60416666666667(GB/Fermi) • (10000**3/(5120*3.0))**(1.0/3.0) => 402.287243585679(Mesh/Fermi) • 12Pプランでは10000^4 の 流体計算が、sound crossing timeあたり3日で解ける。 • 47Pプランなら0.7日でsound crossing • 解像度を2倍妥協すればこの16倍速くなります
  77. 77. 見積もりの妥当性 • 今のコードはGPUあたり128^3メッシュで解いているが、 見積もりは約402^3になる。表面積に対する体積が大 きいほど通信が楽になるセンス妥当 • 今のコードは流体データがデバイスメモリにあることに 速度を依存恐るべきことに10000^3の流体が Fermiなら全部デバイスメモリに載ってしまう。妥当 • スパコンの費用はふつう通信系が支配するのにGPU スパコンでは演算装置が支配する。だから通信系は Myrinetといわず最高速のものを買えばOK PCIExpressより速いものすらあるので妥当 • むしろ今のコードは無駄をしてるのでもっと速くできる • 前ページの見積もりの速度が出る可能性は高い
  78. 78. • プログラムは1から書き直し。すべての分野 の計算に使えるわけではないし、実績がまだ あまりないので、汎用京速計算機を置き換え うるものではないが、挑戦する価値はあるの では。 • ハードを作るのは性能に比例した費用が必 要だがソフトはそこまで費用はいらない。むし ろ長期的視野にたって科学・工学のために必 要なツールを整備するのが基礎科学の役目 ではないか
  79. 79. 7.GPU(メニイコア)の将来、GPUの次 82
  80. 80. GPU・メニイコアで 何ができないだろうか? たとえば・・・ • メモリ量が増えるわけではない。 • 速いメモリがなるたけ欲しいという計算は多い • GPUのメモリは速いがホストのよりは少ない • 通信の性能は改善するわけではない。むしろ flopsあたりの通信性能は落ちる。 • 低レイテンシ通信の要求 • 大帯域幅通信の要求 83
  81. 81. GPU・メニイコアで 何ができるだろうか? • 計算量が必要な人に • 分野により向き不向きはあるだろう • 不向きと言われていたにもかかわらずアルゴ リズムをがらりと変えて成功した分野も • いろんな人が研究時間を食わない程度に試 してみればよい。速くなればラッキー • 多様なハードウェアが出現し、それぞれの分 野が必要とするスパコンをカスタム設計でき る未来が望ましい。 84
  82. 82. GPUが使いにくい例1:ライフサイエンス • MDのタイムステップ(Δ t) は1フェムト(10-15)秒程度 が限界。←タンパク質の場合、 最も速い運動である結合の伸縮 は10-14秒程度の周期であるため、 Δ tは1フェムト秒程度が選ばれ る。 • タンパク質のフォールディング時 間はミリ秒 • 1012ステップがどうしても必要! 安藤格士さんのスライドより • 原子数が決まっているため無限 タンパク質304+水原子7,377= に並列化できるわけではない。 原子数7,681  低レイテンシ、高速ハードウェア 巨大タンパク質複合体は~MDa が欲しい!! (メガダルトン)=数十万原子くらい 85
  83. 83. GPUが使いにくい例1:多くのタイムス テップが必要な計算 星形成 タンパク質 分子シミュレーション フォールディングミリ秒/結合の振動フェムト秒 星雲の寿命1000万年/星の振動5分 =1012ステップ =1012ステップ アミノ酸を球やバッグで近似したり、溶媒水の 星が形成しはじめた時点で「星のモデル」 効果を簡易化したりしているが、水素結合1つ に置き換え、タイムステップを軽減 が大きな部品を動かしたり、簡単ではない 粗視化、統計性をつかさどる階層性の科学 大スケール現象に、微小で高速な震動が が必要! 与える影響は、統計的なもの。 真に1012ステップ必要な計算はあるか? 86
  84. 84. GPUが使いにくい例2:量子化学 • 1原子あたり15~50の基底関 量子化学シミュレーション 数、アミノ酸1、2個で20原子と するとN=300 • アルゴリズムにもよるがFMOな ら最低限O(N^3)のメモリと O(N^5)の計算量が必要 216MB • というわけでアミノ酸2,3個が 1GPUに乗る限界。毎ステップ 原子をただの粒とみなすのではなく、 全対全通信をするので複数 原子核のまわりの電子状態を計算し、 GPUにすると性能がた落ち 原子のあいだにはたらく力をより正確 • O(N^6)の演算量とO(N^5)のメ に計算しながら、分子をシミュレーショ モリを必要とするアルゴリズム ンする一連の手法。 もある 東工大の西川武志さんより 87
  85. 85. GPUが使いにくい例2: 多くのメモリが必要な計算 運動論のシミュレーション • 多くの、できれば高速な、 できればお互いの通信が 速いメモリが欲しい計算と f ( x, y, z, vx , v y , vz ) いうのはいくらでもある • 1ノードにつめるメモリには 限度があるし、膨大なデー タを1プロセッサで処理して いては時間がかかるので • プラズマの位置と速度の分布 f が やはり並列計算の発達が 6次元場のため、一辺の解像度を NとするとO(N^6)のメモリが必要 必要 • しかし、速度方向の分布は特徴が あるため、うまい表現を考えてメモ リ消費を減らし計算量を増やすこと は可能かも・・・・ 88
  86. 86. GPU利用が難しい・・・と言われていたが 実現してしまった例:粉体 地球シミュレーター 阪口 秀 西浦 泰介 GPUの専門家にすら、移植は困難といわれ ていた(隣接関係が変わっていったり、1粒 子に集中的にアクセスすることが必要)。 まったく新しいアルゴリズムにすることで GPUでピークに近い性能を出すことに成功! 雇用予算が事業仕分けで計上見送り 89
  87. 87. GPUの勃興は何をもたらすか • GPU計算機は通信ハードウェアコストが副次的 高性能通信ハードウェアへの需要が高まる 低レイテンシ、高帯域幅ハードウェアが出現? ライフサイエンスの人など、高性能通信が欲し い人が喜ぶ!(宇宙の人もよろこぶ) それより重要なこと:人が、並列性を理解し使い はじめること 90
  88. 88. GPUは安くありつづけるだろうか • ハードの価格=(初期投資)÷(売れた数) • GPUとしてはオーバースペックなFermiやSCC やその他メニイコア演算ユニットが、パソコン レベルまで普及しなければ、安くて速い計算 機が手に入らなくなるかも・・・ 91
  89. 89. メニイコアがパソコンレベルに 普及すると私が信じる理由 コンピューターと人間 何が違う? 92
  90. 90. 自然界の並列性 • 宇宙には数千億の銀河 • 銀河には数兆の星 • 地球には無数の生命 • 人には60兆の細胞 • 脳細胞は140億個 すべてが同時に動いている 93
  91. 91. 認識の並列性 • 140億コア(?)トランジスタ(?) ×500Hz(?) =ピーク性能7TFlops(?) • 実効性能~0.01Flops • 1日ごとに数万個のトランジス タが壊れる • でも、とても多機能、柔軟、ディ ↑7TFlops ペンダブル Priceless • スカラー性能はなくても膨大な 並列性があれば可能になるタ 7TFlops 40万円 シミュレーションしか スクの存在を強く示唆 できない 94
  92. 92. 人間が入力したデータの処理から、 世界をじかに認識し、働きかける情報論へ • 今あるアプリはメニイコアでただちに速くなるわけで はない。だから、メニイコアが無用 • と思う人は見逃している:メニイコアでこそ動くような、 普及を後押しするような、今は想像もできないような アプリが生まれる可能性を!! • 今想像できるのは・・・実世界認識?はてまた人工 知能? cv 95
  93. 93. GPUコンピューティング・メニーコアコンピュー ティングの産業規模のオーダー評価 スパコンにしか使われなかった場合 • Cray:62億円(年商) プロが使うソフトウェアができた場合 • Dassault Systems社(自動車CAD):1790億円 • Adobe社(フラッシュ):1660億円 ゲームに使われた場合 • 任天堂:1兆円 社会基盤となるソフトウェアに採用された場合 • Google:2兆円 • マイクロソフト:5兆円
  94. 94. 京速計算機に、仕分け人曰く • 「一時的にトップを取る意味はどれくらいある か」 • 「一番だから良いわけではない」 • 「ハードで世界一になればソフトにも波及とい うが分野で違う」
  95. 95. 俺なりの答え • たしかによいサイエンスが伴わなければハードで 一時的に一番をとってもあまり意味がない  速いコアをたくさん並べるというのが一番性能がでるので、 ベクトル/メニイコア系の流れは(何度か)来るだろう 今ならメニイコア世界に一番乗りできる。俺たちが メニイコアコンピューティングという新学問、新産業 を興す。国産ソフト、人材を売れる。  一番=金を払えば得られる定量的アドバンテージと一番 乗り=誰よりも先んじて知っている定性的アドバンテージ は全然違う
  96. 96. むすび • 情報論はずっとスカラー前提に発展してきた • スカラーの周波数はもうあまり上がらない。SiGe とかで上がっても、それをメニイコア化すれば もっと性能が出る並列情報論の必要性 • ハードが出てしまったいま、ハードがないから理論 がない⇔理論がないから使いたくない⇔使われないから ハードが出ないのスパイラルを打ち破りメニイコア を使おう。理論を作ろう。自然科学を研究しよう。 99
  97. 97. GPUができなかったこと • 低レイテンシ通信、大容量メモリ・・・ • しかし、↑をはじめ、あらゆるHPCを使いこな すうえで、並列性の理解は大きな助けになる だろう。 • GPUはその発火点となりうる • GPUだけでなく、多様なハードウェアが未来に 生まれるように。それらを使いこなせるように。 みんなが驚き、喜ぶような発明をするために。 100
  98. 98. 以下 予備 101
  99. 99. 補.次世代GPUコンピュータ、Fermi 102
  100. 100. 2009/09/30 発表 GPU Technologies Conference http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Archit ecture_Whitepaper.pdf 103
  101. 101. Fermi Jen-Hsun Huang NVIDIA President&CEO 104
  102. 102. Fermiとは • NVIDIAの第3世代汎用GPU • 汎用GPUに乗り出した第1世代(G80; 8800GTX…)、それを拡張した第2世代(G200, GTX 280)の時代に、数値計算ユーザーから 得たさまざまな意見をもとに抜本的な再設計 を施された • 自然科学に自然に使えるレベル 105
  103. 103. おさらいーCPUとGPU Core i7 : 731万トランジスタ 106
  104. 104. CPUとGPU Core i7Fermi : 30億トランジスタ : 731万トランジスタ 107
  105. 105. 自然科学にとっての大きな進歩 Fermiの進歩 • 512コア、倍精度演算の完全サポート • じつは現時点で唯一の倍精度融合乗加算(MAD)をサポート するハードウェア • ある人の推測:単精度1.5TFlop/s, 倍精度768GFlop/s • 自動キャッシュの装備 • 全メモリにECC(誤り訂正符号)を標準装備 • GPU版ハイパースレッディング 「ベクトル計算機よりも高度な何か」に仕上がっ ている 108
  106. 106. Streaming スケジューラ= TA Multiprocessor = 次にどの計算を するか決めて司 32core 令する。 Core=M1 整数・実数の四則演 算が可能、 倍精度もOK SFU= D3 sin, cos, hypsin, log, exp, erf, gammaなど特殊 関数を計算する x16 109
  107. 107. Fermiのキャッシュ構造 メモリ=図書館 メモリL2 L1の 間は必要なデータが 自動的にコピーされる L2キャッシュ=研究 室の本棚 768KB L1キャッシュ=机の 上に広げた本 64KB いままでL2はなかった。 L1は16KBで、全手動だった。 レジスタ=計算用 紙 L2のおかげでSM間の通信が大幅 に高速化される。 プログラムも楽 になる。 110
  108. 108. ECC(誤り訂正符号)について • 計算機は精度のよい宇宙線ディテクター • 計算機は数を電圧により2進数で表現しているんだが、あま りにも素子が小さいので、2次宇宙線が飛び込んできてビット を反転させることがある(メモリー内の数値が偶然に変化す る)。GPUはゲーム用なのであまり気にしてこなかった。 • ECC=典型的にはメモリ64bitにつき冗長8bit を付加。1ビットの過ちならどこが反転したの かまで含めて検出し、訂正できる。 • FermiではすべてのメモリにECCを装備 • もはやFermiでは宇宙線を観測できない!! 111
  109. 109. スケジューラ= TA が2人いて、コア =M1が片手でも 空いていれば計 算をやらせる。 Core i7がやって いるhyper threading相当の 機能 カーネルの同時実行が可能に。一部のテーブルである計算をやってい る間のこりが全然別種類の計算を進めることができる。 112
  110. 110. 「汎用GPU」から「GPU型計算機」へ • 他にも、「普通の」プログラムを実行する上で 必須の改良が加えられている。 • 普通のFortran, C, C++ プログラムが難なく倍 精度でFermi上で100~200倍の速度で動く 可能性がある(主に自動キャッシュのおかげ)。 • 性能を引き出すには、ものすごい数で(予想: 512コア×128スレッド/コア=65536並列)並列 化されたアルゴリズムを書かないといけない。 これは使う人の担当。そうすればFermiは全 力で応えてくれる。 113
  111. 111. Fermiへの懸念と期待 • まあ、自社製品の広告だし • 倍精度が8倍速くなったって言ってるのはRadeonと比べても元が遅 かったから • どこまで公約どおり動くのかは使ってみるまで安心はできない • NVIDIA毎年赤字だとか歩留まりが製品化できないレベルだとかいう噂 もあるし発売日がずれたりしている • そもそもこんなもん本来のGPUとして売るには高機能すぎ、値段がどう なるのか心配 • がんばって世に出していただければGPU計算が 容易になり、数値自然科学は大いに恩恵をこう むるだろう。 正にNVIDIAの社運を賭けた汎用GPU型決戦並機 列計算 114
  112. 112. まとめ GPUについて • 安くて速い。さまざまな計算が100倍速に • 1つのカードで数万並列の計算をしないと性能は生か せない。しかし自然科学にはそういう課題がたくさんあ るはず。 • 1つのカードに計算能力が濃集してることで、逆に通 信に余裕が出るケースもある 1つのGPUパソコンをつくってスパコンを手に入れよう! GPUクラスタを作れば世界の頂点が見える。 • たとえGPUが滅びても、こういう超多並列ハードウェア はこれからの計算機の主流の1つではありつづける だろう。 計算機にとらわれて目的を見失ってはこまりますが、たくさんある重要な課題の中から それぞれの計算機に適したものを選ぶことは必要かと。そのためにはある程度計算機 についても知っておくとよいかとおもいます。 いっしょにGPUを勉強して使いましょう!! 115

×