世界1位の謎の半導体 アーム (ARM)とは?

TL;DR

  • ARMはx86と同じISA。ライセンス方式なので実装は色々ある
  • 省電力特化というポジションからHPCやサーバにも手を伸ばし始めている
  • A64FX由来のCPUとかが流行ると良いなー

はじめに

先週はARMに関してビックなニュースが立て続けに起こりました。そう、MacAppleシリコン採用のアナウンスとスーパーコンピュータの富岳がTop500で4冠を達成したことです!

www.apple.com pc.watch.impress.co.jp

この2つはどちらもARMというCPUアーキテクチャをベースにしています。

そしてARMはiPhoneをはじめとするほぼ全てのスマホで採用されているため、世界最速のスパコンで使われているCPUであると同時に数百億台以上のデバイスで動作するまさに最強のCPUなのです! MacIntelのCPUから乗り換えても安泰ですね!

と、言う気持ちにもなるかもしれませんが本当にそうでしょうか? 今回はその辺も含めて少しARMに関して語ってみたいと思います。

ARMはCPUそのものでは無く命令セット(ISA)

CPUというとIntelCore i7/XeonAMDRyzen/EPCYが有名ですがARMはそれらとは少し違います。ARM自体はARM社が設計しライセンスしている命令セット・アーキテクチャ (ISA)です。Core i7Ryzenは具体的なCPU製品です。

ISAとはマシン語で利用するCPUのAPIです。つまりISAが同一であればOSやその他のソフトウェアからは同じCPUとして見えます。逆に実際のCPUの実装はマイクロアーキテクチャと呼びます。そのため一口に「ARM CPU」といっても様々な実装があります。これは同じx86命令セットを採用する初代Pentiumと現在のCore i7が全く違う実装なのと同じです。

これが何を意味しているかというと、スマホに使われているA12やSnapdragonと富岳に使われているA64FXは異なるマイクロアーキテクチャを採用しており全然違うCPUだということです。富岳はスマホに使われているチップを大量に乗せてスパコン1位になったわけではないですし、Macに今後採用されるCPU(A12カスタム?)がスパコンに使われているのと同等なものでもないのです。

富岳はSPARCアーキテクチャはすでに廃れていてソフトウェアスタックが貧弱なこと、Macは色々あるでしょうが少なくとも一つの理由としてiPadiPhoneと開発リソースを共有したいということからARMをそれぞれ採用したと思います。

ちなみにARM以外で有名なISAだとx86, RISC-V, Power, MIPSがあります。

ARMとライセンス

ARMの特徴的な点として積極的にライセンス販売をしていることです。通常CPUメーカーは独自のマイクロアーキテクチャとISAをセットで開発して自社か限られた企業のみで展開します。圧倒的シェアのため互換CPUが乱立したx86でさえ現在は本家IntelAMDくらいです。Power系CPUもIBMで開発されます。

一方で、ARMのビジネスモデルは大きく異なりCPUライセンスをCPUを作りたい会社に売ることで利益を得ています。カスタムのSoCを作りたいとか極端な低消費電力や性能が必要で独自のチップを必要とするケースは多くあります。ただ、ここで独自のISAを作ってしまうとコンパイラを始めとしたソフトウェアスタックをすべて独自に開発する必要があり非常に困難になります。そこで既存のISAを使い独自のマイクロアーキテクチャを使う事ができればこの問題が解決できます。ARMはまさにそこに注目してISAをライセンスするビジネスを行っています。

ARMのライセンス方式は大きく分けて以下の2つがあります。

  • Architecture License
  • Cortex License

アーキテクチャライセンスはISAのみを提供して自由にARM互換チップを作れるライセンスです。マイクロアーキテクチャをすべて自前で用意するため難易度は高いですが、自由度も高く技術力による差別化もしやすいので専用チップを作りたい場合に選びます。富士通のA64FXやMacのAシリーズ、QualcommのSnapdragon はアーキテクチャライセンスです。

Cortex ライセンスはARM社が作るリファレンス実装であるCortexをベースにカスタマイズをするライセンスです。手早くSoCを作りたい場合に有効な方式です。多くの企業はこちらを使っていると思います。

この辺りの説明はこちらの図が分かり易かったです。

