後藤弘茂のWeekly海外ニュース
Cortex-Aファミリーのダイエリアの変化から見えてくる次世代ARM CPU「Artemis」
(2015/11/28 06:00)
最小で0.45平方mmの小さなCortex-A35コア
ARMのエントリーレベルの64-bit CPUコア「Cortex-A35」は、ARMのCPUコア戦略の変化を象徴している。Cortex-A35のマイクロアーキテクチャとダイエリアを、ほかのCortex-Aファミリーと比較すると、Cortex-Aファミリー全体の変化が見えてくる。
今回の、Cortex-A35は、NEONユニットなしで8KB L1の最小構成時にダイエリアが0.4平方mmとなっている。ARMのCPUコアは通常はRTLでソフトウェアライセンスされ、構成はコンフィギュラブルになっている。標準的な構成ならL1は32KBずつで、NEONユニットも備えるが、最小構成ではこれらを省いた上に、ほかにも削れるパラメータを全て最小にしている。そのため、標準構成のダイエリアはこれよりもかなり大きくなる。
Cortex-A35の前世代に当たるCortex-A7は、NEONユニットを実装し32KBのL1キャッシュ搭載の通常コンフィギュレーションの場合、28nmプロセスで0.45平方mmのダイエリアとARMは発表している。このCortex-A7を最小構成でNEONユニットを外し8KBのL1にした場合、コアのダイエリアはこの半分程度の0.25~0.3平方mmサイズになる。同じCortex-A7でも、通常構成と最小構成ではダイエリアにかなりの差が出る。
最小構成のサイズを比較すると、Cortex-A35はCortex-A7よりも33~60%大きいことになる。最小構成で削られているL1やNEONユニットのサイズがそれほど変わらないとすれば、標準構成のCortex-A35は0.55~0.6平方mm程度のダイエリアと推測できる。実際には浮動小数点演算ユニットは強化されているため、標準構成ではさらに大きくなる可能性がある。しかし、設計とプロセスの成熟によるダイの縮小もあるので、ダイ面積が必ずしも増えるばかりとは限らない。
Cortex-A35を、同じARMv8-AアーキテクチャのCortex-A53を比較すると、パイプラインアーキテクチャは同じインオーダー実行で最大2命令デコードだ。にもかかわらず、Cortex-A53の方がダイが大きい。これは、Cortex-A53はフル2命令デコードであるのに対して、Cortex-A35は非常に限定的な2命令デコードで、アーキテクチャの複雑度が異なるためだ。
Cortex-A53のターゲットダイエリアは、ARMの発表時では28nmプロセスで0.5平方mmとなっている。しかし、実際の製品では、標準構成の場合は、それより大きなサイズの実装だった。そして今回のCortex-A35は、Cortex-A53よりも25%小さなダイエリアと発表されている。逆算すると、Cortex-A53は標準構成で0.7平方mmクラスのダイエリアとなる。
もっとも、同じ28nmで同じ構成のCPUコアであっても、プロセスのオプションやスタンダードセルライブラリのセルハイトの違いによってダイエリアは大きく異なる。同じ構成のCPUコアでも、性能を重視する実装は、低電力実装より最大で40~50%も大きくなる。そのためARMの説明にあるダイサイズは、目安に過ぎないが、相対的な指標にはなる。
複雑化するモバイルSoCでのARM CPUコアの構成
Cortex-A35の狙いは、現在、ARMv7-A命令セットアーキテクチャのCortex-A7が使われているエントリーレベルのスマートフォン市場を、ARMv8-A命令セットのCortex-A35に置き換えること、また、Cortex-A72とCortex-A53で構成するbig.LITTLE構成に、Cortex-A72とCortex-A35の選択肢を広げることだ。混乱するARMのCPUコア構成を、ARMv8-A 64-bitアーキテクチャで統一できるようにする狙いがある。
big.LITTLEが浸透する前の、モバイルSoCでのARMのARMv7-A命令セットCPUコアの構成は非常にシンプルだった。ハイエンドSoCでは、Cortex-A15クラスの大型CPUのクアッドコア構成が主流で、メインストリームではCortex-A9クラスの中型CPUコアのクアッドコアやデュアルコアが主流。ローエンドになると、Cortex-A7クラスの小型CPUコアのクアッドコアやデュアルコアが使われていた。もちろん、例外の構成もあるが、比較的シンプルな世界だった。これは、コアが大きいほどパフォーマンスが高いが、電力消費もコストも大きいというトレードオフがあったからだ。
ところが、現在のモバイルSoCのCPUコアは、ARMコアだけに限っても非常に複雑になっている。big.LITTLEによって、コアサイズによる低負荷時の電力消費が抑えられるようになったためだ。
現状では、ハイエンドの主流は4個のビッグコアと4個のリトルコアを組み合わせた、大型コアと小型コアの対称構成だ。しかし、ミッドレンジ製品では、2個の大型コアと4個の小型コアの組み合わせが広まりつつある。ARMは当初、中型コアと小型コアの組み合わせがメインストリームに来ると説明していたが、そうした構成はマイナーに留まっている。
理由はいくつかある。まず、大型コア2個と中型コア4個を比べると、シングルスレッド性能なら大型コアの方が高くなること。また、大型コアが必要なタスクは、2コア程度でカバーできる場合が多い。それなら、中型コアを4個載せるより、大型コアを2個の構成の方が有利と見ているようだ。
また、64-bitのARMv8-Aに移行が進むなかで、ARMv8-Aの中型コアが提供されていないことも理由だ。64-bitを求めるSoCベンダは、中型コアを選ぶことができない。もっとも、ARM側は、ARMv8-A世代ではメインストリームでは大型コア2個プラス小型コア4個の非対称big.LITTLEが主流になるため、中型コアの64-bit化のニーズはまだ低いと説明している。鶏と卵のような関係だが、ARMの方は現状のコア構成から、中型コアでは32-bitに留めている。
また、背景的な理由としては、ARMのbig.LITTLE制御ソフトウェア技術が進歩したという面もある。旧モデルでは、big.LITTLEのbig側とLITTLE側で同じCPUコア数である必要があった。しかし、今は非対称のCPUコア数でも、ソフトウェアが制御できる。これは、対象型のCPUコア構成でなくても制御できるソフトウェアモデル「Global Task Scheduling(GTS)」が提供されるようになったためだ。GTSが引き金となって、SoCベンダのbig.LITTLEへの対応が急速に進んだ。
中型CPUコアの影が薄くなった現在のARM Cortex-Aファミリー
こうした状況で、ARMのCortex-A系CPUコア戦略は微妙に変わりつつある。従来、ARMのCPUコアは小型CPUコアと大型CPUコアの2系列だった。大型CPUコアは、小型CPUコアに対して、ダイエリアで2~4倍のサイズだった。しかし、Cortex-A15の登場でさらに大型のCPUコアがファミリーに加わった。28nmプロセスでの各コアのダイエリアの相対的な比較は下のようになる。NVIDIAのCortex-A15の28HPLはやや大きめの実装、Cortex-A7はARMの指標のダイエリアだ。
ラフに言うと、Cortex-Aファミリーでは、小型CPUコアに対して中型CPUコアは2.x倍、中型CPUコアに対して大型CPUコアも2.x倍のサイズとなる。中型CPUコアは、ちょうど大型CPUコアと小型CPUコアの中間に入る、分かりやすい相対ダイエリアとなっていた。CPUコアのマイクロアーキテクチャ的には、大型CPUコアは3命令デコードのアウトオブオーダー実行、中型CPUコアは2命令デコードのアウトオブオーダー実行、小型CPUコアは限定2命令デコードのインオーダー実行となる。
ところが、ここへ来てbig.LITTLEとARMv8-Aによって、中型CPUコアの影がモバイルSoCでは薄くなった。そのため、ARMはCPUコアの位置付けの仕切り直しを行ない、従来はエントリーレベル向けの小型CPUコアだったはずのCortex-A53を、メインストリーム向けと位置付け直した。そして、エントリーレベル向けには、より小さなダイエリアのCortex-A35を投入した。
そのため、現在のCortex-AファミリーのCPUコアの位置付けとダイエリアの関係は、以前とはかなり変わっている。プレミアムのCortex-A57/72がダイエリア的には最大で、28nmなら2.x平方mmクラス。これは従来通りだが、メインストリームに位置付けられているCortex-A53は28nmでは1平方mmを大きく切る。そして、エントリーに位置付けられたCortex-A35に対して、Cortex-A53はダイエリアが25%増でしかない。本来なら小型CPUコアのCortex-A53が、メインストリームに位置付けられている。
ぱっと見てわかる通り、プレミアムCPUコアとメインストリームCPUコアのダイエリアの差が大きく、メインストリームとエントリーの差が小さい。もともとエントリーレベルのはずだったCortex-A53がメインストリームに位置付け直されたので、これも当然だ。このように、コスト構造に影響するコアエリアとコアの市場位置付けは従来とは変わっている。
マルチコア化に伴ってCPUコアのサイズを縮小
さらに大きな変化は、CPUコアのダイエリア縮小だ。65nmプロセスでのCortex-A8は、1個のCPUコアが5平方mmを占めていた。それが40nmのCortex-A9になると、コアのサイズは2平方mm前後から2.6平方mm程度に縮小。大型CPUコアのCortex-A15は28nmプロセスで2.x平方mm程度と、40nmのCortex-A9と同等に収まり、ダイエリアは横ばいとなった。それが、現在の14/16nmプロセスでは、大型CPUコアのCortex-A72でさえダイエリアは1平方mm台に縮小している。
ラフに言えば、ARMの最高性能CPUコアは、65nmから40nmで半分のサイズになり、40nmから28nmでは同レベル、そして28nmから14/16nmでさらに半分のサイズになった。プロセスの微細化に伴ってコアを大型化するよりも、コアを縮小する方向へと向かっている。
ARMが相対的にCPUコアサイズを微細化とともに小さくしている理由は2つある。1つはマルチコア化、もう1つはbig.LITTLE化だ。
モバイルSoCの性能強化とともに、CPUコアのマルチコア化が進んだ。Cortex-A9世代になるとデュアルコアが当たり前となり、Cortex-A15になるとクアッドコアも当たり前となった。65nmのCortex-A8はシングルコアで5平方mmだったが、40nmのCortex-A9はデュアルコアで5~6.x平方mm台のサイズだ。ここでは、微細化とともに、CPUコアの数を2倍に増やした。
Cortex-A15世代になるとクアッドコアが当たり前となった。その結果、28nmのCortex-A15 CPUコア自体は40nmのCortex-A9とサイズがさほど変わらなくても、CPUコアとL2キャッシュのエリアは10平方mm台後半へと急増してしまった。28nm世代のプレミアムモバイルSoCは、ダイの中のCPUエリアが相対的に広い。
20nmから14/16nmでは、CPUコアを縮小したことで、クアッドコア構成のCPUエリアの面積を下げている。Cortex-A72のARMの指標の実装は16nmプロセスのクアッドコアで8平方mm。40nm時のデュアルコアのサイズに近い。ARMが同レベルの面積に、より多くのコアを収めようとCPUコアのサイズを小さくしていることがわかる。
これに拍車をかけているのはbig.LITTLEだ。big.LITTLEで、bigの大型CPUコアのクラスタだけでなく、LITTLEの小型CPUコアのクラスタも搭載するようになった。その分のCPU面積がさらに加わる。ARMv8-A世代のクアッドコアのクラスタサイズで比較すると、bigのCortex-A57コアはLITTLEのCortex-A53コアの2~3倍。Cortex-A35は、LITTLE側のCPUクラスタのサイズを、少しでも小さくするという効果がある。
ARMよりもアーキテクチャを拡張するアーキテクチャルライセンシ
こうして見ると、ARMは一定の面積にCPUコア群のダイエリアを抑えようとしており、そのためにCPUコアのエリアを小さく留めていることが推測できる。しかし、そのために、ARMはCPUコアのマイクロアーキテクチャの拡張のペースを緩めている。Cortex-A15からCortex-A72まで、ARMのトップCPUコアの内部アーキテクチャは3命令デコードで、ベースは共通している。ダイエリア的にも消費電力的にも拡張するチャンスだった14/16nmへの移行でも、まだ拡張していない。
こうしたARMの戦略のために、ARM自体のIPのCPUコアは、このところ、シングルスレッド性能を上げるよりも、マルチスレッド性能を上げる方向へと進んで来た。シングルスレッドの性能も上げているのだが、それよりコア数を増やす方に重点があった。シングルスレッド性能では、劇的な向上とはなっていない。そのため、ARMからのアーキテクチャルライセンスを受けているチップベンダは、ARMv8-Aコアを異なる方向へと進化させている。
もともと、ARMサーバー系では、アーキテクチャルライセンスを受けてスレッドあたりの性能を上げたCPUコアが開発されているが、現在はモバイルでもその傾向が強まっている。モバイルでの独自CPUコア開発メーカーのAppleやQualcomm、NVIDIAは、いずれもARM自体のIPコアよりもマイクロアーキテクチャを拡張した、強力なCPUコアを開発している。
AppleはiPhone 5のA6 SoCから、アーキテクチャルライセンスによる独自開発CPUコアに切り替えた。Appleは学会等でCPUアーキテクチャの発表を一切行なわないが、LLVMのレビューに同社のCPUのマイクロアーキテクチャのデフィニションが記されている。それを読むと、命令並列性を高めたAppleコアの概要がわかる。Appleのコアは、1世代前の「Cyclone(iPhone 6/iPhone 5s系のコア)」で、6マイクロOPs(内部命令)を各サイクルにディスパッチする能力がある。整数演算パイプが4本、シフタパイプが2本、整数乗算パイプが1本、除算パイプが1本、ロード/ストアパイプが2本、このほかに分岐ユニットが2ユニットとインダイレクト分岐ユニットが1。整数系だけでもCortex-A72の2倍程度のワイドなパイプ構成になっている。
QualcommがSnapdragon 820に搭載した自社開発のコア「Kryo」は、まだ概要がわかっていないが、こちらもよりワイドな命令デコード&実行帯域を持つと見られている。NVIDIAのDenverは、命令デコーダ自体は2-wayだが、一旦デコードした命令に最適化スケジューリングを行ない、最大7マイクロOPsの並列実行ができる。
Apple、Qualcomm、NVIDIAなどのアーキテクチャルライセンスのCPUコアは、いずれもARMのCortex-A57/72コアよりもサイズ的にも大型のコアとなる。つまり、ARMがCPUコアを小型化し続ける一方で、ライセンスを受けたメーカーは、ARMよりサイズの大きなCPUコアを創る。コアサイズの階層的には、アーキテクチャルライセンスコア、ARMの大型コア、中型コア、小型コアという4階層になっている。
ただし、ARMがCPUコアのダイエリアとマイクロアーキテクチャの階層を切り替えたことは、もしかすると、今後ARMがCPUコアの階層をさらに変化させる前触れかもしれない。
14/16nm世代でCortex-A72クアッドコアクラスタは、40nmのデュアルコアクラスタのサイズに近づいており、10nm世代では、ARMはCPUコアを大型化する余裕がある。ARMが10nmプロセスをターゲットに開発している次世代CPUコア「Artemis(アルテミス)」は、より複雑なマイクロアーキテクチャで、シングルスレッド性能をより劇的に高めたコアになるかもしれない。