2009/12/10...

Post on 27-Jun-2015

51.104 views 2 download

description

PFI社内セミナー 2009年12月10日 20:00-21:00(予定) GPUコンピューティングの現状とスーパーコンピューティングの未来 発表者: 村主 崇行(プリファードインフラストラクチャー 研究開発部門・京都大学大学院 物理学第二教室) セミナー録画URL: http://www.ustream.tv/recorded/2837689 このスライドは、発表後にみなさまからいただいた貴重な意見をもとに改訂した版です。発表時点での版はこちら: http://www.slideshare.net/pfi/20091210-gpu-2735685

Transcript of 2009/12/10...

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

村主崇行

1

自己紹介

• 京都大学 物理学第二教室 天体核研究室

• 専門は宇宙物理学

「地球より大きいもの全てが対象」

• しかし、宇宙の現象は直接実験ができないので、シミュレーションの利用がさかんです

• ひょんなことからGPGPUの存在を知ったので最近勉強しています

2

宇宙物理学のシミュレーションテーマ

3

高温・高密度物質・素粒子論etc ・・・

ニュートン重力 一般相対性理論(時空・座標)磁気流体力学

(プラズマ)流体力学(気体・液体)

輻射輸送(光の放出・反射・吸収・伝搬)

運動論(荷電粒子の加速やビームなど)

宇宙の研究とぼくらの生活

4

一般相対性理論(時空・座標)

磁気流体力学(プラズマ)

流体力学(気体・液体)

乗り物の設計・気流シミュレーション

気象&海洋シミュレーション

プラズマが吹き荒れる宇宙!太陽風・宇宙天気は人工衛星の死活問題

人工衛星の時計は地上より速く進む!

「どんなにゆがんだ座標でも怖くない」

一般相対論を使わないと・・・GPSは1日20kmも狂っていく

核融合も実用化?!

重力は時間を、空間を曲げる

おことわり• 宇宙物理学には特にGPUに向いている課題が結構あるので、僕はけっこう楽観的です。そうでない人が聞いたら鼻につくことをお詫びしますm(_ _)m

• 他の分野の事情もぜひ知りたいのです

私の誤解・無理解も多いと思いますので

• 宇宙物理学にもGPU的なものに適さない課題はいっぱいあるので、ぜひ「GPUの次」をいっしょに考えたいと思っています

• しか勉強してません。 関係の人ごめんなさい。 にも期待してます!

• 本日お話する内容は私の知識の範囲内での私的所感でして、PFI、京都大学その他組織の公的意見とは関係ございません

5

1. GPGPUとは?なぜGPUを使うのか

2. ハードウェア 演算機としてのGPU

HPC部品としてのGPU

GPUコンピュータを作ろう

3. GPUプログラミング言語と開発環境

4. GPUプログラミングの勉強のしかた

5. GPUコンピューティングの現状

6. GPUでペタコンを作ったら?

7. GPU(メニイコア)の将来、GPUの次

6

もくじ

1.GPUとは?

7

と の違い

8

GPUはコア(計算する人)の数が多い!周波数(ひとりの計算する速度)は1/3程度

4コア+hyper-threading(SSEを使うと16コア)

480コア

The difference between and .

9

米国Roadrunner 長崎大学DEGIMAクラスタ

1億3300ドル 予算 3800万円

1,457Tflop/s ピーク性能 700Tflop/s

安い!

GPUとは?なぜGPUを使うのか?=>安価な超メニーコア計算機

• GPU(Graphics Processing Unit)とは• もともとコンピュータグラフィック(CG)描画専用の装置

• CG技術の発展にともない、GPUの仕事が多様化。2006年後半から汎用GPU(GPGPU)へと進化

• 並列演算性能が高い• 500個程度の演算ユニット

• 非常に安価• パソコンの部品として量産されているため。

• 1T flops ~ 3万円程度 (Crayの相場は600万円/TFlops)

• 価格性能は一般的なスパコンに比べ100倍ぐらい良い

GPUコンピューティングが現実的に10

2-1.演算機としてのGPU

「GPUって240コアとかあるらしいよね」

「プログラムを240並列にするのって大変じゃないの?」

11

12

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倍以上高速化したとの報告も多数

• 性能だけでみるとそこまで差はないように見えるが

• 計算チップとしての設計思想がある点で決定的に違っている

GPUとCPUを比べる(例)

ダイイメージ• 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

アーキテクチャ模式図

• 1SPが1スレッドを担当

• 命令は4クロックに一度

• 16スレッドが半ワープ

• メモリアクセスは半ワープごとにまとめられる

• 32スレッドが1ワープ

• 同じ命令を実行

14

命令キャッシュ

ワープスケジューラ

命令発行ユニット

