今回はAppleが米P.A. Semiを買収し、ArmのIPをライセンスして開発したA6プロセッサから話を始める。
独自設計CPUコア「Swift」を採用した「A6」
2012年、iPhone 5に搭載される形でApple A6がデビューする。これがApple初の独自設計CPUコア「Swift」である(GPUは英ImaginationのPowerVR SGXをまだ使っている)。このSwift、内部構造は公式には発表されていない(というかA6から最新のA14まで、内部構造に関しては一切、公式には解説されていない)が、推定される内部構造は、
3命令解釈・発行のSuper Scalar/OoO(Out-of-Order)構成
命令セットはArmv7A。ただしCortex-A15で追加されたAdvanced SIMD v2やVFPv4といった命令を追加
といったもの。同じ2012年にArmはCortex-A15を発表するが、おそらく内部構造はよく似たものだったと思われる。もっとも、AppleがCortex-A15をベースにSwiftを作ったというつもりはない(Armのライセンス的に不可能)。Cortex-A9が2命令のSuperScalar/OoO実装で、これを超えるとなると当然3命令のSuperScala/OoOになる。大きな枠での構造は似ているだろうが、細部の実装が同じかどうかまでは分からない。
Apple A6のダイサイズは95mm2とされ、うちDual Core Swiftのエリアサイズはおよそ15.4mm2、コアあたり7.7mm2となる。おおむね常識的なサイズといえるだろう。
分岐予測で特許訴訟になった「A7」
おそらくこのSwiftをベースにArmv8-Aを実装したのが、2013年に投入されたCycloneコアベースのA7である。
A7のダイサイズは102mm2とされており、Dual Core Cycloneのエリアサイズは18mm2、コアあたり9mm2とやや大型化している。プロセスはSamsungの32nm HKMGから28nm HKMGになっており、本来ならばややエリアサイズが縮小するはずであるが、L1キャッシュを32KB+32KBから64KB+64KBに大型化(L2は1MBのまま)した他、内部レジスタは当然Armv8-Aに対応して64bit化。さらにNEON周りは128bit化しており、こうした内部バッファの容量増加がエリアサイズ増加の要因と思われる。
内部構造的にはSwiftをやや強化し、4命令解釈・5命令発行程度のSuper Scalar/OoOと見られている。余談であるが、Cycloneと次のTyphoonの世代で導入した新しい分岐予測機構に関し、2015年にWARF(Wisconsin Alumni Research Foundation:ウィスコンシン大学研究基金同窓会)が保有する米国特許US5781752Aを侵害していると訴えられている。連邦地方裁判所は、Appleがこの特許を侵害していると認定し、5億600万ドルの支払いを命じるものの、Appleは連邦巡回控訴裁判所に上訴。最終的に2018年9月に地方裁判所の裁定が破棄されている。
TSMC製造になった「A8」
さて、この次に来るのは2014年9月に登場したiPhone 6に導入されたApple A8である。
ここに搭載されたTyphoonコアは、大幅に内部構造を強化した。命令パイプラインは6命令解釈・9命令発行のSuperScalar/OoOと見られている。プロセスはTSMCの20nmに変わり、ダイサイズはやや小さくなって89mm2である。Dual Core Typhoonのエリアサイズは12.4mm2で、コアあたり6.2mm2と推定される。CycloneまではCPUコア内部の配置配線が規則的というか、手配線を多用した感じのレイアウトになっていたのが、このCycloneから明らかにEDAツールで最適化しました、という感じに変わっている。28nmまでよく手配線でがんばったという気はするが、さすがに限界だったのだろう。
2つのファウンダリで生産された「A9」
この次に当たるのが、2015年9月発表のiPhone 6Sに搭載されたApple A9である。
このApple A9は、TSMCの16nmとSamsungの14LPEという2つのファウンダリで製造された珍しいパターンである。
この世代、内部構造的には以前のTwisterと大きな違いはなく、6命令解釈・9命令発行のSuperScalar/OoOと見られている。またReorder Bufferの数も192で、これもTwisterと変わらない。ただ細かくLatencyを減らした(例えばBranch Misprediction Penaltyが16→9cycle、FP32のLatencyが1cycle減、etc...)他、L2も3MBに強化している。加えて、TSMCの20nm(最後のプレナータイププロセス)からFinFETプロセスに移行したことで動作周波数が大幅に向上(1.40GHz→1.85GHz)しており、これで十分性能を稼げた、という話もある。
ただこの時期、Appleは次のA10世代に向けて2種類のコアを開発する必要があった。それもあってTyphoon→Twisterは主にFinFETプロセスへの移行を重点項目とし、新機構の導入は先送りした感がある。
初のbig.LITTLEコア搭載「A10」
2016年9月発売のiPhone 7に実装されたApple A10は、同社としては初のbig.LITTLE実装のCPUコアとなった。big.LITTLEそのものは2011年には既に発表されており、それこそCortex-A7とCortex-A15の組み合わせなどが可能であったが、実際にこれがスマートフォン向けSoCに広く実装されるようになったのは2013年ごろからだと記憶している。
big.LITTLEという技術そのものは既に多数の解説記事があるので割愛させていただくとして、これを利用するにはハードウェアだけでなくソフトウェア、それもOSのスケジューラがbig.LITTLEに対応しないとその効果が得られない。
実のところArmは2011年から数年かけてLinux向けのスケジューラの改良に取り組み、これがAndroidにも取り込まれていった結果として、2013年ごろからスマートフォンでもbig.LITTLEが使えるようになったという話だ。一方、Appleの場合はiOSが自社開発なので、テクノロジーそのものの供給はArmから得られても、実装は自社で何とかするしかない。iOSの対応に時間が掛かった結果として、big.LITTLEの実装がAndroidスマートフォンよりもやや投入が遅れた、ということだろう。
ただ、Android系の実装はbigコアとLITTLEコアの両方が同時に稼働可能(負荷に応じてそれぞれのコアに割り振るタスクを選べる)なのに対し、この当時のiOSの実装はもう少し原始的な、bigコアとLITTLEコアが排他的に稼働する方式だった。これはbig.LITTLEの当初のスケジューラのインプリメントと同じで、要するにシステム全体の負荷を見て、ある閾値を超えたらbigコアに処理を移し、処理負荷が下がったらLITTLEコアに処理を戻す、という方式である。なのでOSというかアプリケーションから見ると、A10は実質CPUが2コアとして見えることになった。
さてこのA10には2コアのHurricane(2.34GHz駆動)と2コアのZephyr(1.1GHz駆動)が搭載された。このHurricaneであるが、あまり詳細が明らかになっていない。相変わらず6命令解釈・9命令発行のSuperScalar/OoO構成であるが、L2の大容量化などを含めて、細かく内部をチューニングしたという感じである。その意味ではTwisterの延長にあると思われるが、命令セットの変更(Armv8-A→Armv8.1-A)もあり、延長といっても変更箇所は割と多かっただろう。
一方のZephyrであるが、こちらはさらに情報がない。ただ、動作周波数が1.1GHzとかなり低く抑えられているあたり、パイプライン段数もかなり少なく、おそらくはIn-Orderで下手をするとSingle Issue(つまりSuper Scalarですらない)な構造の可能性もある。製造プロセスはTSMCのN16++を利用している。
同時6コア稼働になった「A11 Bionic」
次の世代は、2017年9月発表のiPhone 8に搭載されたA11 Bionicに内蔵される、Monsoon/Mistralコアである。このA11 Bionicではコア数がMonsoon(big)×2/Mistral(LITTLE)×4コアになった。またスケジューラが改良され、同時6コアの稼働が可能になっている。
Monsoonは7命令解釈・9命令発行のSuperScalar/Out-of-Orderであり、Mistralも3命令解釈・発行のOut-of-orderになった。実はこのMistralはSwiftをそのまま(ちゃんとArmv8.1-Aとbig.LITTLE対応に変更しているが)利用している。MistralというかSwiftが高効率(=相対的に低性能)扱いされるほど、Monsoonの性能が上がった、ということでもあるのだが。Monsoonは2.53GHz駆動、Mistralは1.42GHz駆動である。製造プロセスはTSMCの10nmが利用された。ちなみにこの世代では命令セットもArmv8.2-Aになっている。
7nmプロセスで消費電力を抑えた「A12 Bionic」
2018年9月発表のiPhone XSなどにiPhone XSなどに搭載されたA12 Bionicには、Vortex/Tempestの組み合わせが実装された。このVortex/Tempest、基本的にはMonsoon/Mistralの延長である。Vortexはやはり7命令解釈のSuper Scalar/OoO構成で、Monsoonと比較して細かくLatencyを削減したり、L1を大容量化(64KB→128KB)するなどして性能を引き上げている程度であるが、TSMCの7nmプロセスの採用もあって動作周波数を引き上げつつ消費電力を抑えている。Mistralの方はほぼMonsoonというかSwiftという形だが、この世代は命令セットがArmv8.3-Aに切り替わったこともあり、そうした部分への対応は行われている。
現在唯一のArmv8.4-Aフル対応? iPhone 11搭載の「A13」
そしてついこの前まで最新だったのが、2019年9月に発表されたA13に搭載された、Lightning/Thunder。こちらも内部構成は基本的に変わらず、7命令解釈・9命令発行のSuperScalar/Out-of-Order構成である。製造プロセスはTSMCのN7Pになった。ただし命令セットはArmv8.4-A対応になる。
実はこのArmv8.4-Aにフル対応したCPUコアは、筆者が知るかぎりLightning/Thunderしか存在しない。Arm自身が提供するCPU IPは、最新のCortex-A78であってもArmv8.2-A相当である。Armの命令セットの規約は、「そのバージョンで定義されているすべての命令をサポートしたら、そのバージョンを名乗ってよい」ことになっている。Armの提供するCPU IPの場合、「Armv8.2-Aのフルセット+Armv8.3-A~Armv8.6-Aの一部の命令をサポート」という形になっている。だからArmv8.3-A/v8.4-A準拠を名乗れないという、ちょっとした逆転現象が起きている。
ちなみにArm自身は今年投入予定(おそらく10月に開催されるArm DevSummitでお披露目だろう)のMatterhornというコアで、Armv8.6-Aフルサポートを約束している。
新iPad Airに先行搭載、最新の「A14」
そして2020年9月15日に新しいiPad Airに搭載される形で発表されたのが、TSMCの5nmで製造されるA14である。
ただ現状このA14にどんなCPUが搭載されているのかは不明である。引き続きbigコア×2+LITTLEコア×4の構成になることは明らかにされているが、なにせまだ実機が存在しない状態では性能も内部構成も不明である。GitHubにAppleが展開しているllvm-projectのターゲットファイルを確認しても、まだA13までしか定義が上がっていない。このあたりはもう少し待たないと詳細は出てこないだろう(まずは実機が入手できるようにならないと……)。
ということでA6~A14までの一連の流れをご紹介した。ちなみにここまででは省いたが、このA6~A12とは別に、iPad向けにCPUやGPUのコア数を増やしたり、動作周波数を引き上げたりしたA8X~A12XとかA12Zという高性能版も存在するが、CPUコアそのものは同一世代のA8~A12と同一なので、説明からは省いている。
ところで「それぞれの性能はどうか」という話を最後に。「何を使って評価するか」というのは非常に難しいのだが、一つの目安はGeekBench 5のスコアである。GeekBench 5のSingle Core性能の結果をまとめたのがグラフ1である。
ただ、元の結果を見ていただくと分かるが、同じCPUを使う複数の製品が入っていたりするし、またそもそも動作周波数が違っているので、絶対性能の差は分かるものの、CPUコアの性能差は良くわからない。そこで、同じCPU同士はまとめて平均を取るとともに、1GHz当たりのGeekBench Scoreを表示するようにしたのがグラフ2である。
なぜかA9Xではやや性能が下がっているが、基本的には破線の近似値が示すように、世代ごとに8.5%ほどのIPC改善が行われているのが分かる。X/Zシリーズを抜くとグラフ3のように、世代毎に16.3%近い性能改善になる。
構造的な大きな飛躍は、6命令解釈・9命令発行のA8(Typhoon)と、6命令解釈・9命令発行のA11(Monsoon)で、後は細かな改良の積み重ねということになるが、そうした細かい積み重ねで平均世代あたり16%以上のIPC改善を成し遂げているあたり、AppleのCPU開発能力はIntelやAMD、IBMといったメーカーと同等レベルにあると考えてよいだろう。