今年度のゴードンベル賞は石山君、似鳥君と、一応牧野も共著者にはいってい
る、「京」全体を使った宇宙論的 N 体計算で 5.67PF (10月の最終アップデー
ト後)を達成したという論文に与えられました。
私は口をだすとか論文に赤をいれるとかフルノード実行の時間作ってと
連携推進会議でお願いするとかくらいしかしてないので、これは基本的に
全て石山君と似鳥君の成果です。
「京」でここまでの性能を達成したのは本当に素晴らしいことです。
今回はファイナリストに5グループ残っていて、実行性能では BG/Q フルシステ
ム(セコイア)を使った2グループが 11 PF や 14PF を達成しています。14PF の
ほうはアルゴンヌのグループで、やっていることはこちらと全く同じ大規模な
宇宙論的N体計算、アルゴリズムも基本的に tree と PM の組合せです。
が、石山君の「京」での計算は1粒子・時間ステップあたりの演算数が15万程
度だったのに対して、アルゴンヌのグループは 84万演算程度を必要としてい
て、結果としてシミュレーションの速度は大きく違います。2兆粒子で1ステッ
プが石山君のコードを「京」で実行した場合には 50 秒ですが、アルゴンヌの
グループのコードをセコイアで実行した場合には 120秒かかるのです。
なので、審査委員会が 14PF のセコイアでの計算より 5.67PF の「京」での計
算を高く評価したのは妥当なことと思います。
同じアプリケーションでこんな大きな差がでるものかと思う人もいるかと思い
ますが、これは結構そういうものです。アルゴンヌのグループのコードは
おそらく元々は RoadRunner 用であるのと、 TreePM というよりは、近距離部
分に Tree をつかわないで直接計算する P3M コードがベースです。 P3M では、
FFT の格子点数を粒子数程度かそれより多くとることができれば、密度構造が
一様に近い場合には非常に速く計算ができるのですが、多少でも密度構造が発
達すると計算量が急激に増えます。また、FFTは効率が低いのでそれほど大き
なメッシュ数にしたくないので、始めから効率が悪い、ということになります。
石山君のコードのアルゴリズムや実装は 2009 年の論文に大体のところは書い
てあって、これは Barcelona コアでアルゴンヌのグループの BG/Q よりコア
あたりの性能が数倍高くなっているのですから、まあその、という気もします。
11PF の計算は、心臓の細胞レベル分解能 electropysiology モデルというもの
です。ちょっと内容がよくわからないのですが、起こる現象は電場が伝わって
いくだけなので分解能がそこまでいるのかとか若干疑問なところがあり、その
辺が評価に影響したようにもみえます。
つまり、今年の審査委員会は、単に並列計算で演算数でみて高い性能をだした、
というだけではなく、その規模の計算に意味があるかとか、使っているアルゴ
リズムが効率的か、といったところまでちゃんと検討して判断した、という
ことのように見えます。
そうはいってもゴードンベル賞ファイナリストに選ばれるためには
普通は最大規模の計算機でピーク性能の2-5割程度は出しておきたいわけです。
最近の大規模並列機ではそのためには非常にイントリンシックな並列度が高い、
つまり大自由度で、自由度あたりの計算量が多くて通信が少ないようなアプリ
ケーションである必要があります。
重力N体計算は、重力相互作用が長距離で、カットオフがある分子動力学計算
に比べてこの面では楽な一方、空間構造が発達するのでロードバランス
を悪くしないで通信も減らすのは割合むつかしいという難点があったのですが、
石山君の開発した、計算時間で重みをつけて粒子をサンプリングし、
それらがノードに等分配されるようにするというアルゴリズムで
これらの問題はほぼ解決されたといえます。
とはいえ、高い性能をだすためには1兆とかいったものすごく大きな粒子数が必
要です。私達の戦略プログラムでの目標の一つが、そのような大規模計算で広
い質量範囲でのダークハローの成長のしかたを明らかにする、ということで、
これはそういう意味で「京」のような大規模並列機に最適な研究テーマです。
一方、戦略プログラムでも、もっと少ない粒子数で、もっと長時間計算したい、
というようなテーマも沢山あり、その辺はなかなか大ノード数では性能がでな
いわけです。
並列化性能を最終的に決めるのは結局通信性能で、特にノード数が増えると
レイテンシが問題になります。現在のマイクロプロセッサベースのシステムで
は、通信はDMA によっているのが普通で、まず送りたいデータを主記憶におき、
NICに命令を送ってDMAを起動し、そうすると
NICがCPUチップ側にメモリリクエストをだし、CPU が
DRAM にリクエストをだし、戻ってきたデータを PCIe インターフェース経由
でNICに送ってやっとDMA が終わり、NICはこれをさらにパラレル・シリアル変
換して転送先(が直接つながっているとして)に送り、受け取ったほうは
またDMAリクエストをだして今度は主記憶にデータを書き、、、、といった
ステップをふんでいます。これだけのステップがあるとなかなか1マイクロ秒
を切る通信は困難です。
これが、始めからネットワークを組むことを考えて作った計算機ならどうなる
かというと、例えば大昔の PAX-32 とかでは2次元に配置した計算ノードで
隣接ノード間の各辺に2ポートメモリがあり、一方が書いたものを即座にもう
一方が読むことができます。例えば40MHz のサイクルタイムでメモリを動かし
ていても、レイテンシは25ns ということになります。
つまり、通信レイテンシを減らすのは、プロセッサから作るならそれほどむつ
かしいことではないのですが、Intel や AMD のプロセッサのPCIe や HT イン
ターフェースの先に通信インターフェースをつける、というアプローチでは
本質的な限界があります。スパコンをプロセッサから開発するなら
もっとも重要なのは通信レイテンシの扱い、ということになるでしょう。
とはいえ、「通信レイテンシ」の大きな部分を主記憶レイテンシが占めかねな
い現状では、通信の扱い、というのは実は記憶階層の扱いだったりします。
まあそういうわけで、しばらく前から私がワーキンググループ等で主張してい
るのは、チップ内大規模SIMD で記憶階層が浅い(オンチップメモリだけで
主記憶の動作速度が演算コアと同一であり、キャッシュが必要ない)アーキテ
クチャだったりするわけです。