記事にアフィリエイト広告を含みます

ARMはx86より効率がいいというのは過去の神話

ARMはx86より効率がいいというのは過去の神話
従来から、「ARMはx86より(電力的に)効率的だ」という言説があります。これは単純に「ARMは省電力なスマホ向けで、x86は電力を食うPC向け」程度のアバウトなイメージのこともありますし、前世紀のRISC vs CISC論争のころからある「ARMはx86 (x64を含む)に比べ命令セットがシンプルなので、命令デコードにかかる電力が少なくて済んで効率的」という議論の形をとることもあります。

スポンサーリンク

この議論については、半導体エンジニアの多くは「ARMがx86 より効率が良いというのは、もはや過去の神話」(in today’s age it is a very dead argument)という認識を共有していると言っていいでしょう。有名なところではApple CPU (ARM)とZen (x86)の両方を開発したジム・ケラー氏のインタビューでも言われていますし、Chips and Cheeseという電算機基礎論のブログではしばらく前にも、またごく最近も、頻繁に出てくる話題になっています。

ウインタブをはじめノート実機レビューサイトでは、Snapdragonを搭載したWindows on ARM機のバッテリー持ちがIntel並でしかないという理由でARMの効率性優位論をあまり信用していなかったところが多いですが、今回は、ARM優位論がなぜ「過去の神話」となっているか、そしてなぜこの「過去の神話」がたびたび復活するのかについて、もう少し深堀りした説明をしていきます。

クロックの限界とIPCの向上がCPUを変えた

現代においてx86とARMの命令セット間の効率の差がなくなっている原因は、一言でいえばクロックあたり性能(またはIPC)の向上です。

コンピュータの動作速度を引き上げる手っ取り早い方法は動作クロックの向上ですが、製造プロセスによって限界のクロックはありますし、半導体の動作に電子という最小単位がある以上、クロックは中長期的にもこの最小単位に束縛されることは避けられません。半導体メーカーは、クロックという限界を打ち破るため、クロックあたり性能の向上を目指すことになります。その主たる方法は、複数の計算を同時に行う並列化を推し進めることでした。

IPC向上に寄与する並列化の手法としては、「パイプライン」と呼ばれる、計算をいくつかのステージに細分化して考え複数ステージを同時に動かす仕組みや、パイプラインを複数用意して同時実行する「スーパスカラ」と呼ばれる仕組みが代表的でしょう。【注:筆者は専門家ではないので、正確な技術的詳細は大学の講義資料(元京都大学・富田眞治研究室の復刻版資料)などを参考にされるのも良いかと思います】

原理的には同時に実行できる演算器を増やすほど計算能力は増えますが、話はそう簡単ではありません。同時に行っても問題ない、同時実行できる計算とそうでない計算があるからです。例えばA+B+C+Dという計算であれば(A+B)+(C+D)に分解して(A+B)と(C+D)を同時並列的に計算して後からその結果を足しても正しい答えが得られますが、A+B+Cという計算は、(A+B)+CであれA+(B+C)であれ足し算を2回順番に行わなければなりません。

IPCの向上を目指すと、前述のような並列化が可能かどうか検出する処理が必要になり、多くの場合CPU内に専用の処理回路が増設されます。また並列化の際に「アウト・オブ・オーダー実行」という計算実行順の入れ替え(例:((A+B)+C)+D ⇔ (A+B)+(C+D) )が行われたり、本来結果を見てから進めるべき分岐処理で、8割がた当たるほうに賭けて結果を待たずに処理を続行する(外れたら巻き戻し処理を行う)「投機的実行」といった技術が導入されており、そのための回路も増設されています。またメモリからのデータ読み出し待ちで空転クロックが多く発生するので、その待ち時間を節約するキャッシュメモリも増やす必要があります。

こういった並列化によるIPC向上の工夫の結果、CPUの多くの部分がそれらのための回路で占められていくようになります。最新のCPUを機能ごとにブロックに分けた場合、x86 CPUでもデコーダがコアに占める面積は1割程度に過ぎません。ARMがx86より効率がいいとする根拠はデコーダの大きさにあったわけですが、今やデコーダが多少大きくても大差がない状況になっています。

2013年に当時のARM (Cortex)とIntel CPU (Core, Atom)の電力効率を直接比較した論文が出ていますが、両者の電力効率にほとんど差はなく、デコーダに着目しても、その消費電力はCPU全体の0.5~10%に過ぎないと指摘されており、実際の面積関係とも整合的です (Blem et al. 2013)。

ARMはx86より効率がいいというのは過去の神話

