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

チップスタッキング技術でメモリウォールを破る2010年代のCPU



●マルチコアCPUは最初のステップに過ぎない

 「マルチコアCPUは、大きな構図の中の単なる最初のステップに過ぎない」

 AMDのCPUアーキテクチャ戦略では、マルチコアCPUは単なる通過地点として位置づけられている。より大きな変革が起こる、その先触れが現在の単純なマルチコア化ということだ。下のスライドは、AMDのトップCPUアーキテクトであるChuck Moore(チャック・ムーア)氏(AMD Senior Fellow)が、昨年(2008年)11月のCPUカンファレンス「Micro41」で行なったスピーチからのスライドだ。ここに、AMDの2011年以降のCPUアーキテクチャが集約されている。

システムレベルで統合する時代

 2010年代のCPUでは、マルチコアの次に何が来るのか。AMDが予測するアーキテクチャ上の変化は、システムレベルの統合、ヘテロジニアスマルチコア化、専用アクセラレータ搭載が進むことだという。CPUにチップセットのような、PCシステムのより広範な機能が統合されることになる。また、CPUに、特定の処理向けのプロセッサや専用(アクセラレータ)ハードウェアが数多く搭載されるようになる。このビジョンは、AMDだけのものではなく、細部は異なるが、Intelもほぼ似たようなことを言っている。AMDとIntelの共通するCPUアーキテクチャの方向性だ。

IntelとAMDのCPUの移り変わり
想定されるシステム統合時代のPC向けCPUの例

 AMDは、こうした「システムレベル統合」によって、CPUのマイクロアーキテクチャを革新する、大きなチャンスが生まれるという。それには、(1)どんなコンポーネントを統合するかという単純な選択から、(2)コンピューティング部分とその他の統合機能の間でのバランスを取ること、(3)チップ上での各ブロックのコミュニケーションや同期の改良、そして、(4)スケーラブルに拡張できるチップレベルの基盤を整えることまで含まれる。

 これまでのように、CPUコアの中だけのマイクロアーキテクチャの革新ではなく、CPUに統合されたさまざまな機能のバランスやコミュニケーションといったレベルに“マイクロアーキテクチャ”のレベルが拡張される。例えば、(3)の要素で言えば、チップ内で各コアと機能ブロックを接続するのに適したバス設計や、多くのコアに処理を分散する場合の同期問題を解決できるトランザクショナルメモリのような手法が含まれると推定される。

●システムレベル統合CPU時代のチャレンジ

 しかし、システムレベル統合には避けられないチャレンジもある。それは、(1)CPUコアや各機能ブロックのモジュラー設計を進めて再利用を容易にすること、(2)統合化を進めながらもシングルプロセッサ性能を改良し続けること、(3)ソフトウェア層とそれによるハードウェアの抽象化を行なうこと、が含まれる。

 このうち、(2)のシングルプロセッサ性能の向上はともかく、(1)と(3)の改良はAMDにとって得意分野とは言えない。AMDにとって最大の難題は、おそらく(3)のソフトウェア層で、この点の開発能力ではライバルのIntelに大きく水を開けられている。最終的には、新しいランタイムソフトウェア層が必要になると見られるため、AMDにとってかなりのチャレンジとなるだろう。

 (1)のモジュラー化についてAMDは、すでに2~3年前からアナウンスしており、K10とGriffin(グリフィン)から実装し始めている。一般に、モジュラー化のためにブロック間のインターフェイスを汎用化し過ぎるとオーバーヘッドが大きくなり、CPUとしての性能に問題が生じる。これは、システムLSIのメーカーが経験を積んできた分野だが、AMDにとっては新しいチャレンジとなるだろう。

 Griffinを例に取ると、AMDは2レベルでの内部インターフェイスの汎用化を行なっている。まず、パフォーマンスがクリティカルではないインターフェイスについては、簡素化して接続をしやすくしている。しかし、CPUコアとノースブリッジ間のようなインターフェイスは、シンプル化すると性能に影響が出る。そこで、そうしたインターフェイスについては、シンプル化を避け、インターフェイス仕様の文書化と検証に集中したという。コンポーネントレベルで検証し、仕様を明文化することで、設計を容易に移すことができるようにした。現実的だが、ある意味では中途半端なアプローチだ。

