2011年8月5日金曜日

AICS Summer School 4日目

(なんもしてないけど時間差でファビコンが変わった。なんでやろ)

ホテルの近くのダイエーにTaqさんの紹介してたポテトチップス関西だしじょうゆがあったので、買って夕食後に食べました。普通に美味しかっです。

ちなみにポテトチップスには九州しょうゆ味もありますが、それに味が似てました。まあしょうゆですしね。関東でも九州しょうゆは希に見かけますがこちらも美味しいので、食べたことない人はぜひ試してみて下さい。

サマースクールの方は、今日も引き続き熱伝導方程式の有限体積法(FVM)のプログラムを例にした講義がありました。今日は実際にプログラムを書くというよりは、コードの中身や基本的な数値計算のアルゴリズムに関する座学が多かったです。実習でやったのは、事前に用意された並列処理FVMプログラムを使い、パフォーマンスを計測するというようなことだけでした。

座学中心というのはやはり今の自分にはきついです。熱伝導方程式のような微分方程式を解くということには殆ど馴染みがないので、数値計算アルゴリズム全体の流れというものがそもそも掴めない。従って、コードの中身を説明され、「ね、簡単でしょ?」と言われても全然理解が及ばない。毎日夕食後は寝るまでこうやってブログをメモ代わりにして復習をやっていますが、いかんせんバックグラウンドがなさ過ぎますね。このセミナーが終わった後も、数値計算の基礎を一からやり直す必要性を強く感じました。

とりあえず今回使ったプログラムは三次元メッシュでの定常状態における温度勾配を求めるための物であるから、時間軸は必要ないということ。微分方程式を離散化した式は最終的にAx=bの形にすることが出来ること。さらにこの行列ベクトル積では疎行列をCRSすることで計算を効率化することが出来ること。その後の計算は共役勾配法を使うこと。共役勾配法の中で、収束を速くするために"前処理"を行うこと。前処理には点ヤコビ、(不)完全LU分解、(不)完全修正コレスキー分解を用いること。というのが概要でしょうか。


今日の講義では、FVMのアルゴリズムの詳細に加え、このプログラムをMPI並列化する際、MPI処理をなるべく隠蔽するためのツールとしてHPC-MWやppOpen-HPCといった大規模計算コード開発基盤が紹介されました。これらのツールは、簡単にいえば自分の作った逐次処理プログラムを投げると、どの計算システムでも動くような並列計算処理プログラムにチューニングして返してくれるものです。この中で、MPI処理は全てライブラリ化され、コードの中でそのライブラリを一文で呼び出してやればいいだけになり、プログラマがいちいち数多くのMPI関数をコード中に組み込んでいく必要がなくなるのです。HPC-MWはチューニングできるプログラムが限られますが、現在プロジェクト進行中のppOpen-HPCはより広範囲の分野のプログラム、そしてより多くのハードウェアに対応した開発環境を目指しています。あと数年後には、誰でも簡単に(MPIの基礎さえ分かっていれば)並列処理プログラムを作れるようになるかもしれません。

今日の実習では、HPC-MWでチューニングされたFVMを使い、データサイズやプロセス数、データ分割の手法を変えてそのパフォーマンスを調べました。このようなパフォーマンス測定手法には、Strong Scaling(問題サイズは変えないでプロセス数を変える)とWeak Scaling(個々のプロセスが担当する問題サイズは変えず全体の問題サイズとプロセス数を大きくする)があるそうです。一般的にはStrong Scalingが使われるようですね。実習では、全体の問題サイズが小さいと、例えプロセス数が4から8になっても、通信のオーバヘッドなどにより、全体の計算時間が逆に長くなるという現象も確認できました。

あとは、MPIでの通信の仕方なども学びました。現在のMPIの通信プロトコルにはEagerとRendezvous(タグの情報などをコントロール情報として先に送信・受信する)があり、データサイズによって使い分けがされているようです。そして、通信のオーバヘッドを小さくするためには、どちらのプロトコルを使うのか、またSend(I_Send)やRecv(I_Recv)をコードの中のどのタイミングで行い、どこでWaitallするのかといったことが大切です。

これに関連し、I_Sendでは送信したあとにCPUに別の逐次処理をさせることも可能ですが、実際にはCPUはWaitallするためにリソースを消費しているのであり、(一見暇そうにしてるから)新たな処理をさせようとするのは却ってパフォーマンスの低下を招くそうです。

とりあえずは、こんなところが今日のまとめ。

明日は、OpenMPによる並列化、オーダリング、Hybridプログラミングを学びます。それが終わった後は、その足で帰筑です。

0 件のコメント: