GPU上の大規模格子QCDシミュレーション に向けて

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 のコード実行後にプログラム終了前に,
CPU/GPUを協調利用する ソフトウェア開発環境
在庫管理問題の動的計画法による 解法とCUDA を用いた高速化
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
キャッシュ付PRAM上の 並列クィックソートと 並列マージソート
Intel AVX命令を用いた並列FFTの実現と評価
Fill-in LevelつきIC分解による 前処理について
A Q R QR分解とは? → × ◆QR分解 QTQ = I (単位行列) ◆応用例 ◆主な計算方法 n m 今回はこの方法に注目
ラベル付き区間グラフを列挙するBDDとその応用
三重対角化アルゴリズムの性能評価 早戸拓也・廣田悠輔.
格子QCDシミュレーションにおける固有値問題
全体ミーティング (4/25) 村田雅之.
研究集会 「超大規模行列の数理的諸問題とその高速解法」 2007 年 3 月 7 日 完全パイプライン化シフト QR 法による 実対称三重対角行列の 固有値並列計算 宮田 考史  山本 有作  張 紹良   名古屋大学 大学院工学研究科 計算理工学専攻.
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
AllReduce アルゴリズムによる QR 分解の精度について
シミュレーション物理5 運動方程式の方法: サブルーチンの使い方.
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
PCクラスタ上での 連立一次方程式の解の精度保証
BRST対称性とカイラル対称性の破れの 格子QCDシミュレーションによる検証 scirqcd 帝京大学理工学部 古井貞隆
格子QCDのための線形計算 (連立一次方程式、固有値問題)について
理学部情報科学科 金田研究室 指導教官 金田 康正 工藤 誠
スパコンとJLDG HEPの計算環境 HEPnet-J
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
正方行列向け特異値分解の CUDAによる高速化
京都大学大学院医学研究科 画像応用治療学・放射線腫瘍学 石原 佳知
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
現実の有限密度QCDの定性的な振る舞いに
現実の有限密度QCDの定性的な振る舞いに
ステンシル計算を対象とした 大規模GPUクラスタ向け 自動並列化フレームワーク
非エルミート 量子力学と局在現象 羽田野 直道 D.R. Nelson (Harvard)
Graphic Card を使った 高性能計算
格子QCDにおけるGPU計算 広大理 尾崎裕介 共同研究者 石川健一.
格子QCD計算のGPUを用いた加速の可能性について
PGIコンパイラーによる ディレクティブベースのGPGPU
AMR法フレームワークの様々なアーキテクチャへ向けた発展 研究背景と研究目的 Xeon Phi対応に向けた拡張
非局所クォーク模型Gaussianバリオン間相互作用とその応用
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
「R入門」  5.7 行列に対する諸機能  10月23日 (木) 発表者 大城亜里沙.
研究課題名 研究背景・目的 有機エレクトロニクス材料物質の基礎電子物性の理解 2. 理論 3. 計算方法、プログラムの現状
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
導電性高分子材料の電子状態計算に現れる連立一次方程式に対する 並列直接解法の高性能化
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
GW space-timeコードの大規模な有機-金属界面への適用に向けた高効率化
知識科学研究科 知識システム構築論講座 林研究室 佛明 智
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
「データ学習アルゴリズム」 第3章 複雑な学習モデル 報告者 佐々木 稔 2003年6月25日 3.1 関数近似モデル
? 格子QCDシミュレーションによる南部-ゴールドストン粒子の 質量生成機構の研究 質量の起源 ドメインウォールフェルミオン作用
高精細計算を実現するAMR法フレームワークの高度化 研究背景と研究目的 複数GPU間での袖領域の交換と効率化
格子ゲージ理論によるダークマターの研究 ダークマター(DM)とは ダークマターの正体を探れ!
計画研究代表者 京都大学基礎物理学研究所 大野木 哲也
Marco Ruggieri 、大西 明(京大基研)
定常剛体回転する宇宙ひもからの 重力波放射
原子核物理学 第7講 殻模型.
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(Nlog2N)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似
メモリ使用量の少ないGCR法の提案 東京大学理学部情報科学科 工藤 誠 東京大学情報基盤センター 黒田 久泰
アルゴリズムとデータ構造1 2009年6月15日
密行列固有値解法の最近の発展 (I) - Multiple Relatively Robust Representation アルゴリズム - 2004年11月26日 名古屋大学 計算理工学専攻 山本有作 日立製作所の山本有作です。 「~」について発表いたします。
媒質中でのカイラル摂動論を用いた カイラル凝縮の解析
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
長方行列向け特異値分解の 浮動小数点コプロセッサによる 高速化
確率的フィルタリングを用いた アンサンブル学習の統計力学 三好 誠司 岡田 真人 神 戸 高 専 東 大, 理 研
分散メモリ型並列計算機上での行列演算の並列化
? リー・ヤンの零点 これまでの格子QCD計算の結果 今年度の計画 リー・ヤンの零点分布から探る有限密度QCDにおける相構造の研究
2008年 7月17日 応用数理工学特論 期末発表 鈴木綾華,程飛
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