レジスタ 4096本×4バイト

SP SP

SP SP

SP SP

SP SP

Shared Memory 16KB

ロード・ストア

倍精度ユニット

倍精度ユニット

特殊関数ユニット

特殊関数ユニット

15

スレッドブロックグリッドSMはいくつかのブロックを並列に実行、ブロックの実行順は未定義同一ブロック内ではShared Memoryを介した通信が可能ブロック間の通信手段はGlobal MemoryのみConst Memoryはホストからのみ書き換え可Texture MemoryはデバイスからもW可能だがキャッシュに反映されないスレッド数は32の倍数、ブロック数は30の倍数がよい

レジスタ4096本×4バイト×30

Shared Memory 16KB×30

Global Memory ~GB

×30

Const Memory 64KB

Texture Memory ~GB

Host Memory

----Rはキャッシュ/Wは遅い----

----RWともに速い----

----RWともに遅い----

----PCI Expressの壁----

演算機構造 論理構造 メモリ構造

決定的に違う設計思想

Neharem G200(GTX285)

Fermi(2010Q1予定)

ベクトル長 4 8 32

コア数 4 30 16

レジスタ数 40?×4 4096×30 4096×16?

スレッド数 2×4 1024×30 ?

16

GPUの設計:レジスタが圧倒的に多いレジスタを退避させることなく膨大な数のスレッドを駆動様々なレイテンシを隠蔽

最適化に対するCPUとGPUの回答

• メモリが遅いキャッシュヒエラルキーをつくって、小さいキャッシュにうまいこと当てる

• ただの四則演算が終わるまでにも、数クロックが浪費されてしまうパイプラインをつかい結果をまたずに命令を投入

• 分岐してる時間がもたいない分岐する方向をあらかじめ予測してそっちの計算を進めておく投機的実行

• スカラーの限界がみえてきたんでマルチコアにしてみた

• SIMDユニットも積んでみた

•一方GPUではスレッドをたくさん立てた

17

• 「GPUって240コアとかあるらしいよね」

それどころか、3万並列くらいまで捌けます

• 「プログラムを並列にするのって大変じゃないの?」

大変ですが、逆にとにかく並列化するだけで性能が出るので、そういうアプリケーションなら性能が出しやすいです

18

2-2.HPCハードウェアとしてのGPU

「演算ユニットだけが速くてもねえ」

「GPUへのデータの転送がボトルネックなんでしょ?」

19

計算機全体としての性能は?多くの場合通信性能がボトルネック

20

CPU計算を行う

ホストメモリ

■■■■■■■■

GPU計算を行う

デバイスメモリ

マザーボード

コンピュータの基盤

DDR3 160012.8GB/s

PCI Express 2.0x168GB/s

1000BASE-T0.125GB/s

デバイスメモリ⇔GPU転送: 223.8GB/s

GPU演算:1788GFlops=7152GB/s

CPU演算:90.56GFlops=362GB/s

L2キャッシュ⇔CPU転送: 150GB/s

12GB

2GB

キャッシュ

0.012GB

CPUプログラムからGPU

ライブラリを呼ぶ等の場合で、ホストメモリからの転送がボトルネックになってしまうとせっかくのGPUの性能が生かせない!!

典型的パソコンの模式図

PCI Express 2.0x168GB/s

「GPUクラスタ」とCPUクラスタを比べる

21

ホストメモリ

■■■■■■■■

GPU

デバイスメモリ

12GB

2GB

CPU

キャッシュ

■■■■■■■■

GPU

デバイスメモリ

計算速度

主記憶転送速度

主記憶容量

「ノード」間通信速度

1000BASE-T0.125GB/s

DDR3 160012.8GB/s

GDDR3223.8GB/s

GPU演算:1788GFlops=7152GB/s

CPU演算:90.56GFlops

=362GB/s

全面的にGPU計算に移行すれば、秋葉原で買える部品で1~2桁上の性能が手に入る。

22

主電源

GPU0 GPU1

GPU2

GPU4

GPU6

GPU3

GPU5

GPU7

¥383,806

CPU 副電源メモリ

ディスク

温度計

「パソコン内蔵型」GPUクラスタ

1.6TFlop/s 1億円→※通信性能が高い

1台で単精度7.1TFlop/sの性能、40万円

パソコンを100台ならべてInfinibandでつないだ程度

「パソコン内蔵型」GPUクラスタ

23

Cray 600万/TFlops

• 「GPUへのデータの転送がボトルネックなんでしょ?」

• 「これからはGPUのようなアクセラレータを積んだHPCが主流となる」

GPUをアクセラレータ(演算機)だと思うと転送がボトルネックで応用は限られる。GPUはそれ自身計算機(演算機+主記憶+通信)だと思ったほうがいいかも?

