日別アーカイブ: 2020年11月23日

MacBook Air Late 2020 / Apple M1 のビルド速度と浮動小数点演算能力

2020年後期の新型 MacBook Air (Apple M1 ARM) のビルド速度と vfpbench の結果です。2020年前期発売の Intel モデルと比べて 5倍高速でした。

Device CPU Thread Time
MacBook Air Late2020 Apple M1 arm64 8/8 9 sec
MacBook Air Early2020 Core i5-1030NG7 4/8 45 sec
Mac mini L2012 Core i7-3615QM 4/8 47 sec
MacBook Pro Late2012 Core i5-3210M 2/4 125 sec

・↑コンパイル時間の比較。Time が小さい方が速い。

vfpbench の結果は下記の通りです。macOS では LITTLE core だけ Affinity で固定することができないので Multi-Thread の値はまだ不正確です。そのため Single Thread だけ比較しています。

↓vfpbench の Single Thread の結果のみ抜粋

Device CPU Thread Half Single Double
MacBook Air Early2020 Core i5-1030NG7 4/8 111.3 55.6
MacBook Air Late2020 Apple M1 arm64 8/8 153.1 76.6 38.3
MacBook Air Late2020 Apple M1 x86_64 8/8 34.1 17.1
Pixl 3 Snapdragon 845 Cortex-A75+A55 8/8 44.4 22.3 11.2
PH-1 Snapdragon 835 Cortex-A73+A53 8/8 19.5 9.8

・↑Half/Single/Double の数値は GFLOPS。値が大きい方が速い。

Apple M1 の結果詳細(抜粋)

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
FPU fmul (32bit x1) n8            :    0.157    12195.9    12195.9  (  1.0 3.8)
FPU fadd (32bit x1) n8            :    0.150    12799.9    12799.9  (  1.0 4.0)
FPU fmadd (32bit x1) n8           :    0.301    12753.6     6376.8  (  2.0 2.0)
NEON fmul.2s (32bit x2) n8        :    0.150    25593.3    12796.7  (  2.0 4.0)
NEON fadd.2s (32bit x2) n8        :    0.150    25570.3    12785.2  (  2.0 4.0)
NEON fmla.2s (32bit x2) n8        :    0.302    25441.6     6360.4  (  4.0 2.0)
NEON fmul.4s (32bit x4) n12       :    0.225    51167.5    12791.9  (  4.0 4.0)
NEON fadd.4s (32bit x4) n12       :    0.225    51086.7    12771.7  (  4.0 4.0)
NEON fmla.4s (32bit x4) n12       :    0.301    76531.6     9566.5  (  8.0 3.0)

この結果より、SIMD (NEON) は 128bit FMA (fmla) が 3命令同時に走っており、ピーク値は 1 cycle あたり 24fop であることがわかります。256bit FMA が 2命令走る Haswell/Zen2/3 は 32 fop 、AVX512 では最大 64 fop なので、単 core でのピーク FLOPS はそれよりも落ちます。

その代わり注目すべきは IPC の方で、FMA で 3命令、ADD/MUL でサイクルあたりのスループットが 4命令です。Intel は 128bit でも最大 2命令、Zen2 では Add + Mul の組合わせのみ 4命令なので、スカラーや 128bit 演算は Apple M1 の方が速度出る可能性があります。

FLOPS 表の「Apple M1 x86_64」は Rosetta によるバイナリ変換で実行した場合のものです。AVX/FMA 命令が動かなかったので SSE4.2 までのオプションでビルドしています。FMA がないのでピーク値は半減していますが、加減算命令の IPC は 3~4 と高い値を維持していました。

コンパイル時間の比較を参考用に載せておきます。OS と SSD、使用したコンパイラが異なるので単純に比較できませんのでご了承ください。また必ずしもあらゆるタスクでこの性能差が生じるわけではありません。特にビルドに時間がかかる巨大なプロジェクトではかなり遅くなると思います。

Device CPU SSD Thread Time
Windows Desktop WSL2 Ryzen 9 3950x SATA 16/32 8 sec
MacBook Air Late2020 Apple M1 arm64 NVMe 8/8 9 sec
WIndows Desktop WSL2 Ryzen 7 PRO 4750G SATA 8/16 18 sec
Linux Desktop Core i7-6700k SATA 4/8 29 sec
Linux Desktop Core i7-4790k SATA 4/8 31 sec
Pxiel3 Snapdragon 845 Coretex-A75+A55 eMMC 8/8 35 sec
PH-1 Snapdragon 835 Coretex-A73+A53 eMMC 8/8 40 sec
MacBook Air Early2020 Core i5-1030NG7 NVMe 8/8 45 sec
Mac mini Late 2012 Core i7-3615QM SATA 4/8 47 sec
MacBook Pro Late 2012 Core i5-3210M SATA 2/4 125 sec
Raspberry Pi 4 Coretex-A72 SD 4/4 146 sec

上記以外の他のデバイスとの比較はこちら↓にあります。

Compile Benchmark

関連ページ
Hyperでんち: Compile Benchmark
Hyperでんち: vfpbench 結果まとめ

関連エントリ
Ice Lake の vfpbench 結果と AVX512 命令
4倍速い Ryzen 9 3950X の UE4 コンパイル速度
Snapdragon 845 ARMv8.2A 半精度 fp16 演算命令を使ってみる / Deep Learning 命令
Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
Snapdragon 845 の浮動小数点演算速度
ARM CPU の浮動小数点演算能力まとめ
HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
iPhone SE, Apple A9 の浮動小数点演算速度
ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
iPad Air 2 (Apple A8X) の浮動小数点演算能力
ARM cpu vfp の種類と fp16 命令を使ってみる