GPU上の大規模格子QCDシミュレーション に向けて 目標と現状 格子QCDの問題 これまでの結果 オーバーラップ演算子への展望 松古 栄夫 (hideo.matsufuru@kek.jp) In collaboration with 青山龍美、野秋淳一、山田憲和 (KEK) Special thanks to 石川健一、尾崎裕介 (広島大) High Energy Accelerator Research Organization (KEK) 2008年6月24日 GPGPU研究会

目標 (1) 格子QCDの大規模シミュレーション 厳密なカイラル対称性を持つ格子フェルミオン PFlops級の計算にGPUは役に立つか? 現在のスパコンレベルの計算をもっと手軽に (2) 素粒子・原子核・宇宙の計算への応用 新学術領域研究(代表:青木慎也): bridge.kek.jp 問題にあったアーキテクチャ、アルゴリズムを GPUはどのようなタイプの問題に向いているか? チューニング・ノウハウの蓄積: 2割の労力で8割の性能 を! どのようにコードを書いておくとよいか?

現状 Wilson クォーク演算子でCUDAプログラミングの練習 基本的なクォーク演算子 チューニング手法 単精度と倍精度の比較 これから: シングルGPU → マルチGPUへ GPU向きのアルゴリズムの探求 複雑なフェルミオン演算子 計算リソース Tesla S1070x4 (16 GPU) @KEK 新領域関係の人は利用できます

格子QCDの問題 Introduction.

格子QCDシミュレーション 格子QCD(量子色力学): 格子時空上の場の理論 グルーオン場: リンク上の3x3複素行列 クォーク場:サイト上のグラスマン数    (計算機上で扱えないので手で積 分) 経路積分量子化 → 統計力学系と同じ形 モンテカルロ法によるシミュレーション 低エネルギーでQCDを扱う唯一の一般的方法 物理量の期待値: グルーオン場U, 擬クォーク場φについての積分 → モンテカルロ法で生成 擬クォーク場の有効作用 (このDの逆を解くのに時間かかる)

格子QCDシミュレーション モンテカルロ法: グルーオン場の配位{U} (と擬クォーク場φ) を の確率で生成 ..... (イメージ図) ハイブリッド・モンテカルロ法 グルーオン場に共役運動量を導入 → 分子動力学 (Hamiltonian を保存する発展方程 式) 擬フェルミオン場φをランダム(Gaussian)に生成 各ステップで D-1φを求める必要 生成したグルーオン場の配位を使って、物理量を計算 Ex. クォークの伝播関数(D-1)からハドロンの相関関数を 構成 統計平均→物理量の期待値

格子QCDの問題 計算時間のほとんどは、線形方程式 Dx=b を解いている x, b は N=3(カラー) x 4(スピン) x サイト (例えば 164) の自 由度を持つ複素ベクトル [N~O(106-108)] Krylov部分空間法 フェルミオン演算子 D : N x N 巨大行列 (メモリに載せるのは U) Wilson演算子 シンプルな構造、 カイラル対称性は連続極限で回復 計算コストは比較的低い オーバーラップ演算子 格子上の厳密なカイラル対称性を持つ 計算コスト高: Wilson演算子をO(100)回かける必要 Dの演算のスピード、線形解法の効率を上げることが重要

Wilson演算子の場合 D は N x N の巨大疎行列 x 3x3複素行列: リンク変数 SU(3) (グルーオン場の情報) μ 対角成分 +方向の隣接サイトとの結合 ー方向の隣接サイトとの結合 x μ U (x)

