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

ARMの2016年フラッグシップCPU「Cortex-A72」

Cortex-A57を発展させたCortex-A72

 ARMは2016年のハイエンドCPU IPとして「Cortex-A72」を推進している。Cortex-A72は、Cortex-A57の後継となる、ARMの自社コアでは最高性能のCPUコアだ。高いシングルスレッド性能を、低い消費電力で達成する。Cortex-A72が主なターゲットとするプロセス技術は、14/16nmノードのFinFET 3Dトランジスタプロセスだ。しかし、現世代のCortex-A57と比較すると、同じプロセスノードでもCortex-A72の方が性能が高く、なおかつダイエリアも小さいという。

 Cortex-A72の性能をCortex-A57と比較したのが下のチャートだ。SIMD/浮動小数点演算系はユニットを大幅に再設計したことで性能が大きく上がっている。しかし、整数演算でも性能は向上している。

 Cortex-A72の基本設計は、Cortex-A57とよく似ている。Cortex-A57は、Cortex-A15をベースにしているため、Cortex-A15からCortex-A72は、設計の基本が共通している点が多い。いずれも、3命令デコードで、8実行パイプラインのアウトオブオーダーマシンだ。しかし、アーキテクチャをよく見ると、世代毎に大幅に改良されていることが分かる。Cortex-A72は、Cortex-A15から始まるARMの高性能CPUアーキテクチャの完成形と言っていいかも知れない。

Cortex-A72の設計を主導したMike Filippo氏(Lead Architect and ARM Fellow)

命令デコードは3命令/サイクルのまま各所を改良

 下はCortex-A72のコア全体のブロック図だ。大まかな構造は、すでに述べた通り、Cortex-A57から大きくは変わらない。CPUコアの面積は、TSMC(Taiwan Semiconductor Manufacturing Company)の16FF+で1.15平方mmと極めて小さい。設計はコンパクトだが、各所がCortex-A57よりチューンされており、IPC(Instruction-per-Clock)が向上したほか、同プロセス時の動作周波数の上限も若干上がっている。

Cortex-A72のブロック図
PDF版はこちら

 Cortex-A72の実行パイプラインの上流では、分岐予測(Branch Prediction)が大きく変わった。ARMは、Cortex-A15以来、Cortex-A12/17も含めて「bi-mode(バイモード)プレディクタ」を採用して来た。しかし、今回のCortex-A72では、bi-modeアルゴリズムを外した。分岐予測機構の詳細は明らかにされていないが、アルゴリズムは一新され、予測精度が向上したという。

 BTB(Branch Target Buffer)は2K-4K、より小容量でアクセスが速いmicro BTBは64エントリで、ニアブランチはmicro BTBで拾うという2段階のアプローチになっている。これらのバッファの数字はCortex-A57から変わらず。ただし、micro BTBのタグ構造が変わり、より効率的になった。

 L1命令キャッシュは48KBで3-wayセットアソシエイティブと、少し変則的になっている。Translation Lookaside Buffer (TLB)はL1命令キャッシュのITLBが48エントリ、L2 TLBが1,024エントリの2層となっている。TLBはサーバーなどのアプリケーションでは負荷がかかる部分であるため、前世代のCortex-A57より拡張されている。フェッチと平行する分岐予測のステージは、従来のCortex-A57と同じ5ステージを取っている。

 Cortex-A72の命令デコードのピーク帯域は、Cortex-A15/57と同じ3命令/サイクルに留まる。命令デコード幅を広げると、CPUの複雑度がぐっと高まるためだと見られる。しかし、命令デコード効率を上げることで、平均の命令デコード数を上げている。また、ARMは命令デコード&レジスタリネーミングを大幅に再設計し、この部分をコンパクトにしたという。

ディスパッチできる命令数が各サイクル3 Micro-OPsから5に拡大

 パイプラインステージは、命令デコードで3サイクル、次のリネーミングなどで2サイクル。フェッチから命令デコードとリネームまでで、合計10サイクルとなる。Cortex-A57までと同様に、ARMとしては深いパイプラインで、より高い周波数を達成しやすい。

 3-wayの命令デコーダからは、各サイクルに最高で3マイクロオプス(Micro-OPs:内部命令)を出力できる。3個のMicro-OPsは、レジスタリネーミングステージ群を経て、ディスパッチユニットに発行される。ここまでは、3 Micro-OPs/サイクルだが、次のディスパッチユニットで、さらに細かな命令に分割(crack)される。ディスパッチステージからは、各実行パイプに付属する専用のキューへとディスパッチされる。

 Cortex-A57から大きく変わった点は、ディスパッチユニットからイシューキューへの命令ディスパッチが5 Micro-OPsになったこと。Cortex-A15/A57まではここが3 Micro-OPs/サイクルだったのでボトルネックになりがちだったが、Cortex-A72では5 Micro-OPsへと拡張されたことで、8本の実行パイプラインをよりフィルしやすくなった。言い換えれば、実行パイプラインの稼働効率が上がった。

