後藤弘茂のWeekly海外ニュース

Intelが48コアのメニイコアリサーチチップの技術を公開



●メニイコアリサーチチップの第2世代

 Intelは、48個のCPUコアをワンチップに載せた、第2世代のメニイコア(Many-core)リサーチチップの概要を明らかにした。昨年(2009年)12月に「シングルチップクラウドコンピュータ(Single-chip Cloud Computer=SCC)」として発表したチップだ。米サンフランシスコで先週開催されたISSCC(IEEE International Solid-State Circuits Conference)では、同チップの部分的な詳細が明らかにされた。

第2世代のメニイコアリサーチチップ Single-chip Cloud Computerの概要

 Intelは、将来のメニイコアCPU時代に向けたリサーチプロジェクトとして、メニイコアCPUを試作して検証を行なっている。エミュレーションではなく、実シリコンで試作をしてしまうところが、研究費の潤沢なIntelらしい。

 リサーチの第1弾として、2006年にIntelは、1チップでテラフロップ(TFLOPS)の演算パフォーマンスを実現する実験チップ「Network-on-Chip(NoC)」を発表した。この時のNoCは、極めてシンプルなVLIW(Very Long Instruction Word)型CPUコアを80コア搭載して、オンダイのメッシュネットワークで結んだ。リサーチのテーマは、オンチップネットワークやコアの制御などだった。

 今回、IntelはCPUコア数を48個に減らした第2世代のリサーチチップとして、シングルチップクラウドコンピュータ(SCC)を出してきた。このチップの目的は、プログラミングモデルやパワーマネージメントの検証であり、前回のリサーチより一歩進んだ。ちなみに、Intelは第3世代のチップの設計を進めており、すでにエミュレーションで走っているという。

第1世代の「Network-on-Chip(NoC)」
(PDF版はこち)
1チップでテラフロップ(TFLOPS)の演算パフォーマンスを実現する実験チップ

 第2世代のSCCチップは、プログラミングモデルの検証が大きな目的であるため、CPUコアも変わった。前回のようなVLIWの特殊なFP(浮動小数点演算)コアではなく、IA-32(x86)系の命令セットのコアをIntelは選んだ。コア数が減った理由の1つは、CPUコアサイズが大きくなったためだと推測される。プログラミングモデルへと進んだことで、前回の第1世代チップ(NoC)より、今回の第2世代の方が、Intelの将来のCPUの姿が見えやすい。つまり、将来のLarrabeeなどが、どんな方向へ向かって行くのか、占うことができる。

ソフトウェアプラットフォームのイノベーション

●巨大なモンスターチップ

 Intelの48コアSCCのCPUコア自体はPentium(P54C)クラス。命令をそのままの順序で実行するIn-Order(インオーダ)実行で、最大2命令を並列実行できる2-wayスーパースケーラのコアだ。Pentiumとの大きな違いは、L1キャッシュが8KBから16KBへと倍増されたことだという。ちなみに、Intelは、枯れたコアというとPentium世代のコアを持ってくる傾向が強い。グラフィックスメニイコアCPU「Larrabee」の第1世代も、Pentium系コアだった。

 製造プロセスは45nm Hi-Kプロセスで、第1世代の65nmから1世代進んだ。おそらく、Intelは1プロセス世代に1つずつリサーチチップを開発していると思われる。だとすれば2年置きにリサーチチップが出てくることになる。

 リサーチチップでは、48個のコアは2コアずつペアになり、1個のクラスタを形成している。クラスタは「タイル(Tile)」と呼ばれており、P54C系のCPUコアが2個のほかに、それぞれ256KBのL2キャッシュ、ルータなどが含まれている。ダイ写真でわかるように、チップ全体で24タイルが4×6の構成で敷き詰められている。

ダイの写真

 タイル同士は2Dメッシュ型のネットワークで接続されており、タイルの中にオンダイルータが備えられている。この構造は、第1世代のリサーチチップNoCと共通している。他のタイルやメモリ、システムインターフェイスへのアクセスは、全てこのオンダイルータを経由して2Dメッシュネットワークで行なう。

 また、4チャネルのDDR3メモリインターフェイスがチップ両端にあり、システムインターフェイスと各種I/Oが下面に配置されている。個々のタイルのトランジスタ数は4,800万(48M)で、面積は18.7平方mm。チップ全体でのトランジスタ数は13億(1.3B)で、ダイサイズは567平方mm。ダイサイズでは、サーバーCPUクラスのモンスターチップだ。

SCCの構造

