■後藤弘茂のWeekly海外ニュース■
AMDは2011年にBulldozerアーキテクチャの最初CPUとして、最大8コアの「Zambezi(ザンビージ)」を投入する。ZambeziはGPUコアを搭載しない、現在のAMD CPUと同じCPUコアだけの製品だ。AMDの現在のラインナップで言えば、Phenom II系がZambeziに置き換わることになるようだ。
ここでポイントは“コア”数だ。現在の45nmプロセスのPhenom IIでは、デスクトップCPUとして経済的なダイサイズの限界である200平方mm台では、CPUコアを4個しか搭載できない。6コアは300平方mm台となり、コスト的に通常のデスクトップCPUの枠をはみ出してしまう。AMDは2010年、6コアのデスクトップCPU「Thuban(トゥバン)」も投入するが、コスト的なことを考えると、あまり下の価格帯へはおろせないだろう。
ところが、Bulldozerでは、32nmプロセスで、8コアを搭載できるようになる。これが、経済的なダイサイズ内での話だとすれば、AMDのパフォーマンスCPUは、4コアから8コアへとコア数を倍増させることになる。
1世代プロセス技術が微細化すれば2倍のトランジスタが載せられるので、2倍の数のコアになるのは計算が合っているように見える。しかし、実際にはCPUコア数が増えるにつれて、CPUコア以外のアンコアの部分が肥大化してしまうので、単純に2倍にはなかなかできない。Intelも32nmのパフォーマンスCPUは、当面のWestmere(ウエストミア)世代では6コア(Gulftown:ガルフタウン)だ。ところが、AMDはZambeziで8コアを予定している。
おそらく、これがBulldozerアーキテクチャの利点だ。CPUコアをマルチスレッド処理に最適化することで、単位面積当たりの“コア数”を増やすことができる。結果として、CPUの面積当たりのコンピューティング性能を上げることができる。
K10のダイサイズ |
AMD CPUのダイサイズ推移 |
AMDのデスクトップ向けCPUの推移 |
●Bulldozerモジュールはデュアルコアなのかシングルコアなのか
ただし、ここに定義の問題が1つ持ち上がる。それは、Bulldozerの場合、“CPUコア”と呼んでいいのかどうかという点だ。Bulldozerの場合は、2つのCPUコアが部分的にリソースを共有して「Bulldozerモジュール」を形成している。つまり、Zambeziは、4個のBulldozerモジュールを搭載していることになる。この場合、Bulldozerモジュールを1個のマルチスレッディングコアと数えるのか、それともBulldozerモジュールを2個のコアと数えるのか。
当然、ライバルのIntelは、Bulldozerの“コア”は、マルチスレッディングコアの一部であり、8コアは実際には4コアだと主張するだろう。IntelのHyper-Threadingコアは、2スレッドをSMT(Simultaneous Multithreading)で実行できる。そのため、Intel CPUは4コアで8スレッド、6コアで12スレッドとなる。当然、Intelは対Bulldozerのマーケティング戦略として、CPUをコアではなく並列スレッド数でカウントするようになるだろう。単純な並列スレッド数なら、ダイ面積当たりでIntelの方が上になる可能性が高い。このあたりはマーケティングマターだが、実際に技術上、Bulldozerのコアをコアと呼んでいいかどうかは、議論が起きるだろう。
この点について、AMDでBulldozerの開発をリードしたAMDのChuck Moore氏(Corporate Fellow and CTO Technology Development)は、「2009 Financial Analyst Day」で次のように明快に言い切っている。
「我々がBulldozerモジュールと呼んでいるものは、実際にはデュアルコアだ。しかし、最適化されたデュアルコアだ」。
Moore氏が言うようにBulldozerモジュールが、80%のマルチスレッドスループットが得られるなら、モジュールはデュアルコアと言ってよさそうだ。しかし、Moore氏の説明によると、その真意はもっと深いところにあるようだ。
マルチスレッディングの比較 |
●スループット時代に合わせたアーキテクチャの研究
そもそもは、スループットコンピューティング時代が来るという予測から始まった。
「まず我々は、CPUアーキテクチャにスループット時代が来ると予測した。そして、その時代に向けて、最もパワー効率が高く、最も密度の高いスループットエンジンを開発することにした。それも、シングルスレッドパフォーマンスについて妥協せずに。そのために、CPUのワークロードを研究し、各ワークロードがシステムの中でどのように振る舞うかを研究した」(Moore氏)。
PC向けCPUの発展は、長いことシングルスレッドのパフォーマンス向上という呪縛に縛られていた。しかし、AMDは、おそらく2002~2004年の間のどこか(Moore氏がAMDに加わった前後)で、今後はスループットが最重要になると判断した。そこで、スレッドの並列処理で高スループットを得られ、なおかつ必要なトランジスタ数が少ない、高効率で高密度のアーキテクチャを研究し始めたようだ。
一般に、CPUコアをシンプルにすれば、面積当たりのコア数が増えてスループットは高くなる。しかし、その場合は、シングルスレッドパフォーマンスが落ちてしまう。AMDは、シングルスレッド性能を落とさずに済むことも最重要のポイントとして捕らえた。そこで、ワークロードを分析してシングルスレッド性能を維持しながら高スループットを達成できるCPUアーキテクチャを探した。そこが、Bulldozerの出発点だった。
●ビジーなのは整数ユニットで浮動小数点ユニットは暇AMDは、Analyst Dayのプレゼンテーションの中で、ワークロードの研究結果がどうなったかを次のように説明した。
「我々は、全てのアプリケーションのワークロードを調査した。その結果、プロセッサの中で最も使われている部分は整数演算ユニットであって、浮動小数点演算ユニットではないことがわかった。浮動小数点演算ユニットも使われるが、大多数(の命令)は整数演算ユニットに行く」(Chekib Akrout氏(General Manager, Technology Group))。
「浮動小数点演算ユニットは、実は99%の時間は使われていない。数値演算は非常にまれだった」(Patrick Patla氏(Vice President and General Manager, AMD Server Business))。
つまり、CPUコアの中で、使用頻度の高い部分と低い部分があり、混み合う部分がパフォーマンスのカギとなることをAMDは認識した。そして、頻度の高いのが整数演算部であり、頻度が低かったのは浮動小数点演算部というわけだ。特に、Patla氏が担当するサーバー市場の場合は、ハイパフォーマンスコンピューティング(HPC)以外では浮動小数点演算はほとんど使われないだろう。
そこで、AMDはクラスタードアーキテクチャをBulldozerで選択することになる。CPUコアの中を分割して、整数演算部などをスレッド専用のリソースにする一方で、浮動小数点演算部をスレッド共有リソースにした。
「我々は、Bulldozerモジュールの中に、2つの整数演算ユニットと2つの整数スケジューラを分離して実装した。この2つの整数演算コアは、それぞれが1スレッドを、完全に独立して並列に走らせることができる。そのため、最高パフォーマンスを達成できる」(Akrout氏)。
Bulldozerのアーキテクチャ |
●スレッド間の干渉のない整数演算クラスタ
Moore氏によると、このアーキテクチャ選択はシングルスレッドパフォーマンスを落とさずに、効率を上げるための選択だったという。
「我々は、2つの完全に別れた完全な整数演算サブユニットを備えることが望ましいと気がついた。2つの分離した整数コアは、それぞれが整数オペレーションではフル機能を備える。1つの整数コアが他の整数コアと実行時に干渉することがない。また、分離されたデータキャッシュ、分離されたスケジューラを備える。そのため、両方の整数演算コアが同時に使われている場合でも、シングルスレッドパフォーマンスは非常にいいものになる。それがカギだった」。
AMDの判断は、Hyper-ThreadingのようなSMT技術では、整数演算リソースが充分でないとリソースの競合が発生して性能が抑えられてしまうというものだった。それより、使用頻度の高い整数演算パイプは、それぞれのスレッド毎に分離したクラスタベースマルチスレッディングの方が、パフォーマンスを上げられる。
その一方で、スレッド間で競合する頻度が低いと予想される浮動小数点演算ユニットは共有とした。
「通常は浮動小数点演算ユニットはあまり使われない。だから共有は完璧に自然なことだ」とMoore氏は説明している。
浮動小数点ユニットを共有するBulldozer |
●強力な浮動小数点演算ユニット
AMDは浮動小数点演算ユニットを共有化するに当たって、効率化するための手段を講じた。
「我々は浮動小数点演算ユニットを共有リソースにした。ただし、フレキシブルな方法で共有できる。浮動小数点演算ユニットの一部ずつを、2つの整数演算ユニットがそれぞれ同時に使用することもできる。あるいは、整数演算ユニットの片方が浮動小数点演算ユニットを占有することもできる」(Akrout氏)。
浮動小数点演算ユニットは、並列なスレッド実行が可能なユニットとなっているようだ。そして、AMDは浮動小数点演算ユニット自体を非常にパワフルに仕立てた。
「我々は、浮動小数点演算ユニットを、最も効率的な共有リソースにするため、非常にサイズが大きなものにした。128-bit(SIMD)のFMAC(浮動小数点積和算器)を2つ備えている。使われる場合には、非常に高速かつ効率的になるようにした」(Patla氏)。
つまり、Bulldozerでは、浮動小数点演算ユニットは共有となっているが、リソースは強力なので、使われる場合には高いパフォーマンスを発揮できる。AMDは、Bulldozerの説明では浮動小数点演算パフォーマンスが伸びることを強調してきたが、その理由はここで明快に示されている。ちなみに、AMDは、汎用CPUに組み込むSIMDユニットのベクタ長は単精度で4-way(128-bit)が適切と考えており、Intelのようの単精度で8-way(256-bit)へと積極的に拡張しようという姿勢は見られない。
ここで面白いのは、整数演算クラスタが2に対して、浮動小数点演算クラスタが1という比率が、比較的一般的であることだ。例えば、Sun MicrosystemsのNiagara2(UltraSPARC T1/UltraSPARC T2)やRockなども2整数コアと1個の共有浮動小数点コアという比率だ。また、旧DEC/CompaqのAlphaプロセッサの「EV8」も、4-wayのSMT(Simultaneous Multithreading)で8整数演算ユニットのクラスタに対して、4浮動小数点演算ユニットの構成だった。マルチスレッド性能を追求するCPUがこの比率を取っていることは、マルチスレッディング時に効率に優れることを示していると見られる。ちなみに、EV8のアーキテクトだったJoel Emer氏は、現在はIntelに在籍している(Intel Fellow, Intel Architecture Group)。
●ヘテロジニアス化で強力なデータ並列コンピューティング機能も統合使用頻度の低い浮動小数点演算ユニットを共有化するBulldozerのアーキテクチャは、現在のワークロードからは納得できる。しかし、今後のスループット重視のワークロードでは、浮動小数点演算をヘビーに使うアプリケーションが急増するはずだ。AMDもIntelも、そうしたビジョンを掲げている。Bulldozerモジュールでの浮動小数点演算ユニットの共有化は、そうした流れに逆行するように見える。しかし、そうではないという。
「時間とともに、BulldozerコアはAPU(Accelerated Processing Unit)にも使われて行く。APU SOC(System on a Chip)として、非常にパワフルなデータ並列エンジンをCPU上に備えるようになる。(Bulldozerコアの)小さな浮動小数点演算ユニットの機能と、どんどん増えて行くGPUのデータ並列の浮動小数点演算機能が、興味深い点だ」(Moore氏)。
「BulldozerはAPUになる能力を持っている。つまり、ヘテロジニアスコンピューティング機能を統合できる」(Akrout氏)。
おそらく、AMDの戦略は次のようなものだ。今後のワークロードで、増えることが予想される浮動小数点演算のニーズの多くは、CPUに載せるGPUのようなデータ並列型エンジンで吸収する。その方が効率的だからだ。CPUコア側の浮動小数点演算機能の拡張は、APU化を前提として、やや控え目に抑える。Bulldozerのもう1つの重要なコンセプトはヘテロジニアス化にあることを考えると、アーキテクチャの選択が納得できる。
こうしてBulldozerのコンセプトを概観すると、AMDがBulldozerモジュールをデュアルコアとカウントする理由もよくわかる。AMDとしては、主に使われる整数演算パイプについては完全にコアを分け、スレッド当たりの性能を維持している。その発想の原点は、現在のシングルスレッドの性能については、できる限り維持することにある。だから、デュアルコアと呼べるということだろう。