AMDのM-SPACEデザインの手法

 ●CPUの前に立ちふさがる3つの壁

 AMDはなぜヘテロジニアスマルチコア化したシステムレベル統合CPUへと進むのか。それは、CPUの前に立ちふさがる3つの壁を崩す、あるいは壁を回避するためだ。

 CPU研究の世界でのバイブルとも言える書籍「Computer Architecture : A Quantitative Approach, 4th edition」の共著者で、CPU研究者として有名なDavid A. Patterson(デヴィッド・A・パターソン)教授(University of California at Berkeley)は、2006年8月のCPUカンファレンス「HotChips 18」で、この3つの壁について説明した。

 Patterson氏によると、その3つの壁とは、命令レベルの並列性であるILP(Instruction-Level Parallelism)の限界「ILPウォール(ILP Wall)」、消費電力の壁「パワーウォール(Power Wall)」、メモリアクセスの壁「メモリウォール(Memory Wall)」だという。つまり、ILPを上げるためにハードウェアを追加しても、もはや以前ほどのILP向上は得られない。そのため、ILPを無理に向上させようとすると、電力消費が増えて、PC&サーバーに搭載できる限界を突破してしまう。また、CPUコアを高速にしても、メモリアクセスのレイテンシが減らないので、メモリが足を引っ張って性能が理論値にまで上がらない。

コンピュータアーキテクチャにおける伝統的知恵

 AMDのMoore氏のプレゼンテーションは、この3つの壁に対して、AMDがどう取り組むかという説明になっている。

 まず、最初のILPウォールでは、シングルスレッド性能の頭打ちによりCPUの性能向上が止まった。この状況については、「スループットコンピューティング」が、一定の解決手段になると位置づける。これは、GPUのように、多くのデータ要素を並列に処理(データレベルの並列性 DLP:Data-Level Parallelism)し、性能をレイテンシではなく一定時間の処理量(スループット)で測るアプローチだ。AMDのMoore氏は、PC&サーバー向けCPUでの、スループットコンピューティングについて、必要となる要件をスライドの中で論じている。

スループットコンピューティングについて
汎用スループットコンピューティングソリューションはどのようなものか

 最大のポイントは、従来のシングルスレッド性能を重視した汎用CPUコアを向上させつつ、スループットコンピューティング向けのハードウェアも搭載することだ。CPUに、特定の処理向けのプロセッサやアクセラレータ型の専用ハードウェアを数多く搭載する。小型で性能効率の高いサブプロセッサ群や専用ハードウェアを活用することで、GPUのように高いスループットコンピューティングを実現する。

 つまり、Cell Broadband Engine(Cell B.E.)のように、ヘテロジニアス(heterogeneous)な構成のマルチコアへと向かうことになる。GPUのようなベクトル(ベクタ)プロセッサを統合するという意味では、ベクトルスーパーコンピュータやSIMDスーパーコンピュータの技術を部分的に取り入れると言ってもいいかもしれない。この部分は、あとで、より詳しく分析したい。

スーパーコンピュータとMPUの歴史

●さまざまな要素のバランスを取る必要があるメモリアーキテクチャ

 ILPウォールを回避するために、スレッドレベルの並列性(TLP)だけでなく、データレベルの並列性(DLP)へと向かうのは、CPU業界全体のトレンドだ。しかし、その場合に大きな問題がある。それは、メモリウォールだ。スループットコンピューティングでは、CPUのコンピューティングパフォーマンスが飛躍する。増大するコンピューティング性能は、より多くのデータを必要とし、そのためにより広いメモリ帯域が必要となる。しかし、汎用CPUとしては、GPUのようにメモリ帯域だけに偏重はできない。

 AMDのMoore氏のプレゼンテーションでは、メモリシステムには、微妙なバランスが要求されていると指摘されている。メモリアクセスのレイテンシ、メモリ帯域、消費電力、メモリ容量、コストの間のバランスだ。このバランスを取る必要のため、メモリシステムは極めて扱いがやっかいとなっている。

メモリスシステムバランス

 まず、(1)CPUコアとキャッシュメモリでは、メモリレイテンシが非常に重要となる。(2)その一方で、メニイCPUコア化とベクタエンジン搭載、そしてGPGPUは、いずれも非常に広いメモリ帯域を要求する。(3)そして、マルチメディアデータタイプと現代のソフトウェア環境は、メモリ容量の継続的な増大を必要としている。(4)ところが、メモリの消費電力とコストに関しては、誰もが低く抑えることを望んでいる。

 パッと見ただけでも、さまざまな対立要素が入り乱れていることがわかる。ヘテロジニアスマルチコアCPUでは、メモリ帯域を引き上げつつ、メモリ容量を拡大し続け、しかも電力とコストは抑えながら、短レイテンシのオンチップキャッシュメモリを維持し続けなければならない。相対する要素があり、全てを満たそうとするとコストが上がる。

 例えば、ソフトウェアのワークセットが大きくなるとキャッシュミスが増えるため、DRAMメインメモリへのアクセスレイテンシもクリティカルになる。しかし、メモリ帯域を広げようとするとレイテンシを短縮することが難しくなる。実際、スライドの左の図のように、DRAMのCASレイテンシは短くなくなってしまっている。キャッシュミスを防ぐためキャッシュ量を増やすと、CPUのダイ(半導体本体)がキャッシュメモリSRAMで食われてしまう。