データはホストメモリではなくなるべくグラフィックメモリに置くことがGPUコンピュータでは常識

24

2-3.GPUコンピューターを作ろう

「さきほどのマシンの作り方を説明します」

25

GPUコンピュータを手に入れよう

• まあ、自作できる人なら余裕

• 残念ながら歩留まり向上のため、市販のGPU

にはグラフィック表示には問題なくても全演算機を動かすとたまに計算を間違えるものや落ちるものが含まれている。メーカーによってはこの場合でも返品や、交換に応じてくれる。

• 長崎大学ではGPUを多めに購入して自前でスクリーニングプログラムを開発している(このへんも安さの秘密)。そのうちスクリーニングプログラムが公開されたり、GPU計算用チェック済みGPUが売られるようになるのでは。

26

材料

ケース

フルオープン .

変形!!

二連装電源、最大2250Wを供給

主電源EGX1250EWT

1250W副電源SF-1000R14HE

1000W400W

ケースから分離した基盤上で組立てぶっちゃけこの部品だけ売って欲しい

マザーボード「SuperComputer」

• GPUとの通信を司るチップを2枚搭載、通常の2倍の速度で通信

• 規格上7つある汎用スロット枠が全部大型GPU用

• 旧式のディスクやキーボードはバッサリ非対応

• Ultimate Supercomputing Solution for CUDA Parallel Programming (メーカー)

GPU

搭載

4枚目のGPUが色々ふさいでいるこのままでは電源を入れられない \(^o^)/オワタ

USBとか電源/リセット信号

ハードディスク

こんなこともあろうかと・・・!

電源/リセット信号線延長ユニット(標準付属)

こいつ・・・動くぞ!!

GPU選び赤いGPU AMD

RADEON R5870

NVIDIA 緑のGPU

GeForce GTX 295

39

メーカーGPU

重要なのは・・・

40

開発環境、だと私は思います

AMD メーカー NVIDIA

RADEON R5870 最高級GPU GeForce GTX 295

2700GFlops (単精度)544GFlops (倍精度)

演算速度 1788GFlops (単精度)149GFlops (倍精度)

153.6GB/s 転送速度 223.8GB/s

ATI Stream SDK 開発環境 CUDA C

Brook+ コンパイラ nvcc

ハードウェア選び

• http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units が充実

• AMD版もあります。

• おすすめの NVIDIA GPU

41

GeForce GTX 2852GBモデル

GeForce GTX 295 Fermi (予定)

演算速度 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?

3.NVIDIAのGPUプログラミング言語、CUDA C

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

例)C++で自然数1..500の平方根を求めるプログラム

• これをCUDAで書きなおしてみる

44

const int N = 500;

void calculate(float* x,float* y){for (int i = 0; i < N; ++i) {y[i] = sqrt(x[i]);

}}

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;

}}

45

#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;

}}

例)自然数1..500の平方根を求めるプログラム,CUDA C版

thrust_vectorはthrustを軽く

ラップする独自のライブラリです(nHDに入ってます)。完全なコードは2ページ後の黒背景の部分を参照してください。

1..500の平方根を求めるプログラム,比較

46

const int N = 500;

void calculate(float* x,float* y){for (int i = 0; i < N; ++i) {y[i] = sqrt(x[i]);

}}

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;

}}

const int N = 500;

__global__ void calculate(float* x, float* y) {

int i = threadIdx.x;y[i] = sqrt(x[i]);

}

int main () {thrust_vector<float> x(N), y(N);for (int i = 0; i < N; ++i) {x[i] = i+1;

}calculate <<<1,N>>>

(x.ptr(), y.ptr()); for (int i = 0; i < N; ++i) {cout << y[i] << endl;

}}

C++ CUDA

CUDAではループのかわりに、カーネル関数を並列的に実行スレッドごとにthreadIdxというのが受け取れる(MPIっぽい)

実行してみるthrust> cat thrust_vector.cu

#include <thrust/device_vector.h>

#include <thrust/host_vector.h>

#include <iostream>

using namespace std;

const int N = 500;

__global__

void calculate (float *px, float *py) {

int tid = threadIdx.x;

float x = px[tid];

float y = sqrtf(x);

py[tid] = y;

}

int main () {

thrust::host_vector<float> xs(N),ys(N);

thrust::device_vector<float> dev_xs(N),dev_ys(N);

for (int i = 0 ; i < N; ++i) {

xs[i] = i;

}

dev_xs = xs;

calculate <<< 1 , N >>> (thrust::raw_pointer_cast(&*dev_xs.begin()),

thrust::raw_pointer_cast(&*dev_ys.begin()));

ys = dev_ys;

for (int i = 0 ; i < N; ++i) {

cout << "sqrt " << xs[i] << " is " << ys[i] << endl;

}

}

