Your SlideShare is downloading. ×
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,029

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,029
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GPUコンピューティングの現状と スーパーコンピューティングの未来 村主崇行 1
  • 2. 自己紹介 • 京都大学 物理学第二教室 天体核研究室 • 専門は宇宙物理学 「地球より大きいもの全てが対象」 • しかし、宇宙の現象は直接実験ができないの で、シミュレーションの利用がさかんです • ひょんなことからGPGPUの存在を知ったので 最近勉強しています 2
  • 3. 宇宙物理学のシミュレーションテーマ ニュートン重力 一般相対性理論 磁気流体力学 (時空・座標) 流体力学 (プラズマ) (気体・液体) 高温・高密度物質・ 素粒子論etc ・・・ 輻射輸送 運動論(荷電粒子の (光の放出・反射・ 加速やビームなど) 吸収・伝搬) 3
  • 4. 宇宙の研究とぼくらの生活 一般相対性理論 (時空・座標) 磁気流体力学 流体力学 (プラズマ) (気体・液体) 重力は時間を、空間を曲げる プラズマが吹き荒れる宇宙! 太陽風・宇宙天気は 「どんなにゆがんだ 人工衛星の死活問題 座標でも怖くない」 人工衛星の時計は 地上より速く進む! 核融合も実用化?! 乗り物の設計・気流 シミュレーション 気象&海洋シミュレーション 一般相対論を使わないと・・・ GPSは1日20kmも狂っていく 4
  • 5. おことわり • 宇宙物理学には特にGPUに向いている課題 が結構あるので、僕はけっこう楽観的です。 そうでない人が聞いたら鼻につくことをお詫びしますm(_ _)m • 他の分野の事情もぜひ知りたいのです • 宇宙物理学にもGPU的なものに適さない課題は いっぱいあるので、ぜひ「GPUの次」をいっしょに 考えたいと思っています • しか勉強してません。 関 係の人ごめんなさい。 にも期待して ます! • 本日お話する内容は私の知識の範囲内での私的所感でして、PFI、京都大学そ の他組織の公的意見とは関係ございません 5
  • 6. もくじ 1. GPGPUとは?なぜGPUを使うのか 2. ハードウェア  演算機としてのGPU  HPC部品としてのGPU  GPUコンピュータを作ろう 3. GPUプログラミング言語と開発環境 4. GPUプログラミングの勉強のしかた 5. GPUコンピューティングの現状 6. GPUでペタコンを作ったら? 7. GPU(メニイコア)の将来、GPUの次 6
  • 7. 1.GPUとは? 7
  • 8. と の違い GPUはコア(計算する人)の数が多い! 周波数(ひとりの計算する速度)は1/3程度 4コア+hyper-threading 480コア (SSEを使うと16コア) 8
  • 9. The difference between and . 米国Roadrunner 長崎大学 DEGIMAクラスタ 1億3300ドル 予算 3800万円 1,457Tflop/s ピーク性能 700Tflop/s 安い! 9
  • 10. GPUとは?なぜGPUを使うのか? =>安価な超メニーコア計算機 • GPU(Graphics Processing Unit)とは • もともとコンピュータグラフィック(CG)描画専用の装置 • CG技術の発展にともない、GPUの仕事が多様化。 2006年後半から汎用GPU(GPGPU)へと進化 • 並列演算性能が高い • 500個程度の演算ユニット • 非常に安価 • パソコンの部品として量産されているため。 • 1T flops ~ 3万円程度 (Crayの相場は600万円/TFlops) • 価格性能は一般的なスパコンに比べ100倍ぐらい良い GPUコンピューティングが現実的に 10
  • 11. 「GPUって240コアとかあるらしいよね」 「プログラムを240並列にするのって大変じゃないの?」 2-1.演算機としてのGPU 11
  • 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. ダイイメージ • 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. アーキテクチャ模式図 命令キャッシュ • 1SPが1スレッドを担当 ワープスケジューラ • 命令は4クロックに一度 命令発行ユニット レジスタ 4096本×4バイト • 16スレッドが半ワープ SP SP 倍精度ユニット • メモリアクセスは半ワー 倍精度ユニット プごとにまとめられる SP SP 特殊関数ユニット • 32スレッドが1ワープ SP SP 特殊関数ユニット • 同じ命令を実行 SP SP ロード・ストア Shared Memory 16KB 14
  • 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. 決定的に違う設計思想 Neharem G200 Fermi (GTX285) (2010Q1予定) ベクトル長 4 8 32 コア数 4 30 16 レジスタ数 40×4 4096×30 4096×16? スレッド数 2×4 1024×30 ? GPUの設計:レジスタが圧倒的に多い レジスタを退避させることなく膨大な数のスレッドを駆動 様々なレイテンシを隠蔽 16
  • 17. 最適化に対するCPUとGPUの回答 • メモリが遅いキャッシュヒエ ラルキーをつくって、小さい • 一方GPUでは キャッシュにうまいこと当てる • ただの四則演算が終わるまで スレッドをたくさ にも、数クロックが浪費されて しまうパイプラインをつかい ん立てた 結果をまたずに命令を投入 • 分岐してる時間がもたいない 分岐する方向をあらかじめ 予測してそっちの計算を進め ておく投機的実行 • スカラーの限界がみえてきた んでマルチコアにしてみた • SIMDユニットも積んでみた 17
  • 18. • 「GPUって240コアとかあるらしいよね」 それどころか、3万並列くらいまで捌けます • 「プログラムを並列にするのって大変じゃない の?」 大変ですが、逆にとにかく並列化するだけで 性能が出るので、そういうアプリケーションな ら性能が出しやすいです 18
  • 19. 「演算ユニットだけが速くてもねえ」 「GPUへのデータの転送がボトルネックなんでしょ?」 2-2.HPCハードウェアとしてのGPU 19
  • 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. 「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. 「パソコン内蔵型」GPUクラスタ ディスク 主電源 CPU 副電源 メモリ GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 温度計 ¥383,806 22
  • 23. 「パソコン内蔵型」GPUクラスタ 1台で単精度7.1TFlop/s の性能、40万円 パソコンを100台ならべて Infinibandでつないだ程度 Cray 600万/TFlops 1.6TFlop/s 1億円→ ※通信性能が高い 23
  • 24. • 「GPUへのデータの転送がボトルネックなんで しょ?」 • 「これからはGPUのようなアクセラレータを積んだ HPCが主流となる」  GPUをアクセラレータ(演算機)だと思うと転送が ボトルネックで応用は限られる。GPUはそれ自身 計算機(演算機+主記憶+通信)だと思ったほう がいいかも?  データはホストメモリではなくなるべくグラフィック メモリに置くことがGPUコンピュータでは常識 24
  • 25. 「さきほどのマシンの作り方を説明します」 2-3.GPUコンピューターを作ろう 25
  • 26. GPUコンピュータを手に入れよう • まあ、自作できる人なら余裕 • 残念ながら歩留まり向上のため、市販のGPU にはグラフィック表示には問題なくても全演算 機を動かすとたまに計算を間違えるものや落 ちるものが含まれている。メーカーによっては この場合でも返品や、交換に応じてくれる。 • 長崎大学ではGPUを多めに購入して自前でスクリーニン グプログラムを開発している(このへんも安さの秘密)。そ のうちスクリーニングプログラムが公開されたり、GPU計 算用チェック済みGPUが売られるようになるのでは。 26
  • 27. 材料
  • 28. ケース
  • 29. フルオープン . 変形!!
  • 30. 二連装電源、最大2250Wを供給 主電源 EGX1250EWT 1250W 副電源 SF-1000R14HE 400W 1000W
  • 31. ケースから分離した基盤上で組立て ぶっちゃけこの部品だけ売って欲しい
  • 32. マザーボード • GPUとの通信を司るチップを 2枚搭載、通常の2倍の速 「SuperComputer」 度で通信 • 規格上7つある汎用スロット 枠が全部大型GPU用 • 旧式のディスクやキーボー ドはバッサリ非対応 • Ultimate Supercomputing Solution for CUDA Parallel Programming (メーカー)
  • 33. GPU
  • 34. 搭載
  • 35. 4枚目のGPUが色々ふさいでいる このままでは電源を入れられない \(^o^)/ オワタ USBとか ハードディスク 電源/リセット信号
  • 36. こんなこともあろうかと・・・! 電源/リセット信号線 延長ユニット (標準付属)
  • 37. こいつ・・・動くぞ!!
  • 38. GPU選び 赤いGPU AMD メーカー NVIDIA 緑のGPU RADEON R5870 GPU GeForce GTX 295 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. ハードウェア選び • 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. 3.NVIDIAのGPUプログラミング言語、 CUDA C 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. 例)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. 例)自然数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]); } int main () { const int N = 500; thrust_vector<float> x(N), y(N); 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. 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. 実行してみる 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. 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. CUDA Cの利点 • C(C++)を知っていれば覚えることはわずか • GPU上で並列に実行したい関数(カーネル)には __global__などの印をつける • そして関数名<<<ブロック数,スレッド数>>>(引数, 引数,…) でカーネル呼び出し • C++言語の強力な機能がGPU上で使える。第3 者がthrustなるSTLを作れるのが何よりの証拠。 • テンプレート魔術によりホスト⇔デバイスの自動転送 はむろん、GPUの最適なスレッド数を調べてアルゴリ ズムを並列実行します • 機械語も見れて中を覗かないと落ち着かない変 態ハッカーも安心 49
  • 49. 4.CUDAの勉強 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. CUDAドライバ、CUDAツールキット(コンパイラ)、SDK(サ ンプル集)をダウンロード。ドキュメントやデバッガ、プロ ファイラもあります。 http://www.nvidia.com/object/cuda_get.html 日本語版は周回遅れなのでUSA版にGO!! 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. GPUをつかった成果をユーザーが投稿し、査読を通る と紹介されます。何倍速くなったかが載っている。講義 の動画などもあるよ。 http://www.nvidia.com/object/cuda_home.html# 54
  • 54. GPGPUにまつわるニュースサイト http://gpgpu.org/ 55
  • 55. CUDAに関する質問ができる。英語版のほうが 充実はしている。日本語版も十分親切です。 http://forum.nvidia.co.jp/ 56
  • 56. 自分のGPUコードを作って公開しよう! http://code.google.com/p/astro-attic/wiki/NHDIntroduction 57
  • 57. GPUって使えるの? 5.GPUコンピューティングの現状 58
  • 58. 使える。 使われている。速くなっている! コンピューター視覚 量子化学 たんぱく質 金融市場の予測 シミュレーション シミュレーション 雷のシミュレーション 疎行列の積 ロボット手術 遺伝子解析 59
  • 59. • 宇宙物理学でも・・・ • N体計算(Hamada&Nitadori, Gordon Bell Prize!) • 流体 • Adaptive Mesh流体 (台湾国立大学) • 磁気流体(マカオ、北京) • Godunov Method (京大) • 最近GPU+AMR+MHDが出た(Peng Wang, Tom Abel) • データ解析 など 60
  • 60. arXiv:0907.3390 台湾大学 61
  • 61. arXiv:0908.4362 62
  • 62. Peng Wang(Tom Abelの弟子) Stanford Univ. 博士論文 abstract GPUAMR MHD
  • 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. 計算速度 あのパソコン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. GPUスパコンで 今世界の最先 端を走っている 国は?
  • 66. 日本最強のスパコン • 10PFlop/s • 1230億円 • のはずだったが・・・ 68
  • 67. 日本のGPUスパコン 158TFlop/s Gordon Bell Prize Awarded! 東工大TSUBAME 長崎大学DEGIMA 名古屋大学 ?? 予算 3800万円 1億7000万円 170Tflop/s ピーク性能 700Tflop/s 建設中 (単精度) ??? ?? 消費電力 150kW ??? 70
  • 68. 京速 v.s. Cray v.s. GPU 計算力 10PFlop/s ~1PFlop/s 158TFlop/s 価格 1230億円 ??? 3800万円 P/C 1230万円/TFlops 600万円/TFlops 24万円/TFlops 71
  • 69. 「真珠湾攻撃」 • 濱田・横田・似鳥さんはTree-N体コード(並列化 は困難)を190ノード760GPUで動かし、SCに出発 する直前に10倍の高速化に成功 • 長崎大学のGPUクラスタは今年度のSCでゴード ンベル賞が受賞確実視されていた。それを受け ての濱田氏の言葉(その後受賞) • 今年の受賞により日本はGPUスパコンの有効性 を世界に示すことになるだろう。だがこのままで は米国の国力に敗北する。 • 現在米国・中国で30PFlops級のGPUスパコンが 計画中
  • 70. このままでいいのか • GPU・メニイコアは一過性のブームではない。なぜなら1 コアの速度は電磁気・量子論的限界に近づいているの で、コアをこれ以上速くできない。となればコアをたくさ ん並べるしかない • 遅かれ早かれ、高性能並列計算機はGPU型か、GPUの 進化したメニイコア計算機が占めるようになる • 昔のベクトルは論外、もはやスカラーも過去のアーキテ クチャ • 昔のものを使いつづけたい気持ちはわかるしそうできれ ばサイエンスにとっては一番良い • のだがそんなことを言ってる場合ではない
  • 71. 6.GPUでペタコンを作ったら? 74
  • 72. GPUペタコンを本気で考えてみる • とある宇宙物理学の学会で出た「ペタコンで挑み たい未解決問題」 • Vlasov方程式を解くために500TBくらいメモリが欲しい • 分子雲乱流から1stコア形成までを一様メッシュで分 解するためには10000^3 の流体計算(40TB)がしたい • 計算実行中に可視化まですませたい • この要求を真に受けてGPUスパコンを設計して みる • 真剣なので楽観的予測はなし、あくまで現在もし くは将来確実に手に入る部品のみ。ムーアの法則 等、低コスト化の効果は使わない
  • 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. 高速ネットワーク • 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枚 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. 新生ペタコン計画試算 構成 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 80億円/yr 10円/kWh 3.09億円/yr 12.36億円/yr
  • 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. 見積もりの妥当性 • 今のコードはGPUあたり128^3メッシュで解いているが、 見積もりは約402^3になる。表面積に対する体積が大 きいほど通信が楽になるセンス妥当 • 今のコードは流体データがデバイスメモリにあることに 速度を依存恐るべきことに10000^3の流体が Fermiなら全部デバイスメモリに載ってしまう。妥当 • スパコンの費用はふつう通信系が支配するのにGPU スパコンでは演算装置が支配する。だから通信系は Myrinetといわず最高速のものを買えばOK PCIExpressより速いものすらあるので妥当 • むしろ今のコードは無駄をしてるのでもっと速くできる • 前ページの見積もりの速度が出る可能性は高い
  • 78. • プログラムは1から書き直し。すべての分野 の計算に使えるわけではないし、実績がまだ あまりないので、汎用京速計算機を置き換え うるものではないが、挑戦する価値はあるの では。 • ハードを作るのはどうしても費用が必要だが ソフトは直接費用はいらない。むしろ長期的 視野にたって科学・工学のために必要なツー ルを整備するのが基礎科学の役目ではない か
  • 79. 7.GPU(メニイコア)の将来、GPUの次 82
  • 80. GPUで何ができるだろうか? • 分野により向き不向きはあるだろう • 不向きと言われていたにもかかわらずアルゴ リズムをがらりと変えて成功した分野も • 研究時間を食わない程度に試せばよい。速く なればラッキー • 多様なハードウェアが出現し、それぞれの分 野が必要とするスパコンをカスタム設計でき る未来が望ましい。 83
  • 81. GPUが使いにくい例:ライフサイエンス • MDのタイムステップ(Δ t) は1フェムト(10-15)秒程度 が限界。←タンパク質の場合、 最も速い運動である結合の伸縮 は10-14秒程度の周期であるため、 Δ tは1フェムト秒程度が選ばれ る。 • タンパク質のフォールディング時 間はミリ秒 • 1012ステップがどうしても必要! 安藤格士さんのスライドより • 原子数が決まっているため無限 タンパク質304+水原子7,377= に並列化できるわけではない。 原子数7,681  低レイテンシ、高速ハードウェア 巨大タンパク質複合体は~MDa が欲しい!! (メガダルトン)=数十万原子くらい 84
  • 82. GPUが使いにくい例:多くのタイムス テップが必要な計算 星形成 タンパク質 分子シミュレーション フォールディングミリ秒/結合の振動フェムト秒 星雲の寿命1000万年/星の振動5分 =1012ステップ =1012ステップ アミノ酸を球やバッグで近似したり、 星が形成しはじめた時点で「星のモデル」 溶媒水の効果を簡易化したりしている に置き換え、タイムステップを軽減 水素結合1つが大きな部品を動かしたり、 簡単ではない 大スケール現象に、微小で高速な震動が 階層性の科学が必要! 与える影響は、統計的なもの。 真に1012ステップ必要な計算はあるか? 85
  • 83. GPU利用が難しい・・・と言われていたが 実現してしまった例:粉体 地球シミュレーター 阪口 秀 西浦 泰介 GPUの専門家にすら、移植は 困難といわれていた。 まったく新しいアルゴリズム にすることでGPUでピークに近 い性能を出すことに成功! 86
  • 84. GPUの勃興は何をもたらすか • GPU計算機は通信ハードウェアコストが副次的 高性能通信ハードウェアへの需要が高まる 低レイテンシ、高帯域幅ハードウェアが出現? ライフサイエンスの人など、いろんな人が喜 ぶ!(宇宙の人もよろこぶ) それより重要なこと:人が、並列性を理解し使い はじめること 87
  • 85. GPUは安くありつづけるだろうか • ハードの価格=(初期投資)÷(売れた数) • GPUとしてはオーバースペックなFermiやSCC やその他メニイコア演算ユニットが、パソコン レベルまで普及しなければ、安くて速い計算 機が手に入らなくなるかも・・・ 88
  • 86. メニイコアがパソコンレベルに 普及すると私が信じる理由 コンピューターと人間 何が違う? 89
  • 87. 自然界の並列性 • 宇宙には数千億の銀河 • 銀河には数兆の星 • 地球には無数の生命 • 人には60兆の細胞 • 脳細胞は140億個 すべてが同時に動いている 90
  • 88. 認識の並列性 • 140億コア(?)トランジス タ(?)×500Hz(?) = 7TFlops(ピーク性能?) • 実効性能~0.01Flops • でも、とても多機能、柔 軟、ディペンダブル • スカラー性能はなくても ↑7TFlops 膨大な並列性があれ Priceless ば可能になるタスクの 存在を強く示唆 7TFlops 40万円 シミュレーションしかできない 91
  • 89. 人間が入力したデータの処理から、 世界をじかに認識し、働きかける情報論へ • 今あるアプリはメニイコアでただちに速くなるわけで はない。だから、メニイコアが無用 • と思う人は見逃している:メニイコアでこそ動くような、 普及を後押しするような、今は想像もできないような アプリが生まれる可能性を!! • 今想像できるのは・・・実世界認識、人工知能とか? cv 92
  • 90. GPUコンピューティング・メニーコアコンピュー ティングの産業規模のオーダー評価 スパコンにしか使われなかった場合 • Cray:62億円(年商) プロが使うソフトウェアができた場合 • Dassault Systems社(自動車CAD):1790億円 • Adobe社(フラッシュ):1660億円 ゲームに使われた場合 • 任天堂:1兆円 社会基盤となるソフトウェアに採用された場合 • Google:2兆円 • マイクロソフト:5兆円
  • 91. 京速計算機に、仕分け人曰く • 「一時的にトップを取る意味はどれくらいある か」 • 「一番だから良いわけではない」 • 「ハードで世界一になればソフトにも波及とい うが分野で違う」
  • 92. 俺なりの答え • たしかによいサイエンスが伴わなければハードで 一時的に一番をとってもあまり意味がない  速いコアをたくさん並べるというのが一番性能がでるので、 ベクトル/メニイコア系の流れは(何度か)来るだろう 今ならメニイコア世界に一番乗りできる。俺たちが メニイコアコンピューティングという新学問、新産業 を興す。国産ソフト、人材を売れる。 一番=定量的アドバンテージと一番乗り=定性的 アドバンテージは全然違う
  • 93. むすび • 情報論はずっとスカラー前提に発展してきた • スカラーの周波数はもうあまり上がらない。SiGe とかで上がっても、それをメニイコア化すれば もっと性能が出る並列情報論の必要性 • ハードが出てしまったいま、ハードがないから理論 がない⇔理論がないから使いたくない⇔使われないから ハードが出ないのスパイラルを打ち破りメニイコア を使おう。理論を作ろう。自然科学を研究しよう。 • GPUだけでなく、多様なハードウェアが未来に生まれ るように。それらを使いこなせるように。みんなが驚き、 喜ぶような発明をするために。 96
  • 94. 以下 予備 97
  • 95. 5.次世代GPUコンピュータ、Fermi 98
  • 96. 2009/09/30 発表 GPU Technologies Conference http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Archit ecture_Whitepaper.pdf 99
  • 97. Fermi Jen-Hsun Huang NVIDIA President&CEO 100
  • 98. Fermiとは • NVIDIAの第3世代汎用GPU • 汎用GPUに乗り出した第1世代(G80; 8800GTX…)、それを拡張した第2世代(G200, GTX 280)の時代に、数値計算ユーザーから 得たさまざまな意見をもとに抜本的な再設計 を施された • 自然科学に自然に使えるレベル 101
  • 99. おさらいーCPUとGPU Core i7 : 731万トランジスタ 102
  • 100. CPUとGPU Core i7Fermi : 30億トランジスタ : 731万トランジスタ 103
  • 101. 自然科学にとっての大きな進歩 Fermiの進歩 • 512コア、倍精度演算の完全サポート • じつは現時点で唯一の倍精度融合乗加算(MAD)をサポート するハードウェア • ある人の推測:単精度1.5TFlop/s, 倍精度768GFlop/s • 自動キャッシュの装備 • 全メモリにECC(誤り訂正符号)を標準装備 • GPU版ハイパースレッディング 「ベクトル計算機よりも高度な何か」に仕上がっ ている 104
  • 102. Streaming スケジューラ= TA Multiprocessor = 次にどの計算を するか決めて司 32core 令する。 Core=M1 整数・実数の四則演 算が可能、 倍精度もOK SFU= D3 sin, cos, hypsin, log, exp, erf, gammaなど特殊 関数を計算する x16 105
  • 103. Fermiのキャッシュ構造 メモリ=図書館 メモリL2 L1の 間は必要なデータが 自動的にコピーされる L2キャッシュ=研究 室の本棚 768KB L1キャッシュ=机の 上に広げた本 64KB いままでL2はなかった。 L1は16KBで、全手動だった。 レジスタ=計算用 紙 L2のおかげでSM間の通信が大幅 に高速化される。 プログラムも楽 になる。 106
  • 104. ECC(誤り訂正符号)について • 計算機は精度のよい宇宙線ディテクター • 計算機は数を電圧により2進数で表現しているんだが、あま りにも素子が小さいので、2次宇宙線が飛び込んできてビット を反転させることがある(メモリー内の数値が偶然に変化す る)。GPUはゲーム用なのであまり気にしてこなかった。 • ECC=典型的にはメモリ64bitにつき冗長8bit を付加。1ビットの過ちならどこが反転したの かまで含めて検出し、訂正できる。 • FermiではすべてのメモリにECCを装備 • もはやFermiでは宇宙線を観測できない!! 107
  • 105. スケジューラ= TA が2人いて、コア =M1が片手でも 空いていれば計 算をやらせる。 Core i7がやって いるhyper threading相当の 機能 カーネルの同時実行が可能に。一部のテーブルである計算をやってい る間のこりが全然別種類の計算を進めることができる。 108
  • 106. 「汎用GPU」から「GPU型計算機」へ • 他にも、「普通の」プログラムを実行する上で 必須の改良が加えられている。 • 普通のFortran, C, C++ プログラムが難なく倍 精度でFermi上で100~200倍の速度で動く 可能性がある(主に自動キャッシュのおかげ)。 • 性能を引き出すには、ものすごい数で(予想: 512コア×128スレッド/コア=65536並列)並列 化されたアルゴリズムを書かないといけない。 これは使う人の担当。そうすればFermiは全 力で応えてくれる。 109
  • 107. Fermiへの懸念と期待 • まあ、自社製品の広告だし • 倍精度が8倍速くなったって言ってるのはRadeonと比べても元が遅 かったから • どこまで公約どおり動くのかは使ってみるまで安心はできない • NVIDIA毎年赤字だとか歩留まりが製品化できないレベルだとかいう噂 もあるし発売日がずれたりしている • そもそもこんなもん本来のGPUとして売るには高機能すぎ、値段がどう なるのか心配 • がんばって世に出していただければGPU計算が 容易になり、数値自然科学は大いに恩恵をこう むるだろう。 正にNVIDIAの社運を賭けた汎用GPU型決戦並機 列計算 110
  • 108. まとめ GPUについて • 安くて速い。さまざまな計算が100倍速に • 1つのカードで数万並列の計算をしないと性能は生か せない。しかし自然科学にはそういう課題がたくさんあ るはず。 • 1つのカードに計算能力が濃集してることで、逆に通 信に余裕が出るケースもある 1つのGPUパソコンをつくってスパコンを手に入れよう! GPUクラスタを作れば世界の頂点が見える。 • たとえGPUが滅びても、こういう超多並列ハードウェア はこれからの計算機の主流の1つではありつづける だろう。 計算機にとらわれて目的を見失ってはこまりますが、たくさんある重要な課題の中から それぞれの計算機に適したものを選ぶことは必要かと。そのためにはある程度計算機 についても知っておくとよいかとおもいます。 いっしょにGPUを勉強して使いましょう!! 111

×