●どんどん厚くなるCPUのメモリウォール

 もっとも、AMDのスライドでは、CPUの歴史の中で、メモリウォールは新しい問題ではなく、これまでもどんどん厚くなる一方だったと指摘されている。CPUのプロセッシング能力と、そのプロセッシング能力が必要とするだけのデータを供給できるかどうかの、微妙なバランスの上に成り立って来たのが、PC&サーバー向けCPUの歴史だ。

メモリウォールは厚くなる

 スライドでは、まず「メインメモリDRAMとCPUサイクルタイムの間のギャップが開く」という危機が'90年代初頭に訪れたことが示されている。CPUの動作周波数が上がるにつれて、相対的にメインメモリDRAMからのデータ待ちでストールしてしまうCPUのサイクル数が増えてしまう。メインメモリDRAMにアクセスすると、数百サイクルが消費されるようになってしまった。その結果、CPUが高速になっても、CPUのコンピューティング時間のほとんどがメモリ待ちで占められる可能性が出てきた。

 CPU業界は、この問題を2つのマイクロアーキテクチャ上の工夫で解決した。(1)1つは、一定量のノンブロッキングキャッシュの搭載だ。CPUコアに近いところに短レイテンシのメモリを搭載することで、頻繁に使われるホットコードとホットデータのアクセス待ち時間を大幅に減らす。

 (2)次にCPUの命令実行をOut-of-Order型にして、実行できる命令から並べ替えて実行できるようにする。メモリアクセス待ちの命令はリザーブしておいて、依存性のない他の命令から実行することで、メモリアクセスのレイテンシをある程度カバーできるようになった。この時は、この2つの対処で、問題を充分なレベルにまで解決することができた。

 CPUにとって、次のメモリウォール問題は「ソフトウェア生産性危機ラウンド1」で訪れた。ソフトウェアの規模が大きくなると、ソフトウェアの生産性が悪化する問題だ。ソフトウェア業界は、この問題を、C++に代表されるオブジェクト指向言語(またはオブジェクト指向拡張)の普及と、JAVAやC#のようなマネージドランタイム環境の導入で解決した。しかし、このことは、CPUにとって新たなメモリウォールを発生させた。

 これまでCPUは、主に、単一プログラムの命令をシリアルな流れとして実行してきた。ところが、オブジェクト指向化によって、連携する多数の小さなソフトウェアモジュールそれぞれの命令の流れを実行する必要が発生した。また、CPUのネイティブ命令を直接実行するのではなく、中間言語で書かれたプログラムをリアルタイムコンパイラでネイティブ命令に変換して実行するケースが出てきた。その結果、CPUが実行するソフトウェアが占めるワーキングセット(物理メモリ量)が大きくなり、また、リアルタイムコンパイルによってコードの局所性も活用できない場合が出てきた。扱うデータタイプも多様になって行った。

 この問題に対するため、CPUはより大きなキャッシュメモリを搭載し、キャッシュの階層化を深め、プリフェッチ(最初はソフトウェアのちにハードウェア)でメインメモリからキャッシュへとデータを先読みするようになった。問題はなんとか軽減できたが、メモリ階層の複雑化や、CPU上で大きな面積を取る膨大な量のキャッシュメモリといった問題も出始めた。

