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

AMDの次世代CPU「Bulldozer」のクラスタベースマルチスレッディング



●デュアルコアとHyper-Threadingの中間的なBulldozer

 AMDは、先週開催した「2009 Financial Analyst Day」で、次世代CPUアーキテクチャ「Bulldozer(ブルドーザ)」の概要を明らかにした。AMDにとっては、K7以来の、CPUアーキテクチャの根本チェンジとなる(K8はコアアーキテクチャとしてはK7の拡張だった)。

 中でも重要なのは、Bulldozerが採用するクラスタベースのマルチスレッディングテクノロジだ。AMDは、2つのCPUコアを密接に結合させたプロセッサモジュールで、マルチスレッディングを実現する。AMDのChekib Akrout氏(General Manager, Technology Group)はAnalyst Dayで次のように説明した。

AMD CPUアーキテクチャの推移

 「Bulldozerコアと言いたいところだが、これは実際にはモジュールだ。2つのコアが1つのモジュールの中で、高度に結合されている。モジュールの2つのコアは、最高のコンピュート密度を達成できるように注意深く設計されている」。

 Bulldozer“モジュール”は、2スレッドを並列実行できるプロセッシングエレメントであり、ちょうどデュアルコアとIntelのHyper-Threadingコアとの中間的な存在だ。デュアルコアもHyper-ThreadingもBulldozerモジュールも、スレッドの並列実行という面では同じだが、コアのパーティショニングが大きく異なる。

 下は、PC向けCPUに見られる代表的なマルチスレッディングアーキテクチャを比較した図だ。一番上は普通のマルチコアアーキテクチャ。AMDは伝統的に「CMP(Chip Multi-Processor)」と呼んでいる。中央が今回のBulldozerのアーキテクチャ。AMDは「クラスタベース(Cluster-based)マルチスレッディング」と呼んでおり、クラスタードアーキテクチャと呼ばれることもある。一番下はSMT(Simultaneous Multithreading)アーキテクチャで、IntelのHyper-Threadingが代表だ。

 この3つのアプローチとも2スレッドを並列実行することを目的としている。しかし、その場合に、コアのどれだけのリソースを2スレッドの共有とし、どれだけを各スレッドの占有とするかのパーティショニングが大きく異なる。

マルチスレッディングアーキテクチャの比較

●リソースのパーティショニングが異なる

 一番上のCMP型のデュアルコアが最も単純だ。シングルスレッドしか実行できないCPUコアを2つ束ねるだけだ。この場合、リソースの共有は全くないか、あってもキャッシュなどごく一部に限られる。そのため、それぞれのCPUコアは全く邪魔されることなく、それぞれスレッドを走らせることができる。

 CMPは、パフォーマンスは高いが、当然ながらCPUコア2つ分のリソースをまるまる実装する必要があるため、実装コストも高い。単純な計算では、CPUコア1個分100%のコストで、100%のパフォーマンスアップが理論上得られることになる。デュアルコアならシングルコアの2倍、クアッドコアなら4倍のリソースが必要になる。

 一番下のSMTは、発想としては1個のCPUコアを拡張して2スレッドを走らせることができるようにする。演算リソースはもちろん、キャッシュ、スケジューリング機構、命令フェッチ&デコードなどほとんどのリソースを2つのスレッドが共有する。Intelの例では、レジスタやバッファなど、リソースのごく一部だけが各スレッド専用になっているだけだ。

 SMTの利点は実装のコストが比較的小さくて済む点。Intelは、SMT自体のために実装したリソースは非常に少なく数%のレンジだと説明して来た。しかし、その反面、パフォーマンスアップも限られる。必然的にスレッド間でリソースの競合が起こるためだ。実装によっても異なるが、AMDはIntelのHyper-Threadingによるパフォーマンス向上の幅は25%程度だろうと主張している。図のパフォーマンスは、一応、この数字を使っているが、実際にはもっと大きいかも知れない。

 その意味では、SMTはCPUリソースの空きを埋める発想の技術であり、2スレッドのパフォーマンスを追求する技術ではないとも言える。図のコストはIntelの数字を使っているが、数%の実装コストとのトレードオフとしては悪くないように見える。しかし、実際にはもっと大きいかもしれない。

 それは、SMTで性能を上げようとすると、CPUコアには、より多くの演算リソースやより広いウインドウの命令スケジューリングなどが必要となり、全体にCPUが肥大化するからだ。AMDは以前から、性能の割にCPUコアが大きくなることが問題だと指摘していた(ただし、IntelのNehalemアーキテクトは、命令スケジューリングの強化などはHyper-Threadingと関係がないと主張している)。現実には、CPUコアの肥大化のどれだけがSMTのためかを判断することは難しい。

 いずれにせよ、AMDは、SMTの実装コストがIntelの主張より大きなものであると見積もっており、そのためSMTは効率が悪いと考えているようだ。

