プロの世界を垣間見た男(地球シミュレータ見学記・ベクトルプロセッサ編)   

2003年5月29日




今回は地球シミュレータの内部構造編である。 とは言っても、ベクトルプロセッサ部分のみを見せて頂き、 クロスバ網の内部は見せて頂いていないので、 詳細に関してはベクトルプロセッサ部分の内部構造に限定させていただく事にした。

☆全力疾走で42.195kmを走り抜くプロセッサ   
まず見せていただいたのは心臓部であるプロセッサのダイ。

0.15μmルール8層銅配線のCMOSだそうで、かなりのハイテクである。 ミクロンルールではintelの最新FAB(0.13μmルール)に少し負けているが、 層数はintelでは基本的には6層配線であるから、 ミクロンルールの差はかなりカバーされている。 ダイ面積を大きめに取った事とあわせて、 総トランジスタ数ではintelのPentium4を上回る数だけ組み込まれている。 (地球シミュレータ用プロセッサ:6000万トランジスタ  Pentium4:5500万トランジスタ)

この中にベクトルユニットが8セット、スカラユニットが1セット入っている。 ベクトルユニットのパイプライン数は6種類(加算、乗算、除算、論理、ビット列論理、ロード/ストア)で、スカラーユニットの4並列スーパースカラより並列度は高い。 この1チップだけで8GFLOPSの能力がある。 ワンチップ・ベクトルプロセッサだそうで、 これは以前のスパコンSX-5と同じ処理能力だそうである。

特に注意しなければならないのは、このチップでは8GFLOPSの性能を維持できる という点である。例えばXeonの2GHzクラスのCPUならば、 PC用でも理論上は4GFLOPS程度は出る。 ところがこれらのCPUは、キャッシュとTLBの限界から配列要素がキャッシュやTLBの カバー範囲から越えてしまうと、途端にガクッと性能低下を起こしてしまう。 科学技術計算用途だと、通常の実効値は数分の一である。

これらのCPUが速いのは、あくまでキャッシュやTLBが効く範囲のデータ数である場合 (つまりパソコン用途)であり、大規模配列を扱う科学技術計算では ピーク演算性能を維持できないのである。1)

基本的にPC用CPUはキャッシュでドーピングされた100m走ランナーみたいな物である。 短距離(低データ負荷)では速いが、データ負荷が大きくなると すぐに息切れしてしまう。 しかし、地球シミュレータ用プロセッサの凄さは、100m走ランナーと同程度の速さで 42.195kmを走り抜いてしまうところにあると例えたらわかりやすいだろうか?

☆驚きのチップパターン   
驚いたのはダイの配線パターンである。 プロセッサであるにもかかわらず、 まるでDRAMコアの様にパターンが規則正しい。 失礼ながら、最初は間違えてメモリ用のチップを渡されたかと思った位である。

たるさんは実際に壊れた486やPentium(喝入れ過剰の過労死です。ははは。)を バラしてカバーを開け、コアを見たことがある。 ダイのパターンはCPUでは例外なく非常に複雑怪奇な不規則構造をしている。 (よく雑誌に写真が掲載されているダイ写真のアレである。)

ところが、ベクトルプロセッサ用のダイはパターンが非常に幾何学的に整理されていて、とてもプロセッサコアとは思えないのだ。 このチップにはスカラー部分も同時に焼き込まれており、その部分らしき箇所は それなりに雑然とはしているのであるが、全般に非常に秩序立った構造なのである。

似たパターンのチップをWebで探し回っていたら、重力シミュレーション専用機 GRAPE-6のチップが非常に似ている事に気がついた。 GRAPE-6と地球シミュレータはそれぞれ専用機と汎用機とであるため、 まったく土俵の異なるコンピュータなのだが、 パイプラインをストール無く駆使する方式のチップは パターン配置も似てくるのだろうか?