thrust> nvcc thrust_vector.cu

thrust> ./a.out

sqrt 0 is 0

sqrt 1 is 1

sqrt 2 is 1.41421

sqrt 3 is 1.73205

sqrt 4 is 2

sqrt 5 is 2.23607

sqrt 6 is 2.44949

sqrt 7 is 2.64575

sqrt 8 is 2.82843

sqrt 9 is 3

sqrt 10 is 3.16228

・・・・・

thrust>

47

ptxを生成しGPU機械語に迫る

thrust> less thrust_vector.cu

・・・

__global__

void calculate (float *px, float *py) {

int tid = threadIdx.x;//A

float x = px[tid]; //B

float y = sqrtf(x); //C

py[tid] = y; //D

}

・・・

・・・ .entry _Z9calculatePfS_ (

.param .u32 __cudaparm__Z9calculatePfS__px,

.param .u32 __cudaparm__Z9calculatePfS__py)

{

.reg .u16 %rh<3>;

.reg .u32 %r<8>;

.reg .f32 %f<4>;

.loc 26 8 0

$LBB1__Z9calculatePfS_:

.loc 26 10 0

cvt.s32.u16 %r1, %tid.x; //A

cvt.u16.u32 %rh1, %r1; //A

mul.wide.u16 %r2, %rh1, 4; //r2 = 4*tid.x

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

thrust> nvcc thrust_vector.cu --ptxthrust> less thrust_vector.ptx

CUDA Cの利点• C(C++)を知っていれば覚えることはわずか

• GPU上で並列に実行したい関数(カーネル)には__global__などの印をつける

• そして関数名<<<ブロック数,スレッド数>>>(引数,引数,…) でカーネル呼び出し

• C++言語の強力な機能がGPU上で使える。第3者がthrustなるSTLを作れるのが何よりの証拠。• テンプレート魔術によりホスト⇔デバイスの自動転送はむろん、GPUの最適なスレッド数を調べてアルゴリズムを並列実行します

• 機械語も見れて中を覗かないと落ち着かない変態ハッカーも安心

49

4.CUDAの勉強

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

CUDAドライバ、CUDAツールキット(コンパイラ)、SDK(サンプル集)をダウンロード。ドキュメントやデバッガ、プロ

ファイラもあります。

52

http://www.nvidia.com/object/cuda_get.html日本語版は周回遅れなのでUSA版にGO!!

ドキュメントCUDA Programming Guide

CUDAの説明が書いてあるからまず必ず読むべきCUDA Best Practices Guide最適化に重要なことが書いてあるからぜひ読むべき

CUDA Reference ManualAPIのリファレンスなので印刷して手元に

CUDA GDB User Manualすごいデバッガなのでぜひ使うべき

CUDA PTX ISA documentGPU機械語解読の手掛かり、マニアになりたい方にhttp://www.nvidia.com/object/tesla_software.html

53

GPUをつかった成果をユーザーが投稿し、査読を通る

と紹介されます。何倍速くなったかが載っている。講義の動画などもあるよ。

54

http://www.nvidia.com/object/cuda_home.html#

GPGPUにまつわるニュースサイト

55

http://gpgpu.org/

CUDAに関する質問ができる。英語版のほうが充実はしている。日本語版も十分親切です。

56

http://forum.nvidia.co.jp/

自分のGPUコードを作って公開しよう!

57

http://code.google.com/p/astro-attic/wiki/NHDIntroduction

5.GPUコンピューティングの現状

GPUって使えるの?

58

使える。使われている。速くなっている!

59

コンピューター視覚 量子化学シミュレーション

疎行列の積 ロボット手術雷のシミュレーション

金融市場の予測

遺伝子解析

たんぱく質シミュレーション

• 宇宙物理学でも・・・

• N体計算(Hamada&Nitadori, Gordon Bell Prize!)

• 流体• Adaptive Mesh流体 (台湾国立大学)

• 磁気流体(マカオ、北京)

• Godunov Method (京大)

• 最近GPU+AMR+MHDが出た(Peng Wang, Tom Abel)

• データ解析

など

60

arXiv:0907.3390 台湾大学

61

arX

iv:0

90

8.4

36

2

62

Peng Wang(Tom Abelの弟子) Stanford Univ. 博士論文

abstract

GPUAMRMHD

nHD (by 村主)

• GPUが複数装備されたマシンを複数台連結したクラスタ上で流体計算が実行できます

• Full Godunovなので、強い衝撃波、真空、何でも来いです• テスト駆動開発なのでさまざまなテストが済んでいます• BSDライセンスで公開開発中:

• MPI GPU Full Godunov 2nd order MUSCL 3次元一様メッシュ Euler方程式ソルバー

解析解をあてはめて、衝撃波をきちんとシミュレートできる手法

複数のコンピュータが協力して数値計算する

こと 衝撃波のない所では、精度を上げてシミュレートする手法

圧縮性流体の基礎方程式、粘性なしAMRとかはとくになし

64http://code.google.com/p/astro-attic/wiki/NHDIntroduction

計算速度

CPU GPU

ハード問題設定

Core i7 920,シングルスレッド GTX 295 , 1チップ,通信なし

所要時間速度比

8分 46.887 秒

17.509秒

70ハード問題設定

Core i7 920,シングルスレッド GTX 295 , 4チップMPI

所要時間速度比

1日 2時間 39分 46秒

19分 13.437 秒

173

PRELIMINARY (CPU/GPUいずれも未最適化コードです)

128 x 128 x 128, 斜め衝撃波問題, 0.12 sound crossing time

128 x 128 x 512, Blast 問題, 1.6 sound crossing time (長辺)

あのパソコン1台で

65

GPUスパコンで

今世界の最先端を走っている

国は?

日本最強のスパコン

• 10PFlop/s

• 1230億円

• のはずだったが・・・

68

日本のGPUスパコン

東工大TSUBAME 長崎大学DEGIMA 名古屋大学

1億2000万(GPU代) 予算 3800万円 1億7000万円

56Tflop/s(GPU部) ピーク性能 700Tflop/s(単精度)

建設中???

?? 消費電力 150kW ???

70

158TFlop/sGordon Bell Prize

Awarded!

京速 v.s. Cray v.s. GPU

計算力 10PFlop/s ~1PFlop/s 158TFlop/s

価格 1230億円 ??? 3800万円

C/P 1230万円/TFlops 600万円/TFlops 24万円/TFlops

計算対象 汎用 汎用 未知数

71

「真珠湾攻撃」

• 濱田・横田・似鳥さんはTree-N体コード(並列化は困難)を190ノード760GPUで動かし、SCに出発する直前に10倍の高速化に成功

• 長崎大学のGPUクラスタは今年度のSCでゴードンベル賞が受賞確実視されていた。それを受けての濱田氏の言葉(その後受賞)

• 今年の受賞により日本はGPUスパコンの有効性を世界に示すことになるだろう。だがこのままでは米国の国力に敗北する。

• 現在米国・中国で30PFlops級のGPUスパコンが計画中

このままでいいのか

• GPU・メニイコアは一過性のブームではない。なぜなら1コアの速度は電磁気・量子論的限界に近づいているので、コアをこれ以上速くできない。となればコアをたくさん並べるしかない

• 遅かれ早かれ、高性能並列計算機はGPU型、さらにはGPUの進化したメニイコア計算機が占める

• 昔のものを使いつづけたい気持ちはわかるしそうできれば科学に集中できて一番良い

• のだが最先端のコンピュータはどんどん変わっていくのでそうもいかない

6.GPUでペタコンを作ったら?

74

GPUペタコンを本気で考えてみる• とある宇宙物理学の学会で出た「ペタコンで挑みたい未解決問題」

• Vlasov方程式を解くために500TBくらいメモリが欲しい

• 分子雲乱流から1stコア形成までを一様メッシュで分解するためには10000^3 の流体計算(40TB)がしたい

• 計算実行中に可視化まですませたい

• この要求を真に受けてGPUスパコンを設計してみる

• 真剣なので楽観的予測はなし、あくまで現在もしくは将来確実に手に入る部品のみ。ムーアの法則等、低コスト化の効果は使わない

PCI Express 2.0x168GB/s

定量的通信性能比較再訪

ホストメモリ

■■■■■■■■

GPU

デバイスメモリ

12GB

2GB

CPU

キャッシュ

■■■■■■■■

GPU

デバイスメモリ

計算速度

主記憶転送速度

主記憶容量

「ノード」間通信速度

1000BASE-T0.125GB/s

DDR3 160012.8GB/s

GDDR3223.8GB/s

GPU演算:1788GFlops=7152GB/s

CPU演算:90.56GFlops

=362GB/s

GPUノードを複数並べようと思ったら通信がPCIExpressなみ必要。GBeでは苦労する。

76

高速ネットワーク• 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

x+1

y+1

y+1

z+1

z+1

x-1

x-1

y-1

y-1

z-1

z-1

スイッチ

計算ノード

新生ペタコン計画試算構成 20×8×8×4

(5120ノード)20×8×8×16(20480ノード)

部品 ノードあたり価格(万円)

10Pに必要な費用(万円)

Vlasovに必要な費用(万円)

現行

Myrinet 32ポートスイッチ

40/20ノード 10240

Myrinet NIC 6 30720

Fermi GPU 15x3 230400

メモリ24G 9 46080

マザーボード、CPU、電源

11 56320

設備費用合計 73 37億3760 149億5040 +700億倍精度性能 0.768TFlops

x311.796PFlops 47.186PFlops 10PFlops

??消費電力 0.3Gflops/W

10円/kWh3.538MW

3.09億円/yr14.152MW

12.36億円/yr36億円/yr下がる予定

現状の流体コードを(弱く)スケールさせることができたら・・・?

• (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倍速くなります

見積もりの妥当性

• 今のコードはGPUあたり128^3メッシュで解いているが、見積もりは約402^3になる。表面積に対する体積が大きいほど通信が楽になるセンス妥当

• 今のコードは流体データがデバイスメモリにあることに速度を依存恐るべきことに10000^3の流体がFermiなら全部デバイスメモリに載ってしまう。妥当

• スパコンの費用はふつう通信系が支配するのにGPUスパコンでは演算装置が支配する。だから通信系はMyrinetといわず最高速のものを買えばOKPCIExpressより速いものすらあるので妥当

• むしろ今のコードは無駄をしてるのでもっと速くできる• 前ページの見積もりの速度が出る可能性は高い

• プログラムは1から書き直し。すべての分野の計算に使えるわけではないし、実績がまだあまりないので、汎用京速計算機を置き換えうるものではないが、挑戦する価値はあるのでは。

• ハードを作るのは性能に比例した費用が必要だがソフトはそこまで費用はいらない。むしろ長期的視野にたって科学・工学のために必要なツールを整備するのが基礎科学の役目ではないか

7.GPU(メニイコア)の将来、GPUの次

82

GPU・メニイコアで何ができないだろうか?

たとえば・・・

• メモリ量が増えるわけではない。

• 速いメモリがなるたけ欲しいという計算は多い

• GPUのメモリは速いがホストのよりは少ない

• 通信の性能は改善するわけではない。むしろflopsあたりの通信性能は落ちる。

• 低レイテンシ通信の要求

• 大帯域幅通信の要求

83

GPU・メニイコアで何ができるだろうか?

• 計算量が必要な人に

• 分野により向き不向きはあるだろう

• 不向きと言われていたにもかかわらずアルゴリズムをがらりと変えて成功した分野も

• いろんな人が研究時間を食わない程度に試してみればよい。速くなればラッキー

• 多様なハードウェアが出現し、それぞれの分野が必要とするスパコンをカスタム設計できる未来が望ましい。

84

GPUが使いにくい例1:ライフサイエンス• MDのタイムステップ(Δ t)は1フェムト(10-15)秒程度が限界。←タンパク質の場合、最も速い運動である結合の伸縮は10-14秒程度の周期であるため、Δ tは1フェムト秒程度が選ばれる。

• タンパク質のフォールディング時間はミリ秒

• 1012ステップがどうしても必要!• 原子数が決まっているため無限に並列化できるわけではない。

低レイテンシ、高速ハードウェアが欲しい!!

85

安藤格士さんのスライドより

タンパク質304+水原子7,377=

原子数7,681

巨大タンパク質複合体は~MDa

(メガダルトン)=数十万原子くらい

GPUが使いにくい例1:多くのタイムステップが必要な計算

86

星雲の寿命1000万年/星の振動5分=1012ステップ

星が形成しはじめた時点で「星のモデル」に置き換え、タイムステップを軽減

大スケール現象に、微小で高速な震動が与える影響は、統計的なもの。真に1012ステップ必要な計算はあるか?

タンパク質

分子シミュレーション星形成

フォールディングミリ秒/結合の振動フェムト秒=1012ステップ

アミノ酸を球やバッグで近似したり、溶媒水の効果を簡易化したりしているが、水素結合1つが大きな部品を動かしたり、簡単ではない粗視化、統計性をつかさどる階層性の科学が必要!

GPUが使いにくい例2:量子化学

87

• 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)のメモリを必要とするアルゴリズムもある

東工大の西川武志さんより

原子をただの粒とみなすのではなく、原子核のまわりの電子状態を計算し、原子のあいだにはたらく力をより正確に計算しながら、分子をシミュレーションする一連の手法。

量子化学シミュレーション

GPUが使いにくい例2:多くのメモリが必要な計算

• プラズマの位置と速度の分布 f が6次元場のため、一辺の解像度をNとするとO(N^6)のメモリが必要

• しかし、速度方向の分布は特徴があるため、うまい表現を考えてメモリ消費を減らし計算量を増やすことは可能かも・・・・

• 多くの、できれば高速な、できればお互いの通信が速いメモリが欲しい計算というのはいくらでもある

• 1ノードにつめるメモリには限度があるし、膨大なデータを1プロセッサで処理していては時間がかかるのでやはり並列計算の発達が必要

88

運動論のシミュレーション

),,,,,( zyx vvvzyxf

GPU利用が難しい・・・と言われていたが実現してしまった例:粉体

阪口 秀 西浦 泰介

89

GPUの専門家にすら、移植は困難といわれ

ていた(隣接関係が変わっていったり、1粒子に集中的にアクセスすることが必要)。まったく新しいアルゴリズムにすることでGPUでピークに近い性能を出すことに成功!雇用予算が事業仕分けで計上見送り

地球シミュレーター

GPUの勃興は何をもたらすか

• GPU計算機は通信ハードウェアコストが副次的

高性能通信ハードウェアへの需要が高まる

低レイテンシ、高帯域幅ハードウェアが出現?

ライフサイエンスの人など、高性能通信が欲しい人が喜ぶ!(宇宙の人もよろこぶ)

それより重要なこと:人が、並列性を理解し使いはじめること

90

GPUは安くありつづけるだろうか

• ハードの価格=(初期投資)÷(売れた数)

• GPUとしてはオーバースペックなFermiやSCC

やその他メニイコア演算ユニットが、パソコンレベルまで普及しなければ、安くて速い計算機が手に入らなくなるかも・・・

91

メニイコアがパソコンレベルに普及すると私が信じる理由

92

コンピューターと人間何が違う?

自然界の並列性• 宇宙には数千億の銀河

• 銀河には数兆の星

• 地球には無数の生命

• 人には60兆の細胞

• 脳細胞は140億個

すべてが同時に動いている

93

認識の並列性• 140億コア(?)トランジスタ(?) ×500Hz(?)

=ピーク性能7TFlops(?)

• 実効性能~0.01Flops

• 1日ごとに数万個のトランジスタが壊れる

• でも、とても多機能、柔軟、ディペンダブル

• スカラー性能はなくても膨大な並列性があれば可能になるタスクの存在を強く示唆

94

7TFlops 40万円シミュレーションしかできない

↑7TFlopsPriceless

人間が入力したデータの処理から、世界をじかに認識し、働きかける情報論へ

• 今あるアプリはメニイコアでただちに速くなるわけではない。だから、メニイコアが無用

• と思う人は見逃している:メニイコアでこそ動くような、普及を後押しするような、今は想像もできないようなアプリが生まれる可能性を!!

• 今想像できるのは・・・実世界認識?はてまた人工知能?

95

cv

GPUコンピューティング・メニーコアコンピューティングの産業規模のオーダー評価

スパコンにしか使われなかった場合

• Cray:62億円(年商)

プロが使うソフトウェアができた場合

• Dassault Systems社(自動車CAD):1790億円

• Adobe社(フラッシュ):1660億円

ゲームに使われた場合

• 任天堂:1兆円

社会基盤となるソフトウェアに採用された場合

• Google:2兆円

• マイクロソフト:5兆円

京速計算機に、仕分け人曰く

• 「一時的にトップを取る意味はどれくらいあるか」

• 「一番だから良いわけではない」

• 「ハードで世界一になればソフトにも波及というが分野で違う」

俺なりの答え

• たしかによいサイエンスが伴わなければハードで一時的に一番をとってもあまり意味がない

速いコアをたくさん並べるというのが一番性能がでるので、ベクトル/メニイコア系の流れは(何度か)来るだろう

今ならメニイコア世界に一番乗りできる。俺たちがメニイコアコンピューティングという新学問、新産業を興す。国産ソフト、人材を売れる。

一番=金を払えば得られる定量的アドバンテージと一番乗り=誰よりも先んじて知っている定性的アドバンテージは全然違う

むすび

• 情報論はずっとスカラー前提に発展してきた

• スカラーの周波数はもうあまり上がらない。SiGe

とかで上がっても、それをメニイコア化すればもっと性能が出る並列情報論の必要性

• ハードが出てしまったいま、ハードがないから理論

がない⇔理論がないから使いたくない⇔使われないから

ハードが出ないのスパイラルを打ち破りメニイコアを使おう。理論を作ろう。自然科学を研究しよう。

99

GPUができなかったこと

• 低レイテンシ通信、大容量メモリ・・・

• しかし、↑をはじめ、あらゆるHPCを使いこな

すうえで、並列性の理解は大きな助けになるだろう。

• GPUはその発火点となりうる

• GPUだけでなく、多様なハードウェアが未来に

生まれるように。それらを使いこなせるように。みんなが驚き、喜ぶような発明をするために。

100

以下 予備

101

補.次世代GPUコンピュータ、Fermi

102

2009/09/30 発表GPU Technologies Conference

103

http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

Fermi

104

Jen-Hsun HuangNVIDIA President&CEO

Fermiとは

• NVIDIAの第3世代汎用GPU

• 汎用GPUに乗り出した第1世代(G80; 8800GTX…)、それを拡張した第2世代(G200, GTX 280)の時代に、数値計算ユーザーから

得たさまざまな意見をもとに抜本的な再設計を施された

• 自然科学に自然に使えるレベル

105

おさらいーCPUとGPU

106

Core i7 : 731万トランジスタ

CPUとGPU

107

Core i7 : 731万トランジスタFermi : 30億トランジスタ

自然科学にとっての大きな進歩

Fermiの進歩

• 512コア、倍精度演算の完全サポート• じつは現時点で唯一の倍精度融合乗加算(MAD)をサポートするハードウェア

• ある人の推測:単精度1.5TFlop/s, 倍精度768GFlop/s

• 自動キャッシュの装備

• 全メモリにECC(誤り訂正符号)を標準装備

• GPU版ハイパースレッディング

「ベクトル計算機よりも高度な何か」に仕上がっている

108

109

SFU= D3sin, cos, hypsin, log, exp, erf, gammaなど特殊関数を計算する

Core=M1

整数・実数の四則演算が可能、倍精度もOK

スケジューラ= TA

次にどの計算をするか決めて司令する。

x16

Streaming Multiprocessor = 32core

Fermiのキャッシュ構造

110

メモリ=図書館

L2キャッシュ=研究室の本棚 768KB

L1キャッシュ=机の上に広げた本 64KB

レジスタ=計算用紙

メモリL2 L1の

間は必要なデータが自動的にコピーされる

いままでL2はなかった。L1は16KBで、全手動だった。

L2のおかげでSM間の通信が大幅

に高速化される。 プログラムも楽になる。

ECC(誤り訂正符号)について

• 計算機は精度のよい宇宙線ディテクター• 計算機は数を電圧により2進数で表現しているんだが、あまりにも素子が小さいので、2次宇宙線が飛び込んできてビット

を反転させることがある(メモリー内の数値が偶然に変化する)。GPUはゲーム用なのであまり気にしてこなかった。

• ECC=典型的にはメモリ64bitにつき冗長8bitを付加。1ビットの過ちならどこが反転したのかまで含めて検出し、訂正できる。

• FermiではすべてのメモリにECCを装備

• もはやFermiでは宇宙線を観測できない!!111

スケジューラ= TAが2人いて、コア=M1が片手でも

空いていれば計算をやらせる。Core i7がやっているhyper threading相当の機能

112

カーネルの同時実行が可能に。一部のテーブルである計算をやっている間のこりが全然別種類の計算を進めることができる。

「汎用GPU」から「GPU型計算機」へ

• 他にも、「普通の」プログラムを実行する上で必須の改良が加えられている。

• 普通のFortran, C, C++ プログラムが難なく倍精度でFermi上で100~200倍の速度で動く可能性がある(主に自動キャッシュのおかげ)。

• 性能を引き出すには、ものすごい数で(予想:512コア×128スレッド/コア=65536並列)並列化されたアルゴリズムを書かないといけない。これは使う人の担当。そうすればFermiは全力で応えてくれる。

113

Fermiへの懸念と期待• まあ、自社製品の広告だし• 倍精度が8倍速くなったって言ってるのはRadeonと比べても元が遅かったから

• どこまで公約どおり動くのかは使ってみるまで安心はできない

• NVIDIA毎年赤字だとか歩留まりが製品化できないレベルだとかいう噂もあるし発売日がずれたりしている

• そもそもこんなもん本来のGPUとして売るには高機能すぎ、値段がどうなるのか心配

• がんばって世に出していただければGPU計算が

容易になり、数値自然科学は大いに恩恵をこうむるだろう。

正にNVIDIAの社運を賭けた汎用GPU型決戦並機

114列計算

まとめ GPUについて• 安くて速い。さまざまな計算が100倍速に

• 1つのカードで数万並列の計算をしないと性能は生かせない。しかし自然科学にはそういう課題がたくさんあるはず。

• 1つのカードに計算能力が濃集してることで、逆に通信に余裕が出るケースもある1つのGPUパソコンをつくってスパコンを手に入れよう!GPUクラスタを作れば世界の頂点が見える。

• たとえGPUが滅びても、こういう超多並列ハードウェアはこれからの計算機の主流の1つではありつづけるだろう。

115

計算機にとらわれて目的を見失ってはこまりますが、たくさんある重要な課題の中からそれぞれの計算機に適したものを選ぶことは必要かと。そのためにはある程度計算機についても知っておくとよいかとおもいます。

いっしょにGPUを勉強して使いましょう!!