●高いスループットを狙ったクラスタベースマルチスレッディング

 そこで、AMDが自社のマルチスレッディングテクノロジとして打ち出して来たのが、真ん中のクラスタベースのマルチスレッディングだ。クラスタベースのアーキテクチャの発想は、デュアルコアのモジュールを最も効率的に作ることにある。2つのCPUコアのうち、共有して問題の少ない部分は共有リソースとし、共有すると性能への影響が大きい部分だけを、それぞれのスレッド専用リソースとして残す。それによって、効率の高いデュアルコアに仕上げる。

 共有リソースでのスレッド同士の競合が予想されるため、クラスタベースアーキテクチャでは、CMPのデュアルコアのようなフルのパフォーマンスは得られない。しかし、ほとんどのケースではそれぞれのスレッド占有リソース(整数演算ユニットと整数スケジューラなど)が使われるため、高いパフォーマンスアップは得られるという。あまり使わないリソース(浮動小数点演算ユニットなど)を共有にしたり、共有にしないと効率が悪い(命令デコーダなど)を共有にすることで、効率アップを図るからだ。

 この手法はAMD独自のものではなく、これまでにも似たような例はいくつかある。例えば、Oracleへの合併作業中であるSun MicrosystemsのNiagara/Niagara2(UltraSPARC T1/UltraSPARC T2)などだ。特にNiagara2の構成は、各コア当たり、2つの整数演算パイプと1つの浮動小数点演算パイプで、Bulldozerに少し似ている(各コア8スレッド実行)。

SunのSPARCアーキテクチャ

 リソースを部分的に共有化することで、クラスタベースマルチスレッディングに必要なリソースは、CMPデュアルコアよりずっと少なくなる。AMDは、シングルコアに対して50%のリソース増加で、80%のスループットアップが得られるとこれまで説明して来た。つまり、単純計算では、デュアルコアの75%のリソースで、デュアルコアの90%のパフォーマンスが得られることになる。

 実装コストに対して、得られるスループットアップが大きいため、ダイ面積当たりのコンピュート密度が高くなる。また、リソースの競合で各スレッドの実行性能が削がれることが少ないことも利点だ。SMTの場合には、各スレッドの性能が逆に落ちる可能性もあるが、クラスタベースの場合は、その可能性が低くなる。

Bulldozerのアーキテクチャ

●Hyper-Threadingを追ったわけではないBulldozer

 AMDは、Bulldozerの開発を統括したChuck Moore氏(Corporate Fellow and CTO Technology Development)がAMDに加わった2004年以降、クラスタードアーキテクチャを考えていたようだ。2005年頃から同様の技術の説明を始めているからだ。Intelの実装を見てというより、マルチスレッディングの性能向上を追った結果、最良の方法としてクラスタベースがいいと言う結論に達したようだ。

 実際、Analyst Dayでも、サーバーを担当するPatrick Patla氏(Vice President and General Manager, AMD Server Business)が次のように語っている。

 「何人かは『これがHyper-Threadingに対するAMDの答えなのか』と尋ねてきたが、それはほとんど侮辱に近い。なぜなら、我々が望んだものを実現した結果、こうなったのであり、決して他の誰かの実装を追ったためではないからだ。これ(Bulldozerアーキテクチャ)はマルチスレッディングでありマルチタスキングであり、マルチコアでもある。我々が追求したのは、Bulldozerモジュールからパフォーマンスを引き出すベストな道だ」。

 実際に、Bulldozerモジュールのクラスタベースマルチスレッディングは、パーティショニングの比率という点では、SMTよりデュアルコアに近い。CMPデュアルコアと較べて、いかに性能を落とさずに、効率化を図るかを考えられている点でも、デュアルコアからの発想だ。そして、その結果得られるものも、Hyper-Threadingとは大きく異なるだろう。