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

AMDの新GPU「Polaris」ファミリの省電力と回路設計の秘密

CPUから導入した強力な省電力機能を満載したPolaris

 AMDが発表した新GPU「Radeon RX 400 (Polaris:ポラリス)ファミリ」の回路設計面での最大の特徴は、“CPU並み”の省電力テクニックを導入したことだ。Polarisには、省電力のための制御技術も、AMDの最新の技術が導入されている。省電力のテクニックでは、AMDの最新APU(Accelerated Processing Unit)である「Bristol Ridge(ブリストルリッヂ)」とほぼ同等となっている。

 これまで、GPUの省電力技術は、CPUに比べてかなり遅れていた。同じAMDのプロセッサでも、CPU側に導入されている技術が、GPUにはまだ導入されていないというケースが少なくなかった。

 これにはいくつか理由がある。まず、GPUの演算性能/電力は、CPUの7~10倍であり、それほど省電力化をゴリゴリに行なう必要がなかった。GPUは、グラフィックスのようなフルロードのタスクにチューニングするのが一般的で、CPUのように間欠的なワークロードでの省電力制御はあまり考慮していなかったこともある。

 しかし、過去数年で状況は変わり、GPUも電力密度の上昇(トランジスタのスケーリングに電圧スケーリングが追いつかないため)のために、省電力を世代毎に大幅に強化しなければならなくなった。ワークロードも多彩になり、GPUが複数タスクを並列に走らせるケースも珍しくなくなった。こうした状況で、GPUも省電力制御や回路を充実させるようになった。

 Polarisアーキテクチャで導入された省電力技術は、「アダプティブクロッキング(Adaptive Clocking)」「アダプティブ電圧&周波数スケーリング(Adaptive Voltage & Frequency Scaling:AVFS)」「ブート時電力供給キャリブレーション(Boot Time Power Supply Calibration:BTC)」など。いずれも、過去1~2年間の間にAPUに実装されて来た技術だ。

 AMDの中で、こうした省電力技術の開発をリードして来たのはSamuel Naffziger氏(Corporate Fellow, AMD)だ。今回のPolaris開発に当たって、AMDは、ディスクリートGPUの設計に、CPUサイドからNaffziger氏を呼び寄せた。その結果、Polarisは、省電力技術で、従来のAMD GPUから大きく発展したGPUとなった。

Samuel Naffziger氏(Corporate Fellow, AMD)

プロセッサの性能の制約となっている電圧ドループ

 高性能のプロセッサに共通する悩みは、供給電圧の突然のゆらぎである「電圧ドロープ(Voltage Droop)」だ。低電圧で大電流量のプロセッサでは、プロセッサ側で消費される電流量の大きな変化などによって、急激で一時的な電圧の低下が発生する。理想的な供給電圧は、ほぼ一定でゆらぎのない電圧だが、現実は、一定の電圧の間に、短時間に急激な電圧降下が発生する電圧ドロープが挟まれている。ドロープによる電圧のゆらぎは、通常10~15%にもなる。

 プロセッサの動作周波数は、電圧が上がると上限が上がり、電圧が下がると周波数の限界も下がる。そのため、理想的な電圧に合わせて動作周波数を設定していると、低下した電圧のためクロックピリオドにレイテンシが追いつかなくなる。そのため、電圧ドループの際にタイミングフェイラが発生してしまう。これは動作上、致命的な問題で、それを避けるために、従来はプロセッサの動作周波数自体を低く設定していた。

電圧ドループがなければ、プロセッサは高周波数で動作できる
PDF版はこちら
電圧ドループが発生すると、平常時の電圧に合わせた動作周波数ではエラーが発生してしまう
PDF版はこちら
電圧ドループがプロセッサの動作周波数を決める

 電圧ドループによるゆらぎは、通常10~15%までに収まるため、動作周波数にそれだけのマージンを取って設定する。例えば、供給電圧が一定なら1.3GHzで動作できるGPUなのに、電圧ドループ分のマージンを合わせて1.15GHzと低い周波数に設定するといった具合だ。プロセッサの性能は、電圧マージンの分だけ低下する。逆に、一定の動作周波数の場合は、マージンの分だけ、電圧を上げる必要がある。その分だけ、消費電力が増えることになる。消費電力は電圧の二乗に比例するため、電圧ドループに対応して電圧を引き上げる影響は大きい。

電圧ドループの最低電圧に合わせて動作周波数を設定すると、性能が落ち、電力も無駄になる
PDF版はこちら