●大きく深くなるキャッシュメモリと広帯域になるI/O

 次の状況は、CPUが動作周波数の向上とサイクル当たりの命令実行性能「Instruction-per-Clock(IPC)」の壁に当たったことだ。これは、すでに述べたILPウォールとパワーウォールで引き起こされた。そのため、業界は2005年前後から、マルチコア化とマルチスレッド化、またマルチコアを有効に使うための仮想マシン支援でこの問題に対応。スレッドレベルの並列性(TLP:Thread-Level Parallelism)を高めることで、CPUの実効性能を高める方向へと向かった。

 しかし、それによってさらに大きなメモリウォールが生じてしまった。まず、アクティブなプログラムが複数になることで、ワーキングセットも複数になった。さらに、仮想マシン化によってメモリがパーティショニングされた。単純にCPUコア数の増加による性能の向上だけでもメモリ帯域要求が増え、各コアから平行して異なるメモリエリアに対するメモリアクセスが生じるようにもなった。

 この問題を解決するために、CPUはより大きなキャッシュメモリを搭載し、メモリ帯域を無理なく拡大し複数のメモリアクセスの並列化も容易にするためにメモリコントローラをCPUに内蔵(ただし並列化ではうまく使われていないケースが多い)、キャッシュの制御でもスループットアーキテクチャに向くような工夫を加え始めた。キャッシュの増大に伴い、キャッシュ階層もより深くなった。この改良は、まだ現在進行形だ。

 ところが、もう次のメモリウォールが見え始めた。AMDのスライドでは、今後訪れる「ソフトウェア生産性危機ラウンド2」で発生するとされている。これは、CPU側のヘテロジニアスマルチコアへの変化に伴う、ソフトウェアのさらなる複雑化を示していると推測される。

 ハードウェアの複雑化を隠蔽するために、抽象化レイヤはより厚くしなければならない。また、CPUがスループットコンピューティングへと向かうため、マルチメディア処理能力が飛躍的に高まる。そのため、画像や映像といったマルチメディアデータを、基本的なデータタイプとして扱えるように最適化する必要がある。すると、さらにアプリケーションの使うワーキングセットは大きくなり、データタイプの幅も広がり、個々のデータのサイズも大きくなる。より多くのデータを、より広いメモリ帯域で扱えるようになることが、求められているわけだ。

 AMDのスライドでは、この問題に対する解決として「ストリームコンピューティング」と「チップスタッキング?」が挙げられている。ストリームコンピューティングは、マルチメディアのように、再利用しない大量のデータを扱うことが多い処理に向けたソリューションだ。ストリームコンピューティングに対するメモリの最適化としては、キャッシュ上の他のデータと命令を圧迫しないでデータをプリフェッチできるキャッシュ制御(あるいはバイパス)が必要となると思われる。

メモリ階層の変化

●チップスタッキングで帯域問題を一気に解決?

 「(3D)チップスタッキング技術」では、チップのダイを重ね合わせて、立体に半導体チップを構成する。スタッキング自体は以前からあり、ほとんどの携帯電話は、何らかのスタッキング技術を使っている。しかし、従来のチップスタッキングと、現在、CPUメーカーが熱心に探求している技術には大きな違いがある。それは、「シリコン貫通ビア(TSV:Through Silicon Via)」だ。

 TSVは過去2年、脚光を浴びてきた現在進行形の新技術だ。従来のチップスタッキングでは、重ねたダイの端子間を細いワイヤで結ぶワイヤボンディングによる配線が使われてきた。ワイヤボンディングでは、接続できる端子数が限られる上に、ワイヤの高速化が難しい。そのため、チップスタッキングでも、ダイの間のデータ転送を高速にすることはあまりできず、実装面積を低減できる点が主な利点だった。そのため、CPUメーカーのメモリ帯域問題の解決にはならなかった。

 それに対してTSVでは、ダイのシリコン基板を貫通した穴で垂直方向の配線を行なうことができる。それによって、ダイの背面にも端子を配置することができるようになる。

 例えば、CPUにスタックするメモリのダイ(半導体本体)に、CPU接続端子のための配線をTSVであけることが可能となる。その場合、CPUからメインメモリモジュールやチップセットへ接続するI/O端子や電源端子は、メモリダイを貫通してマザーボード上のソケットに接続させることが可能になる。同時に、メモリの上面にCPUと接続する端子を配置することができる。その逆、つまり、CPU側にTSVの配線を行ない、メモリをCPUの上に載せることも可能だ。

 TSVを使ったスタッキングでは、従来のワイヤボンディングによるチップスタッキングのような配線上の制約がなくなる。CPUとDRAMの間を数1,000もの端子で接続し、チップ間接続には従来のワイヤを使わず、ダイの上のバンプ同士を直接続することで高速駆動させることができる。結果としてスタックしたメモリには、CPUから最大で1TB/secまでの広いメモリ帯域でのアクセスが可能となる。

 つまり、理論上はTSVによってメモリ帯域問題は一気に解決する。CPUに近いところに数十MBクラスのSRAMまたは数百MBクラスのDRAMが配置され、そこには数百GB/secと従来の外付けメモリの10倍以上の広帯域アクセスができるからだ。ワーキングセットなど必要なメモリがTSVでスタックしたメモリに収まるなら、とりあえずメモリ帯域問題は気にしなくて済むようになる。

 ただし、AMDのスライドで面白いのは、チップスタッキングにクエスチョンマークがついていることだ。これは、チップスタッキング技術が、歩留まり含むコストと信頼性の面で使い物になるかどうか、まだ見極められていなかったことを示している。過去数カ月間にも3Dチップスタッキングについては前進があったため、今でもAMDにとってクエスチョンマークがついているかどうかはわからない。しかし、現在でも、いつコストと信頼性が大量生産にミートする時期になるのか、まだ業界コンセンサスの解は出されていない。

3Dチップスタッキングを使ったCPUとメモリの構成例