そこで思い返してみたことが、ベクトルプロセッサのレジスタ数だ。 ベクトルプロセッサはレジスタ数が非常に多い上に、ベクトル演算であるが故に 1レジスタに必要なトランジスタ数がベクトル化倍だけ多い。 代表的なパソコン用CPUであるx86アーキテクチャではレジスタ数は 整数演算用で基本的に8個、x87部分が同じく8個。 x87以外の浮動小数点用レジスタでもSSEですら128bit幅のが8個しかない。 (SSE2は何個やったかな〜?)

最新のプロセッサではレジスタリネーミング用のシャドウレジスタがあるから、 事実上はその何倍もの数(Pentium4では128個)があるが、 それでもレジスタが占めるサイズは相対的には大したことがない。

ところが、ベクトルレジスタでは同じレジスタとは言っても スカラプロセッサのレジスタと比較するとトランジスタ数がベクトル化分だけ多い。 (大雑把に言えば、ベクトルレジスタは複数のスカラレジスタの集合体と考えて良い。) だから、ベクトルユニット1セット毎にベクトルレジスタが72個と言っても、 それは同数のスカラプロセッサ用レジスタに必要な トランジスタ数と比較した場合、桁違いに必要トランジスタ数が多いハズなのだ。

このため、レジスタ群がまるでキャッシュのようにダイサイズの多くを 占めているハズだ。 つまり、非常に規則的に見えたのは、たるさんの推測では たぶんベクトルプロセッサのレジスタ群であろうと考えている。

もしこの予想が的中していたとすると、これは技術的に益々難易度が高くなる。 データ保存という同じ用途でも2次キャッシュよりは1次キャッシュ、 1次キャッシュよりはレジスタと 演算部分に近ければ近いほど低レイテンシが要求されるためである。

ベクトルレジスタともなれば、この部分はほとんどウエイト0で 動作しなければならないはずである。 つまり、容量的に1次キャッシュと同量の場合を考えても ベクトルレジスタの方が難易度は格段に上がるのだ。

これは、Pentium4において高クロックを維持するために1次キャッシュを 増やしたくても増やせず、やむなく2次キャッシュ増量で我慢している現状を 考えていただければわかると思う。 (Pentium4はその性能の割に1次キャッシュが小さいことで有名。)

また、この問題を回避する方策として、疑似ベクトル方式と言うのがあるそうだ。 ベクトルレジスタをウエイトの多いタイプで妥協する代わりに、 多数のレジスタウインドウを用意して使い回すというやり方らしい。

しかし、地球シミュレータではこの方式は採用しなかった。 まあ、野球で言うとストレート勝負に出たわけである。 つまり、多数のベクトルレジスタを1チップに集積することは、 プロですら回避に苦労するほどの高難易度な訳だが、 ここ一番の勝負所と判断したのだろう。

ちなみに、余談であるがベクトルユニットにキャッシュは無い。 (スカラーユニットには命令64KB、データ64KBのキャッシュがある。) これは別にトランジスタをケチった訳ではない。以前 セカンドキャッシュにもハーバード・アーキテクチャを! で書いたとおり、膨大なデータがキャッシュを埋め尽くしてしまうからである。 ベクトルユニットにキャッシュを付けてもほとんど機能しないのだ。 ベクトルユニットの場合、カタログ性能だけ高いキャッシュで誤魔化してもダメで、 メインメモリの地力勝負なのである。

と言うわけで、非常に難易度の高い1チップ化であることがおわかり頂けるだろう。 もっとも、難易度の高さに比例して歩留まりには苦慮しているようである。 歩留まりは企業の最高機密事項だから具体的な数値は教えてもらえなかったが、 良くないことは事実だそうだ。

次にクロックであるが500MHzである。正直言って今となってはそれほど高くはない。 が、ベクトルパイプライン部分は倍速の1GHzで動作している事は重要だ。

Pentium4でもALUは倍速で動いているからPentium4-3GHzのALUは6GHz動作であるが、 これとはちょっと意味が異なる。 ALUの場合ダイサイズに占めるALUユニットのサイズは軽微だが、 地球シミュレータ用プロセッサに占めるベクトルユニットはダイ上で大きな面積を 占めているからである。 (なんせ1チップに付き、スカラ1セットに対しベクトルは8セットも 焼き込まれている。)

