富岳の性能
富岳の性能測定には、図31に示したCloverLeaf、TeaLeafとLULESHというベンチマークを用いた。CloverLeafは、流体力学の解析を行うミニアプリケーション、TeaLeafは反復型のスパース線形ソルバのミニアプリケーションである。LULESHは3次元のラグランジアン流体力学計算のミニアプリケーションである。非構造メッシュを用い、メモリの間接参照を行っている。
ここではA64FXとThunderX2(Marvell社のArmアーキテクチャのサーバ向けCPU)とIntelのSkylakeとの比較を行った。これらのCPUの諸元と使用したコンパイラは図32の中の表にまとめられている。
12スレッド以下の構成の測定は、A64FXでは1つのCMGを使用し、TX2とSKLでは1ソケットだけを使用した。13~24スレッドの測定は、A64FXではCMG0とCMG1を使用し、TX2とSKLではソケットあたりのスレッド数は12以下として、2ソケットを使用した。25~48スレッドの測定は、A64FXでは1ノードを使用し、TX2とSKLではソケット当たりのスレッド数は12以下になるようにして、2ノード(4ソケット)を使用して測定を行った。
なお、A64FXの測定は、まだ、コンパイラなどが開発中に行ったものであり、富岳が正式運用に入った時には性能が変わっている可能性がある。
図34にCloverLeafの結果を示す。左の棒グラフは実行時間で、右の棒グラフは相対性能を表している。従って、左のグラフでは値が小さいほうが高性能であるが、右のグラフでは値が大きい方が高性能である。横軸はプロセスあたりのスレッド数が1、2、4の3つのケースでさらにプロセス数が1、4、8、12の測定結果が書き込まれている。棒グラフは左から順にA64FX、TX2、SKLの結果となっている。右のグラフを見ると、A64FXの相対性能が高く、スレッド数を増やすとそれにおおよそ比例して性能が上がっていることが分かる。そして、4プロセスでそれぞれ12スレッドを走らせた場合は、1個のA64FXの性能はSkylake 2ノード(4チップ)と同等よりも高い性能を示している。
TeaLeafはメモリバンド幅が性能制約となるベンチマークで、HBM2メモリを使うA64FXが強みを発揮するベンチマークである。1チップのA64FXのシステムは、他のプロセサを4チップ使った場合と比べて2倍以上の性能が得られている。しかし、4スレッド程度でもメモリバンド幅を使い切ってしまうので、それ以上、スレッド数を増やしても性能は向上しない。
図36はLULESHの結果で縦軸は処理量/秒であり、A64FXの性能はSKLやTX2に比べて低い。特にSKLと比較すると1/3程度の性能しか得られていない。調査の結果、SVE命令の使用が数%しかなく、ベクトル化がうまく行っていないことが判明したという。
図37は疎行列の格納方法の比較を示したものである。右側のグラフはminiFEという有限要素法のベンチマークアプリケーションのマトリクス‐ベクトル積の計算時間を示すグラフである。マニュアルでintrinsic命令を使った場合はSliced ELLPACKフォーマットを使った場合は高い性能を示しているが、普通にコンパイルした場合の性能は低い。また、Compressed Sparse Row(CSR)フォーマットを使った場合は、マニュアルでチューニングしても性能は良くない。
コンパイラを改良し、SVEを使ってベクトル化し、メモリバンド幅を使えるコードを作れるようにすることが必要である。
図38はCloverLeafとTeaLeafの処理時間がノード数に逆比例するかという、いわゆる、強スケーリングができているかどうかを示す図である。左のCloverLeafのグラフは2次元の場合は、強スケーリングが成り立っている。TeaLeafの方は128ノード以下では強スケーリングが成り立っているが、それ以上では通信が制約となって実行時間が下げ止まっている。
図39はA64FXに移植を行ったいくつかのオープンソースのアプリケーションの性能と電力を2ソケットのXeonと比較したものである。グラフの横軸はXeon Platinum 8268に対するA64FX 1チップの実行時間と電力効率をパーセンテージで書いている。A64FXの実行時間がMPASで7%程度遅いのを除けばその他の6アプリケーションでは65%~93%程度の実行時間で、それに加えて、消費電力は35%~52%と半分から1/3となっている。という優秀な結果である。
(次回に続く)