●マルチコアとは大きく異なるメニイコア

 48コアSCCの大きな特徴は2つ。

 1つは、コア間のキャッシュコヒーレンシのためのハードウェアを実装しなかったこと。普通のPC&サーバー向けマルチコアCPUのような、CPUコア間でのキャッシュコヒーレンシの保持は行なわれない。これは、同じメニイコアでもハードウェアでキャッシュコヒーレンシを取るLarrabeeとはコンセプトが異なる。ハードウェアコヒーレンシのないアーキテクチャでのプログラミングモデルの探求がテーマの1つと見られる。

 もう1つは、動作周波数&電圧の動的切り替えによる省電力制御(Dynamic Voltage and Frequency Scaling:DVFS)を実装したこと。つまり、IntelのPC&サーバーCPUに実装されている、SpeedStepテクノロジをメニイコアにも持ってきた。ちなみに、初代Larrabeeには、コア単位のSpeedStepは実装されていなかったという。CPUコア数が増えると、コア単位の電圧&周波数制御は複雑になる。これも重要なリサーチテーマだ。

 Intelによると、キャッシュコヒーレントハードウェアを実装しなかったのは、設計の複雑化を避け、コア数を増やした場合のスケーラビリティを確保し、電力当たりのパフォーマンスの効率をアップするためだという。キャッシュコヒーレンシは、コヒーレンシを取るノード数が増えれば増えるほど重くなる。バストラヒックを食い、電力効率を悪化させ、CPUコア数を増やす場合のボトルネックになる。

 そこで、48 CPUコアSCCでIntelは、思い切ってコヒーレンシは外した。48個のコアは、バラバラにつながっている状態だ。これは、クラウドコンピューティングで、それぞれのノードがネットワークで接続されている状態に近い。そこで、Intelはこのチップに、キャッチーな呼称としてシングルチップクラウドコンピュータ(Single-chip Cloud Computer=SCC)とつけた。

●メッセージパッシングに最適化されたハードウェア

 とはいえ、アプリケーションを分散して走らせるには、ノード間で何らかのデータシェアができなければならない。そこで、Intelは2つの手法をオプションとして想定した。1つは、メッセージパッシング(Message Passing)、もう1つは、シェアードバーチャルメモリ(Shared Virtual Memory)だ。ノード間でメッセージを送受信する通信と、各ノードのプライベートメモリスペースの間でバーチャルにシェアードメモリスペースを設定してデータを共有する。

 どちらも、以前からある手法だが、48コアSCCでは、メッセージパッシングについては、工夫を施した。メッセージパッシングをハードウェアアクセラレートする機構を載せることで、極めて低レイテンシでメッセージパッシングを実現できるようになったという。つまり、メッセージパッシングに対して最適化されているわけだ。ISSCCでの論文タイトルも「A 48-Core IA-32 Message-Passing Processor with DVFS in 45nm CMOS」と、メッセージパッシングと省電力機構が謳われていた。

コア間のデータの共有方法

 メッセージパッシングのハードウェア支援化は、48コアSCCの設計と密接に結びついている。

 タイル内の2つのCPUコアの間には、16KBの「メッセージパッシングバッファ(Message Passing Buffer=MPB)」が挟まれている。このMPBが、メッセージパッシングのためのハードウェア機構で、2つのCPUコアとルータを接続している。ちなみに、このメッセージパッシングバッファは、Intelの特許「US Patent 7210022 Apparatus and method for interconnecting a processor to co-processors using a shared memory as the communication interface」に記述されていたものとよく似ている。

 MPBでバッファしたメッセージは、タイルの中のコア間だけでなく、2Dメッシュネットワークを経由して他のタイルのコアにも転送できる。メモリを経由せずに、コア間でダイレクトにメッセージパッシングが行なわれるため、極めて短レイテンシになる。

MPBを備えた構造

●L1キャッシュからL1キャッシュへとメッセージを転送

 MPBは、アーキテクチャ上は分散シェアードメモリとして使われる。各タイルに16KBで、これは各コアのL1キャッシュと同サイズ、チップ全体で384KBとなる。あるコアのL1キャッシュからMPBに格納されたメッセージが、別なコアのL1キャッシュへと転送される。

 Intelは、メッセージパッシングのためのソフトウェアライブラリを用意する。ISSCCで講演したJason Howard氏は、シェアードメモリライブラリのプロトコルはCrayのSHMEMにインスパイアされたと説明していた。

 48コアSCCでは、新しいメッセージパッシングメモリタイプ(Message-Passing Memory Type:MPMT)が導入された。これは、実際の講演スライドではメッセージパッシングデータタイプ(MPDT)となっており、最終的にどちらの用語が使われるかわからない。メッセージを転送する場合は、まず、データを書き込むMPMTキャッシュエントリを無効化する。キャッシュエントリをシングルクロックで無効化できる、新しい命令MBINVが加えられている。

 次にL1キャッシュのキャッシュラインのデータを、L1上のMPMTキャッシュラインへと書き込む。これは実際には、MPBに書き込まれる。メッセージの転送先のコアでは逆のプロセスで、MPBかデータがL1に読み出される。ちなみに、LookUp Table (LUT)も拡張され256エントリの中にMPBがマップされ、アドレストランスレーションとラウティングインフォメーションも格納できるようになっている。

 こうした仕組みのため、メッセージはあたかもあるコアのL1キャッシュから別なコアのL1キャッシュにダイレクトに転送されたように見える。Intelによると、外部メモリを経由した場合に比べて、レイテンシは1/15になるという。レイテンシが短縮されるだけでなく、オフチップメモリへのアクセスも減らすことができる。

