2011年8月5日金曜日

AICS Summer School 最終日

内容が濃すぎて長く感じた本サマースクールも終わりを迎えました。

今日の講義ではOpenMPに的を絞った並列化の話がありました。

OpenMPはスレッド間でメモリを共有するため、並列化をする際はデータ依存性(メモリへの書き込みと参照が同時に発生すること)に注意する必要があります。

アルゴリズムの中でデータ依存性が生じる場合は、データの並び替え(オーダリング)を行い、依存性を無くさなければいけません。また、データオーダリングは並列化に必須なだけでなく、前処理などでのFill-inを少なくすることで、反復法での反復数を減少させる効果もあります。

データオーダリングの方法としては、カラーリング法やRCM,Cyclic Multicoloringなどを学びました。なお、OpenMPは共有メモリ型システムで動かすことを前提としてますが、NUMA構造をとる計算機では、numactrlの設定を行うことで、ローカルメモリに各スレッドの要求するデータを分散させて載せることが出来ます。その際、First-touchと呼ばれる設定を行うことで、スレッドごとに、「そのスレッドを担当するコアの近くにあるローカルメモリ」にスレッドの要求するデータを載せることが出来ます。これは1ノード(T2Kだと1ノード=4ソケット=16コア)の内部で出来ることで、この技術はHybridプログラミングに応用することが出来ます。

また、ローカルメモリに分散させたデータについて、スレッドごとに連続アクセス出来るよう、データの再配置を行うことも最適化に有効です。

大体このような内容の講義が行われましたが、MPIの時も言われたように、とにかく並列化するときにはスレッド(あるいはプロセス)でデータをどのように分割するかということが極めて重要であるということが、このセミナーでのキモだったと思います。


さて、これで5日間に渡る並列プログラミングの講習が終わったわけですが、講義自体が駆け足気味だったことや、そもそも自分のバックグラウンドが皆無に等しいため、まだほんの「さわり」の部分が理解できたに過ぎないと思います。

幸い、本サマースクールの内容は普通情報科学の大学院生が学ぶレベルのものらしいので、DualDegreeに合格して、大学院でもさらに自分の理解を深めていくことが出来るようにしたいです。そのためにも、プログラミング言語(特にCとFortran)の基礎や、数値計算のアルゴリズム(特に微分方程式の解法や行列計算のテクニック)をしっかり自分で補完しておかねばなりませんね。

最後に、参加者の集合写真と、(今はまだ)形だけの修了証を載せて、本サマースクールの体験記を終わりにしたいと思います。今日はこのまま筑波へ帰りますが、帰るのは11時くらいになりそうですね。ミッドナイトつくばにベロベロに酔ったおっさんと一緒に乗ることは避けたいなあ・・・


0 件のコメント: