偏微分方程式シミュレーショ ンのための並列 DSL 「 Paraiso 」 計画 宇宙物理学者 京都大学白眉センター 特定助教.

Slides:



Advertisements
Similar presentations
1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
Advertisements

G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
HBSP モデル上での 行列積を求めるアルゴリ ム 情報論理工学 吉岡健太.
CPU/GPUを協調利用する ソフトウェア開発環境
在庫管理問題の動的計画法による 解法とCUDA を用いた高速化
MPIを用いたグラフの並列計算 情報論理工学研究室 藤本 涼一.
第1回 確率変数、確率分布 確率・統計Ⅰ ここです! 確率変数と確率分布 確率変数の同時分布、独立性 確率変数の平均 確率変数の分散
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
Chapter11-4(前半) 加藤健.
Intel AVX命令を用いた並列FFTの実現と評価
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
プログラミング言語としてのR 情報知能学科 白井 英俊.
FORTRAN 科学技術計算用 数値演算精度を重視したシステム K=0 DO 10 I=0,N,1 K=K+I 10 CONTINUE
全体ミーティング (4/25) 村田雅之.
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
PCクラスタにおける2個体分散遺伝的アルゴリズムの高速化
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
報告 (2006/9/6) 高橋 慧.
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
周期境界条件下に配置されたブラックホールの変形
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
電気回路学Ⅱ エネルギーインテリジェンスコース 5セメ 山田 博仁.
スパコンとJLDG HEPの計算環境 HEPnet-J
アスペクト指向プログラミングを用いたIDSオフロード
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
正方行列向け特異値分解の CUDAによる高速化
Flyingware : バイトコード変換による 安全なエージェントの実行
数値相対論の展望        柴田 大 (東大総合文化:1月から京大基研).
京都大学大学院医学研究科 画像応用治療学・放射線腫瘍学 石原 佳知
アクセラレータを用いた 大規模へテロ環境における Linpack
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
型付きアセンブリ言語を用いた安全なカーネル拡張
OpenMPハードウェア動作合成システムの検証(Ⅰ)
ステンシル計算を対象とした 大規模GPUクラスタ向け 自動並列化フレームワーク
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
高速剰余算アルゴリズムとそのハードウェア実装についての研究
コンピュータを知る 1E16M009-1 梅津たくみ 1E16M017-8 小沢あきら 1E16M035-0 柴田かいと
AMR法フレームワークの様々なアーキテクチャへ向けた発展 研究背景と研究目的 Xeon Phi対応に向けた拡張
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
リモートホストの異常を検知するための GPUとの直接通信機構
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
九州大学情報基盤研究開発センター長 青柳 睦
実行時情報に基づく OSカーネルのコンフィグ最小化
通信機構合わせた最適化をおこなう並列化ンパイラ
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
目的:高速QR分解ルーチンのGPUクラスタ実装
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
InTriggerクラスタ環境の構築 i-explosion 支援班 クラスタ環境の概要 研究に使える「共有資源」を提供
岩澤全規 理化学研究所 計算科学研究機構 粒子系シミュレータ研究チーム 2015年7月22日 AICS/FOCUS共催 FDPS講習会
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
大阪市立大学 宇宙物理(重力)研究室 D2 孝森 洋介
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
高精細計算を実現するAMR法フレームワークの高度化 研究背景と研究目的 複数GPU間での袖領域の交換と効率化
「マイグレーションを支援する分散集合オブジェクト」
アルゴリズムとデータ構造1 2009年6月15日
BSPモデルを用いた 並列計算の有用性の検証
プログラム分散化のための アスペクト指向言語
電気回路学Ⅱ 通信工学コース 5セメ 山田 博仁.
アルゴリズムとデータ構造 2010年6月17日
分散メモリ型並列計算機上での行列演算の並列化
アーキテクチャパラメータを利用した並列GCの性能予測
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
大規模粒子法による大型クルーズ船の浸水解析
Presentation transcript:

偏微分方程式シミュレーショ ンのための並列 DSL 「 Paraiso 」 計画 宇宙物理学者 京都大学白眉センター 特定助教

Monadius の作者です

高速化とは 並列化であ る

4 1+(4or8)x8 コア 8x30 コア x2 Cell B.E. MagnyCours 4x(8or12) コア