アダプティブクロッキングでドループを検知して対応

 AMDのNaffziger氏は、電圧ドループ問題に対する解決策の1つは、デカップリングキャパシタをチップパッケージに多数搭載することだが、パッケージコストを増大させてしまうと指摘する。AMDは、費用効果が高いソリューションとして、アダプティブクロッキング(Adaptive Clocking)を導入した。

 アダプティブクロッキングは、電圧ドロープが生じた場合は、電圧低下に合わせて動作周波数を一時的に落とすというものだ。クロックピリオドを長くすることで、電圧が下がった状態でもタイミングフェイラが生じないようにする。アダプティブクロッキングにもさまざまな実装がありうる。

 AMDは、Kaveri(カヴェリ) APUの技術発表時に、アダプティブクロッキングの実装を明らかにしている。それによると、AMDの実装は、コンフィギュラブルなドループ検知回路を内蔵して、電圧ドループを検知する方法だ。ディテクタ(検知回路)がドループを検知すると、デジタル周波数シンセサイザが、設定された範囲でクロックピリオドを増やす。つまり、動作周波数を下げる。

AMDのアダプティブクロッキング技術では、電圧ドループに対応して動作周波数を変化させる
PDF版はこちら
サプライ電圧がしきい値を切るとクロックピリオドを延長する
最初にCPUコアにドループディテクタを実装
ドループディテクタの概要

 AMDの実装では、電圧がしきい値を切った瞬間に検知が可能で、GPUの場合は検知してから1ns以下で周波数を変更できるという。また、検知回路と周波数シンセサイザともにコンフィギュレーションが可能で、ドループと判定するしきい電圧と、通常時の動作周波数などを設定できる。ドループ検知回路と周波数シンセサイザは非同期で接続されている。これは、ドループの発生はクロックピリオドのどこでも起こりうるからだという。

CPUでは3.4GHz時に2サイクルでクロック変更が可能

 AMDは、このアダプティブクロッキングを、APUでは2014年のKaveri世代からCPUコアに実装している。さらに、2015年のCarrizoからは、CPUコアだけでなくGPUコアにも実装した。そして、Polarisのフェイズで、ディスクリートGPUへと転用した。

Polaris 10では、アダプティブクロッキングによって大幅にパフォーマンス/電圧が上昇している
AMDのアダプティブクロッキング技術
CPUコアの場合のアダプティブクロッキングのパワーセービング効果

Intelでアダプティブクロッキングを実装したのは現AMDのNaffziger氏

 電圧ドループの問題自体は、以前からよく知られており、高性能プロセッサの製お脳の制約として認識されていた。そのため、CPUメーカーは、かなり以前からこの問題への対策を考案してきた。

 CPUにおいてAMDのライバルであるIntelは、メインストリームCPUでは「Nehalem(ネハーレン)」世代から電圧ドループ対策を実装した。2008年の半導体学会「VLSI Symposium」で「Next Generation Intel Micro-architecture (Nehalem) Clocking Architecture」と題して発表している。Nehalemでの電圧ドループ対策の実装はシンプルで、CPUの周波数を発振する「Voltage-controlled oscillator(VCO)」への入力電圧を、ドループする電圧でモジュレートしてしまう。それによって電圧ドループに追従した周波数の動的変更を可能にしている。

 もっとも、Intelは、Nehalem以前にIA-64プロセッサの「Montecito(モンテシト)」において、より高度なアダプティブクロッキングを導入している。Intelは2005年の半導体学会「ISSCC(IEEE International Solid-State Circuits Conference)」で同技術を発表しており、その内容はAMDの実装に近い。ちなみに、この時、ISSCCでMontecitoの発表「10.1 The Implementation of a 2-core Multi-Threaded Itanium-Family Processor」を行なったのは、当時IntelのアーキテクトだったSamuel Naffziger氏だ。

 Itanium系CPUのメインアーキテクトだったNaffziger氏(それ以前はPA-RISCのアーキテクト)は、AMDに移って以来、省電力技術や回路設計技術にフォーカスしてきた。Naffziger氏が加わって以降、AMDのAPU/CPUの省電力機能は劇的に進化した。そして、今、AMDはNaffziger氏とそのチームの技術を、GPUにも移植しつつある。

 ちなみに、GPUメーカーのNVIDIAについては、電圧ドループ対策設計を行なっているかどうかは明らかになっていない。しかし、NVIDIAはドループ対策テクニックでの特許(USPTO 9292295)を出願しており、大学と一緒に研究したドループ対策回路の論文も複数出ている。NVIDIAも、ドループ対策の研究開発を行なっていることは確かで、何らかのテクニックが既に実装されている可能性がある。