Pentium4-3GHzの場合は、3GHz動作で一部6GHz動作と言うことになるわけであるが、 地球シミュレータ用プロセッサの場合は500MHz動作とは言っても、 大部分が1GHz動作でスカラーユニットやI/Oユニット等といった 一部分が500MHz動作と考えた方が良さそうである。

Pantium4ではクロック至上主義から非常な高クロック動作となったがIPCは低い。 ところが、ベクトルユニットはPentium-Mの様にIPCが非常に高い。 だから、「低クロック=低性能」とは一概に言えない所がミソだ。 (ベクトルユニットの場合キャッシュが効かないため内部だけ高倍速動作にしても あまり効果が出ないハズ。 このためメインメモリのクロックに合わせたのかもしれない。)

☆2重に驚きの放熱機構   
次にプロセッサ・コアを取り付けたモジュールを見てみよう。 基板自体は昔スパコンで流行ったガラスセラミックス系基板ではなく、 ビルトアップ基板で造られている。 ガラスセラミック基板はどうしても価格が高くなるため 避けられたものと推測している。

これほどの回路ともなればさぞや発熱も多いだろうと思っていたが、 予想通り発熱はものすごい。 チップあたりの発熱量は140W。Pentium4-3GHzの2倍弱もある。

発熱量が多いのはベクトルプロセッサの特徴で、 トランジスタの稼働率が非常に高いからだろう。 Pentium4-3GHzではTDPが約80Wであるが、 実はすべてのトランジスタがフル稼働すれば発熱量はもっと多くなる。 皮肉なことにPentium4ではIPCの低さが発熱量を抑制しているわけだ。 (HT対応のPentium4では、同クロックの非対応品よりも TDPが上がる事からもわかる。)

ところが、ベクトルプロセッサではベクトルパイプラインの動作は ストールとは無縁な動作をする(というか、コードを極限までチューニングして ストール無しで動作させる。)ので、ギチギチにパイプラインが詰まっている。 だから、非常に高IPC動作2)となるため発熱も多いわけだろう。

で、この140Wもの発熱量のダイを冷却するわけだが、これが非常にビックリした。 この発熱量を考えれば当然のごとく液冷システムを予想していたのである。 たとえばPC用ではPentium4系CPUの発熱増大に伴って、 水冷システムが流行の予兆を見せている。 CPU消費電力約80WのPCが水冷にならなければならないならば、 当然140Wのスパコンは液冷システムになっているだろう... と予想していたのだが、この予想は見事にはずれた。

地球シミュレータの冷却システムはズバリ空冷なのだ。 3)

地球シミュレータのベクトル演算モジュールにはダイ直上に巨大ヒートパイプシステムが 取り付けられている。 いや、巨大は巨大なのだが、その堅牢性もものすごい。 ヒートパイプは構造体のような堅牢なもので、 PC用の華奢なパイプとは比較にならない強度を持っている。 取り付けもPC用途とは比較にならない位にガチガチである。

140Wもの消費電力のダイを空冷で冷やすというのはかなり大変なことである。 たとえば、intelでは「CPUの消費電力が100Wを越えるのはもう間近」とか、 「将来、ダイの局所温度は原子炉の炉心温度を超える。メルトダウンが心配だ」 とか言いながら、 地球シミュレータ用プロセッサでは現時点で既に100Wを40%も越えている。 しかし、100Wを越えていながら空冷システムを維持し、その上、 熱暴走もなく安定稼働している。 つまり、2重の意味で驚きなのだ。

空冷式にしたのは信頼性を考慮した結果だろう。 その昔、IBMの汎用機で水冷システムが取り入れられたことがあったが、 最大の課題は水冷システムの信頼性確保であったと聞いている。 水冷システムは冷却性能は高いが、一般的には信頼性に劣るという欠点がある。 (PCで水芸に手を出した事のある方には良くお分かりだろう。) ゴルゴ13ではないが、「プロの仕事では信頼感こそがすべて」なのである。