GPU のさらに高い並列計算性能 NeharemG200 (GTX285) ベクトル長 48 コア数 430 レジスタ数 40?×44096×30 スレッド数 2×41024×30 5 GPU の設計:レジスタが圧倒的に多い  レジスタを退避させることなく膨大な数のスレッドを 駆動  様々なレイテンシを隠蔽

どんなマシンを使うのか?

DEGIMA DEstination of GPU Intensive MAchines 長崎大学「超並列メ ニーコアコンピュー ティングセンター」の GPU クラスタ led by 濱 田剛 「エッジなスパコン」 約 800×NVIDIA GT200 GPU 型演算器 うち 576 個は InfiniBand で連結 単精度ピーク演算性能 : 514.9TFlop/s 最大 1769’4720 スレッドを同時実行可能 総ビデオメモリ : 約 460GB ビデオメモリ帯域幅 : TB/s

TSUBAME 東京工業大学 TSUBAME グリッドクラスタ 平成 22 年度学際大規模情報基盤共同利用・共同研究拠点公募型共同研究(試行) 共同利用に供されている GPU スパコン GPU が利用できる最大のキュー = hpc1tes2 120×NVIDIA GT200 GPU 型演算器 単精度ピーク演算性能 : 124.2TFlop/s 最大 122’880 スレッドを同時実行可能 総ビデオメモリ : 480GB ビデオメモリ帯域幅 : 1.224TB/s

1 ノード ( 平民ノード ) メモリ : (4GBx6) + (8GBx3 + 2GBx3) CPU : Westmere EP x2 GPU : Tesla 2050 (515Gflops + 3GB) x3 通信: Infiniband QDR 10GB/s ローカルディスク: SSD x2 RAID0 (460MB/s read) 2.2×10 15 flops 2.4?×10 14 flops 1.3×10 13 Byte 7.6×10 13 Byte 7.0? ×10 15 Byte Disks 1.4×10 13 Byte/s 6.1×10 14 Byte/s 3.4×10 13 Byte/s 6.6×10 11 Byte/s 1×10 14 Byte/s GPU CPU GPU の メモ リ ホスト の メモリ SSD DISK 通信 L1L2L3 shared L1L2 TSUBAME 2.0 メモリヒエラルキ ( 一部推 測 )

アーキテクトたちの努力のおかげで、今 日ではすばらしい演算性能・莫大なメモ リを持った計算機が使えるようになった。 だが、その代償も大きかった 最大 1769’4720 スレッドを同時実行 L1 Cache L2 Cache VRAM HOST MEMORY SSD Hard Disk Register Shared Memory

どのような計算をしたいのか? 解きたい偏微分方程式があって、それを 数値アルゴリズムに変換して解く。 最大フロー ( 解きたい問題 ) に対しフォード ファルカーソン法・エドモンドカープ法 など ( アルゴリズム ) があるようなもの 一般相対性理論 (時空・座標) 磁気流体力学 (プラズマ) 流体力学 (気体・液体) 輻射輸送 (光の放出・反射・ 吸収・伝搬)

偏微分方程式の陽解法とは? 流体などを、 3 次元配列で表す。 偏微分方程式を「 3 次元、実数セルオート マトンのルール」に変換する。 世代を進めていく。 各セルの次世代の状態は、前の世代の近 所のセルの状態から決まる。

どんな方程式を解きたいのか? たとえば、一般相対性理論の方程式であ る アインシュタイン方程式は・・・ ね、簡単でしょ う?

どんなアルゴリズムで解くの か? アインシュタイン方 程式を解くための BSSN 法は・・・

どんなコードで解くのか?

もっと美しく書けないのか? たぶん、可能 ベクトルやテンソルをクラスとして定義 すれば 演算子オーバーロードとか使えば テンプレートとか使えば エクスプレッション・テンプレートとか 使えば

問題 コードを書くのは一回きりではない よいアルゴリズムを探すために試行錯誤したい 3 次元セル配列のメモリへの格納順序とか変えたくな るかもしれない アーキテクチャが変わって SSE だの CUDA だの使いたく なるかもしれない 分散型計算機つかうには MPI 通信なども必要 上のうちどれか1つの変更をとっても、コードのか なりの部分から必要個所を探して修正が必要(つら い・・・)

