東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 金田研究室 工藤 誠

Slides:



Advertisements
Similar presentations
画像処理・実習 第十四回:パターン認識 東海大学 情報理工学部 情報メディア学科 濱本和彦. 今回の内容 5. パターン認識 5.1 マッチングの原理 5.2 テンプレートマッチング 実習 相互相関とテンプレートマッチング.
Advertisements

1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
HBSP モデル上での 行列積を求めるアルゴリ ム 情報論理工学 吉岡健太.
連続系アルゴリズム演習 第2回 OpenMPによる課題.
Webプロキシサーバにおける 動的資源管理方式の提案と実装
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
クラスタの構成技術と クラスタによる並列処理
Intel AVX命令を用いた並列FFTの実現と評価
タスクスケジューリング    .
ML 演習 第 8 回 2007/07/17 飯塚 大輔, 後藤 哲志, 前田 俊行
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
全体ミーティング (4/25) 村田雅之.
PCクラスタにおける2個体分散遺伝的アルゴリズムの高速化
データ構造とアルゴリズム 第10回 mallocとfree
2009/10/9 良いアルゴリズムとは 第2講: 平成21年10月9日 (金) 4限 E252教室 コンピュータアルゴリズム.
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
各種PC クラスタの性能評価 同志社大学 工学部 廣安 知之 三木 光範 谷村 勇輔.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
理学部情報科学科 金田研究室 指導教官 金田 康正 工藤 誠
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
高速剰余算アルゴリズムとそのハードウェア実装についての研究
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
半無限領域のスペクトル法による竜巻を模した渦の数値実験に向けた研究開発
MPIとOpenMPを用いた Nクイーン問題の並列化
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
九州大学情報基盤研究開発センター長 青柳 睦
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
通信機構合わせた最適化をおこなう並列化ンパイラ
進化的計算手法の並列計算機への実装 三木 光範
アルゴリズムとプログラミング (Algorithms and Programming)
ポリゴンメッシュ (2) - 変形と簡略化- 東京大学 精密工学専攻 大竹豊 資料および授業の情報は :
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
Data Clustering: A Review
プログラミング 4 整列アルゴリズム.
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
目的:高速QR分解ルーチンのGPUクラスタ実装
プログラミング 4 探索と計算量.
疑似乱数, モンテカルロ法によるシミュレーション
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
岩澤全規 理化学研究所 計算科学研究機構 粒子系シミュレータ研究チーム 2015年7月22日 AICS/FOCUS共催 FDPS講習会
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
マイグレーションを支援する分散集合オブジェクト
第4回 メモリ管理 主記憶(メインメモリ)の管理 固定区画方式と可変区画方式 空き領域の管理 スワッピング.
ISO23950による分散検索の課題と その解決案に関する検討
全体ミーティング (5/23) 村田雅之.
「マイグレーションを支援する分散集合オブジェクト」
メモリ使用量の少ないGCR法の提案 東京大学理学部情報科学科 工藤 誠 東京大学情報基盤センター 黒田 久泰
アルゴリズムとデータ構造1 2009年6月15日
理工学部情報学科 情報論理工学研究室 延山 周平
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
BSPモデルを用いた 最小スパニング木 情報論理工学研究室 02-1-47-134 小林洋亮.
参考:大きい要素の処理.
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
分散メモリ型並列計算機上での行列演算の並列化
アーキテクチャパラメータを利用した並列GCの性能予測
並列処理プロセッサへの 実数演算機構の開発
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
北大MMCセミナー 第23回 Date:2014年3月6日(木) 16:30~18:00 ※通常と曜日が異なります
Presentation transcript:

東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 金田研究室 工藤 誠 3機種優勝への道 ~遥かなるPSC~ 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 金田研究室 工藤 誠

自己紹介と参加の動機(1) 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻(旧理学系研究科 情報科学専攻) 金田研究室所属(情報基盤センター スーパーコンピューティング部門) PSCは初出場 金田研究室では、大学院生はPSCに参加するというのが恒例 3月の申し込み期間の時点で参加可能な大学院生は一人 当然、PSC2001に参加する