また、ヒートパイプの取り付け方にノウハウがあるのだが、 これは非公開とさせていただこう。

意外なことにすべて空冷
これだけのシステムを空冷だけで安定稼働させることに成功している。


☆コンデンサ! コンデンサ! コンデンサ!   
さて、ではプロセッサユニットの基板をもう少し詳しく見てみよう。

表面であるが、配線層としての重要度はPC用基板よりは低いようだ。 PC用マザーボード等では表面層は重要な配線層であり、 マザボを見ると各種の配線が入り乱れているのがわかる。 しかし、地球シミュレータ用モジュールでは配線パターンよりも優先して コンデンサが搭載されているからだ。

ちなみに、ビルトアップ基板で層数が多いため表面層の配線不足は 内部配線でカバーできる。 地球シミュレータの基板は14層(コア6層+ビルトアップ4層×裏表2面) である。普通のパソコン用マザーボードは表面配線層−GND層−電源層−裏面配線層の 4層構成である場合がほとんどで(高級品でも6層)、 ビルトアップ基板はこれより格段に層数が多いからだ。

表面層の内、ダイ以外の部分はすべてコンデンサと言って良い。 全面ベタコンデンサとも言える状況である。 角形チップ電解コンデンサ(たぶんOS-CON系かタンタル系)、 大容量系チップコンデンサ、小容量系高周波用チップコンデンサと 種類も非常に多い。 ありとあらゆるチップコンデンサが基板表面を石垣のように 埋め尽くしているのだ。

チップにCMOSを採用したためクロック毎の消費電力変動が大きく、 またプロユースのためPC用とは比較にならない高信頼性が要求されたため このような事になったのだろう。 (PC用プロセッサでもXeonの様なサーバー用プロセッサは 実はコンデンサ搭載量が多いのだ。 機会があれば秋葉原でPentium4とXeonを見比べてみて欲しい。)

また、当然のごとく電源コネクタには非常に大きな物が使われている。 まるで強電用機器のようにガタイに似合わない大型電極付きコネクタだ。

たるさん自身は以前から 「CPUが熱中症で死ぬ前に、電力不足で飢え死にする問題を解決するのが先」 と主張してきたが、この全面ベタコンデンサ状態を見るに付け、 少なくともCMOSの消費電力変動を吸収するためには、やはり ここまでしなければならなかったのかと感慨が深い。

☆コネクタ! コネクタ! コネクタ!   
裏面であるが、全面すべて接続用コネクタの固まりとなっている。 表面が全面ベタコンデンサならば、裏面は全面ベタコネクタ状態。 これは、多くがメモリモジュールへの接続用だそうだ。

地球シミュレータはベクトル演算機構を採用したことが最大の特徴である。 そして以前書いたが、ベクトルプロセッサはスカラプロセッサに比べて メモリ性能ではレイテンシよりバンド幅が重要である。

AMDの秘密兵器Opteronプロセッサでは、メモリユニットをCPUに内蔵させて レイテンシ低減を狙っている。このことでわかる通り、 同じメモリ性能でもスカラプロセッサでは レイテンシ減がバンド幅増より重要だ。

しかし、ベクトルプロセッサではベクトル演算機構に 時系列で連続に多くのデータを送り込む必要がある。 そうしないと、せっかくのベクトルパイプラインがストールしてしまうのである。 そのため、ベクトルプロセッサではスカラプロセッサと異なり、 レイテンシよりむしろバンド幅がボトルネックになっている。 つまり、ベクトル型スパコンではまさにバンド幅こそ生命線なのである。

当然、メモリモジュールはバンド幅が最大限になるように工夫されており、 そのバンド幅はなんとプロセッサ毎に32GB/sである。 しかも、STREMベンチマークの実測値でも32GB/sが確認されているので 32GB/sは実力値だそうだ。 PC用と比較すると、出たばかりの最新チップセット、 FSB800MHz+DDRデュアルチャンネルのintel875Pの 6.4GB/s(ピーク値)という値ですらまったく霞んでしまう数値だ。

