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

Arm、Skylakeの性能の90%に迫るCPUコア「Cortex-A76」

Skylakeの90%の性能のCortex-A76

 Armは満を持して高性能CPUコア「Cortex-A76(Enyo)」を投入する。Armが昨年(2017年)導入したDynamIQプラットフォームの新CPUコアだ。CPUのマイクロアーキテクチャを一新、4年かけて完全な設計を行なった。ArmのCPUコアとしては、初めて4命令デコード/サイクルを採用した。従来のArm CPUコアは、最大でも3命令デコード/サイクルだったが、Cortex-A76は4命令を同時にデコードできる。より広い命令デコード帯域を備えている。

新しいCPUコアファミリのベースとなる新アーキテクチャ
高い性能効率のCortex-A76

 デコードできる命令数が増えれば、並列に実行できる平均命令数「IPC(Instruction-per-Clock)」が増える。その分、クロック当たりの性能が上がる。つまり、Cortex-A76は、同じクロックなら、ArmのCPUコアとしては最高性能のCPUとなる。Armは、Cortex-A76がラップトップクラスの性能を実現すると説明する。

 例えば、同じArmのCPUコアとの比較では、7nmプロセスのCortex-A76(3.3GHz)は、シングルスレッドのピーク性能で16nmプロセスのCortex-A73(2.45GHz)の約2.1倍。big.LITTLE構成で5Wの電力内で比較しても1.9倍の性能を発揮するとArmは説明する。言い換えれば、2017年のArmの最高性能モバイルの2倍の性能を、2019年のCortex-A76では実現できることになる。

Cortex-A73 2.45GHz@16nmプロセス、Cortex-A75 2.8 GHz@10nmプロセス、Cortex-A76 3.3 GHz@7nmプロセスの性能比較

 Cortex-A76がラップトップクラスとArmが主張するのは性能レンジについてだ。「Cortex-A76は、IntelのSkylake)と比べて、10%の性能差まで迫る」とArmのNandan Nayampally氏(VP and GM of Client Line of Business,Arm)は語る。同じフォームファクタなら、Skylakeの90%の性能を達成できるため、ラップトップクラスと位置づける。

 もっとも、だからと言って、ArmがCortex-A76をラップトップに特化したCPUコアとして推奨するわけではない。また、Cortex-A76がラップトップレンジの電力に最適化されているわけでもない。その意味では、ラップトップクラスというのは、Intel CPUの性能レンジに近づいたことを示すマーケティングタームと言ってもよさそうだ。

電力効率を第一に重視したCortex-A76

 実際には、Cortex-A76は、従来のArmのbig CPUコアと同様の電力枠で、性能を引き上げている。つまり、これまで同様に、スマートフォンなどのモバイルデバイスに搭載できる電力のコアだ。10nmのCortex-A75との比較では、7nmのCortex-A76はコア当たり750mWの電力で比較して、40%性能が向上するという。また、同じ性能で比較すると約50%電力を抑えられるという。10nmと7nmの比較では、プロセス技術の寄与分は相対的に少ないので、アーキテクチャの向上の幅が大きいことがわかる。

10nmのCortex-A75と7nmのCortex-A76の比較

 また、Cortex-A76では、今回SIMD/浮動小数点演算のパイプラインが改良されたことで、浮動小数点演算の性能が上がった。そのため、Cortex-A73/75と比較すると、浮動小数点系の性能向上幅が大きい。Cortex-A73との比較では、浮動小数点性能は2.5倍となるという。また、SIMD演算では、ディープラーニング向けのドット積命令も加えられている。

Cortex-A73、A75、A76の比較
性能と電力効率が向上したCortex-A76

 Armは、Cortex-A76に加えて、新GPU「Mali-G76」と新ビデオプロセッサ「Mali-V76」も投入。Cortex-A76でCPUはメジャーアーキテクチャチェンジになったが、GPUもMali-G76で大幅にアーキテクチャが拡張され、ビデオもMali-V76でアーキテクチャが拡張される。Armはこれらの新コアIPを、2019年のプレミアムモバイル向けに推進している。

Cortex-A76、Mali-G76、Mali-V76と型番を揃えた新IP群
Armの提案する2019年のプレミアムソリューション

4命令デコードに拡張されたCortex-A76のフロントエンド

 Cortex-A76のマイクロアーキテクチャの概要をさらってみると、この新CPUコアが効率的に設計されていることがよくわかる。最大のポイントは、命令デコード幅を4命令/サイクルに引き上げながら、実行コアの拡張は最小に抑えた点だ。