ちなみにIntelもかつてはXScaleというARMチップを開発していましたし、AMDもサーバCPUブランドのOpteronの名を冠した「Opteron-Aシリース」を持っています。

ARMアーキテクチャの特徴

ARMは低消費電力向けのCPUというイメージが強いですが、それはむしろマイクロアーキテクチャに依存する部分が大きいはずです。

ISAとしては命令セットが少なくシンプルなRISCでありつつ条件実行など頻繁に使われる最低限の高度なCISC風の命令セットを採用したことが、初期段階での低消費電力かつ高性能なという特徴につながってはいたと思います。しかし、それ以上にターゲットが低消費電力だったのでマイクロコードを省いたりキャッシュを小さくしたりアウトオブオーダーやスーパースカラーといった高速化処理を省くといった実装のシンプルさがそのあたりを支えていたと思われます。

現在は様々なマイクロアーキテクチャのARMがあり高性能向けの実装のCPUも多くあります。それらのCPUも現代的なニーズとして高性能と低消費電力を両立したものが多いですが、必ずしもISAがARMだから低消費電力というわけではないと思われます。どちらかというと現在のニーズに最新の技術で1から設計した結果ではないかと。ただ、CISCであり過去のしがらみも多そうなx86よりは...ってのはあるのかもしれないです。IntelAMDが複数の向けの全く異なるマイクロアーキテクチャを同時に運用するのもしんどいので共通的な部分を増やしたいでしょうし。x86にもCrusoe/Efficeonのような例もありますしね。

現在利用されているARMは主にAArch32と呼ばれる32bitのARMv7, AArch64と呼ばれる64bitのARMv8、次世代規格のARMv9です。スマホなどではARMv8が主流だと思います。また、ARMはそれぞれのユースケースマイにプロファイルを用意しており以下のようになります。

AArch32

基本的にはRISCのため以下の特徴を持ちます。

これに加えてCISC風の豊富なアドレッシングモードを持ちます。またThumb/Thumb-2と呼ばれるよりコード効率の良い命令セットやx86のSSEのようなSIMD拡張命令であるNEONを持ちます。

AArch64

AArch32から命令セットを大きく刷新しています。基本的には汎用レジスタが64bitになったことが最も大きいと思います。ただし、命令長は32bitです。また、歴史の積み重ねで不要になった条件付き実行などの命令セットも多くが削除されており効率かつスッキリとした実装に変わったようです。SIMD命令もNEON改ASIMDとして強化されています。

ARMv8は従来の32ビット命令を全てサポートしているので、x86-64と同様に32bit OSや32bit アプリケーションを動作させることができます。また、サーバ用途を見据えているためVT-xのような仮想化支援機能もついています。最近はAI支援()、セキュリティ機能も強化されているようです。

そして、HPC向け限定ですが富士通と共同開発したScalable Vector Extension (SVE)もSIMD命令として追加されました。用途が違うので当面の間ASIMDとは共存していく関係のようです。

ARMv9ではセキュリティの強化、マトリックス演算/ベクタ演算の強化、メニーコアを見えたトランザクショナルメモリ対応、カスタム命令セットなどが予定に上がってるようです。

AArch64の特にAプロファイルはIntel/AMDにも負けないかなり高機能な命令セットであることがわかります。

代表的なARM CPU

代表的というか個人的に気になってるCPUを書いていきます。趣味の問題でサーバ用とが多めです。

Cortex-X1

CortexはArm社のリファレンス実装です。Cortexシリーズは汎用用途とされていますが、実際問題ARMの利用は基本的にスマホなのでサーバ向けというよりはスマホ向けのCPUになります。X1はその中でも最新のCPUとなります。

まず5nmという驚異的なプロセスが目を引きますね。CPUはプロセスを微細化することで小さくできますし結果として同一面積での処理能力を向上させることができます。

マルチコアはヘテロジニア戦略で異なる世代のCortexや性能の違うコアを複数配置することで全体的な性能と消費電力のバランスをとるBigコアとLITTLEコアを採用しています。

また、X1に限らず最近のCortexは分岐予測機構やスーパースカラはもちろん複数の命令を融合させて実行効率をあげるフューズドMicro-OPsもサポートします。この辺はIntelAMDが使ってる高速化技術と同様のものですね。

