富岳HPCのコデザイン
富岳スパコンはどのように考えて開発されたのか?- マイナビ
リンク先の連載記事は「富岳」開発に関する理研R-CCSのアーキテクチャ開発チームのチームリーダの佐藤三久氏のCOOL Chips 24での発表内容を基にHisa Ando氏が解説を付けたものであるが、全9回に渡る長期連載で読み応えがある。非常に興味深く読ませて頂いた。
理研/富士通の開発した「富岳」は、「ポスト京」と呼ばれていた時代も含めれば随分と沢山の記事があり、マイナビに掲載されている名称決定以降の記事だけでも30件を超えるが、筆者が読んだ限りでは、今回の連載でのポイントはコデザインではないかと思う。実際、第3~4回はどのようにコデザインが行われたか概要、第5~6回はハードウェアについて、第7~8回は第3~6回の内容を踏まえてコデザインのポイントと得られた結果を解説しているように読める。
富岳運用開始前はハードウェア特にマイクロプロセッサーに焦点をあてた記事、運用開始前後ではシステム全体のアーキテクチャー、運用開始後は性能や得られた成果に関する記事が多かったように思われるが、今回はコデザインを取り上げることで過去に発表された内容を踏まえつつ、ハードウェアからアプリケーションまでの統合するような内容となっている。第5~6回の内容自体は過去のハードウェアの記事と重複する部分があるが、今回はコデザインという観点から見ているので類似の内容でも見え方は異なるように思う。
記事中で解説されている内容そのものに異論・反論を唱える気は無いが、この種の内容に馴染みのない読者は注意が必要だと思う。それはコデザインは乱暴に言ってしまえば、ワークロードに最適化するようにハードウェア・ソフトウェアを協調的に開発するという事になるのだろうが、例えば第7回で比較対象として挙げられているIntel "Skylake-SP" Xeon ScalableやMarvell "Vulcan" Thunder X2への適用は限定的に考える必要があるからだ。
なぜなら、Intel Xeon ScalableシリーズもMarvell Thunder Xシリーズも汎用的なサーバー用プロセッサーであってHPC専用プロセッサーではないし、Intel "Skylake"コアに至ってはTDP 15wのモバイルからTDP 200w超のサーバーまでを単一のアーキテクチャーでカバーしているからである。
HPCではユーザーがアプリケーションをHPCシステム毎に再構築する/できるケースが多いと考えられるが(※8年ほど前の古い記事だがNVIDIA CEOのJen-Hsun Huang氏もNVIDIAがx86ではなくARM CPUに取り組む理由について「HPCの世界ではアプリケーションは世代毎に再構築されるので、どのようなCPUだろうが、GPUだろうが大きな問題にはならない」と語っている)、PC/サーバー用プロセッサーでは、どのコンパイラーの、どのオプションでコンパイラーしたソフトウェアであっても高速に動作する必要がある。
例えば第7回のL2キャッシュについての解説部分を考えると、解説にある通りコデザインが前提であれば大容量キャッシュの統合を諦め、そのハードウェア=A64FXに最適化したソフトウェアを開発できるかもしれないが、そのような開発思想はIntel Xeonシリーズでは採用できないだろう。
Intel "Skylake-SP" Xeonでは、各コア1MBのL2キャッシュとコアあたり1.375MB(最大28コアで38.5MB)もの共有のLLキャッシュを搭載しているほかSMTが実装されており、"Skylake"コアの実行パイプライン構成に最適化されていないコードでも実行ユニットを遊ばせることなく処理を続けることができるが、その代償としてL2・LLキャッシュにコアの約1/4・SMTの実装にコアの5%以上もの膨大なリソースを費やしている。
乱暴に言えば、もしかすると富士通A64FXと同様のコデザインの結果、理論上ではIntel "Skylake-SP" XeonでもL2・LLキャッシュを廃止することで同じダイサイズで28コア→38コアにコアを増量でき特定用途での演算性能が大きく向上させることが可能かもしれないが、Intelは汎用的な処理性能を選択することにより"Skylake"コアを15Wのモバイルから200W超のサーバーまでを単一のアーキテクチャーでカバーできるというトレードオフが成立している。
その結果として、HPCベンダーは大量生産されている汎用のIntel Xeonプロセッサーを採用してHPCを構築できる。コストの計算の仕方が米国と日本とで異なるため単純比較はできないとはいえ、米エネルギー省のフラッグシップHPCの場合2015年のOLCF-4/Summitが約350億円($325 million)・今年末~来年初頭に登場予定のAuroraが約540億円($500 million)に対し、理研の富岳のプログラムコストは約1,300億円となっている。
その結果得られた性能については第7~9回に数字が登場し、それら自体は確かに見事なものだが、そもそも米国などはCPU + GPGPU(アクセラレーター)による演算が主流なので、第7回に登場するような富士通A64FXとIntel "Skylake-SP" Xeon・Marvell Thunder X2との比較がフェアなのかよく判らない。一部のベンチマーク結果では特にThunder X2が大敗しているが、そもそもThunder X2は128-bit SIMDエンジンのARMv8-A Advanced SIMDしか搭載しておらずHPC用途で使うのであればNVIDIAかAMDのGPUと組み合こととなるだろうからCPU単体で比較対象として妥当なのか疑問である。
もちろん、コデザイン手法を含む富岳の開発で得られた知見は日本のHPC業界・理研RCC・富士通にとって学術的にも産業的にも有益な経験だったろうし、そのための投資という側面もあろうから、そもそもIT最強国家=米国と米国企業製品と比較することは野暮かもしれないが…。
ところで、個人的に今回の連載で衝撃的だったのは、異なるCMG(Core-Memory Group)間ではメモリーが独立でデータのやり取りの必要がある場合は同じノード内でもMPIで通信する必要があるという点である。CMGには演算用の12コアとは別に1コアのアシスタントコアがあるが、その謎が解けた気がする。
HPCに限らず、I/Oに代表されるようなCPU時間に比して非常に長い遅延が発生する処理では、演算を妨げないように専用にCPUコアを割り当てるケースがよくある。マルチコアのネットワークプロセッサーなどでは1コアを専用に割り当てたりする。これは富士通に限った話では無くIBM BlueGene/Qでも17コア中の1コアはI/O用である。
しかし、もしA64FXの4個のクラスター(CMG)がAMD "Zen"世代 EpycのZeppelin(2 CCX + UMCを集積したダイ)のようにフラットにメモリーにアクセスできるのであればアシスタントコアは各CMGに1コアも必要なかったかもしれない。各CMGに1コア・A64FX 1ソケット=1ノードで4コアも必要なのは、そもそもメモリーがCMG内でしか共有されておらず、他のCMGのメモリーに格納されているデータにアクセスするにはMPI(同一ノード内)なりOpenMP(他のノード)なりで当該のCMGで代わりにメモリーにアクセスしてくれるコアが必要だからだろう。
富岳の設計思想として、1単位のジョブが原則として1コアまたは1 CMGで完結し、他のCMGとの通信が多発しない前提であればそれで問題ないのだろうが、比較対象として挙げられているIntel XeonやMarvell Thunder Xが一般的に使われるサーバー用途ではパフォーマンスが発揮されないことだろう。
ところで、理研/富士通は先代「京」では富士通SPARC64VIIIfxを採用したが、これは富士通のUNIXサーバー用SPARC64シリーズの派生で、基本アーキテクチャーは共通で例えばSPARC64VIIはUNIXサーバー用・SPARC64IXfxはHPC用といったように作り分けられている。富士通がA64FXで同様の製品展開をするのか不明であるが、A64FXをサーバー用に転用するには大幅なアーキテクチャー変更が必要になりそうである。
本稿はツッコミや批判のような内容となってしまったが、マイナビのHisa Ando氏の記事は読み応えがあるし、HPC用途に限定すれば納得のいくものである。
ただ、やはりHPC用限定でマイクロプロセッサーからシステムまで作っているのは世界中で日本と中国ぐらいなので、非常に小さいHPCマーケットでしか使えない専用ハードウェアというのは先行きに不安を感じずにはいられない。
Google TPUv4
Google、1エクサフロップを超える性能を持つ「TPU v4」発表、Google史上最高性能のシステム - IT Media
以前Google TPUを開発していたメンバーがGroqを設立したので、個人的にGoogleが自社開発TPUを続けるのか疑問に思っていたが、TPUv4が発表された。もっとも発表されただけで詳細は不明である。
個人的に気になるのは「1エクサフロップを超えるGoogle史上最高性能」というくだりである。マーケティング用のあまり意味のない説明ではないかと思う。
Google TPUv4の詳細は不明なのでこの指摘が妥当なのか不明だが、Google TPUを含むNeural Processing Unit=NPUにはSIMD演算ユニットやMatrix演算ユニットのクラスターで構成されているが、基本的に積和算のようなNeural Network処理に必要なオペレーションにしか対応していないので汎用的でないことが多い。恐らくIntel CPUに搭載されるAVXユニットやNVIDIA GPUに搭載されるCUDAコアとは異なり、除算などは演算できないのではと思われる(※注:除算は実装が非常に重いことで有名。NPUを実装するならば除算を省く代わりに、より多くの演算ユニットを積む方が有益である)。
恐らく「1エクサフロップを超える」と言っても「※ただしMLアプリケーションに限る」という注釈が付くはずで、例えば米エネルギー省が導入を計画している1エクサフロップ超のHPC(通称:エクサスケールHPC)とは意味が異なるのではと思う。