PSCには当然参加する、かつ上位入賞しなければならない 自己紹介と参加の動機(2) 毎年、金田研ではPSC参加者は上位入賞を果たしてきた 年 優勝 2位 3位 1995 黒田(SR2201) 高橋(SP-2) 1996 高橋(IBM,日立) 富松、黒田、渡辺(IBM,日立) 富松、黒田、渡辺(富士通) 1997 名取(AP3000,SR2201) 名取(Cenju-3)、片桐(SR2201) 片桐(AP3000) 1998 黒田(Cenju-3) 黒田(AP-3000,SR-2201) 片桐(Cenju-3)、黒田(SUN E10000) 1999 2000 大澤(SR2201) PSCには当然参加する、かつ上位入賞しなければならない

問題説明(1) 3次元空間中のn個の粒子P(0)…P(n-1)の質量、初期速度、位置が与えられる これら粒子が相互に力を及ぼしあう 微小時間後の粒子の位置を計算するという処理を繰り返す 最終的に、T step後の粒子の位置を求める

問題説明(2) 粒子P(j)が粒子P(i)に及ぼす力によって生じるP(i)の加速度A(i) f(X)、r(i,j)は以下のように与えられる ここで、roundとは小数点以下を四捨五入する関数 微小時間dt後の位置p(t)と速度v(t)の更新

アルゴリズム概要(1) do i=1,N do j=1,N calculate X 粒子間の距離 if(X < 1024) すべての粒子の、すべての粒子に対して及ぼす力を計算するようなナイーブなアルゴリズム do i=1,N do j=1,N calculate X if(X < 1024) calculate a end do 粒子間の距離 加速度 すべての粒子間の距離を計算 非効率!

アルゴリズムの概要(2) 距離計算の回数を減らしたい 今回の問題にはカットオフが設定されている 領域全体を小さな直方体(セル)に分割し、セル同士の 距離を計算しカットオフを考慮することで、総計算回数を減らす

セル分けによる計算量の削減 カットオフ距離よりも 近いので計算する カットオフ距離よりも遠いので計算しない

セルのプロセッサへの割り当て セル分けは、領域を3次元的に分割する 領域をz軸方向に分割した柱状の領域を各PEに割り当てる

セル分割の方法 セル分割の方法は、プロセッサ間のロードバランスに影響する 領域を分割する3つの方針 等間隔分割 粒子数一定に分割 距離計算数を一定に分割 このどちらかを採用

セルの領域からはみ出る粒子も出てくるが、 セル分けの頻度 セル分けは逐次処理なので、時間がかかる 毎stepセル分けしなくても、計算量、ロードバランスはそれほど悪くならない セル分けは10stepに一度行う セルの領域からはみ出る粒子も出てくるが、 セルの境界をずらすことで対応した

AutoTuning機構 セルの個数 xyz各方向の分割数 最適値は、粒子の個数、分散形状によって違う 実行時に、動的にこれらのパラメータを決定する AutoTuning機構をつけた 実行時になってみないと、最適なパラメータは わからない! 200stepに一度パラメータを再設定

距離計算の回数を約半分におさえることができる 相互作用の対称性 粒子iと粒子jが相互に及ぼす加速度ai,aj 位置の差のベクトル 質量 (1)式と(2)式には対称性がある 2粒子間の距離やr(i,j)を使い回すことができる。 距離計算の回数を約半分におさえることができる

実装上の工夫(1) round処理の高速化 大会側から与えられたround処理は、非常に遅い IEEE表現のdoubleの上位18ビットがインデックスとなる 配列を用意すれば、round処理は配列参照のみでできる 指数部 仮数部 bit 1 2 8 色のついた部分を配列のインデックスとする 配列のサイズは、double型262144個分 double round(double x){ if ( x < 0.0 ) return -floor(-x+0.5); else return floor(x+0.5); } 大会側から与えられたround #define myround(x) rbuf[*((unsigned int *)&(x)) >> 14] 自作round