ref: 5nmプロセス向け。性能が2割向上したArm「Cortex-A78」 ~新フラグシップGPU「Mali-G78」なども - PC Watch

Snapdragon XR2

QualcommのSnapdragon XR2はVR(仮想現実)やAR(拡張現実)などのXRプラットフォームをターゲットにしたSoCです。

XR2はSnapdragon 865をベースにしています。865は7nmのプロセスルールで製造されていて、CPUがKryo 585、GPUがAdreno 650となります。Kryo 585はCortex-A77/Cortex-A55をベースにしていて、big.LITTLEを採用した8コアのCPUです。クロックは2.84GHz、L3キャッシュが4MBとなかなかのスペックです。

Geekbench 5の結果は以下となります。

CPUマルチコアシングルコア
Snapdragon 8653450900
Intel Core i5-8250U3200750

ref: 【6/14最新】Geekbenchスコア、スマホSoC別総まとめ | telektlist

モバイル向けとはいえCore i5TDP 15W、Snapdragon 865はおそらく7WなのでそれでPC向けのCPUよりスペック高いとは恐るべし。

DSPのHexagonはディープラーニングの推論向けの機能も強化していて、さすがにPC向けのRTX 2050には敵わないけど15 TOPSと結構な性能が出るみたいです。

チップINT8(8ビット整数演算)
Hexagon15 TOPS
GeForce RTX 205048 TOPS

Apple A13

Apple A13 Bionicは所謂Appleシリコンですね。天才プロセッサデザイナーのジム・ケラーがA4,A5をデザインした事でも有名ですね。

ARMv8.3-AベースですがマイクロアーキテクチャはCortexとは完全に別物と思われます。CPUは2.65 GHzで、big.LITTLEを採用し2つの高性能コア(Lightning)と4つの高効率コア(Thunder)の合計6コアのCPUとなります。

Geekbench 5の結果は以下となります。シングルコア性能はSnapdragon 865を超えていますね。Macに搭載された場合はTDPの制約も減るでしょうからどこまで性能が伸びるかも気になります。

CPUマルチコアシングルコア
Apple A13 3400 1330
Intel Core i5-8250U3200750

ref: 【6/14最新】Geekbenchスコア、スマホSoC別総まとめ | telektlist

また、DSPとは別にNPUと呼ばれるDP推論用のチップも積んでいます。でもその割には1 TOPSしか性能がなくてだいぶしょぼく感じるのだけど、整数演算とは別の部分を強化してるかもしれない

チップINT8(8ビット整数演算)
Apple A131 TOPS
GeForce RTX 205048 TOPS

A64FX

富岳に乗ってる富士通製のSoCです。CPUは1.8GHz の48コアです。一気にコア数が増えましたね。

スパコン向けだけあってモバイル向けのCortex等とは根本的にマイクロアーキテクチャが違います。というか、ほぼほぼ京でも使われているSPARC64と同様のようです。

f:id:pascal256:20200628114658p:plain

というのも富士通ではメインフレーム、UNIX サーバ、スーパーコンピュータでマイクロアーキテクチャを共通化させています。UNIX サーバ及び京などのスパコンはSPAC、メインフレームは独自のISAです。別のISAやチップ自体のカスタムはしつつもベースのマイクロアーキテクチャは共通化することで品質の安定とコストダウンをはかっているようです。今回もその戦略にのっとり富岳はARMのISAを使いつつも既存のSPARC64やGS21と同様のマイクロアーキテクチャを採用していることになります。x86系CPUがすでにCISCでも何でもないように現代ではISAは飾りという印象が強いとはいえ、単一のマイクロアーキテクチャで複数のISAをサポートするのはなかなかユニークな戦略だと思います。今後、RISC-Vとかが仮に普及してもそのまま対応できますしね。

f:id:pascal256:20200627234740p:plain ref: 富士通ではメインフレームUNIX サーバ、スーパーコンピュータでマイクロアーキテクチャを共通化

なので、A64FXは完全に富士通設計なので他のスパコンIntelAMDのCPUを使ってるのとはわけが違います。賛否はあるにしてもそこは大事です。

続いて性能をみていきましょう。