しかもこのメモリユニット、PC用プロセッサのように単一プロセッサに 専属かと思いきや、同じバンド幅のままノード内のあらゆるプロセッサに 接続できるのである。 (つまり、共有状態のままでバンド幅が維持できるという特徴がある。)

だから共有メモリ(総容量16GB)は主記憶ユニット32個に分割され(1ユニットにつき 1GB/s)、それぞれが8個のプロセッサ(地球シミュレータは1ノード8プロセッサ構成) に同時に接続できる仕様になっているそうだ。 つまり、ノード内の総バンド幅は1GB/s×32主記憶ユニット×8プロセッサで、 なんと256GB/sにもなる。

余談だが付け加えると、ノード間つまりクロスバ網との結合は 同時動作可能な双方向でそれぞれ12.3GB/s (物理転送速度は16GB/sだがECCを差し引くとこの値になる。) のバンド幅を持ち、また、クロスバ網との通信はRCU (リモートアクセス・コントロール・ユニット)によりベクトルユニットの動作とは 独立にデータをやりとりできるそうだ。

このデータ授受はMPI2ライブラリによる通信で行うが、 ノード内のロード/ストア性能(16GB/s)となるべく合わせる形で 12.3GB/s(実績値でも11.8GB/s)にしてあるそうである。 (ちなみに、ノード間通信は通信によるオーバーヘッド込みの値なので ノード内のバンド幅とは直接比較はできないそうだ。)

と言うわけで、これらが裏面がコネクタだらけである理由であろう。 とにかく巨大なバンド幅を確保するため、 膨大なメモリユニットを接続しなければならないのである。

こうなると、バンド幅の限界はメモリ性能の限界ではなく、 コネクタ数の限界から来るインターリーブ数限界が決めているのでは? なんて思えてくる。(←これは、たるさんの推測。) なんせ裏面にはコネクタ以外のパーツがほとんど無いのであるから...

話を戻してまとめてみよう。 これらの技術開発の結果、かなり小さな容積(ちょっと大きめのロッカー程度)で 演算ノードを構成できるように進化したわけだ。 同性能の筐体サイズで比較すると、SX-5では縦横それぞれ2.0m×6.2mなのに対し、 地球シミュレータでは1.4m×1.0mで収まっている。 (ただし、地球シミュレータの筐体は2ノード入りのため、実効的なサイズはその半分) なんせ640ノードも設置しなければならないからね。

え、プロセッサとメモリの話だけでこんな文章量か... なんせ、2時間の見学予定の所を、 大サービスで4時間も説明して頂いたからなぁ。

次回はカタログ性能ならぬ実戦での演算能力とその成果、 そしてライバル機との比較で締めくくりたい。 (本来なら歴史的経緯とか、運用なんかも書きたかったのだが...)



1)
コンピュータ全体での理論ピーク性能に対する実効性能といい、 プロセッサ単体の値といい、 地球シミュレータの特徴の一つにカタログ性能と実効値の乖離が 非常に少ないことが上げられる。

効率は低くてもその分物量でピーク性能を上げれば良いとする アメリカ的設計方針に対し、 地球シミュレータの設計思想はピーク性能と実効性能の乖離を減らす事に 主眼をおいている様に思われてならない。

要するにカタログスペックではなく、実戦で証明できる性能を突き詰めたわけだ。

2)
ベクトル演算命令は1命令で時系列に多くのデータを雪崩的に扱うので、 1命令に必要なスループットは非常に大きくなる。 従って、厳密な意味でIPCを計算すると非常に低IPCとなってしまうわけだが、 もちろんこれは低性能な事を意味しない。 スカラプロセッサとはIPCの意味合いが根本的に違うのだ。

従って、本稿では高IPCとして扱った。

3)
ヒートパイプは冷媒を内蔵しその気化熱で熱を奪い放熱部で凝縮再循環させる 閉サイクル冷却方式だ。 だから、これを空冷に分類するか、液冷に分類するかは難しいところだ。

だが、当サイトはPCマニアのためのサイトであるため、 PCの世界での共通認識である空冷方式に分類させて頂いた。