実装上の工夫(2) Barrier同期(共有メモリマシン用) システムコール(semaphore等)や既存のライブラリ関数(mutex_*,cond_*)を使うのは、非常に遅い ビジーウェイトで同期を取る自前のBarrier同期を作成した

プログラムの特徴 分散メモリマシン用 (Scoreクラスタ) 共有メモリマシン用 (SGI,SUN) 実装方式 MPI マルチプロセス 通信、共有データ 粒子の位置 セルの境界座標 各stepで計算した加速度 相互作用の対称性の利用 自PEが担当する粒子同士の力の計算のみ すべての粒子同士の力の計算

実行結果(1) SUNの提出プログラム コンテストマシン 17.58 53.45 15.03 43.07 73.08 169.80 予選問題(秒) (20,000粒子,250step) 本選問題(秒) (40,000粒子,500step) Scoreクラスタ (32PE使用) 17.58 53.45 SGI Origin2000 15.03 43.07 SUN Enterprise10000 (60PE使用) 73.08 169.80 (38.91) (103.04) SUNの提出プログラム 共有メモリマシン用のプログラムは、主にSGI上で開発 最終日にSUNが非常に混んでいたので、SUN用のチューニングができなかった 結局、SGIと同じパラメータで提出した

1ノードが8プロセッサから成る、共有分散メモリマシン 実行結果(2) HITACHI SR8000/MPP 1ノードが8プロセッサから成る、共有分散メモリマシン 1.6GByte/s(単方向)X2 16GByte 1.8GFlops(450MHz) Communication Memory(1ノード) プロセッサ プロセッサ台数 ピーク性能 (GFLOPS) 予選(秒) (20,000粒子,250step) 本選(秒) (40,000粒子,500step) 8 14.4 73.5 (4X2X20) 163 (4X2X40) 16 28.8 38.5 (4X4X15) 83.5 (4X4X25) 32 57.6 16.7 (8X4X10) 40.6 (4X8X15) 64 115.2 9.57 (8X8X10) 21.1 (8X8X10) 128 230.4 5.98 (16X8X5) 12.4 (16X8X10) 256 460.8 4.51 (16X16X5) 10.4 (16X16X10)

作業日程 逐次版の3次元セル分けプログラムを作る。 研究室のPCクラスタ上でMPI版のセル分け低速プログラム完成。 ○ 月日 作業 計算機使用 Score SGI SUN ~4月4日 逐次版の3次元セル分けプログラムを作る。 ~4月9日 研究室のPCクラスタ上でMPI版のセル分け低速プログラム完成。 ~4月12日 MPI版のプログラムが大分速くなる。 スレッドプログラムを作成。 roundの高速化を思いつく。 ○ ~4月18日 スレッド版がほぼ完成。Scoreクラスタを使い始める。 ~4月20日 MPI版ほぼ完成。 プロセス版のプログラムを作成開始(SystemV IPC shared memoryの勉強を始める)。共有メモリ用プログラムの開発はSGIに変更。 ~4月23日 プロセス版ほぼ完成。 スレッド版より速いことを確認し、共有メモリマシンにプロセス版プログラムを採用する。 ~4月26日 研究室に泊り込んで最後の追い込み。 Auto Tuning機能をつける。 Loop unrolling等の実装上の工夫でさらに高速化を狙う。 ~4月27日 体調をくずし、家で作業。最後のチューニングをし、27日朝9時頃にプログラム提出。 ×

TODO セルのPEへの割り当て方向を可変に 位置、速度配列への直接参照 提出プログラムでは、z軸方向に分割した柱状の領域を各PEに割り当てる 粒子の分散形状によっては、x軸方向、y軸方向に分割したほうがよい場合もある 位置、速度配列への直接参照 位置、速度情報の配列のデータは終始並び替えをしない セル情報からこれら配列へのアクセスは間接参照 直接参照になるようにデータの並び替えを行うと高速化の可能性あり