Cortexのディスパッチアーキテクチャ
PDF版はこちら

 このあたりの仕組みは、IntelやAMDのパフォーマンスCPU系列と似ている。IntelやAMDの場合は、CISC(Complex Instruction Set Computer)のx86命令なので、CISCフォーマットから複合したフューズドMicro-OPsへと変換、ディスパッチフェイズでフューズドMicro-OPsを分解してイシューポートに送るのは利にかなっている。

 RISC(Reduced Instruction Set Computer)のCortex-A72の場合は、ARMはARMv8の64-bitアーキテクチャ「AArch64」命令で、アーキテクチャ命令同士を融合させて1つの融合内部命令(フューズドMicro-OPs)にするインストラクションフュージョンをサポートした。これによってディスパッチ時に分解できるMicro-OPsを増やし、命令スケジューラの負担を軽減している。

 ディスパッチステージでは、主にレジスタファイルアクセスの電力と面積の削減を行なっている。レジスタファイルの構成の変更はポート共有で、レジスタファイルのリードポート数を減らし、レジスタ回りの面積を減らし、電力を削減している。アウトオブオーダウインドウは、Cortex-A57と同じ128命令で、リネームレジスタのサイズも同じ。

SIMD/浮動小数点パイプラインを再設計してレイテンシを大幅短縮

 各実行ユニットに対するイシューキューは、それぞれのイシューポート毎に独立したリザベーションステーション方式となっている。各ポート毎に8 Micro-OPs分のキューを持つ。

 実行パイプラインの構成は、Cortex-A15/57をほぼ継承しており、合計8パイプだ。シンプル命令の実行クラスタが2つ、分岐ユニットが1、乗算や除算など複雑な命令のクラスタが1つ、SIMD(Single Instruction, Multiple Data)/FPU命令のクラスタが2つ、ロード/ストアのクラスタが2つの構成となっている。

 実行パイプラインで目立つ変更はSIMDパイプラインを大幅に設計変更、実行レイテンシを大幅に短縮したことだ。具体的には、浮動小数点乗算(FMUL)は5サイクルから3サイクルに、浮動小数点加算(FADD)は4サイクルから3サイクルに、浮動小数点積和算(FMAC)は9サイクルから6サイクルに短縮された。Cortex-A57では、SIMDパイプの最長レイテンシは9サイクルだったのが、Cortex-A72では6サイクルへと減っている。このほか、CVTユニットやRadix-16 FP除算ユニットの性能も上がっている。実行レイテンシが短縮されたことで、アウトオブオーダウインドウを広げなくても、実質的にアウトオブオーダ実行の効率が上がっているという。

Cortex-A72の実行遅延
PDF版はこちら

 さらに、データフォワードを強化してゼロサイクルのフォワーディングパスを増やした。依存性のある命令が連続する場合でも、ゼロサイクルデータフォワーディングで続けて実行できるチャンスが増えた。

ロード/ストアではプリフェッチやTLBを改良

 Cortex-A72のロード/ストアパイプは2本で、各サイクルに1ストアと1ロードが可能。ロードのL1ヒットレイテンシは4サイクルでCortex-A57と変わらない。しかし、L1アクセスの消費電力は低減され、また、データ先読みのプリフェッチも改良された。Cortex-A57では、プリフェッチはL1とL2で個別に管理されていたが、Cortex-A72ではL1とL2を統合的に管理するプリフェッチャとなった。それに伴い、従来、共有L2コントロールユニット側に配置されていたプリフェッチャは、各CPUコア側に移動している。

 L1データキャッシュは32KBで、2-wayセットアソシエイティブ、64バイトライン。L1データキャッシュのTLBは、従来はロードとストアで分割されていたが、Cortex-A72では統合された。共有L2キャッシュは最大4MBまでサポートされるようになり、L2 TLBのサイズも1,024エントリにまで拡張された。

 また、L2キャッシュのアービトレータには、スレイブユニットを通じて「Accelerator Coherency Port (ACP)」からのアクセスがオプションでサポートされている。これは、アクセラレータユニットが、CPUキャッシュに対してコヒーレンシアクセスをできるようにするためのポートだ。コヒーレンシは、片方向となっている。アクセラレータはCPUキャッシュをスヌープできるが、CPU側はアクセラレータをスヌープできない。

 全体を見ると、Cortex-A72はコアを小さく保ったまま性能を上げるという点に集中したアーキテクチャであることが分かる。このあたりは、コアの大型化を許容するIntelと大きく異なる。こなれていなかったSIMD/浮動小数点演算ユニットの再設計など、実行性能を上げやすいところに力が入っている。ARMはCortex-A72を、ハイエンドのモバイルだけでなく、低電力サーバーの市場にも推進して行くつもりだ。

(後藤 弘茂 (Hiroshige Goto) E-mail