
こんにちは、ハカルス 東京R&Dセンター所属のエッジ・エバンジェリスト 田胡治之です。この連載では、半導体業界で長年知識や情報を得てきた私、田胡がこれまでと異なるAI業界に飛び込み、そこから感じる業界のニュースやトピックを独自の視点で紹介したいと思います。
第4回のテーマはApple社の M1 プロセッサについてです.2020年11月に発表された同社MacBook Pro, MacBook Air, Mac mini に使われています.既に多くのサイトがベンチマークを行い,低消費電力かつ高性能に驚いています.本稿ではM1の高性能の謎解きを試みます.

M1 発表会のスライド [1]
M1 プロセッサの性能
従来のIntel CPU搭載Macでは、CPU、メモリ、Apple T2、Thunderboltコントローラ、I/Oチップが別々となっていましたが、M1ではこれらすべてを統合しました.SiP技術を使いメモリをCPUと一つのパッケージ基板に載せることで、メモリバンド幅を向上させ、メモリレイテンシを削減しました。半導体製造プロセスは、パソコン向けとして初とする5nmプロセスを採用し、トランジスタ数は160億個に達します.CPUベンチマークの一つ,GeekBench 5 Single Thread Score を従来のMac と比較したグラフを Figure 1 に示します.一世代前のMacBook Pro のスコア 1239 に対し,新型MacBook Air (2020) のスコアは 1687 で約36%向上しています.

Figure 1 MacBook AirのGreekbench 5 Single Thread Score(Apple従来製品と比較)[2]
ユニファイドメモリ
M1は金属カバーで覆われており(Figure 2 左側),内部はパッケージ基板にM1 SoC (左側),DRAM 2個(右側),キャパシター群(上下)が搭載されています(Figure 2 右側).このパッケージ方法は SiP(System in Package)と呼ばれます.ちょっとツッコむと,Appleが発表した Figure 2右のM1 SoC部分は本当の写真ではありません.仮にMacを分解し金属カバーを剥がしたら,SoC裏面が見えるはずです.シリコン表面はパッケージ基板側に向けて取りつけられているからです.半導体の発表ではままありますが,Figure 2 右側は説明用”写真”です.

Figure 2 M1 パッケージ写真と説明用M1”写真”
M1 SoCはメモリコントローラを内蔵しており,メインメモリDRAM 2個はパッケージ基板を介してM1 SoCに直接接続されています.メインメモリアクセス時間は従来より相当短縮され,高いCPUベンチマークスコアに貢献していると推測します.

Figure 3 M1のユニファイドメモリ [4]
A13, A14, M1 SoCチップの進化
Figure 4 に,Apple の最近のチップ写真3種類を示します.A13は iPhone11,A14はiPhone12 で使われています.チップ内主要ブロック配置に注目すると,(1) チップ上部にGPU,(2) その下に システムレベルキャッシュメモリー,(3) その左下に高性能CPUコア(Firestorm 4core) ,(4) その右側に高効率(低消費電力)CPUコア(Icestorm 4core),(5) チップ左下に Neural Engine で共通です.例えばM1のGPUはA14GPUに比べコア数が二倍のため,A14に比べGPU領域は増えていますが,相対的配置は変わっていません.チップ内主要ブロック配置は,チップを小さく設計することや動作クロック周波数を高めることに大きな影響を与えます.前世代のチップ内配置を踏襲することで,チップ設計ノウハウを継承できるメリットがあると考えます.M1は同社初のMac用Apple Siliconですが,チップ設計面ではスマホ用A13, A14 に続く進化形と筆者は考えます.

Figure 4 左:A13 Bionic, 中央: A14 Bionic, 右: M1
使われている半導体製造技術は,A13はTSMC 7nm(N7P),A14とM1はTSMC 5nm (N5) です.5nmを使った最初のチップ,A14はチップ面積は88mm2 に抑えられている一方で,次の M1チップ面積は119mm2と大きくなっています.一般に,新しい半導体製造プロセス立ち上がり当初はまだ未成熟であり,いきなり大面積チップの量産にはリスクがあります.A14でチップ面積を抑え露払い役としたのはその対策かもしれません.M1はMac用なのでA14よりCPU, GPUを強化しチップ面積は大きくなりましたが,5nm製造技術を使う二番目のチップとすることで量産リスクを抑えた戦略かもしれません.CPUコア一つの性能を測る GeekBench 5 Single Thread Score を Figure 5 に示します.ベンチマークスコア値はA13, A14, M1 と順当に向上しています.
Figure 5 A13, A14, M1 のCPUベンチマーク性能比較[10][11]
可変長命令CPU と 固定長命令CPUの違い ーカレーの調理ステップに例えるとー
M1搭載Macは従来のIntel製CPU搭載Macに比べてCPUベンチマークスコアは約36%速いと報告されています(Figure 1).CPU性能に影響するファクターは沢山あり複雑です.ここではファクターのひとつ,命令セットに焦点をあて単純化した説明を試みます. Intel x86命令と ARMv8命令(M1のCPU)の違いを,カレー調理手順を仮想のIntel風プログラムと仮想のARMv8風プログラムで表し比較します.
カレーの調理ステップ
カレーの調理ステップを Figure 6 に示します.簡単化のため,各ステップの調理時間は同じとします.

