200 likes | 351 Views
3 機種優勝への道 ~遥かなる PSC ~. 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 金田研究室 工藤 誠. 当然、 PSC2001 に参加する. 自己紹介と参加の動機 (1). 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻(旧理学系研究科 情報科学専攻) 金田研究室 所属 ( 情報基盤センター スーパーコンピューティング部門 ) PSC は 初出場 金田研究室では、大学院生は PSC に参加するというのが 恒例
E N D
3機種優勝への道~遥かなるPSC~ 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 金田研究室 工藤 誠
当然、PSC2001に参加する 自己紹介と参加の動機(1) • 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻(旧理学系研究科 情報科学専攻) 金田研究室所属(情報基盤センター スーパーコンピューティング部門) • PSCは初出場 • 金田研究室では、大学院生はPSCに参加するというのが恒例 • 3月の申し込み期間の時点で参加可能な大学院生は一人
PSCには当然参加する、かつ上位入賞しなければならないPSCには当然参加する、かつ上位入賞しなければならない 自己紹介と参加の動機(2) • 毎年、金田研では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) calculate a end do end do 粒子間の距離 加速度
領域全体を小さな直方体(セル)に分割し、セル同士の領域全体を小さな直方体(セル)に分割し、セル同士の 距離を計算しカットオフを考慮することで、総計算回数を減らす アルゴリズムの概要(2) • 距離計算の回数を減らしたい • 今回の問題にはカットオフが設定されている
カットオフ距離よりも 近いので計算する カットオフ距離よりも遠いので計算しない セル分けによる計算量の削減
セルのプロセッサへの割り当て • セル分けは、領域を3次元的に分割する • 領域をz軸方向に分割した柱状の領域を各PEに割り当てる
このどちらかを採用 セル分割の方法 • セル分割の方法は、プロセッサ間のロードバランスに影響する • 領域を分割する3つの方針 • 等間隔分割 • 粒子数一定に分割 • 距離計算数を一定に分割
セル分けは10stepに一度行う セル分けの頻度 • セル分けは逐次処理なので、時間がかかる • 毎stepセル分けしなくても、計算量、ロードバランスはそれほど悪くならない セルの領域からはみ出る粒子も出てくるが、 セルの境界をずらすことで対応した
実行時に、動的にこれらのパラメータを決定する実行時に、動的にこれらのパラメータを決定する AutoTuning機構をつけた AutoTuning機構 セルの個数 xyz各方向の分割数 最適値は、粒子の個数、分散形状によって違う 実行時になってみないと、最適なパラメータは わからない! 200stepに一度パラメータを再設定
距離計算の回数を約半分におさえることができる距離計算の回数を約半分におさえることができる 相互作用の対称性 粒子iと粒子jが相互に及ぼす加速度ai,aj 位置の差のベクトル 質量 (1)式と(2)式には対称性がある 2粒子間の距離やr(i,j)を使い回すことができる。
IEEE表現のdoubleの上位18ビットがインデックスとなるIEEE表現のdoubleの上位18ビットがインデックスとなる • 配列を用意すれば、round処理は配列参照のみでできる 指数部 仮数部 1 8 1 1 2 1 bit 0 色のついた部分を配列のインデックスとする 配列のサイズは、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 実装上の工夫(1) • round処理の高速化 • 大会側から与えられたround処理は、非常に遅い • roundの引数は、-32.0~32.0と、範囲が決まっている
実装上の工夫(2) • Barrier同期(共有メモリマシン用) • システムコール(semaphore等)や既存のライブラリ関数(mutex_*,cond_*)を使うのは、非常に遅い • ビジーウェイトで同期を取る自前のBarrier同期を作成した
(38.91) (103.04) 実行結果(1) コンテストマシン SUNの提出プログラム • 共有メモリマシン用のプログラムは、主にSGI上で開発 • 最終日にSUNが非常に混んでいたので、SUN用のチューニングができなかった • 結局、SGIと同じパラメータで提出した
HITACHI SR8000/MPP 1ノードが8プロセッサから成る、共有分散メモリマシン プロセッサ Memory(1ノード) Communication 1.8GFlops(450MHz) 16GByte 1.6GByte/s(単方向)X2 実行結果(2)
TODO • セルのPEへの割り当て方向を可変に • 提出プログラムでは、z軸方向に分割した柱状の領域を各PEに割り当てる • 粒子の分散形状によっては、x軸方向、y軸方向に分割したほうがよい場合もある • 位置、速度配列への直接参照 • 位置、速度情報の配列のデータは終始並び替えをしない • セル情報からこれら配列へのアクセスは間接参照 • 直接参照になるようにデータの並び替えを行うと高速化の可能性あり