Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

AppleのAシリーズSoCを眺めてみた

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Apple M1が何故、速いのか?」の調査をしています。

その一環として、AppleのAシリーズのSoCを眺めてみました。

まずは、ツイートから。

 もう一つ。

ANANDTECHの下記の記事にも多少載っています。

www.anandtech.com

基本的には、Wikipedia(日本語と英語)とANANDTECHからの情報です。

上記のANANDTECHの記事には、A7からですが、最初のオリジナルCPUコアを搭載したのは、A6です。この時のコアのnicknameは、Swiftで、Armv7-Aなので32ビットコアです。2コア構成でL1 Cacheは、Instruction/Data ともに32KBでした。L2 Cacheは 1MBの共有です。

A7が最初のArmv8-Aのコアで、Cycloneというnicknameが付いています。
L1 Cache は、それぞれ2倍の 64KB/64KB です。L2は1MBのままですが、L3が付きました

Apple A6 :2コア (Swift x2)、Armv7-A、GPU(PowerVR)
L1I : 32KB, L1D : 32KB、L2 : 1MB(共有)

Apple A7 :2コア (Cyclone x2)、Armv8-A:ARM64
L1I : 64KB, L1D : 64KB、L2 : 1MB、L3 : 4MB

Apple A8 :2コア (Typhoon x2)
L1I : 64KB, L1D : 64KB、L2 : 1MB、L3 : 4MB

Apple A9 :2コア (Twister x2)
L1I : 64KB, L1D : 64KB、L2 : 3MB、L3 : 4MB

Apple A10:4コア (Hurricane x2 + Zephyr x2)、GPU(PowerVR)
Hurricane : L1I : 64KB, L1D : 64KB、L2 : 3MB、L3 : 4MB

Apple A11:6コア (Monsoon x2 + Mistral x4)、GPU/Neural Engine
Monsoon : L1I : 64KB、L1D : 64KB、L2 : 8MB / Share

Vortex : Apple A12 : 6コア (Vortex x2 + Tempest x4)
Vortex : L1I : 128 KB、L1D : 128 KB、L2 : 8MB / Share

Tempest : L1I : 32 KB、L1D : 32 KB、L2 : 2MB / Share

Apple A13 : 6コア (Lighting x2 + Thunder x4)
Lighting : L1I : 192KB、L1D : 128 KB、L2 : 8MB / Share
Thunder : L1I : 48 KB、L1D : 48 KB、L2 : 4MB / Share

Apple A14 : 6コア (Firestorm x2 + Icestrom x4)
Firestorm : L1I : 128 KB、L1D : 64 KB、L2 : 8MB / Share
Icestorm : L1I : 48 KB、L1D : 48 KB / Core、L2 : 4MB / Share

 

A7からA9までは、2コアです。A9になってL2が3MBに増えました。

A10からは big/LITTLEの構成になり、2+2に。

A11では、2+4コアに。GPUがImaginationのPowerVRから独自GPUになり、Neural Engineも付きました。また、L3 Cacheが無くなり、L2 Cache が 8MBの倍増になりました。

A12では、L1 Cache が ともに128KBになりました。

A13では、bigのLightingのL1 Instructionが192KB、LITTLEのThunderのL1 Cacheが48KB、L2が4MBになりました。

A14では、FirestormのL1 InstructionがA12と同じ128KBに戻り、L1 Data が 64KBと半減しています。

こうしてみると、A11が一つの転換期。何故なら、GPUがオリジナルになり外部IPを使わなくてよくなったということ。その結果、L3 Cacheを無くしています。L3 Cacheがあったのは、Arm の NoC を使っていて、性能を出すためには L3 が必要だったのではと妄想しています。A11ではNoCApple独自になり、L3 Cacheなくても性能が出せるようになったのだと思います。A11以降のbigは2コアでL2 8MBを共用する感じになっています。

ちなみに、AppleのLLVM(github)の中を覗いてみたら

// Support some CPU codenames as aliases for apple-aN so we can still LTO old bitcode.
def : ProcessorModel<"cyclone", CycloneModel, [ProcAppleA7]>;
def : ProcessorModel<"vortex", CycloneModel, [ProcAppleA12]>;
def : ProcessorModel<"lightning", CycloneModel, [ProcAppleA13]>;

// iPhone and iPad CPUs
def : ProcessorModel<"apple-a7", CycloneModel, [ProcAppleA7]>;
def : ProcessorModel<"apple-a8", CycloneModel, [ProcAppleA7]>;
def : ProcessorModel<"apple-a9", CycloneModel, [ProcAppleA7]>;
def : ProcessorModel<"apple-a10", CycloneModel, [ProcAppleA10]>;
def : ProcessorModel<"apple-a11", CycloneModel, [ProcAppleA11]>;
def : ProcessorModel<"apple-a12", CycloneModel, [ProcAppleA12]>;
def : ProcessorModel<"apple-a13", CycloneModel, [ProcAppleA13]>;

 とあるので、CPUのアーキテクチャ的には、A7からA13までは同じで Cycloneということですね、で、A14はなんでないんだろか?

 

ここで、気になるのは、L1 Cache のサイズです。下記に、MacBook ProにつかれていIntel Core i (第10世代)と (第11世代)の Cache のサイズを示しています。

L1 Instruction Cacheが32KB、L1 Data Cache が48KBです。

Armv8-Aの最初のA7ですら、L1 Cacheは共に 64KB です。

L2 Cacheに関しては、A11からbigは2コアで8MBなので、Intelよりもかなり大きいです。

Intel Core i (第10世代) : Ice Lake (Intel 10nm)
CPU : Ice Lake (L1I:32KB, L1D:48KB)
L2 Cache : 512KB/コア
LLC(全体) : 2MBxコア数

Intel Core i (第11世代) : Tiger Lake (Intel 10nm SuperFin)
CPU : Willow Cove (L1I:32KB, L1D:48KB)
L2 Cache : 1.25MB/コア
LLC(全体) : 3MBxコア数

では、Apple M1を振り返ってみましょう。

Apple M1 : https://en.wikipedia.org/wiki/Apple_M1
Firestorm : L1I : 192 KB、L1D : 128 KB、L2 : 12MB / Share
Icestorm : L1I : 128 KB、L1D : 64KB、L2 : 4MB / Share

 L1 は、A13と同じ Instruction が192KB、Dataが128KBになっています。L2は4MB増加です。1コア当たりだと、Aシリーズでは4MBでしたが、M1では3MBと少なくなっていまっす。

 

Intel に比べて、L1とL2が大きいのはなぜでしょうか?