このサイトを見る限りだと富岳の2.7 TFlopsはEPYC 7451が0.9 TFlopsなのでCPUとしては桁違いに速いけど、V100の7.8TFlopsよりは遅いからGPU程ではないって感じです。ただし、A64FXというか富岳の真骨頂は15万8976個のCPU、コア数にして730万コアという意味のわからない数を使った超並列処理です。これは2位のSumitが240万コアのPower 9を使ってるのと比較しても極端に多い数字に見えます。そして他のスパコンと違ってGPUなどのアクセレラレータを使ってないのが最大の特徴になります。そのため、OpenMPなどで普通に並列化できます。SIMDへの最適化はもちろん必要でしょうけど、CUDAなどの特殊なプログラミングはいらないのです。

f:id:pascal256:20200628114801p:plain

これが「プログラミングが簡単」と散々言われてる理由ですね。単純にそれなりに速いCPUがものすごくたくさんあるだけという構成なんです。そしてこの構成を支えるためにTofu-Dという超低遅延のインターコネクトと1TB/sというメモリバンドを実装しています。

また、ベクトル演算のために512bitのSIMDであるScalable Vector Extension (SVE)も実装しています。SVEはArm社と共同開発した標準仕様なのでJEP 338: Vector API (Incubator)とかGCCにも取り込まれているのがポイントです。仮に富士通の独自仕様としていたらこの辺のアップストリームへの取り込みは難しかったかもしれません。

A64FXや富岳についてはいろんなところで情報が出ているので見てるとなかなか楽しいです!

ちなみにA64FXを搭載したマシンですが、実は1ノード400万円くらいから買えるようですw www.hpc.co.jp

スペックシートを見ると空冷で2Uの普通のラックのようなので、メニーコアでメモリ帯域が極太なArmサーバとしても買えるお値段な気はします。Dellですら48コアとか160万円くらいはするわけで。最低4ノードでログインノードも追加でいるみたいなので2000万円くらいは実際かかるにしても考えれるお値段。Javaとか普通に動くみたいだからSparkとかCoherenceとか無駄に入れてみたいw

富士通は国内では数少ない世界レベルのHPC/ハイエンドサーバ向けCPUを開発できる会社なので、今のARMブームと富岳の実績で是非世界展開して欲しいです。メガクラウドに売れればワンチャンなんだけど、商売下手だからな。。。この会社。

AWS Graviton

GravitonはAWSのEC2で利用できるサーバ向けARM CPUです。CortexではなくNeoverse N1というサーバ向けのIPをベースにしています。

v1は低スペック向けとして登場させましたが、Graviton 2は性能を大幅に強化しデータベースのような重たいワークロードも含めてArm v8.2準拠で開発されています。int8/fp16もサポートしているためAI分野のCPUとしてもそれなりに期待が持てます。

f:id:pascal256:20200628115401p:plain

EC2で選べる構成は以下の通りです。

  • 汎用 (M6gおよびM6gd):仮想CPU数最大64、メモリは最大256GB
  • コンピューティング最適化 (C6gおよびC6gd):仮想CPU数最大64、メモリは最大128GB
  • メモリ最適化 (R6gおよびR6gd):仮想CPU数最大64、メモリは最大512GB

最大の特徴はSMT、つまりハイパースレッディングが無いことです。そのためこの64コアは全て物理コアとなります。SMTは完全なコア分離では無いので適切なパフォーマンスが出ないこともあります。それが全て物理でこのコア数というのは中々面白い作りですよね。また、8.2準拠なのでセキュリティ機能のTrustZoneも備えます。これによりデータを暗号化したままメモリに保持することができます。

クラウドで動くことの多いWebアプリケーションなどはCPUを気にした実装をしていることはほぼ無いでしょう。そういったニーズに低消費電力で高性能なARM CPUがいい感じにマッチする訳ですね。

ちなみに一番恐ろしいのは「彼らはGravitonをどこにも出荷していない」ということです。これは自分たちで消費するだけでCPUの開発コストはペイするという意味です。GoogleをはじめとしたメガクラウドがDC内で使うチップを自作しているのは有名な話ですが、その辺を改めて意識させられるエピソードでした。ユーザに提供するI/Fさえ変えなければクラウドベンダーは膨大なコンピュートリソースを好きに組み替えれるので、今後は彼らが市場のプレイヤーになってきます。他の企業の動向も気になりますね。