Figure 6 カレーの調理ステップ
命令の説明
Intelのx86命令セットは一命令長が最短1バイト長から最長15バイト長まで様々なバリエーションがあります.Intel CPUは可変長命令セットCPUの一つです.一方,ARMv8命令セットでは全ての命令が4バイト(32ビット)長固定であり.固定長命令セットと呼ばれます.ARMv8 CPUは固定長命令セットCPUのひとつです.
メモリ内命令配置と実行
「Step 1 肉屋に行って肉を買う」実行に必要な情報は,(A)買い物に行く,(B) 肉屋の住所,(C) 肉の種類,(D) 肉の量,と考え,可変長命令CPUでは3バイト長とします.それに比べて「Step 5 肉を炒める」実行に必要な情報は少ないので1バイト長で足りる,と考えます.その他の調理ステップも適宜1~3バイト長命令に対応させます.このようにして仮想的に作った可変長命令CPUプログラムが Figure 7 左側です.各命令の先頭バイトをハッチングしました.一方,Figure 7 右側は固定長命令CPUのプログラムを示します.各命令の先頭バイトをハッチングしました.

Figure 7 カレー調理ステップを表した仮想プログラム,メモリ内配置,実行の様子
命令コードサイズとPC搭載メモリサイズの増大
Figure 7 仮想プログラムの命令コードサイズを比べると,可変長命令CPUでは17バイト,固定長命令CPUでは40バイトです.前者は後者の 42.5%(17バイト / 40バイト) とコンパクトで,メモリ利用効率が高いことがわかります.現在のパソコンの元祖である初代IBM Personal Computer (1981年発売)の最大拡張メモリは 256kB(メイン基板上64kB と拡張カード3本の合計)でした[12].2020年のパソコン搭載メモリの典型サイズを4GBと考えると,パソコン搭載メモリ量は65,536倍(2^16倍)に増えました.1980年代は現在よりもメモリがはるかに貴重であり,メモリ利用効率のよい可変長命令CPUはよくマッチしました.
命令コードサイズと命令解読の違い
Figure 7 を使って命令の解読(Instruction decode)を比較します.可変長命令CPUは,最初の命令の最初のバイト,0番地を読み込みます.読み込んだ時点では自分の命令の長さも次命令開始番地もまだわかりません.解読して初めて自分の命令長がわかり,従って次命令開始番地もわかります.各命令の最初のバイトをハッチングしました.ハッチングされた場所は不規則になります.つまり逐次的に命令解読する必要があります.一方.4バイト固定長命令CPUでは,各命令開始番地は 0x0番地から 4バイトおきとあらかじめ決まっています.可変長命令コードに比べ,ハッチングは規則的です.回路規模が許すなら現在の命令の解読と同時に,次命令,更に先の命令の解読も同時にできます.
半導体技術の進歩に伴い,PC搭載メモリ容量が増えると共にCPUチップに複雑な回路が搭載できるようになると,可変長命令CPUプログラムのコンパクトさのメリットが薄れました.一方,固定長命令CPUのシンプルさ,例えば命令開始番地が単純に決まること等がメリットに変わってきました.A14, M1に使われている高性能CPUコア(Firestorm)では最大8命令同時に命令解読している,と報告されています[13].実は,Intel製x86 CPU も,1995年11月に発売された Pentium Proプロセッサ以降,x86命令(Figure 7左側に対応)をCPUチップ内部で μOPsと呼ばれるRISC的固定長命令セットへ変換,命令によっては1つのx86命令を複数のμOPsに分割・変換する命令変換機構を備えています.x86命令の機械語レベルの互換性を保ちながらチップ内部で固定長命令に変換することで,性能向上を図ったわけです.しかし元のx86命令が少ないレジスタしか使えない制約はそのままでした.命令変換機構はチップ面積増大を招き,命令変換のためにパイプライン段数が増えるなど,オーバーヘッドを抱えました.
カレーを速く作るには?
カレー調理時間を短くしたい要求があるとして,料理人を1名から2名に増やした場合の調理時間変化を Figure 8 に示します.料理人が1名の場合(左図),調理時間は10です.料理人を2名に増やして,複数命令の解読を同時に行い料理人2名で並行して調理すると,Figure 8右図のように調理時間を6に,つまり40%短縮できます.ここで鍋は2つ以上,コンロも2つ以上あるとしています.料理人の数,鍋の数,コンロの数は,実際のCPUでは演算リソース量に相当します.演算リソースを有効に使うには,調理命令を複数同時に解読し並列に実行できる命令を見つけることが重要です.そのためには解読しやすい固定長命令セットが有利で,M1 で使われた ARMv8命令セットは条件を満たします.

