消費電力(グラフ86~93)
FX-8350の消費電力そのものは一度こちらで結果を報告しているが、もう少し細かく消費電力の傾向について調べてみた。
ただその話をする前に、まずPiledriver世代で採用されたResonant Clock Meshという技術についてちょっと説明しておきたい。日本語だと共振クロックメッシュという訳語になる。この技術はCyclos Semiconductorが開発し、AMDはこれのライセンスして導入したカタチになる。これに関する話は2012年のISSCCにおいて、AMDとCyrosの共同発表という形で公開された。ただこの話をするためにはクロックメッシュの説明が必要で、そのためにはそもそもLSIにおけるクロック信号の分配についても軽く触れておく必要があるだろう。
そもそもCPUなどを含む、ある程度以上大規模なデジタル回路では、内部は同期回路で構成する。同期回路というのは図1の様な仕組みである。まず最初にラッチを起き、入力された信号を保持した上で、その出力を後段の論理回路に渡す。当然続く論理回路も、入力された値にあわせて出力を行ってゆく訳だ。
なんでこんな事をするか、というと論理回路は通常トランジスタなどを使って構成する訳だが、この動作にはどうしても遅延が付き物である。例えばあるトランジスタが100psでスイッチング動作が出来たとしても、10個つなげれば1nsの遅延になる。この遅延をいちいち計算しながら回路全体を構成するのは大変に困難である。そこで、ある程度の論理回路を一塊のブロックとして、その先頭にラッチを配することで設計を簡単にしよう、というのが同期回路の生まれた理由である。
例えば図1の様にn個の回路+ラッチからなるブロックを一つの塊として捉え、この回路が1GHzで動くためには、ラッチの入力から回路 #nの出力までの合計遅延が1ns以内に収まるように設計すれば良い。CPUのパイプラインで言えば、あるステージがとにかく1cycle分で処理が終るように設計すれば良く、もしこれが収まらないならばステージを分割してそれぞれ1cycle以内に終らせる、という形にまず上流設計を行い、次いで各ステージ内を1cycleで処理できるように詳細設計を行うといった形で設計がしやすくなる。
これがラッチなしで、全てのトランジスタの遅延をきちんと計算して...とかなると、割と絶望的である。最近のCPUは、キャッシュとかレジスタ類を完全に除いても、数百万個のトランジスタでパイプラインが構成されている。数百万個のトランジスタを、それぞれの遅延を考えながら連動して動くように設計するのは、現在の技術ではほぼ不可能である。同期回路はある意味、必然的に必要なものである。
さて、そうするとデジタル回路は図2の様に、複数の同期回路が連結して構成されることになる。CPUのパイプラインで言えば、Block #1・#2がFetch、Block #3~#5がDecode、…といった具合に考えても良い。こうした回路をきちんと動かすためには、各BlockにClock信号を供給する必要がある。問題は、CPUの様に複雑な回路を高速に動かすためには、このClock配線の遅延を考えねばならないことだ。例えば1GHzのClock信号なら周期は1nsになる。1nsというのは光速でも30cm、銅配線上の電気信号だと10cm程度の距離でしかない。
図2でBlock #1とBlock #nの配線距離が10cmという事はまず無いが、1cmとかは(一筆書きならば)可能性としてありえる。1cmということは位相のずれが10%(=周期が1/10ずれる)ということで、これは「全てのBlockに同じタイミングでClock信号が渡される(=全てのBlockのラッチが同じタイミングで信号をHoldする)」事が前提の同期回路ではちょっと許されない。ましてやVisheraの様に4GHz動作ともなると、1cmはおろか2.5mmでも1/10周期がずれることになるから、大問題である。一般論として、ラッチのマージン(位相のずれに対する許容度)は1%未満にしないと設計が極めてタイトになるので、ここから逆算すると配線遅延は0.1mm程度でも難しい計算になる。
こうした問題に対してまず使われる様になったのが図3のClock Treeである。要するにClock Sourceから各Blockまでの配線長を完全に等しくすれば、Clock信号の位相のずれは原理的に発生しない。図3は2分割のTree構造であるが、等長であれば3分割でも4分割でも構わないが、とにかく配線を等しい長さにすれば解決するというものだ。
ただ、Blockの数が増えてくると、この配線長がどんどん増えてゆくわけで、これは物理的に配線が難しくなる。そこで次善の策として現在広く使われているのが図4の様なClock Meshである。Clock Meshは図4でオレンジで描いた2次元のメッシュ構造で、要するに網である。この網からさらにTree構造でClock信号を分割して、各Block(図中の水色のブロック)に供給する仕組みだ。このClock Mesh自身には、やはりTree構造の形で複数個所にClock信号を供給する(図中の緑色の配線)形である。
厳密に言えば、このClock Meshによる配線遅延は多少起こりえるが、Meshの密度を上げるとか、Clock信号を供給する箇所を増やすなどの対応で、位相のずれをを許容範囲内に納められ、かつ配線そのものを大幅に節約できるという工夫である。
次ページ:消費電力(その2)