メモリテクノロジとしては2019年ころに使用可能であるという条件で、通常のDDR4と3D積層メモリであるHMCとHBMを比較検討した。次の表に示すように、DDR4はコストは安いがメモリバンド幅が不足なので×という評価である。HMCはバンド幅は広いがHMCを直列に接続するリンクの消費電力大きいことが指摘され、△評価となった。HBM2はメモリ容量が小さい点とシリコンインタポーザが必要でコストが高い点が問題とされたが、R/Wのバンド幅が非常に高い点が高く評価され、HBM2を選択することに決定した。

メインメモリをHBM2だけとしたことから計算ノードのメモリ容量が小さく×であるが、大部分のアプリケーションはスケーラブルであるので、多数の計算ノードを使って、データを分散させることでカバーできると判断した。メインメモリの容量を増やすためにDDR4も追加するという選択もあり得るが、コストアップとなるので断念した。

  • 富岳

    図20 メモリテクノロジとしてはバンド幅を重視してHBM2を選択した。メモリ容量が小さいが、コストの点で、容量増加のためにDDR4を併設することは断念した

プロセサコアのマイクロアーキテクチャは、Out-of-Order実行方式であり、Reservation Stationのエントリ数は40、リオーダバッファは64、リネームレジスタはFPは48、GPは32である。そして、フェッチポートは20、ストアポートは12、書き込みバッファは4を基本構成とした。そして、O-o-O(O3)リソースを基本の1.5倍、2.0倍、2.5倍、3.0倍として、性能とチップサイズへの影響を評価したのが図21である。チップサイズは図21の棒グラフで、O3資源を3.0倍とすると、チップサイズは28%大きくなる。性能は折れ線グラフで、6つのカーネルで評価を行った。

このチップサイズの増加と性能の向上のグラフのバランスから、基本の2.0倍のO3資源を搭載することとした。

しかし、A64FXは新しいアーキテクチャのプロセサであり、コンパイラは未成熟であり、数年後のコンパイラになった時点では、今回最適と思われたO3資源量の選択は正しくないかも知れず、難しい選択であった。 

  • 富岳

    図21 Out-of-Order実行リソース量の決定

ネットワークのコデザインは次のように行った。大規模アプリケーションを富岳に移植した場合に、ネットワークのトポロジや基本的な構造が大きく変化するとアプリケーションのチューニングがやり直しになってしまう恐れがあり、ネットワークを変更するのはリスクが大きい。このため、富岳でもTofuネットワークを使うことにした。ただし、2019年ころのテクノロジを使い、リンクスピードは28Gbps × 4に高速化した。

通信パターンを抽出して、それを解析的ネットワークモデルに入力して通信性能の推定を行った。その結果、多くのアプリケーションで、通信は近傍のノード間であることが多く、6Dのメッシュ/トーラスのTofuのトポロジとよくマッチしている。また、28Gbpsaのリンクのバンド幅は十分であることが分かった。

一部のアプリケーションではAll-to-Allコミュニケーションが使われており、専用のAll-to-Allネットワークを追加することを検討したが、コスト的に見合わないと言うことから、採用しなかったという。

そして、京コンピュータでは4個であったTofu Network Interface(TNI)を6個に増加してNetworkへの注入バンド幅を増加している。また、京コンピュータでは別チップであったTNIを、富岳ではCPUチップに内蔵している。

また、図22の右下のグラフに見られるように、Tofu Barrier Interface(TBI)をサポートしたことで、特にベクタ長が短い場合のAllreduce(全ノードの計算結果の総和をとり、総和を全ノードに伝達するような処理)の所要時間が大幅に短くなっている。

  • 富岳

    図22 ネットワークのコデザイン

そしてExaスケールのシステムでは、消費電力の低減が最も重要で、これについてもコデザインを適用した。消費電力を減らすため、A64FXチップにPower Knobと呼ぶ電力管理機能を持たせた。Power Knobには、浮動小数点演算器はAとBの2組あるが両方の演算能力が必要ない場合は、A側だけを動かし、B側を止める機能を設けた。また、演算器のクロック周波数を下げて電力を落とす機能も設けた。このPower KnobはOSを介さないでユーザプログラムで操作できる機能となっているので、小回りが利く。さらに、エコモードというA側の演算パイプラインだけを動かし、クロックを20%下げるモードを持っている。メモリアクセスが多いが、演算器の利用率は低い状態ではエコモードを使って片側の演算器を止めると演算性能を下げずに、電力を下げる効果が期待できる。

2021年6月14日訂正:記事初出時、エコモードについて「性能は下がるが、メモリアクセスの多い処理では、メモリ系の電力も減ることから、消費電力削減効果が大きい。」と記載しておりましたが、「メモリアクセスが多いが、演算器の利用率は低い状態ではエコモードを使って片側の演算器を止めると演算性能を下げずに、電力を下げる効果が期待できる」と当該部分を修正させていただきました。ご迷惑をお掛けした読者の皆様、ならびに関係各位に深くお詫び申し上げます。

図23に示すように、ノーマルモードでのstreamの実行に比べて、エコモードでは消費電力が82%に減る。しかし、dgemmの場合は電力は71%に減っているが、性能は52%になっているので、両方の演算パイプラインを動かした方が効率が良い。

  • 富岳

    図23 低消費電力化のためのコデザイン。各種パワーノブを設け、ユーザ状態でパワーノブを調節できるようにした

パワーノブであるが、性能を引き上げるブーストモードを作った。ブーストモードでは、通常2GHzのクロックを2.2GHzに持ち上げる。そして、全体ではB(ブースト)、B+E(ブースト+エコ)、N(ノーマル)とN+E(ノーマル+エコ)という状態が取れる。図24の表に見られるように、Bモードにすると性能は5~10%上がるが消費電力は約20%増加する。そして、B+Eモードにすると、赤丸と矢印を付けたアプリケーションでは消費電力が6%~17%減少し、同時に4%~10%性能が上がるという素晴らしい効果が得られる。なお、赤丸は付いていないが1行めのGENESISも電力が4%減で、性能は9%アップであり、B+Eモードの恩恵を受けるアプリケーションである。

  • 富岳

    図24 ブーストモードとエコモードの効果

(次回に続く)