AppleがMacをARMベースの独自チップに移行、モバイル向けでいかにx86に立ち向かうか?

文●大原雄介(http://www.yusuke-ohara.com/) 編集●北村/ASCII

2020年07月13日 12時00分

 前回のA64FXに続き、ARMプロセッサーの後編はAppleのMac(Macintosh)向けApple Siliconの話である。が、いきなりここに飛びつく前に、まずは過去の経緯を簡単に振り返っていこう。

何度もアーキテクチャー変更があった
Macのプロセッサー遍歴

 冒頭に書いておくと、Macがプロセッサーアーキテクチャーを変更するのは、公式にはこれで3度目。非公式には4度目になる。

 つまり初代のMacintoshやMacintosh II、Quadraなどに使われてきたMC68Kシリーズ、PowerMacに移行が決まる前に、非公式に移植が進められてきていたMC88K、そしてPowerPC、x86ときて、今回がARM v8-Aである。

 MC88Kがあまり知られていないのは、製品が出ていないのだから当然であるが、68K→88Kのエミュレーターが完成した段階で、MC88KからPowerPCの乗り換えが社内でアナウンスされたそうで、移植担当者が相当なげいたという話を聞いたことがあるが、それはそうであろう。

 初期のPowerPCのプロセッサーバスは俗に601 Busと呼ばれるが、これはMC88100との互換性を持つものだった。理由は、連載500回で述べたが、88K→PowerPCへの移行を容易にするためである。このあたりの話は以前「忘れ去られたCPU黒歴史」のMC88000の章(単行本化の際に加筆した章なのでウェブでは未公開)で触れた話だ。

iPhone/iPad向けSoCはARMコアを採用

 話を戻すと、今度は“Apple製のシリコン”を搭載するというわけで、iPhone/iPadに利用されているARMベースになるのは間違いない。開発キットにはA12Z Bionicが搭載されているほどだから、これでARM以外だったらその方がどうかしている。

 さて、ではAppleのARMとの関わり合いは? ということでiPhone/iPad向けSoCを一覧で示してみたのが下表である。

 初期はSamsungのカスタムSoCを利用しており、これはオーダーをAppleからSamsungに投げ、それをもとにSamsungが組み上げた格好だ。これがAppleの設計に切り替わるのは、Apple A4からである。

 Apple A5以降はiPhone向けのAn(n:5~13)と、iPad向けのAnX(n:5~12)に分かれているが、基本的にiPad向けはエリアサイズと消費電力にゆとりがある(筐体が大きいので、パッケージサイズが大きくても許容されるし、また放熱能力とバッテリー容量にゆとりがあるから、消費電力が上がっても許容される)ので、iPhone向けのAnシリーズのコア数を増やしたり、動作周波数を引き上げたりした派生型と考えればいい。

 さてその基本のAnシリーズだが、A5まではARM提供のIPコアを利用していたが、A6以降は独自設計のコアを利用しており、Swift/Cyclone/Typhoon/Twisterと来て、A10世代からはbig.LITTEに基づくBigコア(Hurricane/Monsoon/Vortex/Lightning)とLittleコア(Zephyr/Mistral/Tempest/Tunder)の両方が利用されるようになっている。

 この独自設計のコアであるが、Appleは2008年にP.A.Semiという会社を買収しており、ここの設計チームがそのままAppleの独自コア開発に携わる、と当時から噂されていた。

 このP.A.Semi(元はPalo Alto Semiconductor)は2005年のFall Processor ForumでPA6TというPowerPCベースのコアと、これを実装したPWRficient 1682MというSoCを発表しているが、この発表者が誰あろうJim Keller氏(当時の肩書はVP Engineering, Architecture Group)である。

Jim Keller氏。腕組みしながら講演というスタイルはこの当時から変わっていない気がする

 最近ではインテルを辞任したことで話題になったKeller氏であるが、そのインテルがKeller氏就任直後に出したのがこちら。

この当時、インテルのPRチームはKeller氏のキャリアがインテルで最後だと思ったのだろうか?

 このスライドで、Keller氏はAppleでA4とA5の開発に携わったとしている。時期的に言って嘘ではないが、実際にはもっと重要な、A6/A7のグランドデザイン(というか移植)にめどがついたことでAppleを離職したのではないかと考えている。

 というのは、表からもわかるようにApple A4/A5はCortex-A8/Cortex-A9をベースとしたシステムで、もちろんこれをベースにSoCを組み上げるためにはPWRficient 1682Mや、さらにその前のSiByteのSB1000での経験と知識が大いに役立ったと思うのだが、Keller氏の本職(?)はCPUアーキテクトであり、CPUコアそのものはいじれないCortex-A8/A9を組み上げるのは、別に氏でなくても足りる。

 しかしこれに続く独自コアのSwift/Cycloneは、CPUアーキテクトなしではどうにもならない。こう考える理由は、PA6Tというコアの先進性にある。

PA6T。フロントエンドは4命令/サイクルでフェッチ(読み出し)し、これを1サイクルあたり3つの内部命令に変換、それぞれ実行する。発行ポートは整数演算、FPU/VMX演算、Load/Storeの3つ

 PA6Tは、命令セットこそPowerPC 2.04準拠ながら以下の重厚な構成である。

  • 32bit/64bit両対応。FPU及びVMX SIMDも実装
  • 4命令フェッチ/3命令同時発行のアウト・オブ・オーダー/スーパースカラー実装
  • MicroOpを利用し、さらにMicroOp Buffer(L0 Cache)まで搭載

 このような構成でありながら、65nmプロセスでの製造で2GHz駆動のコアあたりの消費電力は6.25W(同社の説明は「8コアで50W以下」であった)という高効率性を誇る。

 2GHzにおけるSPECint(おそらくSPEC CPU2000のことと思われる)は1000以上、というのが説明であった。ちなみにSPEC CPU2000で1コアのスコアが1000前後というのは、例えばDellのPowerEdge 1750にあたり、PrestoniaベースのXeon 3.06GHz(533MHz FSB)相当ということになる。

 ここからは筆者の推測だが、Keller氏は「副業として」Apple A4/A5の開発の面倒も見ていたかもしれないが、本職はこのPA6Tのアーキテクチャーをベースに、新規にARMコアを起こす作業を、(買収にともなう)2008年のAppleの入社から、2012年の退社までの間に携わってきたのではないかと考えている。

 もともとのPA6Tは64bit対応のアーキテクチャーなので、本命はARM V8-AのCycloneである。ただ64bit対応のためにはiOSやアプリケーションの移行も同時に必要である。したがって、まずは前段階として32bitのARM V7-Aを移植したSwiftをリリース、次いでこれにARM V8-Aを追加したCycloneを開発したことになるだろう。

 実際には、フロントエンドはPowerPCからARMへの命令セットの変換になるが、バックエンドはアプリケーションにもう少し最適化した形での実行ユニットの強化が行なわれたと思われる。

 特にPA6Tの場合は65nmプロセスを使い、消費電力もコアあたり6W程度がターゲットだったので、複雑なユニットを同時に動かすよりも、シンプルなバックエンドを動作周波数を上げて動かす方が効率的かもしれないが、iPhone向けだとコアあたり1W程度に抑える必要があるため動作周波数が上げにくい。

 その代わりに利用できるトランジスタ数が大幅に増える(Samsungの28nm HKMGプロセスやTSMCの20nmプロセスがターゲット)ので、自ずと構成そのものも見直す必要があるだろうし、実際見直したはずだ。こうした実装の指揮こそ、Keller氏の肩書にふさわしい作業と言える。

 もっとも、Keller氏がAppleを離れたあとも、Appleのプロセッサー開発は当然続く。どこまでKeller氏の影響があったかははっきりしないが、Cycloneどまりか、あっても続くTyphoon/Twisterまであたりでであり、big.LITTLEに対応したHurricane以降はおそらくもうKeller氏の作業はあまり関係なくなっているだろうと想像される。

世代ごとに平均16%ほどIPCを改善する
iPhone/iPad向けSoCの驚異の性能

 Keller氏が退職した後も、プロセッサー性能の伸びを見ると、なかなかすごいものがある。下表は、GeekBenchのBenchmark Chartsを使ってiOSアプリケーションのシングルコア性能の一覧から、SoC別にまとめたうえで1GHzあたりのシングルコアの結果の平均を取ったものである。

GeekBenchによるiOSアプリケーションのシングルコア性能一覧。このページの結果は随時更新されるので、これはあくまでも原稿執筆時点での数値である

GeekBenchによるiOSアプリケーションのシングルコア性能
SoC 1GHzあたりのシングルコアの結果
A13 Bionic 490.7
A12Z Bionic 446.8
A12X Bionic 445.0
A12 Bionic 443.5
A11 Bionic 383.2
A10X Fusion 361.3
A10 Fusion 331.0
A9X 280.5
A9 302.5
A8X 252.0
A8 231.8
A7 199.1

 派生型(例えばA8→A8XとかA9→A9Xなど)はあまり大きな性能のジャンプはないが、An系列で言えば、下のグラフのように世代ごとに平均16%ほどIPCを改善していることが見て取れる。

 ちなみに最新のA13 Bionicで490.7(絶対値で言えば冒頭の画像の先頭にあるiPhone 11 Proの2.7GHz駆動で1325~1327)というスコアがどのくらい高いかというと、x86向けのシングルコア結果で以下のようになっており、もうIPCという意味ではとっくにx86を凌駕していることになる。もちろんGeekBenchの結果だけで判断するのは無茶であり、1つのサンプルでしかないが目安にはなるだろう。

GeekBenchによるx86向けのシングルコア結果
CPU スコア 1GHzあたりのスコア
Core i9-10900K(3.7GHz) 1418 383.2
Ryzen 9 3950X(3.5GHz) 1295 370.0

A10はExynos M3相当
A11はExynos M5相当の性能

 問題はAppleが、それぞれのSoCの内部構造をまったく明らかにしてくれないことで、どんなものか想像するしかないのだが、1つの目安としてAndroidにおけるシングルコアの結果を使ってみたい。

GeekBenchによるAndroidのシングルコア性能一覧。このページの結果は随時更新されるので、これはあくまでも原稿執筆時点での数値である

 大勢を占めるSnapdragonはやっぱり独自コアなので中身がわからないのだが、その次の勢力であるSamsungのEyxnosに関しては内部構造がある程度わかっている。そこでこの画像のリストからExynosシリーズのみを抜き出し、整理したのが下表である。

GeekBenchによるiOSアプリケーションのシングルコア性能
SoC 1GHzあたりの
シングルコアの結果
コア構成
Exynos 990 387.7 Exynos M5(2.73GHz)×2+Cortex-A76(2.5GHz)×2+Cortex-A55(2GHz)×4
Exynos 9825 366.7 Exynos M4(2.73GHz)×2+Cortex-A75(2.4GHz)×2+Cortex-A55(1.95GHz)×4
Exynos 9820 377.8 Exynos M4(2.73GHz)×2+Cortex-A75(2.31GHz)×2+Cortex-A55(1.95GHz)×4
Exynos 9810 325.9 Exynos M3(2.9GHz)×4+Cortex-A55(1.9GHz)×4
Exynos 9610 195.9 Cortex-A73(2.3 GHz)×4+Cortex-A53(1.7 GHz)×4
Exynos 8895 213.0 Exynos M2(2.314GHz)×4+Cortex-A53(1.69GHz)×4
Exynos 8890 213.8 Exynos M1(2.6GHz)×4+Cortex-A53(1.6GHz)×4
Exynos 7904 162.2 Cortex-A73(1.8GHz)×2+Cortex-A53(1.6GHz)×6
Exynos 7885 185.5 Cortex-A73(2.2GHz)×2+Cortex-A53(1.6GHz)×6
Exynos 7884 167.2 Cortex-A73(1.6GHz)×2+Cortex-A53(1.35GHz)×6
Exynos 7420 158.8 Cortex-A57(2.1GHz)×4+Cortex-A53(1.5GHz)×4
Exynos 5433 170.3 Cortex-A15(1.9GHz)×4+Cortex-A7(1.3GHz)×4
Exynos 5410 90.6 Cortex-A15(1.8GHz)×4+Cortex-A7(1.3GHz)×4
Exynos 7880 75.3 Cortex-A53(1.9GHz)×8
Exynos 7870 71.6 Cortex-A53(1.6GHz)×8
Exynos 7580 68.2 Cortex-A53(1.6GHz)×8
Exynos 7578 68.7 Cortex-A53(1.5GHz)×4
Exynos 7570 72.1 Cortex-A53(1.4GHz)×4

 スコアで比較すれば、以下のようになっていることがわかる。

  • A7≒Cortex-A73
  • A8>Exynos M2
  • A9<Exynos M3
  • A10≒Exynos M3
  • A11≒Exynos M5
各CPUの特徴
Cortex-A73 3命令Decode/6命令Dispatchのスーパースカラー/アウト・オブ・オーダー
Exynos M2 4命令Decode/11命令Dispatchのスーパースカラー/アウト・オブ・オーダー
Exynos M3 6命令Decode/12命令Dispatchのスーパースカラー/アウト・オブ・オーダー
Exynos M5 5命令Decode/8命令Dispatchのスーパースカラー/アウト・オブ・オーダー
Cortex-X1

これはExynos M1のマイクロアーキテクチャーだが、Exynos M2はEyxnos M1のプロセス微細化+マイナーバージョンアップ版で、基本的にはExynos M1と同じ。4命令にしては重厚なバックエンドという気もするが、このあたりはまだなじみがある

Exynos M3の概要。ちょっとしたお化けという気もしなくもない

Cortex-X1はCortex-A78をベースにしたカスタマイズ版コアだ。画像はARMの資料より

 ここでExynos M5ではDecode/Dispatch数がむしろ減っているが、これは根本的なアーキテクチャーの変更による。

 Samsungはまずアーキテクチャーライセンスをもとに、独自のExynos M1と、これを微細化したExynos M2をリリース。次いでマイクロアーキテクチャーを大幅に強化したEyxnos M3と、これの微細化版であるExynos M4まではリリースしたものの、その次にあたるExynos M5は開発費が高騰しすぎるという理由でキャンセルした。

 その代わりARMと手を組み、Cortex-X Custom Programを締結。Cortex-A78をベースに、これを強化したカスタム版CPUであるCortex-X1を、Eyxnos M5という名前で投入している。

 本来のExynos M5は7~8命令 Decode/13~14命令Dispatchのスーパースカラー/アウト・オブ・オーダー構成と目されていたが、ARMの設計チームはこれを5命令Decode/8命令Dispatchの構成に押し込んで同等の性能を確保したわけで、これはこれで称賛に値する。もっともEyynos M4からの伸びはあまり大きくないのだが。

 ところがA12/A13は、これをさらに上回る(A13に至っては27%ほど上回っている!)性能を出しているわけで、この先もIPCをどうやって引き上げていくつもりなのかは良くわからない。

 業界的にはA10がおおむね6命令Decode、A11/A12が7命令Decodeと目されており、A13ではひょっとして8命令Decodeに達している可能性がある。ただこの先9や10命令Decodeのスーパースカラー/アウト・オブ・オーダー構成(Dispatchは14~16命令程度だろうか?)を実装するかどうかは謎が残るところだ。

 むしろこの先、AppleのSoCの方向はやや違った方向に移行すると筆者は考えている。開発キットのMac miniやMacBook系列であれば、従来のX/Zシリーズ、つまりコアの数を若干増やすとともに動作周波数をやや引き上げたプロセッサーのままで行けると思う。

既存の設計方針と消費電力の最適化で
インテルとAMDに立ち向かえるか?

 AppleのSoCは、iMacやMac Proに使うにはあまりに力不足である。これは、プロセッサーの物理実装に関わる問題である。

 すでにApple A12とA13は、インテルやAMDのx86プロセッサーをIPC的には上回る性能を出していると書いた。これは事実だと思うが、実際にワークロード負荷の高いアプリケーションのためにCPUをぶん回してみると、A12やA13はおそらくCore iやRyzenの敵ではない。

 これは既存のAn系列は、基本的にモバイル向けの省電力設計になっており、デスクトップ向けの「長時間、高クロックで連続運用」の作り方になってないからだ。これはプロセッサーの物理設計の問題である。

 iPhoneとiPadの場合、ピークではコアあたりiPhoneで2W、iPadで5Wが許されるが、ピークで運用できるのはごくわずかな時間で、通常はiPhoneで1W、iPadで2W程度に落ちる。逆にそうした運用を前提に内部の回路を最適化するので、無駄が少なく効率的である。

 こうしたチップに無理やりピークパフォーマンスで連続運用させると、最悪は燃えることになる。

 このあたり、インテルとAMDの場合、「もともとはデスクトップ向けに長時間高クロックで連続運用しても大丈夫なコア」を作り、これを電圧や周波数制御で低めの消費電力に抑えて使う形になっている。

 回路的には無駄な部分が多いので、本当に最適化したモバイル向けには効率的に及ばないものの、幅広い周波数レンジで使える製品ができることになる。

 もう1つ言えば、iOSあるいはmacOSについてもMacBook Airあたりであれば、big.LITTLEは許容されるのだろう。インテルもSurface Neo向けにbig.LITTLEもどきを実装したLakefieldを投入するわけで、これはいい。ただiMacやMac Proにbig.LITTLEはおそらくそぐわない。この市場には、bigコアのみの製品が必要になると考えられる。

 おそらく、通例で言えば今年9月あたりに投入されるiPhone 12(仮)に搭載されるであろうApple A14(仮)は、既存のAnラインをそのまま継承した設計方針と消費電力枠に向けて最適化した製品になるはずだ。

 ここで8命令デコードを突っ込んでくるかはわからないが、突っ込んできても不思議ではない。Apple A14はTSMCのN5で製造と言われており、これが事実ならば、利用できるトランジスタ数が倍までは行かなくとも7~8割増える計算になる。

 これだけ使えるトランジスタ数が増えれば、デコーダーをさらに複雑化しても搭載するのは難しくないだろう。

 そして年末には、iPad Pro 2021(仮)やMacBook 2021(仮)あたりに、そのA14(仮)の派生型であるA14X(仮)が搭載されて出荷されるということになるだろう。ただこれはまだ第一弾でしかない。

iMacやMac Proが来年搭載する新SoCは
ARMのNeovers向けインターコネクトがベースになる?

 2021年には、そのA14のbigコアを8コア程度集積した、デスクトップ/ローエンドサーバー向けのまったく異なるSoCが出てくるだろう。これはA14(仮)をベースにしたものか、それともさらにその次のA15(仮)をベースにしたものか、現時点では判断が難しい。

 この新しいSoCは、(筆者も絶対的な自信を持って言うわけではないが、技術的可能性の観点のみから言えば)ARMのNeovers向けインターコネクトをベースにした製品になると予想している。

 iMac 2021(仮)は1P、iMac Pro 2021(仮)で2P、Mac Pro 2021(仮)で4P、なんてことはNeoverse向けに提供されるインターコネクトIPを使えば構成は容易だ。基板上のプロセッサー間のインターコネクトは、最近さまざまなメーカーから提供されるようになっており、入手も難しくない。CCIXでもいいからだ。

 自社が策定に参画していない標準規格を嫌うAppleのことなので、独自でなにか開発するか、そうしたIPを持っている会社を買収するかもしれない。もしくはAMD方式のMCM実装の可能性もある。

 この2021年はx86→ARM以降の端境期にあたる。本命になるプロセッサー群は2022年のA16(仮)をベースとしたものになるだろう。この世代のiMac/Mac Pro向けはもっとコア数が増えるはずだし、ひょっとするとMacBook向けにもbig.LITTLEに対応しない、つまりiPad向けとは異なるプロセッサーが入るかもしれない。

 現状では情報が少なすぎるので、いろいろなことを断言するのが難しいので大外れの可能性も低くはないと思うのだが、とりあえず今のAn/AnXシリーズとはまったく異なるSoCの製品ラインをAppleが立ち上げる必要があることだけは確かだ。このあたりは引き続きウオッチしていく必要があるだろう。

■関連記事