Locuza氏によるRedwood Cove (Meteor lakeのPコア)の内部構造の解説の一部切り抜き。ARMとx86の効率差を生むといわれるデコーダは、右上の赤線で囲った領域(“Decode + Branch Predictor”)の半分程度で、全体の10%程度を占める。

もう一つのIPC向上策

上記の方式の場合、並列化検出は毎回CPUで実行されます。繰り返し実行する処理に対して毎回同じような計算をするのは無駄で、(コンパイル時などに)あらかじめ並列性を検出しておいて、並列化を実施済みの機械語命令をCPUに渡してやれば電力が節約できるはずです。

ただしこれを実行するには、並列化可能性をCPUに伝える必要がある――具体的には並列化可能な命令をワンセットにした長大な命令が必要になります。これはVLIW (Very Long Instruction Word;直訳すると「超長い命令語」)と呼ばれます。VLIWほどでなくとも、線形代数(ベクトルや行列)の計算など使用頻度の高い並列計算は、それ専用のSIMD (Single Instruction/Multiple Data)と呼ばれる命令や機能群があり、x86ではSSEやAVXという名前で実装されています。

いずれにしても、IPC向上と効率化を両立するには事前に並列性を検出した上でそれをCPUに伝える長大命令が必要となり、その分だけ命令セットや命令デコーダは肥大化します。「x86はARMに比べて命令が無駄に肥大化しているから効率が悪い」というのがARM優位論の主張ですが、IPCを上げようとするとARMであっても命令セットを肥大化せざるを得ず、実際Apple CPUが大幅に高速化したARMv8.1-A~8.6Aの時期には毎年のように並列化や仮想化のための命令が追加されており、結局x86と似たような状況になってきます。

ARMはx86より効率がいいというのは過去の神話

後藤弘茂「AppleがArmベースのSoCをMacに採用する背景」PC Watch, 2020年6月26日より引用。ARMv8での命令追加の様子を示す。

小まとめ

以上のように、クロックの上限がある中でクロックあたり性能(IPC)を上げようとすると、

スポンサーリンク

1.命令デコーダ以外の部分が肥大化し、デコーダのシンプルさの優位性がなくなる
2.命令デコーダ以外をシンプルに保とうとすると、命令セットが肥大化する

のどちらかまたは両方をしなければなりません。命令セットのシンプルさというARMとx86の違いはどんどん薄まり、両者とも大局的には似たようなものに収斂しています。ジム・ケラーはインタビューの中で、このことを以下のように表現しています:

――So fixed-length instructions seem really nice when you’re building little baby computers, but if you’re building a really big computer.. it isn’t dominating the die. So it doesn’t matter that much. ([ARMのような]固定長の命令は、小さな赤ちゃんのCPUでは優れているように見えますが、大きなCPUでは……ダイを支配しているとは言えません)

――What limits computer performance today is predictability, and the two big ones are instruction/branch predictability, and data locality. (現在のコンピュータを実質的に制限しているのは、命令/分岐の予測可能性と、データの局所性の二つが大きいでしょう)

なぜARM優位論がいまさら蘇ったのか?

ARM優位論は過去の神話に過ぎないということは、2013年には論文が出され、そしてx86とARMの両方で傑作CPUを生みだしたジム・ケラーも言っています。それがなぜ今復活してくるのでしょうか?

その実情は、2020年頃にIntelが最低、Appleが最先端で、電力効率や性能でAppleが大差勝ちしていた時期があり、その原因を「x86に対するARMの優位性」論で説明しようとする人がいっぱいいた、というあたりではないかと思います。しかし、Intel vs AppleだけでARMの優位性を説明するのは無理があるでしょう。なぜならば、多くの反例があるからです。

電力食いのPCIeが少ないARMのスマホ系CPU

PC用CPUとスマホ用CPUで意外と大きな違いになっているのがPCIeの存在です。PCIeはビデオカード外付けやストレージの速度向上で重要ですが、電力食いで、スマホ用CPUでは大幅にカットされています。

これがどのくらい電力を食うかというと、同じM2 Ultraを搭載するMacでも、PCIeがないMac Studioはアイドル時10W最大295Wに対して、PCIeを付けたMac Proはアイドル時49W、最大330Wと、PCIeだけで40W弱を消費しています。特にアイドル時の消費電力増が曲者で、これはバッテリー持ちを如実に短くします。

ARMをPCで使う際にストレージ速度を出そうとするとバッテリー持ちを縮める足かせになりますし、逆にx86のLunar lakeはGPU外付けのためのPCIe x8/x16レーンをばっさりカットして消費電力を削減していると見られています。

Apple以外のARMに優位性がなかった