命令デコード帯域は引き上げたが、実行パイプラインは抑えた
Cortex-A76コアの全体構成
PDF版はこちら

 ArmのプレミアムCortex-Aシリーズには2系統のマイクロアーキテクチャがある。1つは、Cortex-A73やA75などの整数演算&データ系のパイプラインと浮動小数点/SIMD演算パイプラインが分離されているアーキテクチャ。もう1つは、Cortex-A57やA72などのすべてのパイプラインのスケジューリングが統合されているアーキテクチャだ。Cortex-A76は後者で、Cortex-A72と似通ったアーキテクチャとなっている。

 Cortex-A76では、命令デコードが3デコーダから4デコーダに拡張されている。しかし、実行ユニットへの命令イシューポートは8個で、3命令デコードのCortex-A72とイシューポート数は変わらない。実行パイプラインのリソースは抑え、パイプラインの稼働率を上げることにフォーカスしたアーキテクチャだ。アウトオブオーダウインドウも128命令と抑えられている。

 フロントエンドでは、まず、分岐予測機構を命令フェッチパイプラインから分離、分岐予測をプリフェッチ-フェッチパイプラインと平行して走らせることで分岐予測によるレイテンシを隠蔽している。BTB(Branch Target Buffer)はメインBTBは6Kエントリと大きく取り、BTBアクセスのレイテンシを短縮するために、BTBを3段階とした。従来のアーキテクチャでも採用した64エントリのマイクロBTBのほかに、さらに小さな16エントリのナノBTBを設けている。分岐予測のアルゴリズムは公開されていない。

BTBを3ステージとした分岐予測機構

 L1命令キャッシュは64KBの4-way。命令フェッチは各サイクル最大4命令。ただし16-bit命令の場合は最大8命令フェッチとなる。命令デコーダは4命令デコード/サイクルで、Arm命令体系の命令群はいったん「マクロOPs(Mops)」に変換される。デコーダからは、最大4Mops/サイクルで、レジスタリネーミング/ディスパッチユニットに渡される。ディスパッチステージでMopsは、マイクロオペレーションの「マイクロops(uops)」に分解され、ディスパッチされる。ディスパッチは、最大8uops/サイクル。

命令フェッチは最大4命令/サイクル
CPU命令はいったんマクロOPsに変換され、マイクロOPsに分解される。この仕組み自体はCortex-A72と同様だ

効率を重視した実行エンジン

 8個のuopsは、8個の独立したイシューキューにディスパッチされる。整数演算系のイシューポートが4、浮動小数点/SIMD(Single Instruction, Multiple Data)演算系のイシューポートが2、データアクセス系のイシューポートが2。この構成は、前世代のCortex-A72と変わらない。

 整数演算系は、シンプルALUへのポートが2個、シンプルALUとマルチサイクルのALUの共有ポートが1個、分岐ユニットへのポートが1個だ。ALUは合計で3パイプラインで、4命令デコードでも、整数演算を常に4個並列に実行できるわけではない。これは、プログラムの命令ミックスを考えた結果だという。

整数演算系は4パイプで1つは分岐専用

 SIMD/浮動小数点系は、128-bit SIMDの2パイプライン。どちらも積和算のFMAC、乗算のFMUL、加算のFADDをサポートし、片方のパイプはさらに除算のFDIVと整数の積和算のIMACもサポートする。演算レイテンシはFADDで2サイクル、FMULで3サイクル、FMACで4サイクルと短レイテンシとなっている。

浮動小数点/SIMDは、完全な128-bit SIMDとなりスループットが上がった

 データ系は2ポートで、それぞれロードとストアの両方をサポートする「アドレスジェネレータ(AGU)」に接続されている。68のインフライトロードと72のインフライトストアをサポートしており、メモリアクセスのレイテンシを隠蔽できるようになっている。データプリフェッチャも大幅に強化されている。

Armは世代毎にメモリレベルの並列性を高めている
キャッシュ階層はL1、L2、L3の3階層
キャッシュ実効帯域を引き上げた

 64KBのL1データキャッシュは、マルチバンク化によって実効アクセス帯域を拡張している。L1データキャッシュのロードレイテンシは4サイクル、256KBまたは512KBのL2キャッシュは9サイクル。L2までがコア専用のキャッシュとなっており、L3からCPU間で共有される。

Arm CPUコアの大幅刷新

 Armは、これまで最高性能のCortex-A75でも、3命令デコード/サイクルと、狭い命令デコード幅にこだわってきた。対して、x86系CPUコアは、IntelのLake系が5命令デコード、AMDのZENが4命令デコードである上に、命令は複合命令を含むCISC(複雑命令セットコンピューター)アーキテクチャで、命令デコード帯域は広い。また、同じArm命令セットアーキテクチャでも、AppleやSamsung、Qualcommなどが、すでにArmより広い命令デコード幅のCPUを市場に導入している。しかし、Armは3命令デコードの、小さなCPUコアにこだわって来た。

 しかし、Cortex-A76の登場で、状況は変わった。Armは1段踏みだし、より高性能なCPUへの扉を開いた。DynamIQプラットフォームでは、高性能コアが4命令デコードのCortex-A76、その下が3命令デコードのCortex-A75、LITTLEコアが2命令デコードでインオーダ実行のCortex-A55となっている。DynamIQ世代になり、ArmのCPUコアの性能レンジが1段階底上げされたことがわかる。

Cortex-Aファミリのアーキテクチャ
PDF版はこちら

 また、Cortex-A76の実行パイプラインやデータアクセスは、Cortex-A72を踏襲しているように見えるが、実際には大きく改良されている。命令デコード帯域の拡張に見合うような拡張が加えられている。より詳しくは、ほかのArmコアとの比較で説明したい。