以前から話題になっていたAMDのFusion APUの第二弾、いわゆるLlanoであるが、やっとこれを試用する機会に恵まれた。そこでLlanoそのものの説明もかねて、その性能などをご紹介したいと思う。ちなみにこの原稿執筆中の日本時間の6月13日午後10時過ぎに、既にAMDイタリアのページではLlanoの情報が公開されていた。

内部構造

すでに何度か触れたとおり、第一世代にあたるZacate/Ontario/LlanoといったFusion製品は、いずれもCPUとGPUコア、それとメモリコントローラをワンチップに統合した製品である。そのLlano、最初にダイ写真が登場したのは2009年のFinancial Analyst Dayのプレゼンテーションだったと記憶しているのだが、今回もこの写真が登場(Photo01)。ただこれとは別に、まっとうなダイ写真(Photo02)や、その内訳(Photo03)まで説明された。ためしに、Photo01のダイ写真とPhoto02のダイ写真を変形してサイズをあわせてみたところきっちり一致しており、本当にダイ写真の一部だけを切り出していた模様だ(Photo04)。

Photo01: フェイクだの何だのと色々話題だった問題の写真。今回、Mike Goddard氏(Vice President of Client Engineering)に「あの写真って何よ」と聞いたら「俺ぁ知らん(笑)。多分マーケティングの人間が、Llanoのダイ写真を正方形にトリミングしただけだと思う」という返事が。

Photo02: 本来のLlanoのダイ写真。こんな具合に長方形になる。下にStarsベースの4コア、上にGPUコアが並ぶ。

Photo03: 内部構造。意外に、CPUコア間が離れているのが判るが、これはPCIeやDDR3のI/Fに周辺が多くとられていることと無縁ではないだろう。もっともコア同士の配線も以前とはちょっと異なるそうである。このあたりは後述。

Photo04: 一番上がPhoto01の、中段がPhoto02のダイを変形したもので、下段がそれを重ねたもの。なるほど、適当に切り抜いて正方形にしたものだというのが判る。

さて、全体の構造はPhoto05に示す通りである。まずCPU周りで言えば、基本的な構造は従来のPhenom IIやAthlon IIの流れを汲むコアがそのままである。ただし、L2が512KB→1MBに増量されたほか。H/W Prefetchの改良や内部のLoad/Store Bufferの増量など細かいところに手が入っており、これとTurbo Coreの対応などで、IPCで6%程度の向上が行われたとしている。ちなみにL1/L2に関しては相変わらずExclusive Cacheの構成が維持されているが、これに関しては後述する。

Photo05: Sabineプラットフォーム。今回からチップセットはFCH(Fusion Controller Hub)という名称になった。もっとも基本的な構造は従来のサウスブリッジと同じで、Analog VGAの出力などが追加されたのが技術的に大きな相違点といったところ。

Photo06: IPベースのH/W Prefetchとは、デコードするx86命令にあわせて必要なデータをPrefetchするという話。従来はデータのアクセスパターンだけを見てPrefetch対象を判断しており、これより効果的にPrefetchが出来るようになったとの事。H/W Dividerは、FMISCに入る除算機能をハードウェア化したというもので、IntelがPenryn世代で投入したFDIVの改良(Radix-16 Divider)に近い話

ついでメモリコントローラであるが、こちらはDDR3が2chという構成である(Photo07)。デスクトップ向けはDDR3-1866、モバイル向けはDDR3-1600までサポートとなっているが、これはごく一般的な構成である。ところでメモリコントローラに関してMarc Diana氏(Channel Marketing Manager)に「Zacateの時はDDR3-1333が1chだったけど、内部でGPU用の帯域とCPU用の帯域を完全に分離していて、CPUには3GB/sec弱しか帯域が割り当てられていなかったけど、Llanoは?」と伺ったところ「Zacateの世代は性能とのバランスをとるのにそれしか方法がなかったのだけど、Llanoの世代はもっと洗練されたメモリコントローラを搭載しているから、もっとスマートに解決している」という返事が返ってきた。このあたりは後で確認が必要だろう。

Photo07: 既に1.35Vにも対応しているのは流石である。「1.25Vは?」と聞いたら、それはLlanoの次世代ではあるかもしれないけどこの世代ではないとの事。

ついでDisplay出力である。Llanoには合計で32レーン分の高速I/F用PHYが内蔵されており、このうち4レーン×2がDisplay出力に割り当てられている(Photo08)。では残りは? というとこちらの通り(Photo09)で、4レーンが汎用(GPP)、4レーンがUMI(Unified Media Interface)に割り当てられ、残る16レーンがDiscrete GPUの接続用ということになる(Photo09)。面白いのは、技術的にはx8+x4+x4のTriple CrossFireとかx4+x4+x4+x4のQuad CrossFireの組み合わせも可能なのだろうが、わざとこれをつぶしていること。x8+x8以外にもDual Link DVI+x4+x4、なんて構成も用意されているあたり、意図的にLlanoではDualを超えるCrossFire以上の構成はサポートしないということになっているようだ。

Photo08: この出力ポートを具体的にどう構成するか、は当然マザーボードなりノートの製品構成によって変わってくることになる。

Photo09: GPPの中に、何気にx2というとんでもない構成が含まれているのが気になるのだが、オンボードデバイスの中にはこうした接続をサポートする製品が存在するということだろうか?

GPUに行く前にちょっと内部バスの構成を紹介したい。この図版では何がなんだかわからないだろうが(Photo10)、要点をあげると、

  • 内蔵GPUとCPUは直接接続され、しかもGPUはCPUに対してCache/MemoryのCoherencyを維持する
  • CPUとGPUはそれぞれ独立してMemory Controllerに対して要求を出せる

という仕組みになっている。問題はこのCache Coherencyで、Llanoの場合4つのコアがそれぞれ独立にL2キャッシュを搭載しており、しかもそれぞれのコアのL1 CacheとExclusiveの構成になっているから、これらとCache Coherencyを保つのは結構大変な作業である。このあたりをMike Goddard氏に伺ったところ、「確かに非常に大変で、われわれはこのキャッシュ周りの制御でがんばった」という返事があった。氏によれば、このExclusive Cache周りの制御に、CPUコア以外にGPUの分も加味するような仕組みを、しかも制御の負荷を減らしつつ実装することに成功したのが改良点の一つ目で、2つ目は"Direct Connect"と呼ばれるPathをキャッシュ間に設けた事だという。従来だとコア間のCache Coherencyを取るためのデータ移動は、一旦L3もしくはNB Block内に設けられたクロスバーを経由する形になり、これが余分にLatencyを増やす要因になっていた。ところがLlanoでは4つのL2キャッシュが、各々の間で直接データ交換を行うための専用Connectを持っており、これによりより少ないLatencyでCache Coherencyの維持が可能になるとしている。氏によれば「Coherencyの維持にはそれほど大きな帯域は必要ない」ということで、なので、バス幅はそれほど大きくないものと思われるが、これにより従来よりも複数コア間の同期が高速に取れるようになったと思われる(このあたりも後で確認の必要があるだろう)。

ちなみにこのCache Coherencyの対象になるのはあくまで内蔵するGPUであって、PCI Express経由で接続される外部GPUは対象外との事だ。

Photo10: 元は、もっと細かく各コンポーネントが記述され、それぞれがどう接続されているかがまず示された上で「これでは判りにくいだろうから大きく分けると」してまとめられたのがのがこちら。で、元の方は撮影禁止&未配布なので、これしかご紹介できない。

さて、GPUの方であるがLlanoではA8/A6/A4の3モデルがラインナップされる。もっともどのモデルでも(後で改めて示すが)ダイサイズは228mm、総トランジスタ数は15億個なので、単にどれだけのコアを有効にしているかが異なるだけだ。GPUのコード名は"Sumo"で、プレゼンテーションにもあるとおりベースとなる構造はRedwoodのRadeon HD 55xx/56xxシリーズとなる。ただしUVD3の搭載、Memory I/F周りの切り替えや(上で述べた)Cache Coherencyの対応などが主な相違点となる(Photo12)。Redwoodベースだから、Radeon HD 6900シリーズで導入されたVLIW 4ではなく、Radeon HD 5000シリーズと同じVLIW 5構造をそのまま踏襲している形だ(Photo13)。逆にRadeon HD 6000になったのがUVDである。LlanoではUVD3が搭載され、従来よりも多くの種類の動画フォーマットに対応できるようになっている(Photo14)。

Photo11: これまでは「SP(Shader Processor)」と呼んでいたものが、今回からRadeon Coreという名称に変わったが、まぁ要するにShaderの事である。名称変更の理由をMarc Diana氏に伺ったところ「今までよりもよりコンシューマに販売してゆくつもりで、そのためにはShader Processorといった聞きなれない呼称よりもRadeon Coreの方が判りやすいから」というお返事が。

Photo12: 以前は"BeaverCreek"だった筈だが、どっかで切り替わったのか、もしくはBeaverCreekはDesktop向けでMobileがSumoなのかもしれない。

Photo13: どうせだったら、この4つの汎用SP+1つの特殊SPをあわせた全体をRadeon Coreと呼んだほうがきっと一般消費者にはわかりやすいのではないかという気がするのだが、それだと400 Radeon Coreの代わりに80 Radeon Coreになってしまって見劣りがするからSPをそのままRadeon Coreと呼び変えたというところか。

Photo14: これについてはそれほど説明は不要だろう。問題はやっぱり汎用のプレイヤーではUVD3を生かせないことで、プレイヤー側の対応が必要になる。

ここで改めて話を全体に戻して、消費電力の話である。Llanoも昨今のGPUに漏れず、積極的なPower Gatingが施されている(Photo15)。電圧制御に関しては、流石にCPUをコア毎に変更というのは無理なようでCPU全体、GPU、及びその他という3つに分けてそれぞれ制御しているようだ。またGPUとUVDは独立にPower Gatingできるようになっている。Photo16は、UVDとGraphicsをそれぞれPower GatingでOffにした場合に消費電力がどうなるか、を示したもので、稼動時はともかく待機時の消費電力低減に効果があることが判る。

Photo15: あくまでもこれはPower Gatingの話で、Clock Gatingは更に細かい単位で行われている。

Photo16: 左下にもあるとおり、これはClockを供給していない状態で、なので消費電力はもっぱらトランジスタのリーク電流によるものである。Power Gatingを施すことで、不要部分のリーク電流(に伴う発熱)を大幅に減らせていることが判る。

こうして細かく消費電力を削減することで、必要があればTDPの枠内で更に動作周波数を引き上げることが可能であり、この技術はPhenom II X6でAMD Turbo COREとしてデビューした訳だが、LlanoではこのTurbo COREの第2世代が搭載された(Photo17)。どの辺が第2世代か? というと、消費電力や温度の測定にデジタルセンサーを搭載したことだという(Photo18,19)

Photo17: これはSPEC CPU 2006を実施したときのもので、ピーク状態ではTDPに近い消費電力となっているが、常にピークという訳でもないく、その分動作周波数を引き上げられるヘッドルームがある、という話。ちなみに現時点ではZacate/OntarioはTurbo CORE未搭載だが、今後投入される製品には搭載されるという噂はある。

Photo18,19: 従来のアナログセンサーの場合、CPU内部にそのアナログセンサーを処理できる回路を入れられないので、一度その出力をCPU外部に出し、チップセット内部などで処理して、それをCPUに戻すということになる。当然これだと温度や消費電力を迅速に測定して直ちに反応させるというのは不可能である。IntelがCore 2でDTS(Digital Thermal Sensor)を搭載したのも同じ理由である。Llanoでは消費電力もやはりデジタルで測定し、これをノースブリッジ部に搭載した回路で合算、これに応じて動作周波数を変更するという仕組みで効率を上げているわけだ。

なおTurbo COREであるが、LlanoではCPU Coreに対して性能を引き上げる機能はあるが、GPUに関してはそうした機能は持っていない。またたとえばGPUがIdleにある場合は、余ったTDP枠をCPUが使えるが(Photo20)、GPUの負荷が高まってゆくと、それに応じてCPUが使えるTDP枠を減らしてゆく(Photo21,22)。CPUとGPUの両方の負荷が高い場合(Photo23)は、CPU側の負荷を減らすという形で対応しているようだ。

Photo20: GPUがidleの場合でも、相応の回路規模とトランジスタ数だから、リークの分が結構馬鹿にならないというあたりか。

Photo21,22: GPU負荷が増えるほど、その分CPU負荷を減らす方向に。CPU負荷にあわせてGPU負荷を減らす、ということにはならない。

Photo23: TDPがオーバーしそうな場合はCPUの負荷を下げてTDP枠を維持する。

今回、GPU側にTurbo COREを搭載しない(出来ない)理由についてはうっかり聞きそこなったのだが、察するにこれを搭載するためには、GPUの内部構造にもそれなりに手を入れる必要があり、作業が大きすぎるからというあたりではないかと想像する。もちろんRadeon HDシリーズは以前からコアやメモリクロックを変更する機能が以前から搭載しているし、負荷に応じて動作周波数を変更する機能もあるが、少なくともTurbo COREほど急速に動作周波数や消費電力を上げ下げすることは考慮していない。CPUコア側のTurbo COREにしても、ベースクロックは同じでPLLの倍率変更だけで対応しているし、また内部の回路も急速なPLL倍率変更に対応できるような仕組みが既に出来ている(これはAMDがK7の時代からPowerNow!とかCnQなどの名称で実装してきたものだ)から可能になっているもので、同じレベルの仕組みをGPUコア側に仕込むのは今回間に合わなかったようだ(実装がどうか? は不明だが、少なくとも検証は済んでいないと思われる)。