反例の一つは、Snapdragon 8cx Gen2搭載のWindows on ARM機が性能、バッテリー持ちで優位性が見られなかったという点です。例えばnotebookcheckの計測では、8cx Gen2搭載のSurface Pro XはTiger lake搭載のSurface Pro 7よりもバッテリー駆動時間が短いという結果になりました。ウインタブでもSurface Pro XHP Elite Folioの実機レビューを実施していますが、その使用感は以下のようなものです:

――バッテリー稼働時間については、はっきり言って「IntelやAMD CPU搭載のWindows PCと比較して、アドバンテージは感じない」ですね。

――モバイルノートのバッテリー駆動時間としてはまずまずの結果とは言えますが、WoAだから駆動時間が長い、という印象もありませんでした。

これが意味するところは、「Appleは凄いが、他のARM CPUは省電力性においてもIntelに対する優位性が見られない」ということです。別記事でも書きましたが、この1年はARMとともに発展してきたはずのAndroid系のChromebookですらx86が7割、ARMが3割という採用実績で、ARM系のSnapdragonをパソコンとして使うにはN100に対してすら優位性が見られないというのが実情でした。

個別に見ればAppleのCPUや、そのAppleを退職した開発者が作ったSnapdragon X Elite、あるいはクラウドサーバ特化のAmazon Gravitonなど、優秀なARM系CPUは存在します。しかしそれはその個別のCPUがすごいのであって、ARMがすごいということを意味しません。

同じx86でもAMDは優秀だった

AppleがIntelに対して優位性を見せた2020年ごろは、Intelの10nmプロセスの開発遅延がどん底にある一方、TSMCがN7やN5で最先端に躍り出た時期に当たります。Appleはその最先端プロセスを使っていました。ではそのTSMCの最先端プロセスでx86 CPUを作ればよいのではないか?ーーそれを実行に移したのが、AMDのZen2やZen3の世代です。

Zen2が発売されたころ、Intelは14nmにとどまったまま第6世代Skylakeの焼き直しを主力にしつつ、Ice lakeなど10 nmがやっとちょぼちょぼと出てきた状況で、AMDは2倍のコア数と高い効率でIntelを圧倒します。Zen3が発売される頃には、PC向けではAlder lakeでPコアとEコアのハイブリッドになったことで性能・効率の差を埋めましたが、サーバ向けのXeonでは依然としてAMD優位でした。このような性能差がある中で、AMDが急速にシェアを獲得していきます。

AppleがIntelから独自CPUに切り替えたころはx86≒Intelというほどシェア独占的な状況で、Intelの調子の悪さがx86劣位といった印象を与えていましたが、別にx86という命令セットが悪いわけではなく、AMDはそうではなかったわけです。

ARMはx86より効率がいいというのは過去の神話

Mercury Research社によるx86 CPUに占めるAMDのシェアの推移(2019~2023)

AppleのCPUもAMDのZenも、ジム・ケラーがその基礎を作り、Intelを躱した世代以降はTSMCで製造しているという共通点があります。つまり、ARMがx86に対して優位なのではなく、2020年頃にTSMCとジム・ケラーの設計が優位でIntelがダメだった、というのが実情でしょう。

そしてこれから

Intelも最近は復活してきており、10nmであれほど苦戦していた時代は過去のものになり、いわゆる2nm世代のGate-All-Aroundや裏面電源供給ではTSMCに先行しそうです。3~4nm世代でもMeteor lakeはバッテリー持ちを大きく改善させ、比較的多くのワークロードでMacbookに近い電池持ちを達成しています。今後はさらなる製造ノードの改善とIPC向上に振ったArrow lakeや、スマホCPUに設計を寄せ効率性・電池持ち重視にしたLunar lake、Panther lakeなどのシリーズの発売が予定されています。

AMDも次世代のZen5では順当な性能・効率の向上が見込まれており、ノートでは省電力コアの活用が進んでデスクトップ版以上に電力効率が上がりそうです。x86 CPUが電力効率やバッテリー持ちの面でAppleに追いつく、追い越す日はそう遠くないと思われます。

今年はApple M1の開発者が退社後に作ったSnapdragon X EliteがWindows on ARMに殴りこんでくる予定で、これはかなり効率がいいので揺り戻しもあると思いますが、5年程度の単位で考えた中期的には、多くの人はARM優位論のことを単に忘れていくしょう(そもそもARM優位論が過去の神話だ、という認識を持つ人もまた少ないでしょう……)。

(この記事は、筆者作成動画の再編集版です)

関連リンク

CPU情報 記事一覧

スポンサーリンク