Ampere Altra

ARMベースのメニーコアのAmpere Altraです。大変ややこしいですがNvidiaの新GPUのAmpereとは何の関係もありません。紛らわしい。。。

www.youtube.com

gigazine.net

AmpereはAltraを世界初のクラウドネイティブプロセッサと呼んでいます。クラウドネイティブプロセッサはクラウドのワークロードに合わせて「予測可能な性能」「ハイパースケール」「低消費電力」を上げています。確かにどれもクラウドでは重要な要件です。

まず予測可能な性能とハイパースケールを実現するためにAltraは3GHzの80コアのCPUです。Gravitonと同じくSMTを使わずに実現しています。AMD EPYCですら64コアなのでヤバイですね⭐︎

Garvition同様にARMv8.2準拠です。AltraもNeoverse N1をベースにしているので基本的な設計は似ているのだと思います。

2基の128bitのSIMD、各コアに1MB大きなL2キャッシュメモリとチップあたり32MBのL3キャッシュ、AI向けに8bit整数と16bit浮動小数の強化、メニーコアに強いインターコネクトのメッシュ構造、セキュリティ機能とサーバ向けとして十分なスペックを持っています。

f:id:pascal256:20200628115119p:plain

そして、このコアではシングルスレッドのみが動作することを強調して説明しています。SMTを使わないのでクラウドや仮想環境で起こりやすいノイジーネイバー問題を極力減らすことができますし、Spectre/Meltdownのようなサイドチャネル攻撃にも強くなります。また、性能面でもクラウドのようなマルチテナンシなワークロードではキャッシュの効果も薄いためHTは性能劣化に繋がるという点を強調しています。また、HTを持たない分IO Waitを減らすためにキャッシュ周りを強化していると思われます。これは確かにクラウド環境を意識したCPUと言えるでしょう。

現段階でもEPYC 7742に匹敵、あるいは部分的には超える性能を発揮します。消費電力周りもいろいろ考えられていて、2020Q4か2020の早くには Ampere Altra Maxという128コアのCPUも予定されています。ヤバイですね⭐︎

Marvell ThunderX3

MarvellはThunderXというARM CPUを作っている会社です。元々、Caviumという会社で開発されていましたがMarvellに買収されました。現在の最新版はThunderX2です。

jp.marvell.com

ThunderX2は既に出荷されているサーバ向けARMなので最も入手しやすいでしょう。クロックは 2.5 GHz から 3.0 GHz。1コア4スレッド、最大32コア搭載可能ということでワンチップで128スレッドが動作します。スレッド数でみれば EPYC 7742と同じですね。発売日はもっと前ですが。ARMv3.1準拠となります。ちなみにHPEの次世代メモリドリブン型コンピュータ、所謂 the Machineのデモ機にも使われています

また、第三世代としてThunderX3もアナウンスがされました。

www.anandtech.com

これは96コア、384スレッドという他社の追従を許さない圧倒的なメニーコアを実現します。またアーキテクチャバージョンもARMv8.3+になります。サンプル出荷は2020Q4頃と言われています。 現時点ではあまり詳細はあまりありませんが、ThunderX2の方向性を正統進化させたものになるようです。特にSIMDの強化で浮動小数計算が向上していてHPCやAIをある程度見据えた結果かもしれません。

f:id:pascal256:20200628102036p:plain ref: Marvell ThunderX3 Arm Server CPU with 768 Threads Per Node in 2020

ThunderXシリーズの最大の特徴は先ほど紹介した2つのCPUとは異なりNeoverse N1では無いので、SMTが可能なことです。これはむしろNeoverse E1に近い構成です。

ハイパースレッディングのメリットはI/O待ちで発生するストールと呼ばれる空き時間を削減することです。見かけ上の数を増やして待ち時間でパイプラインの空いてるところを埋めてコアの効率性を高めることが基本的な目的になります。

ThunderXでは現在のワークロードはI/Oヘビーのものが多くCPU律速になることは少ないのでHTを4つ持つことで性能を上げるという戦略をとっています。クラウドネイティブなアプリケーションは小さなワークロードの集合なのでCPU性能を上げるより数をこなせることがスループットの向上になるというコンセプトです。