レイテンシの削減

●バーチャルシェアードメモリで粒度の大きなデータ転送を

 メッセージパッシングをハードウェアでサポートする一方、シェアードバーチャルメモリはソフトウェアでサポートする。回路設計カンファレンスであるISSCCでは、ソフトウェア実装のシェアードバーチャルメモリについての説明はなかった。しかし、各コアがプライベートメモリスペースを持つメモリ管理の構造については言及があった。

 プライベートメモリスペースの中でのコア内のキャッシュのコヒーレンシはハードウェアで保たれるが、コア間にはハードウェア支援はないという。Intelは、48コアSCCでは、シェアードバーチャルメモリをページレベルでコヒーレンシを取ると昨年12月に説明している。Intelは最近、LarrabeeとメインCPUの間にシェアードバーチャルメモリを適用する説明をしている。それに従うと、おそらく次のようになる。

 各CPUコアはそれぞれプライベートメモリ空間を持つが、一部のアドレスをバーチャルメモリメカニズムの上で共有する。シェアードバーチャルメモリ上のデータは、複数のCPUコア間でシェアされるが、コヒーレンシがソフトウェアで維持される。しかし、小さなキャッシュライン単位ではなく、大きなメモリページ単位で管理することでオーバーヘッドを減らす。

●SpeedStepの電圧と周波数の制御をメニイコアに適用

 48コアSCCのもう1つの大きな特徴は、省電力機能だ。メニイコアでSpeedStepライクな動的電圧&周波数切り替え(Dynamic Voltage and Frequency Scaling:DVFS)をサポートするために、いくつかの工夫が加えられている。

 まず、CPU全体は8つのボルテージアイランド(Voltage Islands:VI)に分離されている。4つのタイル(8個のコア)を1つのアイランドとしてまとめており、そのほかに、2Dメッシュネットワークと、インターフェイス回りに、それぞれのアイランドがある。メッシュネットワークのアイランドがVI0、タイルのアイランド群がVI1〜VI6、インターフェイス回りがVI7となっている。それぞれのボルテージアイランドは、個別の電圧で動作させることが可能で、このうち、VI0〜VI6は動的にスケールすることができる。

それぞれ電圧が調節可能なブロック
8つのボルテージアイランド

 48コアSCCでは、電圧の動的なスケールを円滑に行なうために「Voltage-Regulator Controller :VRC)」をオンダイで実装した。つまり、チップ上に、ボルテージレギュレータを制御するコントローラを搭載した。また、コア側からVRCに発行するボルテージチェンジコマンド(Voltage-Change Command)も用意した。

 アプリケーションがネットワークを通じてVRCにコマンドを発行する。するとVRCがボルテージレギュレータを制御して電圧を変動させる。アイドル状態では電圧はCPUコアのステイトを保持できる限界の700mVに下げる。さらに、CPUコアステイトを維持しない完全なオフ状態にする場合には0Vに下げることもできる。最高は1.3Vで、6.25mV刻みでスケールできるという。電圧の切り替えはミリ秒以下で行なわれるという。

 一方、動作周波数は周波数アイランド(Frequency Island :FI)単位で切り替えられる。こちらは、ずっと粒度が小さく、1個のタイルが1つの周波数アイランドとなっている。24タイルで24のアイランドと、メッシュネットワーク、メモリインターフェイス、システムインターフェイス、VRCそれぞれのアイランドで合計28のアイランドとなる。20ns以下で周波数の切り替えができるという。

 動作周波数は個別に切り替えできるが、電圧は8コア(4タイル)が1セットで同じ電圧で動作する。必然的に、ソフトウェアはコアの物理的な配置に配慮してタスクを振り分ける必要が出てくる。

 こうした省電力化の結果、コア1GHz動作時(1.14V)に125Wとモンスターチップでありながら、一定の消費電力の枠内に収めることに成功している。コアの周波数を125MHzにまで落とせば0.7Vで25Wとなる。つまり、動作時には、25Wから125Wの間で推移することになる。

SCCの電圧と動作クロック
SCCの特徴