特殊なセンサー回路を使い電圧と動作周波数の組み合わせを変更

 Polarisアーキテクチャでは、電圧と動作周波数を動的に変更する「DVFS(Dynamic Voltage and Frequency Scaling)」の機能を拡張している。半導体チップは、電圧を上げるとトランジスタのスピードが上がるため、より高い周波数で動作できる。そのため、現在のCPUやGPUでは、複数の電圧と動作周波数の組み合わせに切り替え、プロセッサの負荷に応じた最適な電力を設定している。

 しかし、半導体チップには個体のばらつきがある。ダイによって、同じ電圧でも動作できる周波数の上限が変わる。そこで、AMDでは、個々のチップ毎に、最適な動作周波数に設定するアダプティブ電圧&周波数スケーリング(Adaptive Voltage & Frequency Scaling:AVFS)を導入した。

 AVFSは、言うは優しいが、実際には非常にやっかいな作業だ。なぜなら、GPUの動作周波数に影響するクリティカルパスが、特定の電圧&周波数の組み合わせ時に、サイクルタイム内に収まるかどうかを検証しなければならないからだ。チップの動作周波数は、パスのレイテンシが長いクリティカルパスによって決まる。

 そこで、AMDは「周波数センサー(Frequency Sensor)」という誤解を招きやすいマーケティングネームの回路をGPUに加えた。AMDのエンジニアですら「その名称は変だ」と言う。AMDの文書の中には、周波数センサーを「Silicon Speed Capability Sensor」と呼んでいるものもあり、その名称の方が実態に近い。「これは、シリコンの機能をモニタする回路だ。実際にどれだけ速く走らせることができるかを正確にモニタする」とAMDのNaffziger氏は言う。

この図ではセンサーがある程度まとまって配置されているように見えるが、実際には周波数センサーはダイ上に分散されていると見られる
AMDのAVFSのタイミングクリティカルレプリカパスのモニタリングの仕組み
CPAモジュールがAVFSの周波数センサーの司令塔となっている

 このセンサーは、特定の電圧と温度時に、動作できる最高周波数を見積もるためのユニットだ。かなり複雑な仕組みを持っている。実際のクリティカルパスをモニタするのではなく、内部にクリティカルパスのレプリカパスを設定する。このレプリカパスを使って、特定の電圧時のパスの動作をシミュレートする。シャドウフロップが、レプリカパスをモニタし、その結果を「Critical Path Accumulator (CPA)」が見積もる。CPAは、ダイ上の分散した500のパスを管理しているが、その中から50のパスのデータを集める。最終的な統計が、System-Management Unit (SMU)に送られ、電圧と周波数の組み合わせが決定される。

 従来のDVFSは、チップの個体ばらつきを配慮して、動作周波数と電圧の組み合わせにマージンを取っていた。チップの中には特定の電圧時に1.4GHzで動作するGPUダイがあっても、マージンを取った1.2GHzに揃えられてしまうといった具合だ。しかし、周波数センサーのおかげで、個々のダイ毎に最適な動作周波数と電圧の組み合わせを決定できるようになった。14nm FinFETは、28nmプレーナと比べると、プロセスのばらつきが小さいが、それでもゼロではないためAVFSは役に立つという。

Excavator (XV) CPUコア上でのAMDのCPAとレプリカパスの配置
AVFSによって、同じ動作周波数をより低い電圧に設定できる

 Polarisアーキテクチャでは、GPUコアは1個のパワープレーンで、全GPUコアが同じ電圧同じ周波数で走る。CPUのように、個々のコア毎に異なる周波数で走ることはできない。これは、タスクの粒度が大きいGPUに共通した特色だ。

ブート時にGPUへの電力供給をキャリブレートするPolaris

 Polarisでは、GPUへの電力供給をモニタしてキャリブレートする「Boot Time Power Supply Calibration (BTC)」も実装した。これは、ボルテージレギュレータ(VRM)からの電力供給を正確にすることで、ロスを削る機能だ。GPUチップをテストして、スピードビン(製品個体の動作周波数)を決める時にテストコードを走らせる。同じコードをシステムのブート時に走らせて、電圧をチェックする。

 「VRMからの供給電圧は、VRMや基板のばらつきによって変わる。伝統的には、我々はばらつきをカバーできるだけの電圧マージンを設けていた。しかし、Polarisでは組み込みのインテリジェント回路が、実際にデバイスに供給される電圧をチェックできる。それによって、システムブート時に正確な電圧に設定することが可能で、従来のような無駄な電力を削ることができる」とNaffziger氏は語る。経年劣化による変化も対応できるという。

BTCによってブート時にVRMからの電圧の調節が可能となる
従来はGPUに経年劣化のためのマージンを設定していた。Polarisでは、経年劣化もキャリプレーションで吸収できる

 Polarisはパワーゲーティングも従来通り搭載する。現在のところ、パワーゲートする時は、GPU全体で行なっている。それは、現在のワークロードである限り、コアを個々にパワーゲートしても意味が薄いからだという。しかし、パワーゲート機構自体はもっとフレキシブルに設計されているので、ワークロードの変化によっては、異なるグルーピングで制御するようになる可能性もあるという。

 AMDのPolarisアーキテクチャの高い性能/電力の裏には、このようにCPUから導入した進んだ省電力技術や回路設計技術が隠されている。プロセス技術の進歩だけでなく、回路設計の積み重ねも活きている。