これはNeoverse N1を選択した先の2つのCPUが述べるようにマルチてナンシーのワークロードではセキュリティや性能の面で不利になるケースもあります。なので、ThunderXは単純にIaaSの基盤というよりはある程度上で動くワークロードが占有される大規模アプリケーション、例えばHPCやビックデータ処理、あるいはSDN/NFVなどのネットワーク基盤をターゲットにしてるのでは無いかと予想されます。

ちなみに2020/06のTop500にはA64FX以外では唯一のノミネートとなります。

Astra - Apollo 70, Marvell ThunderX2 ARM CN9975-2000 28C 2GHz, 4xEDR Infiniband | TOP500

HPEにより開発されたAstraは1.8 PFlopsと上位陣に比べると100倍以上性能が低く見えますが、それでも244位と真ん中くらいの性能は維持しています。この辺りのレンジのHPCは構成要素がサーバとも近いので、立ち位置としては悪く無いのでは無いかと思います。

Opteron(K12)

Opteron(K12)はAMDの次世代ARM CPU(2017年当時)です。2017年には出る予定でしたが未だ姿を見たものはいません。

既に、Opteron A1100としてサーバ向けチップは持っていますが、これはCortex-A57をカスタマイズしたものです。K12はマイクロアーキテクチャを刷新すると言われておりRyzenやEPCYにも利用されているZenアーキテクチャが使われる予定だったという噂です。

つまり、x86とARMのISAで同じマイクロアーキテクチャを使う見込みだったわけですね。実現していれば富士通の戦略とも似て居てとても面白いと思います。

歴史の結果としてはRyzenとそのサーバブランドであるEPYCが馬鹿売れしたので、リソースの選択と集中の観点からもK12は無くなってしまったようです。他のARMチップとはマイクロアーキテクチャが大きく異なる可能性があったので、ちょっと残念ですが、また構想が復活してくれる事を祈ります。

ARMの今後とサーバ向け需要

ARMはスマホ市場は既に制しており、ここには大きな成長は無いと言われています。そのため、サーバ市場やHPC市場、あるいはノートパソコンやPCに可能性を見出しています。

歴史に的にこの挑戦は何度かされましたが、結果としては大きな成功は得られていません。ノートパソコンもChromebookNetbookで多少の市場はあるもののChromebookですらハイエンドはIntel CPUです。

ただ、ソフトウェアスタックの進化やクラウドの推進によりCPU ISAの価値は大きく変わりました。いまはItaniumが出た時代とは違います。AWSという巨大市場で性能の高いサーバ向けARMがサポートされた事も大きなターニングポイントです。Macのアップルシリコンや実はこっそり出てるSnapdragon対応のWindowsマシンがハイエンドでもARMという事を後押ししてくれます。富岳のスパコンランキング世界一という実績も低スペックへの懸念を払拭してくれるでしょう。

というわけで、今はかつて無いほど流れは来ているので、このままPC及びサーバ向けの市場に広がるかが今後の分水嶺になるかと思います。

今後、サーバ用途にも少なからず入ってくればARMの未来も明るいですが、RISC-VやオープンソースとなったMIPSも控えています。x86からARMに切り替える事ができたらば、その他のCPUに切り替えることも出来てしまうので今後がどうなっていくか本当に楽しみです。特に富士通のA64FXは日本発のCPUということもあるし、スペックは高そうに見えるのでHPC以外にも売れてくれないかなーと個人的には興味津々です。

まとめ

ARMがスパコン市場でもPC市場でもIntelの牙城を崩しつつあるのはは本当にすごい事だと思います。特に富岳が1位を取れたのが嬉しくて勢いで記事をまとめて見たのですが、結構調べながら書く事が多くて思いの外時間を使ってしまいました。結果的にARMの勉強になったので良かったです。

ちなみに、組み込みからスパコンまで使われてるARMアーキテクチャですが、他にも同じように広範囲に使われてるCPUアーキテクチャはあるでしょうか? 実はあるんです。それはx86MIPSとPowerです。有名どころって大体そうなんですよね。みんな同じアーキテクチャでどこまで行けるかという勝負になるので、シェアの大小はあっっても実績だけは少なからずあったりします。

それではHappy Hacking!

参考: