2011年8月2日火曜日

AICS Summer School 1,2日目


上の画像は理研計算科学研究機構のあるポートアイランドの(無駄に)広大なる景観。
上に走っているのがポートライナー。写真中央に見えるのが計算科学研究機構の計算科学センタービル。サマーセミナーが行われ、京コンピュータのある建物はその左にある。

そしてそれ以外にはなんっにもない。周りには工場やら研究所だけ。自分の宿泊しているホテルの近くでも、せいぜいファッションセンター(笑)やグルメシティ(爆)しか見つからなかった。本屋すらないので、暇つぶしも出来ない。その上参加者の中でも完全アウェーなので、早寝早起きをし、セミナーが終わると真っ直ぐにホテルへ帰り、近くのダイエーで弁当やおかずを買って帰るという、京都とは打って変わって貧相な遠征生活を送っております(お金もないのです)。「ここに1週間もいたら気が狂う」といってたMTさんの言葉は本当でした。

といっても、セミナー自体は非常に面白いし勉強になります。特にこのセミナーでは実際に並列化したプログラムを「書く」ということに重点を置いているので、以前にあったCCSの授業内容を復習しながら、MPIなど並列化のテクニックを実践を通して習得していくことが出来ます。僕はC言語の読み書きについてはまだあまり馴染みがないので、行列計算などのプログラムを解読し、並列処理出来る部分にMPIの構文を仕込んでいくという作業をじっくり出来るという本セミナーの環境は好都合でした。今日も3,4個のプログラムを書き、東大のT2Kを使い、デバッグから実行までやりました。


一日目はイントロダクションとして、まず計算科学の歴史とか概念とかを聞かされました。僕はそもそもこの分野出身ではないし、研究分野としてというよりはツールとして学んでいるので抽象的なことはよく分からんのですけれども、少なくとも分子系統学のみならずこれからの生命科学分野には高性能計算処理(HPC)の概念は必要不可欠のものであると思います。

「データ(解析するための素材)を採ることこそが最も大事なこと」なのは言うまでもないことですが、それを如何に高速に、効率よく解析するのかという考えも同じぐらい大切なことです。特に現在では、膨大で有用なデータを持っているにも関わらず、それを解析できる処理能力を有する計算機を持たないがために、研究結果が出せない例が増えてきています。この場合問題なのは単に解析時間の速さだけでなく、メモリ容量などが足りないためにそもそもPCでは解析できないというケースも含むため、MPIなどの分散メモリ型並列処理のテクニックはより一層重要になってくるわけです。

「時は金なり」といいますが、単位時間にどれだけ多くの計算結果を出せるかと言うことは、単位時間にどれだけ多くの業績を出せるのかということにも繋がり、どれだけ多くの資金を取ってこられるのかということにも直結することだと考えます。まあカネがなければそもそも計算機は買えないんですけどね。

----- 閑話休題 -----

イントロダクションの二つ目としては、京スパコンのことを教えて貰いました。TOP500などの結果から言えば、京スパコンのパフォーマンスは、LINPACKベンチマークで他を引き離して8.162PFLOPSという数値をたたき出したことだけでなく、実行効率(ピーク性能に対する実行性能)が93%という圧倒的な高さであったこと、電力効率もGREEN500で6位だったこと、そしてベンチマークテストでは28時間ぶっ続けで走り続けちゃんと完走したこと(他のスパコンは途中で止まった)、といったことなどに利があります。

システムとしては、直接結合網方式による6次元メッシュ・トーラス結合(Tofuネットワーク)の搭載や、セクタキャッシュなど独自のメモリアクセス最適化を施したスカラCPU、大規模な水冷・空冷装置両者による冷却性能の向上と故障率の軽減などが挙げられます。また、スパコン本体だけでなく、筐体を入れる計算室やAICSの建物の構造も、このスパコンの性能を最大限に引き上げるよう工夫されているようですね。


二日目の今日は、MPIプログラムの基礎を座学と実習に分けてやりました。座学の内容はCCSのセミナーとあまり変わらなかったので、復習がてら聞いていました。曰く、「並列処理をするときに一番重要なのは、SIMD(単一命令・複数データ流)の思考を持つということ」。あと、アムダールの法則は人によって例の出し方は違うようですが、コア数が無限に増えた際並列処理出来ない部分の割合が大きなネックになる、という最終的な主張は変わらないみたいです。


講義の後は、実際に逐次処理プログラムを並列化するという実習を行いました。使用したのはおなじみのHello World!や円周率計算プログラム(Cpi)、総和演算プログラム(逐次転送方式と二分木通信方式)、 C = A・Bの行列計算プログラムなど。基本的にCあるいはFortranでのプログラミングに慣れている人を対象にしているみたいですが、変数の宣言や代入方法などで分からないことがあったときでも親切に教えて貰いました。学部生時代にはC言語で作ったプログラムをコンパイルしたときに大量の訳分かんないエラーメッセージが吐き出されて辟易した思い出がありますが、今では読み慣れてきたおかげか、ほぼビビらなくなりました。

ちなみにこのセミナーではC使いとFortran使いが半々みたいです。僕はそれまでFortranはCとかC++より遅いと勝手に思っていましたが、そうではないようです。Fortranは文法構造の制約が強い反面単純なので、C,C++より最適化がしやすいそうです(C,C++はFortranより抽象化レベルが高い分、直感的にプログラムが書きやすい)。現在は概してFortranの方が速いということでもないようですが、スパコンなどで走らせるプログラムを書く場合は、そもそもスパコン側のコンパイラがFortran用に最適化されていることが殆どなのだそうです。生物分野で速いプログラムだと大抵CかC++だったので、この点は意外でしたね。将来はC,C++とFortranどちらでもプログラムが書けるようになりたいものです。

明日は並列化のより応用的な例として、有限体積法や並列データ構造・領域分割を学びます。


PS.
上記のようにあまりに暇なので、ブログのロゴを変えました。個人のセンスはさておき、自分としてはひとまず納得できる物が出来ました。加えてURLの横にあるファビコンも変えましたが、Safariだとキャッシュを空にしてもブックマークを登録し直しても更新されませんでした。他のブラウザではどうなのかな?

0 件のコメント: