スパコンポエムAdC2020 Day22 Nov/2020 #4 Sunway TaihuLight

山田です。

スパコンポエムアドベントカレンダー、二十二日目です！！
本当にたくさんの方が書いてくださったおかげで、俺の担当分が一週間まるまるなかったというなんともうれしいような申し訳ないようなことになりました！！！
@ogawa_tterさん、@Hishinuma_t, ロボ太(@kaityo256)先生、すばるたろ(@subarutaro)氏、@tkokamoさん、ありがとうございます。

@ogawa_tterさんは、普段からの情報収集力でロシアとか中国とか、一般人全く知らなそうな各国のスパコンやプロセッサ事情をまとめていただいているので、みなさまぜひご一読ください。特に中国は少なくともエクサプロトタイプが3つ走っている国ですし、次の六月ではどんなのを出してくるか、期待が高まりますね！！

@Hishinuma_tの記事は、SX-Auroraの話ですが、ちゃんとベンチマーク取っててえらいですね() 最低限プロセッサの評価をする上では、自分の持ってるアプリケーションの特性をきちんと理解することが重要で、そのうえでこういう評価軸でこういうベンチマークを取る、というのをきちんと行わないとベンチマーク自体の意味が薄れてしまいます。まぁ中には俺みたいにアプリケーションを持たずにベンチマークのためにベンチマークしてるやつもいますけど…
そういう意味ではすごくいい記事だと思います。この後に彼が投稿した、数値計算アドベントカレンダーの記事も合わせてご一読ください。

@subarutaro氏の記事は、今となっては失われたGyoukouの記事ですが…えーと、これに関しては俺はあんまりなんとも言い難いのですが、氏は数少ないGyoukouの外部ユーザーの一人で、お渡しできた時間が短いながらもとても頑張ってくださったので、本当にありがたい気持ちでいっぱいです。というかもっとお渡しできたらよかったんですけどほんとすいません(土下座

@kaityo256先生の記事は、というかもうみんなロボ太先生の記事読みたいじゃろ？俺もじゃ、という気持ちになるぐらいの素晴らしい記事で、ネットワークトポロジーについて理解を深めることができるものかと思います。
ネットワークトポロジーは、なんとなく「Tofuネットワークが六次元メッシュ/トーラス」ということを知っている方も多いかとは思いますが、実際トーラスってどういう構成なのよ？ というのは、ロボ太先生の記事をご一読いただければご理解がいただけるようになるかと……

@tkokamoさんの記事は、IO500という、まだ新しいベンチマークを掘り下げていただきました。スパコン業界におけるファイルシステムというのは、問題によっては非常に重要になる(あまりにも巨大なデータの場合、メモリですらなくファイルシステムが界面になる) ので、エクサの時代、ファイルシステムにもフォーカスが当たっていく、つまりIO500も重要になっていくのではないかと考えています。エクサ時代に向けて、ぜひIO500の予習のためにご一読を！

さて、そんなわけで、なんか皆様に感謝をささげつつ、Day22、いってみましょう！

# Day22 Nov/2020 #4 Sunway TaihuLight

![Sunway TaihuLight](https://pc.watch.impress.co.jp/img/pcw/docs/1006/258/01.jpg)
(引用元: https://pc.watch.impress.co.jp/docs/news/1006258.html)

漢字で書くと神威・太湖之光。
どこの卍解だよって感じですよね。というか卍解ってOffice IMEで変換できるんですね。やるなMicrosoft…

さて、Nov/2020時点では中国最速にして #4につけている、Sunway TaihuLightのお話です。
このスパコン、いろいろとご縁があって使わせていただいて、いろいろと楽しませて(意味深) もらいました。その節は関係者の皆様、ありがとうございました。とてもいい経験でした。
ただし、今回のこれは公開情報に基づいて書きます(いつもそうだけど)

## Sunway TaihuLightのスペック

Sunway TaihuLightのスペックは以下のような感じ

| | Spec |
|----|----|
|CPU|Sunway SW26010@1.45Ghz|
|Memory|32GB|
|InterConnect|Sunway Connect|
|Number Of Nodes|40960|
|Peak Performance|125PFlops|
(出典: National Supercomputer center in wuxi…のサイトが消えている…！？ SC17かなんかでもらったここのパンフレット)

もちろんまぁ目を引くのは125PFlopsという理論ピーク性能ですよね。これは2020年でこそほかのシステムが超えてきていますが、TaihuLightが初登場したJune/2016ではとんでもない性能でした。
当時はTianhe-2Aが理論ピーク54.9PFlops, 実効性能33.8PFlopsで首位を維持していたところでしたが、理論ピーク性能125PFlops, 実効性能93PFlopsという、Tianhe-2Aに約3倍の実効性能差をつけて現れたTaihuLightは、まさしく衝撃の一言でした。
しかも、Tianhe-2Aのように、言ってしまえばIntelのプロセッサを並べただけの構造ではなく、中国が自前で設計したプロセッサであるという点は、非常に驚きをもって迎えられました。ただ、中国はこれ以前にもコツコツとプロセッサ設計を進めており、2011年には同じSunwayシリーズを使ったSunway Bluelightというスパコンを開発しています。ここからわかることは、継続は力なりということですね。
なお、インターコネクトはSunway Connectという名前が付けられていますが、実体としては、PCIe Gen3の100Gbpsのネットワークとなっているようで、いやそれInfiniband EDRじゃんといいたくなるわ
けですが、[実際そうのよう](https://www.hpcwire.jp/archives/10900) です。
一応カスタムしてるみたいですけど、詳細は不明です。

TaihuLightはほかのスパコンと比べても非常にかっこいい形をしており、

![レイアウト](https://insidehpc.com/wp-content/uploads/2016/06/sunway-1.jpg)
(出典:https://insidehpc.com/2016/06/dont-panic-heres-what-we-know-about-the-worlds-fastest-supercomputer/)

という風になっています。

外側の0がコンピュートノード、真ん中の1がネットワークとなっています。
ノード数はなんと驚きの40960ノード！！圧倒的な数ですよねこれまた。
この巨大な図体でありながら、消費電力は15.3MW。電力効率は6GFlops/Wとなっており、当時のGreen500では#3につけていました。今でこそ、26とかいったりしている電力効率ですが、当時のこの数字は驚異的でした。

さて、↑でもちょっと触れましたが、理論ピーク性能は125PFlopsに対して、実効性能は93PFlops。実効効率にして74%なので、相当高い部類です。
これを支えているのが、超キワモノといっても言ってもいいアーキテクチャをした、SW26010です。

さて、いつものようにこのSW26010に迫っていきたいと思います！

## SW26010

中国はSunwayが独自開発したプロセッサです。
中国は無錫、江南計算技術研究所が開発したプロセッサで、非常に特徴的な構造をしたプロセッサになっています。

まぁこの辺も、[後藤さんの記事](https://pc.watch.impress.co.jp/docs/column/kaigai/1056229.html) に詳しいので、以下は後藤さんの記事を参考にしつつ書いていきます。
1CPUパッケージ内にはなんと260コアを内蔵！ 何とも圧倒的な数ですが、これはIntelやAMD、あるいはA64fxのようなホモジニアスなコアではありません。ヘテロジニアスなコアとなっています。どういうことかというと、つまるところこの石は近代版Cell/B.E.なのです！(？？
260コアというと巨大ですが、その内訳は(1 + 64) * 4です。どういうことかというと、Cell/B.E.よろしく、マネージメント用のMPEが1個に対して、計算用のCPEが64個のコアクラスターが4つという構造になっています。a64fxはヘテロジニアスではなくすべてが同一のホモジニアスコアですが、マネージメント用コアと計算用コアが分かれているあたりに構造の類似性が見えますね。

内部構造は

![内部構造](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59762/e1d6d5d4-e6df-7175-50af-21d51cc97d50.png)
(出典: http://www.netlib.org/utk/people/JackDongarra/PAPERS/sunway-taihulight.pdf)

のような、8x8の構造を作っていて、各コアクラスタがL2キャッシュとメモリコントローラーを持っており、8GBのDDR3をハンドルしています。チップ全体ではDDR3が4chあることになり、メモリ帯域は136.5GB/sとなっています。この当時でDDR3というのはちょっと珍しいですね。

MPEはマネージメント用(といいつつ結構リッチなマイクロアーキしてるんですよね…) であるため、ここでは触れないでおくとして…CPEは以下のような構造になっています。

![CPE MA](https://pc.watch.impress.co.jp/img/pcw/docs/1056/229/p14.png)
(出典:https://pc.watch.impress.co.jp/docs/column/kaigai/1056229.html)

CPEは素直なインオーダーのSingle-issueなコアになっています。見てわかる通り、16KBのL1命令キャッシュを持ち、データキャッシュの代わりに64KBのスクラッチパッドメモリを持っています。この辺はCell/B.E.のSPEと似ているといわれる所以ですね。ただ、SPEの場合は命令もデータも完全に256KBのLocal Storageに置かないといけなかったのに対し、CPEは(めっちゃ遅いけど) 内部バスを経由してメインメモリにアクセスできるというのが非常に大きいところです。
もちろん、DMAでスクラッチパッドに対してデータ転送を行い、メモリアクセスを局所化するというのが性能にクリティカルに効いてくるので、そこはSPEと同様の、DMAと演算をオーバーラップさせるテクニックが求められます。なので、非常にピーキーな石といえるでしょう。
演算器としては、256bitのFMAユニットがついており、倍精度浮動小数点数を4個同時に処理することができます。クロックは1.45Ghzなので、CPE一個あたりの性能は、

`1.45 * 2(FMA) * 4(256bit) = 11.6GFlops`

となります。これが256あるので、2969.6GFlops = 2.96TFlopsとなります。
逆に、CPEは非常に割り切った構造となっており、この演算器は倍精度のみをサポートします。近代のプロセッサは、大体単精度も半精度もサポートしたりしますが、これは科学技術計算のみにフォーカスすることで、ほかの演算器を排除して作ったものなわけですね。その辺に割り切りを感じます。

B/Fとしては、

`136.5 / 2969 = 0.045`

とかなので、割と厳しめ…まぁ最近やっとこさ0.1とかに戻ってきた時代だったりしますし、この時が一番きつかった時代かもしれませんね。

さて、CPEでSPEにはない特徴的な部分というと、レジスタ間転送というものがあります。
レジスタ間転送とは何ぞや？というと、

![レジスタ間転送](https://pc.watch.impress.co.jp/img/pcw/docs/1056/229/p18.png)
(出典:https://pc.watch.impress.co.jp/docs/column/kaigai/1056229.html)

この図の示す通り、同一コアクラスタ内のCPEのレジスタを、ある別のCPEのレジスタに対して転送することが可能というものです。また、転送のみならずブロードキャストも可能になっています。通常、コア間でデータを共有したい場合、L2まで落として、L2から読むみたいなのが一般的ですが、L2に書けたことを保証する(L2に書き終わるまでL2を共有する全員がブロックする) 必要があるため、コストが結構高くなってしまいます。レジスタ間転送を使うと、そのコストがほぼ0で済むわけですね。
書かれてはいませんが、レジスタ間通信は縦方向に送るのと横方向に送るのがありました。ここらへんで8x8のCPEクラスタの構造が活きてくるわけですね。

## SW26010の思い出

まぁこれあんま書いていいのかわからんけど…
とりあえず、こういう変な石を触りたい欲求にあふれてる俺なので、お声がけいただいた時には一も二もなく使わせていただいたりしました。そのプロジェクトでお役に立てたかというと、はっきり申し上げて何の成果も出せませんでした。平にご容赦ください……
現地に行っていた方々と繋いで、会話しながらコード書いたり動かしたりしていたわけですが、TaihuLightはリアルタイムでノードが増えたり減ったりしていたのがすごく印象的でした。つまりどういうことかというと、リアルタイムで直したヤツをラックにセットしてはちゃんと動くかを確認してマネージャーに登録していたわけですね……運用チームの人めっちゃ大変そう…という感想を持ちました。まぁそのあとで似たようなことを自分たちもやるわけですが…(遠い目

あと、ロボ太先生の[スパコンの使いやすさとは](https://qiita.com/kaityo256/items/a98cc311a504751b08a9) にもありましたが、情報の有無とコンパイラの出来というのは、非常に重要だというのを痛感するスパコンでもありました。TaihuLightは、まぁ出たばかりのシステムであり、出たばかりの石なのでそれも当然なのですが、ひたすら情報がない…何せ公式からの資料はリファレンスマニュアル(中国語) しかなかったので、Google翻訳を駆使して中国語を読み続ける毎日でした。いやあの時はつらかった…
それにコンパイラも信用ならないし…コンパイラフロントエンドは割と適当な最適化しかしてくれないし、バックエンドはたまに怪しいコード吐くし…つらかった…
並列化支援用にOpenACCとかも用意されていたのですが、リファレンスマニュアルに「OpenACCは遅いから使うな(意訳)」と書かれていて、どうせいっちゅーんじゃという気持ちになりました。
とはいえ、こういうピーキーなスパコン……つまり、使いこなすのには超絶テクニックが必要だけど、テクニックがあればものすごい性能が出るようなもので育った人々というのが、エクサ世代のプログラムを書くことを考えると、間違いなく今の中国の潜在的な能力は高いと言えるでしょう。
次世代が楽しみのような、恐ろしいような……

少なくとも、一つ言えるのは、まだまだスパコンは面白くなる、ということですね！(なんかきれいにまとめた感


# まとめ
* Sunway TaihuLightについて書きました。
* SW26010はとてもいい石でした。コンパイラはもう少し頑張ってほしいです(今はもう少しまともになってるのかしら？
* このTaihuLightとかで育った次世代の人材が楽しみです。
* 明日は@aokomoriutaさんで、HPCGの思い出です。なんかこれ懐かしいですね(内輪ネタ