Figure 8 料理人1名と2名の場合の調理時間
AI 性能の向上
Appleは,新型MacBook でのAI性能の向上を発表しています[14].ML Computeフレームワークは,Mac用に最適化されたTensorFlowを含む機械学習フレームワークです.TensorFlow 2.4対応の新しい tensorflow_macos は,それまでMacのCPUのみを使っていたのに対し,M1とIntelを搭載したMacの両方でCPUだけでなくGPUを最大限に活用したそうです.Figure 9 に,TensorFlowを使った5つの深層学習プログラムに対するバッチ当たりのトレーニング時間(seconds/batch)を示します.黒色はMacBook Pro(Intel製CPU)上でTensorFow 2.3 を使った場合の時間,オレンジ色はMacBook Pro(Intel製CPU)上でTensorFow 2.4 を使った場合の時間,赤色はMacBook Pro(M1 CPU)上でTensorFow 2.4 を使った場合の時間です.MacBook Pro(M1 CPU)ではトレーニング時間が最大1/7に短縮できたと報告されています.

Figure 9 横軸はML Computeを使った5つのTensorFlow プログラム.縦軸はM1およびIntel搭載の13インチMacBook Proでへのバッチあたりのトレーニング秒数.小さいほど速い.
まとめ
Apple が 2020年11月に発売した新型MacBook Pro, MacBook Air, Mac mini に使われている M1 プロセッサについて,高性能なCPUの謎解きを試みました.従来のIntel CPUを使ったMacに対して,新型MacのCPU性能は約36%向上しています.大きく2つの理由,(1) Unified Memory 構成を採用しCPUからのメモリアクセス時間の削減,(2) Intel x86命令からARMv8 命令への変更により複数の命令解読を容易にし命令の並列実行を増やせた,と筆者は考えます.(2)についてカレー調理の仮想プログラムを使い,具体例を示しました.ML Compute の強化により,深層学習プログラムのトレーニング時間をIntel搭載13インチMacBook Proに比べて最大7倍に高速化できた,とAppleは報告しています.Apple が自社製 Apple Siliconに乗り換えたもうひとつの理由はCPU調達コストを下げること,と筆者は考えます.新型Mac以前はIntelが決めた価格でIntel CPUを調達せざるを得ませんでしたが,M1 ではCPU設計をApple社内に吸収し,チップ製造を TSMC に委託しています.AppleはTSMCの最大顧客と言われており,TSMCに対して強い価格交渉力を持っているでしょう.CPU調達コストは下がるはずです.新型Macの高いコストパフォーマンスにCPU調達コスト引き下げも一役買っているのではないでしょうか.
参考文献
[1] 「M1」チップ搭載Macが3製品登場!Appleイベント発表内容まとめ
https://iphone-mania.jp/news-328042/#1
[2] Appleの独自SoC「M1」チップのベンチマークが公開される、果たしてその実力とは?
https://gigazine.net/news/20201112-apple-silicon-m1-benchmark-score/
[3] Macintosh
https://ja.wikipedia.org/wiki/Macintosh
[4] Appleが開発した「M1」チップはなぜ高性能なのか
https://gigazine.net/news/20201202-apple-m1-fast/
[5] Apple M1
https://en.wikipedia.org/wiki/Apple_M1
[6] Apple M1チップ -Apple(日本)
https://www.apple.com/jp/mac/m1/
[7] The Apple A13 SoC: Lightning & Thunder
https://www.anandtech.com/show/14892/the-apple-iphone-11-pro-and-max-review/2
[8] Apple A14 Die Annotation and Analysis
[9] Apple Announces The Apple Silicon M1
https://www.anandtech.com/show/16226/apple-silicon-m1-a14-deep-dive
[10]Qualcomm Discloses Snapdragon 888 Benchmarks: Promising Performance
https://www.anandtech.com/show/16325/qualcomm-discloses-snapdragon-888-benchmarks
[11] The 2020 Mac Mini Unleashed: Putting Apple Silicon M1 To The Test
https://www.anandtech.com/show/16252/mac-mini-apple-m1-tested/2
[12] IBM Personal Computer
https://en.wikipedia.org/wiki/IBM_Personal_Computer
[13] Apple Announces The Apple Silicon M1: Ditching x86 – What to Expect, Based on A14
https://www.anandtech.com/show/16226/apple-silicon-m1-a14-deep-dive/2
[14] Leveraging ML Compute for Accelerated Training on Mac
https://machinelearning.apple.com/updates/ml-compute-training-on-mac
おわり