Gordon Bell氏は、今は無きDEC社の開発担当の副社長で、PDPシリーズのコンピュータの開発をけん引した。1934年の生まれであるので、83歳であるがお元気で、現在もMicrosoftの研究所で研究を続けておられる。

また、歴史的なコンピュータを大量に収蔵するComputer History Museumは、Gordon Bell氏の個人コレクションの寄贈をベースに作られた博物館である。

このようなGordon Bell氏のコンピュータの発展に関する貢献を称えて、コンピュータの学会であるAdvanced Computing Machinery(ACM)が創設したのがGordon Bell賞である。Gordon Bell賞はHPC分野における、アプリケーションの実行性能と計算科学の成果に対して授与される賞である。したがって、アプリケーションの実行におけるGFlopsの多寡と超並列処理の工夫などが評価ポイントになる。

Gordon Bell賞を狙う論文の応募を集め、その中から候補論文を選び、SCで候補論文の発表を行い、評価委員の評点で受賞論文を決める。例年は、5~6件の候補論文があるのであるが、今年は3件しか候補論文が無かった。

太湖之光での大気モデルの再設計

Gordon Bell候補論文を発表するLin Gan氏

「Redesigning CAM-SE for Petascale Climate Modeling Performance on Sunway TaihuLight」というGordon Bell候補論文を発表するLin Gan氏

3件のうち、最初に発表されたのは、中国の太湖之光スパコンを使った「Redesigning CAM-SE for Petascale Climate Modeling Performance on Sunway TaihuLight」という論文である。CAMはCommunity Atmospheric Modelで、オープンソースの気象計算アプリケーションWRFの大気圏のシミュレーションを行うモジュールである。

WRFという気象シミュレーションプログラムは、大洋モデル、海氷モデル、大気モデル、地表モデルで構成される。この論文は、大気モデルを超並列の太湖之光で高性能に動作させるために必要となった多くの改良について述べている。

  • WRFは大洋モデル、海氷モデル、大気モデル、地表モデルで構成される。この論文では大気モデルの並列化を行った

    WRFは大洋モデル、海氷モデル、大気モデル、地表モデルで構成される。この論文では大気モデルの並列化を行った (この連載のすべての図は、Gordon Bell賞候補論文の発表スライドを撮影したものである)

CAMモデルは非常に複雑で、INIT部は約75万行のコードがある。そしてシミュレーションを行う部分には304個の処理カーネルが存在する。しかも、ここを速くすれば大きく性能があがるというようなホットスポットのカーネルはないというコードである。

そして、CAMは複雑な並列処理プログラムである。全体では数百万行と膨大であるので、OpenACCコンパイラを利用して並列化を行った。

しかし、64KBのローカルデータメモリ(LDM)しか持っていないCPEの構造と合わないコードは大幅な書き換えが必要になった。また、大気モデルと並列プログラミングの知識や経験を持つ人間の不足が問題であったという。

  • ここに画像の説明が入ります

    CAMを太湖之光で効率良く動かすためのチャレンジ。レガシーの非常に複雑なコードをOpenACCを使って並列化した。しかし、太湖之光のアーキテクチャのためOpenACCではうまく並列化できない部分も出てきた。また、気象理論と太湖之光でのプログラミングの両方の知識をもつ人が不足であった

太湖之光スパコンは4万960個のShenwei 26010 CPUを使っている。CPUチップには4個のコアグループが集積されており、各コアグループには1個のMPEと64個のCPEが含まれている。MPEはOSを動かすことができる高性能コアで、CPEは計算用のスループット重視のコアである。

太湖之光スパコン全体では1064万9600コアを持ち、ピーク演算性能は125PFlopsに達する。

コアグループ内の64個のCPEはメッシュネットワークで接続され、相互にDMAでデータ転送ができるが、CPEが直接アクセスできるのは64KBのLDMだけであるという構造になっている。LDMはGPUのデバイスメモリの位置づけであるが、64KBという非常に小さな容量しかないことがプログラムの移植上、問題になっている。

  • ここに画像の説明が入ります

    神威 太湖之光は4万960個のSW 26010 CPUを使う。SW 26010は4MPE+256CPEの260コアチップであり、システム全体では1064万9600コア。ピーク演算性能は125PFlopsである。ただし、1つのCPEは内蔵する64KBのLDMへのアクセスに限定されるというアーキテクチャになっている

