ISC 2015で電力測定法の改良に関する「BoF」というセッションが行われた。このBoFでは、EEHPCWGというスパコンの消費電力の測定法を検討するグループの検討結果と、それに基づくスパコンの電力測定法の改定が提案された。

Top500のリストはHPLの性能の順にランキングされているが、リストには消費電力の欄がありGFlops/kWというエネルギー効率を示す欄もある。しかし、ランキングには直接影響しないので注目度は低い。

一方、Greeen500はGFlops/kWがランキングの指標であり、分母の消費電力がランキングに直接影響するので、測定の精度が重要である。

電力測定期間の問題

共通メモリをアクセスするCPUコアが大量の行列計算を小さな粒度で分担して処理していた時代には、最初と最後の短い時間を別とすれば、すべてのCPUコアはいつもビジーで、HPLの実行中は、ほぼ一定の消費電力であった。次の図はこのようなシステムでのHPL実行中の電力の変化を示すもので、最初の20%の時間は平均398.1kW、最後の20%も平均398.2kW、そしてコア区間全体の平均は398.7kWと僅かに大きい消費電力であるが、ほぼ一定の電力であった。

すべてのCPUコアが共通メモリをアクセスするシステムでのHPLの実行中の消費電力の推移。最初の20%の時間は平均398.1kW、最後の20%も平均298.2kW、コア区間全体の平均も398.7kW (この図を含み、以下の図の出典は、ISC 2015の電力測定BoFでのDavid Lohr氏の発表スライドである)

消費電力の変動がこのような状況であれば、最初と最後を除いて、中央の期間の平均電力を測定すれば十分と考えても妥当である。ということで、Green500のLevel-1の電力測定のルールでは最初と最後の10%の期間を除いた残り80%の期間の内の20%以上の期間の電力を測定することになっている。

しかし、GPUなどのアクセラレータを使って多数のコアでHPLを実行し、分散メモリなので負荷の平準化がやり難いシステム構造になると状況が違ってくる。

アクセラレータ付きのシステムでは、コア数が非常に多いので、終盤になると残っている仕事が減り、仕事の無いコアが出てくる。このため、次の図のように、消費電力が減ってくる。この図のX軸まで届く縦の線はHPL開始、70%、90%、HPL終了(100%)を示している。

前回Green500で1位となった「L-CSC」は、HPL実行中の全区間の平均の電力でHPL性能を割ると5296MFlops/Wであるが、70%から90%の期間の消費電力で割ると6010MFlops/Wと13.5%高い値が得られる。

超多数のコアで処理を分担するアクセラレータ付きのシステムでは、終盤になると、仕事が無いコアが出てきて消費電力が減少する

HPLで解く行列サイズを小さくして、開始の直後から仕事の無いコアが出始めるようにすると、HPL全体の実行では4907MFlops/Wと電力効率は悪化するのであるが、70%-90%の区間の電力の減少が大きいので、6900MFlops/Wというスコアになってしまう。

これは現在のルールでは違反ではないが、コンピュータのエネルギー効率を比較しようという目的に照らして考えると問題である。

さらに問題サイズを小さくして実行時間の短いHPLランを行うと、開始直後から電力が減り始め、70%-90%では6900MFlops/Wという値が得られる

ネットワークコンポーネントの扱い

現在のLevel-1のルールでは、一部の計算サーバノードの消費電力を測定し、システム全体では、その何倍という形で電力を計算して良いことになっている。このため、InfiniBandスイッチなどのネットワークを構成するコンポーネントの消費電力が含まれていない。

L-CSCでは計算ノードの電力は56.9kWであるのに対して、InfiniBandスイッチの電力は257Wと0.5%以下であり、ネットワークの電力は僅かであるが、次の図に示すように、大型のスパコンでは、ネットワークは2%から9%の電力を消費しており、無視できない比率である。

なお、これらの計算では、サーバ側に含まれるNICの電力は計算ノードの電力に含まれている。

全消費電力の中でネットワーク関連機器の消費電力の割合。左からZin、SuperMUC、Piz Daint、Sequoiaの値

どれだけのノードを測定するか

システムの全部の計算ノードの電力を測定することが望ましいが、大型のスパコンでは多数の分電盤から電力が供給されており、全ノードの電力を同時に測定するのは容易ではない。このため、Level-1では、システム全体の1/64以上のノードを含み、消費電力が1kW以上となる単位を測定して、後は、何単位がシステムに含まれているかという倍数を掛けてシステムの電力を求めることが許されている。

GPUなどのアクセラレータを付けた計算ノードの性能は高いので、Top500に入る規模のシステムでも、その1/64というと1ノードか2ノードということが起こる。となると、出来るだけ消費電力の小さいノードで測定を行って、少しでも高いMFlops/W値を出して順位を上げたいというのは人情である。しかし、これもシステム全体のMFlops/Wを正しく測定したいという観点からは結果を歪めてしまう。

平均的な消費電力の計算ノードで電力を測定すればよいのであるが、どのノードが平均であるかを見つけるのは全部のノードの電力を測定する必要があり手間が掛かるし、正直にやっているのかどうかを検証することも難しい。

Lohr氏がL-CSCのノードのMFlops/Wのバラつきを測定した結果は標準偏差が1.5%であり、他のシステムでの測定結果は1.51%から2.84%の標準偏差であった。1ノードだけの測定では3σ程度電力が低いものが測定される可能性があり、電力測定値にかなりの歪が生じることになる。

L-CSCのノードのMFlops/Wの標準偏差は1.2%。表は他のシステムでの結果で、標準偏差は1.51%から2.84%

これを避けるためには、測定するノード数を増やすことが有効である。ランダムに測定ノードを選択する場合は、10ノード程度で平均値に近い値が得られる。しかし、システムの全ノードを測定して電力の低い10ノードを集めて電力を測定するということをされると、防ぎようが無いという。

精度だけを問題にするなら、全ノードの測定を義務付ければよいのであるが、そうすると、特に大型のスパコンでは測定が難しく、これらのシステムがGreen500リストから消えてしまうという心配がある。