これまでの研究 Egri, Fodor, Hoelbling, Katz, Nogradi, Szabo Pioneering work, OpenGL (w/o CUDA) PoS (Lat2006) 034, Comput. Phys. Commun. 177 (2007) 631 Clark, Barros, Babich, Brower, Rebbi PoS (Lattice2008) 045, etc. Ishikawa and Osaki 尾崎さんの講演を参照 Wilson kernel solver 最も時間がかかる部分 倍精度が必要な場合: Single precision solver を前処理として使う (尾崎-石川、物理学会2009年春より)

オーバーラップ演算子 我々の目標:オーバーラップ演算子を扱いたい HW はWilson演算子 Sign 関数はHW の固有ベクトル展開+近似式で評価 Wilson演算子が速く計算できることが最低条件 計算量大: DあたりWilson 演算子をO(100)回かける 現在は Blue Gene/L (1ラック=5.6TFlops) で計算 243x48 格子, O(12)時間 x O(1000) 163x48 格子, O(2) 時間 x O(2500) 実戦ではこのサイズ以上が必要! Cf. JLQCD Collaboration (jlqcd.kek.jp)

方針 まず、Wilson演算子でいろいろやってみる チューニング手法の習得 線形問題の高速化: 格子QCDの最も時間のかかる部分 他の演算子(staggered, domain-wallなど)への拡張は容 易 オーバーラップ演算子の核部分 単精度と倍精度: 性能比較&どこで倍精度が必要か? ハイブリッド・モンテカルロ法: どこまでをGPUでやる か? 並列化 ボード内: OpenMP/MPI, ボード間: MPI 演算と通信のオーバーラップ オーバーラップ演算子への拡張 並列化は不可欠 アルゴリズムの改良

これまでの結果 Introduction.

ベンチマーク問題 Wilson 演算子の線形問題 まずはシングルGPUで実装 前処理 (even-oddなど) なし 単精度と倍精度の性能比較 現状: これまでの結果 Wilson kernelの演算 (線形代数部分の比較はまだ) 単精度と倍精度の比較 textureを利用 これからの課題 共有メモリ、コンスタントメモリの利用 線形問題での性能比較と最適化 複数GPUの利用 (ボード内、ボード間)

利用環境 GT200 (GeForce GTX280, Tesla C1060/S1070) Clock 1.3GHz 240 thread processor (8 x 30 multiproc.) Peak ~1TFlops Multiprocessor: 8 スレッドプロセッサ/ 1倍精度演算器/ 2 Special Function Unit 16384 32-bit レジスタ 16KB 共有メモリ 4GB GDDR3 Memory bandwidth 102GB/s (800MHz DDR) Flops >> B/s (~10 times) Interface: PCI Express 2.0 x16:8GB/s

書き換え手順 GPUを使うコードに変換 どの部分をGPUにやらせるか? (C/C++コードの作成) Thread と blockの切り方を決める メモリへのアクセスを減らす → チューニング Wilson kernel mult の実装 1 格子点を1スレッドに対応 v=UGw (U: color 空間に作用、G: スピノール空間に作用) v, w: 3(color)x4(spinor)x2(Re/Im) = 24 成分 vector U: Link variable: 3x3 complex matrix [SU(3)] GFlops は、CPUでの同等演算に換算 サイトあたり、1368回の浮動小数点演算

メモリアクセス メモリアクセス: 1 vector & 1 link var. のロード x8回 () + 1 SAXPY サイトあたり、1248B のデータのロード、96B のストア =1344Bのメモリアクセス B/F ~1 (CPU演算換算) memory b/w が律則 Special unitarity を利用してメモリアクセスを減らす 2 列(or 行) 分(12 float)をロード、残りは on-the-fly で再構 成 もっと凝った方法: 8個の変数で表すことも可能 (Clark et al.)

チューニングの手順 Coalesced access 組込みベクトル型(float4, float2 など)の利用 配列構造の変更: (石川さん、尾崎さんによる指南) Coalesced access 組込みベクトル型(float4, float2 など)の利用 配列構造の変更: float2/4で定義した変数について、スレッドに対応する indexを最内側に配置→その他の自由度→ブロックの 自由度 Texture の利用 (現在ここまで) 共有メモリ、constant メモリの利用 Thread/block sizeの最適化など