OpenACCで変換されたプログラムの性能を改善するため、ループの構造を組み替えるツールを開発した。主要な変換は多重のループのボディをまとめる変換と、ループボディが大きすぎて64KBのLDMに入らない場合に、ボディを分割する変換である。

  • OpenACCでの並列化効率が良くなるよう、ループボディをまとめる

    OpenACCでの並列化効率が良くなるよう、ループボディをまとめる。ボディが大きすぎてLDMに入らない場合はボディを分割するなど、ループを自動的に変換するツールを開発した

また、1つの要素の処理を1つのCPEに割り当てるというOpenACCの変換では十分な並列性が得られない場合には、1つの要素をサブ要素に分割して並列性を増し、LDMの容量も減らす細粒度のAthreadによる並列化を行った。

  • OpenACCでは要素単位でCPEに割り当てるが、これでは並列度が不足する場合は、1つの要素をサブ要素に分割し、Athreadで並列化する

    OpenACCでは要素単位でCPEに割り当てるが、これでは並列度が不足する場合は、1つの要素をサブ要素に分割し、Athreadで並列化する。サブ要素への分割は、LDMの必要容量も減らせる

次のグラフは、Xeon E5-2680 v3での処理性能を1.0としてSW2610の処理性能を表した図で、3本の棒グラフは左から順に、MPEで処理した場合、CPEを使いOpenACCで並列化した場合、Athreadを使って並列化を行った場合の性能を示している。そして、この比較を6個のカーネルに対して行っている。MPEはXeonに比べて0.1~0.5倍の性能であり、OpenACCによる並列化でCPEを使った場合も0.3~2.6倍であるが、Athreadを使うと6.8~43.1倍に性能が向上している。

  • Xeon 2680 v3での実行と、SW26010での実行性能の比較

    Xeon 2680 v3での実行と、SW26010での実行性能の比較。棒グラフは左からMPEで実行、OpenACCで並列化してCPEで実行、Athreadを使って並列化してCPEで実行の性能比を示す。6つのグループは、異なるカーネルを示す

この並列化を実現するため、CAMのINITIAL部では約75万行のコードのうち、15万行を変更し、5万7709行を追加した。DYN部とPHY部は304個のカーネルがあるが、実行時間の80%を占める185個のカーネルの最適化を行った。

  • この移植には、INITIAL部では15万行を変更し、6万行弱のコードを追加した

    この移植には、INITIAL部では15万行を変更し、6万行弱のコードを追加した。また、DYNとPHY部では、304個のカーネルの内の実行時間の80%を占める185カーネルを最適化した

次の図は、2005年に米国を襲ったハリケーン カトリーナをシミュレートした結果で、黒線が実際の観測値で、赤線が本ソフトでのシミュレーション結果である。右側のグラフに示したシミュレーションでの風速は、前半の期間の風速は少し低めであるが、8月29日以降の風速はよく一致している。また、左の図のハリケーンの軌跡はよく一致している。

  • 2005年に米国を襲ったハリケーン・カトリーナの軌跡と風速の観測値とシミュレーション結果の比較

    2005年に米国を襲ったハリケーン・カトリーナの軌跡と風速の観測値とシミュレーション結果の比較

次のグラフは、太湖之光でのウイークスケーリング(ハードウェア規模に比例して問題サイズを大きくするスケーリング)を示すものである。ただし、横軸のProcは512、2048、8192の部分は4倍になっているが、その次の131072と32768は逆転していると思われる。

そして、1007万5000コアを使ったシミュレーションでは並列化効率98.55%で3.3PFlopsを達成している。しかし、これはピーク性能の125PFlopsの2.64%の性能であり、メモリリミットになっていると思われる。

また、これはDYNと書かれたDynamic Coreの部分だけの結果で、物理過程のシミュレーションを行うPHYの結果は報告されていない。

  • ここに画像の説明が入ります

    DYN部のウイークスケーリングを示すグラフ。各プロセスに650要素を割り当てた処理では1億75万コアで3.3PFlopsが得られている

(次回は12月19日に掲載します)