スパコンについて

4. 現代のスパコンで気候シミュレーションを高速化したい

さて、コンピュータの世界では絶え間なく性能を伸ばすために、大胆な進化を何度も行ってきたわけですが、それではそのコンピュータの上で動作させる気象・気候モデルはそのままでよいのでしょうか? 答えはNOです。ソフトウェア側も絶えず変革しなければ、最新のスパコンの性能を活かすことはできません。とはいえ、私たちがモデルの高速化のために行ってきた基本の2つの手法は、前述のコンピュータの性能トレードオフと密接に関連しているため、あまり変化していないともいえます。

ひとつは「並列化」です。今のスパコンはCPUを何千、何万と並べて、計算を同時並列で行うことで計算速度を向上させています。前述のとおり、CPUの内側にもさらに複数のコアがあり、さらにそのコアの中でSIMDというしくみによって一度に複数のデータを並列で処理しようとします。

モデルを開発する側は、用いるアルゴリズムの中にデータを独立して処理できる部分、すなわち「並列性」を見いだす必要があります。しかも、現代のコンピュータのスタイルに合わせて、「階層化された並列性」をうまく作り出す必要があるのです。たとえば、私たちの開発する大気モデルNICAM(Nonhydrostatic ICosahedral Atmospheric Model)では、大気を水平方向に大きく分割して別々のCPUに割り当て、さらに鉛直方向の大気の層を別々のコアに割り当て、水平方向に並んだ格子点をなるべく同じ方法で計算しています。

しかし一部では、鉛直方向に順々に計算を進めていく必要があるため、並列に計算ができず、そのままでは性能が上がりません。こんなときは水平方向の並列性を用いて階層化を行うなど、また別の工夫が必要になります。

もうひとつの高速化手法は「データの局所化」と呼ばれます。前述の通り、より転送速度が高い記憶領域は容量が小さく、よりCPUに近いところで使われており、CPUから遠くなるほど遅くて容量の大きい記憶領域(メモリやHDD)が使われています。計算に必要なデータは遠いところから順に運ばれてきて、計算が終わるとまた順に遠い記憶領域に戻って格納されます。つまり、一度計算に使ったデータが速いメモリに留まっている間にうまく使い回すことができれば、データの移動にかかる時間を短縮することができるのです。

物理法則に則って組み立てられたアルゴリズムは、多くの場合、研究者の頭の中で考えた通りの順番で計算を進めようとして書かれています。そこからさらに計算機のことを考えて、用いる変数(データ)の「依存性」や「賞味期限」を意識し、計算する順番を入れ替えたり、一時的に格納する中間変数を増やしたり減らしたりすることが、コンピュータの性能を活かす上で重要になってきます。

ここで先程の問題が再び浮上してきます。十分な「並列性」を保つために一度に準備しないといけないデータの数は年々増えていくのに、「データの局所化」というのは一度に準備するデータの容量が小さいほど効率的であり、つまり、ふたつの基本的な最適化手法はお互いに相反するものです。そのため、スパコンのハードウェアと、気象モデル等のソフトウェアがお互いにトレードオフを意識しながら、最適な解を探していく「コデザイン」という取り組みが重要なのです。

気候モデルはさまざまな分野の研究者が学際的に集まって作り上げた巨大で複雑なプログラムです。それゆえに、ソフトウェアの最適化はとても骨が折れる作業です。さらに、最適化を進めていく中で、私たちは気象・気候モデルのとても厄介な特徴を認識するようになりました。それは「プログラムの中に、計算時間と計算量の大部分を占めるような代表的区間がない」ということです。

他の科学分野では、基礎方程式の数も、プログラムで扱う変数の数も、気候モデルよりずっと少ないことのほうが多いのです。また、主要な基礎方程式を解く部分が全体の計算時間の半分以上を占め、そこさえチューニングすればかなりの性能向上が見込める、といったこともしばしばです。

ところが気候モデルには、アルゴリズム的な性質の異なる計算が多数あり、どれもあまり多く計算することなく次の変数の計算に移ってしまいます(このことを「演算密度が低い」といいます)。結局、プログラム中のあらゆる区間が少しずつ時間を消費していることになり、最適化のためには数十万行あるプログラムコードのすべてに目を配らなければ速くならないのです。

私たちは日本が誇るスーパーコンピュータ「京」や「富岳」といった計算機を用いて全球高解像度大気モデルNICAMの最適化を進めるなかで、このような厄介な性質をもつ気候モデルを効率よく最適化する方法を開発しました。

最も効果的だった手法は、まるで家計簿のように、すべてのプログラム区間が消費する時間を一度に並べあげ、プログラムコードの中に小さくたくさん散らばっている「無駄な支出」=「減らせるはずの消費時間」がないかをチェックする方法でした。

こうしてNICAMは現代のスーパーコンピュータの性能をうまく引き出すことができるようになり、「京」を用いた計算では、当時世界で初めて1 kmを切るメッシュ解像度での全球大気シミュレーションを、2万個のCPU(16万個のコア)を用いて実現しました(図4)。このとき、モデルの格子点の数は630億点、シミュレーション内の時間で1時間計算するのには4時間かかり、この時の実効計算性能はおよそ230テラFLOPSでした。また、48時間のシミュレーションで320テラバイトの時系列データを出力しました。

ref

個人的にはスパコン不要論なんです。

ワークステーションさえあればいいかなぁと。

理由としてはcpuやgpuを並列化しとけば

処理速度は20万倍が証明されている。

しかしこれが全てではなく

あくまでもこうい論文やら書き物があるっていうだけ。

ここからさらに高速化や安定性を追求する必要がある。

もっと言えば、pycudaやpysparkやchapelなどが必須になる。

勿論、numbaもねw

ここから先が楽しみ。

というのもgpuで48gのグラボがでるらしい。

(現在、48Gのグラボの価格が70-100万。

これが30万くらいで買えるのはかなりお勧め。

さらに4090tiか4090タイタンだろうけど

48Gのvramを二枚挿しとかしたら

めっさいいとおもうねんw



この記事が気に入ったらサポートをしてみませんか?