モジュール化されていて 移植が楽で ちゃんと速度も出るコードを 美しく書けないのか? 絶望的

人間がコードを 書くのに必要な 知識のバイト数 実際のコードのバイト 数 <<

いわばこんな風になっている プログラムの総行数は、部品ごとの知識 量の積 プログラムを書くのに必要な知識を個別 に与えさえすれば、コードが生成される それをこんな風にしたい! 方程式の数、積分法や補間法の次数、ベクトルの要 素数、ハードウェアを複数使う場合はその数・・・

シミュレーションを行うのに必要な、代 数構造、物理的方程式を解くためのアル ゴリズム、時間積分法、空間補間法、最 適化技術、ハードウェアの知識などを、 モジュラーで、自由に再利用・組み合わ せできる形で表現できるような言語を作 りたい。 偏微分方程式の陽解法に限定

Paraiso 数式処理システム + 3 次元、実数セルオートマトンのコード ジェネレータ for Distributed, Accelerated Machines

Virtual Vector Machine 実数セルオートマトンに対応する仮想マ シン 3 次元配列状にならんだレジスタを持つ 演算命令は基本的に全セルに並列に作用 隣のセルからロードする命令なども 実行するための仮想マ シンではなく、 データフローグラフを 構築するための仮想マ シン

基礎方程式 離散化形 VVM 上のコード 実マシン上のコード 実マシン上の実行 ファイル d_dt (q [i]) = (a [i,j]) (f [j]) f [j] = … … ld r2, g2[0,0,0] ld r1, g2[0,0,1] add r1,r2,r3 st r3,g1 *q=cudaMalloc(…); __shared__ a,b; a=q[idx]; b=q[idx+1]; p[idx]=a+b; さしあたり 人手 自動 既存コンパイラ 仮想ベクトルマシン: VVM 結果

Paraiso 2008 プロトタイプ。 偏微分方程式が対象ではない。単に多数 の並列した計算を行うようなコードを生 成する GPGPU をもふもふする会でも使ったり

27 Paraiso2008 の文法とコード生成 Paraiso Code C++ code parallel と sequential とでループを生成 allocate でメモリを確保 四則演算とかはいつも通り

28 ハードウェアに特化したコードの 生成 同一の Paraiso コードから、多様 なハードウェア向 けの言語を生成で きる。 CUDA : nvidia GPU の言語 Paraiso Code

29 数学構造の扱い 複素数やベクトルといった構 造、内積とかの演算が使える。 普通の数に定義された演算が コード生成にもそのまま使え る。 基本演算に分解されるので、 C++ とかでクラスを使ったよう な場合のオーバヘッドもない。 example: drawing Mandlebrot set Paraiso Code C++ code 232Gflops on GPU 1.15Gflops on CPU ( 1th )

30 アルゴリズムの生成 Paraiso で古典的ルンゲクッタ積分を生成す るコードを書いた。 ハミルトニアンをあたえたら機械的に微分し て symplectic 積分を生成とかもできるだろう。 Paraiso Code C++ code

31 簡単な使用例 : ローレンツアトラク タ Paraiso Code CUDA code 基礎方程式

32 Paraiso Code C++ code C++ と MPI FortranCUDA 数値計算コードを生成 各アーキテクチャ向けのコード g ++ CCf77nvcc 各アーキテクチャのコンパイラ 各マシンで実行・ハイブリッドマシンで実行 アルゴリズム を記述 Future Architectures Paraiso

先行研究

かなり似ている・・・ 基礎方程式 離散化形 VVM 上のコード 実マシン上のコー ド 実マシン上の実行 ファイル さしあたり 人手 自動 既存コンパイラ

大丈夫かな・・・・ ユーザーは少なくとも一人いるし・・・ 1985 年には Haskell はなかったし・・・

Wikipedia より 現在 LL という概念が重要視される背景には、計 算機資源の増大に伴い、プログラマという人的 資源の価値が相対的に上昇したこと、また開発 するプログラムの対象そのものが複雑化してお り、安全で効率の良いプログラミングのために 人間側の利便性に最適化の主眼が移りつつある ことなどがある。 抽象化により、コーディング速度 も 実行速度も最適化してみせた い!! ありがとうございました