Coalesced access (SGI講習会資料より) メモリアクセス命令はハーフワープ(16)単位で実行 一回でハーフワープ分のスレッドのデータを読み込める 要素のデータ型が4, 8, or 16 Bであること 先頭アドレスが16*sizeof(type)に整列していること こちらが 速い!

メモリ空間 ハードウェア・モデル グローバルメモリ空間 テクスチャメモリ空間 コンスタントメモリ空間 (SGI講習会資料、CUDAマニュアルより) ハードウェア・モデル  デバイスメモリ上の変数は、アクセス方 法の違いで3つのメモリ空間に分類 グローバルメモリ空間 一般的、cudaMalloc, __device__ キャッシュされない Coalescingしないと遅い テクスチャメモリ空間 テクスチャリファレンス経由でアクセス カーネルからは読み込み専用 キャッシュされる コンスタントメモリ空間 __constant__宣言 読み込み専用

Preliminary result Wilson kernel mult Lattice size: 2L x L3 Thread数: 128 CPU演算に換算した性能値 (実際の演算量:1368→1704, +25%) Performance: w/oテクスチャで~40GFlops テクスチャを使うと 〜100GFlops ベクトルにテクスチャを使うと大き な効果 (cacheの効果) リンク変数にはあまり効かない? 同じリンク変数を2回しか使わな い L

Preliminary result スレッド数依存性 32x24x16x16 lattice スレッド(=サイト)あたりで使 うレジスタ数:66 1マルチプロセッサあたりの レジスタ数:16384 → スレッド数のmax: 192 スレッド数>48で高性能 スレッド数 ~96で性能低下 (理由はまだ不明) ?

Preliminary result 倍精度: Wilson kernel mult Lattice size: 2L x L3, thread数: 128 単精度 倍精度 L L Single の1/4 程度のスピード → 悪くない!! 傾向はsingleの場合と同様

Preliminary result 倍精度: スレッド数依存性 倍精度 単精度 倍精度での最適スレッド数: ~64 倍精度でのスレッド数>150 での性能低下はキャッシュミスの効 果?

ここまでわかったこととこれから Coalesced アクセス+テクスチャ: CPU換算で~100GFlops スレッド数のチューニング 倍精度は単精度の1/4 程度の性能 これからやること 更にチューニング 共有メモリ、コンスタントメモリの利用など 他の部分も含めた高速化 線形代数: CUDA BLAS library or 実装 発展方程式: 単精度でよいか (つじつま合わせできるか?) Double演算器をどう使うと良いか? 複数GPUへの拡張 ボード内(OpenMP/MPI)、ボード間(MPI)

オーバーラップ演算子への展望 Introduction.

オーバーラップ演算子 我々の目標:オーバーラップ演算子を扱いたい HW はWilson演算子 計算量大: O(1)TFlops (sustained)が必要 近似式で符号関数を評価 (l=1,..., N~20) を解く必要: マルチシフト・ソルバー (単精度による前処理が難しい) HW の小さい固有モードの射影による高速化 固有値、固有ベクトルを求める必要

オーバーラップ演算子の線形方程式 4D solver: 上の近似式を直接使って D を構成 CG法を入れ子にして使う(内側はマルチシフト) 5D solver: 5次元の行列を使って、1重のCGで解く 4D solverより高速

オーバーラップ演算子の5Dソルバー オーバーラップ演算子に関する線形方程式を、5次元に拡張した 行列を解くことによって解く (N=2の場合) がオーバーラップ演算子になるようにパラメターを選ぶ を解くことによって、 の解が得られる 基本的にはWilson演算子の場合と同様 オーバーラップ演算子のソルバー以外に発展方程式の フォースの計算でもマルチシフトCGが必要

展望 現実的なシミュレーションでは、 並列化が不可欠 通信をどうオーバーラップさせるか 粒度の粗い並列計算向きのアルゴリズム (領域分割、マル チグリッド) 精度に注意する部分 Hamiltonianの計算 (large cancellation) 分子動力学部分の reversibility 固有値問題 (?) 単精度ソルバーを前処理として利用するのは、マルチシフ ト・ソルバーに適用困難 (RHMCでも同じ問題) 倍精度@GPUの有効利用

展望 期待 ECCがつけば、ほとんどの演算をGPUでできる 倍精度演算器が増えればgood GPU間でのデータの通信ができればgood