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

2014年のハイエンドスマートフォン&タブレットのCPUコア「Cortex-A57」



●CPUコアアーキテクチャはCortex-A15を拡張

 ARMは64-bitの新CPUコアファミリ「Cortex-A50」を発表した。ハイパフォーマンスの大型CPUコアが「Cortex-A57(Atlas)」、ローパワーの小型CPUコアが「Cortex-A53(Apollo)」だ。10月30日から11月1日にかけて米サンタクララで開催されたARMの技術カンファレンス「ARM Techcon 2012」では、Cortex-A57/53の概要も明かされた。

 ARMはこれまで、約2年おきに、CPUコアのマイクロアーキテクチャを完全に一新してきた。Cortex-A8、Cortex-A9、Cortex-A15と、ゼロから開発した新コアを投入してきた。しかし、今回の64-bit命令を含む新命令セットアーキテクチャ「ARMv8」の実装では、マイクロアーキテクチャは前世代からの拡張へと転じた。64-bit化というやっかいな実装のために、マイクロアーキテクチャ自体はある程度枯れたものを拡張するというアプローチを選んだようだ。

 Cortex-A57は、ハイエンドのモバイル機器やサーバー、ネットワークインフラなどをカバーする。ARMはトップエンドのCPUで、シングルスレッドの性能を引き上げ続けているが、Cortex-A57もCortex-A15からさらにシングルスレッド性能を上げる。Cortex-A9以降のARMのCPUは、最大4コアで1クラスタを形成し、L2キャッシュとシステムバスインターフェイスを共有する。Cortex-A57でもこの構成は引き継がれ、4コアでクラスタを組む。

 従来のARMコアはL1キャッシュサイズが可変なマイクロアーキテクチャが多かったが、Cortex-A57ではL1キャッシュサイズは固定されている。L1命令キャッシュは48KB、L1データキャッシュは32KBで、命令キャッシュがCortex-A15より増量されている。L2キャッシュのサイズは可変で、512KB、1MB、2MBのコンフィギュレーションがが用意されている。サーバーもターゲットとするため、キャッシュにECCなどがオプションで用意されている。

 Cortex-A57では、システムバスも拡張された。従来は「CCI(Cache Coherent InterConnect)-400」と呼ばれるバスでクラスタを接続していたが、サーバー向けの大規模な構成では「CCN(Cache Coherent Network)-504」と呼ばれるバスで16コアまでを接続する。CCN-504では、クラスタ間で共有するL3キャッシュもサポートする。


●アウトオブオーダー実行のリソースを強化

 Cortex-A57は、Cortex-A15アーキテクチャをベースに拡張している。下はCortex-A15のパイプラインだが、Cortex-A57のパイプライン構造はよく似ている。両者の最大の違いは、言う間でもなく64-bit命令サポートだが、Cortex-A57は32-bit時と64-bit時のどちらでも高パフォーマンスを達成できるように最適化されているという。

ARM Cortex-A15のブロックダイヤグラム(PDF版はこちら)

 また、Cortex-A57では“モダンなワークロード”にも最適化されているという。ハイエンドのモバイル製品や、ネットワーク、サーバーでのワークロードで、キャッシュやTranslation Lookaside Buffer (TLB)、ブランチバッファへのプレッシャの増大を想定している。また、オンチップのメモリ階層へのパフォーマンスの依存の増大も想定しており、そうしたワークロードに対する拡張が行なわれている。

 Cortex-A15はフルのアウトオブオーダー実行のスーパースカラパイプラインだが、Cortex-A57も同様で、Cortex-A15よりアウトオブオーダー実行のためのリソースが強化されている。それによって、1クロック当たりに並列に実行できる命令数を増やし、命令レベルの並列性を強化している。

 L1命令キャッシュは48KBの3-wayセットアソシエイティブで、L1 TLBも48エントリと強化されている。L1には命令プリフェッチャが付属している。分岐予測機構では、ブランチターゲットバッファ(BTB)は2K~4Kエントリと、Cortex-A15の256エントリより大幅に強化された。

 命令デコードはCortex-A15と同じ3命令/サイクル。Cortex-A9からCortex-A15では、デコード命令数は2命令から3命令に拡張されたが、Cortex-A15からCortex-A57では増えていない。しかし、レジスタリネーミングやインフライト命令数のウインドウはCortex-A15より強化されており、そのため、実質的により多くの命令を並列実行できる。例えば、インフライトで制御できる命令は、Cortex-A15は2010年の「Linley Tech Processor Conference」での初発表時には60命令と説明されていたが、Cortex-A57では128命令へと増えている。


●整数系で4ポートの命令実行パイプライン

 Cortex-A57の整数系実行パイプの命令ディスパッチポートは合計4。これも、Cortex-A15と同様で、シンプルな整数演算パイプラインが2、分岐が1、乗算と除算のパイプラインが1の構成と見られる。それぞれ個別のスケジューラキューを備える。ポート数は同じだが、整数演算は64-bit化で、演算ユニットも64-bit化している。

 浮動小数点演算/SIMDエンジンはCortex-A57での強化点の1つ。浮動小数点演算はIEEE754-2008準拠となり、ARMv8で加わった暗号処理命令のアクセラレータユニットも実装された。ARM命令のSIMD命令であるNEONをサポートするFP/SIMDユニットは、単精度32-bitなら4並列オペレーション/サイクルのスループットだ。積和算もサポートする。

 ロード/ストアはユニットも、Cortex-A15と同様に2ポートの構成。Cortex-A57では、データの依存関係を予測したアウトオブオーダーのロード/ストアを実行できる。L1データキャッシュは32KBで2-way。32エントリのTLBが付属しており、データを先読みするハードプリフェッチャを備える。64-bit CPUであるCortex-A57のアドレス空間は48-bit仮想メモリ空間、44-bit物理メモリ空間。

 L2キャッシュは2MBまでで16wayセットアソシエイティブ。コア毎にL2に対してインターフェイスを備え、L2に対するハードウェアプリフェッチャも備える。

 Cortex-A57のパフォーマンスは、ARMの発表ではCortex-A15に対して32-bit時に25%以上増える。1.7GHz時のCPUパフォーマンスは、旧来のベンチマークのSPECINT2000で1250スコアとARMは見積もっている。下は、1.4GHzのCortex-A9を1とした場合のCPUパフォーマンスの比較予想で、クアッドコア構成の場合のものだ。紫のラインがCortex-A9 1.4GHz、赤いラインがCortex-A15 1.5GHz、緑のラインがCortex-A57 1.7GHzとなっている。また、比較用に、IntelのAtom N570も加えられているが、トリッキーなことに、これはデュアルコアで、Hyper-Threadingによる4スレッドのものと見られる。

 Cortex-A57のフロアプランの例は下の図の通り。図の緑の部分がロード/ストアで、紫が命令フェッチ、黄色がデコード、赤や青が実行ユニット群だ。Cortex-A57のフロアプランも、Cortex-A15とよく似ている。100%論理合成が可能で、すでにRTLは、ライセンシに渡っているという。

 Cortex-A57は単体で使われるほか、小型コアのCortex-A53と組み合わせたbig.LITTLE構成でも使われることを想定している。

 ARMはCortex-A57を投入した後も、Cortex-A15を継続するとARM Techconのプレスブリーフィングで説明した。サーバーなどの新市場は、すみやかに64-bitのCortex-A57へと移行すると見られるが、モバイルでは32-bitの従来のARMv7命令のCPUコアが残る可能性が高い。そのため、Cortex-A57が登場した後も、Cortex-A57とCortex-A15がスマートフォン&タブレット市場で併存すると見られる。