後藤弘茂のWeekly海外ニュース
Armの次世代命令アーキテクチャ「Armv9」が見えてきた
2019年11月13日 11:00
Armv8からのインクリメンタルな命令拡張
Armの次世代のCPU命令セットアーキテクチャ(ISA:Instruction Set Architecture)である「Armv9」がじょじょに姿を現しつつある。Armは現在のISA「Armv8」を段階的に拡張しつつあり、最終的に拡張の集大成がArmv9への橋渡しとなると見られる。Armv9については、あるCPU業界関係者は、セキュリティ拡張がもっとも重要な鍵となると語っていた。ArmはArmv8.3以降の段階拡張では、セキュリティにフォーカスしており、Armv9に向けたステップと見られる。
Armの命令セットアーキテクチャの進化は、現在のIT業界にとって極めて重要だ。それは、高性能CPUの命令セットアーキテクチャが、x86/x64系とArm系の2系統でほぼ独占されてしまっているからだ。モバイルや組み込みでは、Armが最大勢力。Arm自体のCPUコアIPを使っていなくても、AppleのAシリーズSoCのCPUコアも、QualcommのSnapdragon SoCのKryoコアも、CPUコアはArmの命令セットに準拠している。Armの命令セットアーキテクチャの変革は、多くのコンピューティングデバイスに影響する。
Armは、2011年のArmv8でCPU ISAを64-bit化すると同時に、アーキテクチャを劇的に切り替えた。スマートで整理された64bitアーキテクチャのAArch64で、ISAの仕切り直しをして、再スタートを切った。そして、Armv8のベースの上に、Armは現在拡張命令を積み上げつつある。拡張は、仮想化やRASなどサーバー向けのシステム的な拡張、深層学習向けの演算拡張、そしてセキュリティ拡張の3つの方向となっている。
さらに、Armは今後のCPUアーキテクチャ拡張の方向性も示した。CPUコア数のスケーリングのためにトランザクショナルメモリを導入、車載向けにファンクショナルセーフィティ機能を付加、深層学習ではマトリックス演算をサポート、ベクタ演算では一部市場向けにベクタを256-bitに拡張して行く。ただし、256-bit化の概要などはまだ明らかにされていない。
また、Armからライセンスを受けた顧客がカスタム命令をArm命令セットに組み込むことも可能にする。カスタム命令は組み込み向けのCortex-Mからスタートするが、リアルタイム向けのCortex-Rや、コンピューティング向けのCortex-Aへの展開も視野に入れている。ArmはCPUの命令セットアーキテクチャの分断を防ぐために、これまで、ライセンシーによるカスタム命令の追加を認めてこなかった。Cortex-Aクラスでのカスタム命令は、分断を起こさないように注意深く進めるという。顧客カスタム命令の導入は、顧客のカスタム命令を認めるRISC-V命令セットアーキテクチャへの対抗の意図がある。
毎年バージョンアップするArmv8-A命令セット
Arm CPUの現在の命令セットアーキテクチャは8世代目となる「Armv8」。同じArmv8名がついていても、CPUのプロファイル別に3種類のISA系列に分かれている。高性能CPUである「Cortex-A」ファミリ向けが「Armv8-A」、リアルタイムCPU「Cortex-R」ファミリ向けが「Armv8-R」、組み込みMCU「Cortex-M」ファミリ向けが「Armv8-M」だ。プロファイルごとに命令セットは異なる。
さらに、命令セットにはマイナーバージョンアップがある。高性能CPU向けのArmv8-Aも、小数点以下のバージョンを重ねている。Armv8.1-Aからはじまり、毎年「.1」ずつ小数点バージョンが上がり、現在はArmv8.6-Aが発表されている。Armv8.6-Aが2019年のISA拡張、Armv8.5-Aが2018年、Armv8.4-Aが2017年といったペースだ。
従来、ArmのISAは、新小数点バージョンが登場すると、ほぼ同期してArm自身のCPUコアIPに新小数点バージョンが追加されていた。しかし、現在はそうなっていない。ArmのハイエンドCPUコアIPである「Cortex-A77」のISAバージョンはArmv8.2-Aとなっている。次期コアである「Hercules」もArmv8.2-Aだ。じつは、2015年のArmv8.2-Aから、CPUコアIPのISAバージョンが上がっていない。
アーキテクチャルライセンスを受けたライセンシが開発した独自設計のArmv8系CPUコアも似たような状況で、QualcommのKryo系も含めてほとんどがArmv8.2-A止まり。Apple系のCPUコアが、かろうじてArmv8.3-Aだ。過去数年のArmv8.xは、発表はされているが、CPUにフル実装はされていない。
これには、複雑な事情がある。まず、ISAバージョンと、CPUの実装ISAバージョン名の関係がある。各Armv8.x世代のISAバージョンには、複数の機能が含まれている。Arm ISAでは、特定世代の機能をすべて備えた場合に、初めてそのバージョンに準拠と名乗ることができる。
たとえば、Armv8.2-Aの機能をすべて実装していればArmv8.2-A CPUとなる。しかし、Armv8.0-Aのベース機能に加えて、Armv8.2-Aの機能を一部実装しているだけならArmv8.2-A CPUとならず、Armv8.0-A CPUとなる。
実際のコアIPの例では、Cortex-A77は、Armv8.2-Aまでの機能はすべて実装しているが、Armv8.3-AとArmv8.4-Aの機能は一部しか実装していない。そのため、ISAバージョンとしてはArmv8.2-A CPUとなる。Armv8.4-Aをフル実装したCPUコアは、現状では現れていない。機能の“つまみ食い”をしているため、Armv8 ISAのバージョンアップ条件が満たされずバージョンが進まない。
ただし、この状況は近い将来には変わると見られる。Arm CPUコアでは次々世代の「Matterhorn(マッターホルン:英語読みではマッターホーン)」になって、Armv8.6-Aまでの多くの機能が一気に実装される。命令セット的には、Matterhornが大きな節目となる。ArmはCPUのコードネーム規則を、現在のギリシャ神話の神名から、山名にへとMatterhornから切り替えるが、コードネームと同様にCPUアーキテクチャも大きく切り替わる。Matterhornは、おそらく、“プレArmv9 CPU”となると見られる。
セキュリティ拡張にフォーカスしていた過去2年間のArmv8.x命令拡張
かつては、Armの命令セットは段階的に機能が加えられると、同期してArmのCPUコアIPに実装されていた。しかし、Armv8.2-A以降は順調に実装されておらず、新機能の積み残しが重なっている。説明したように、そのため、CPUコアのISAバージョンがArmv8.2-Aから進んでいないように見える。
積み残しが多い理由はなにか。それは、Armv8.2-A以降の機能の中身に関係している。過去3世代のArmv8.x拡張は、セキュリティに注力している。とくに、Armv8.4-Aと8.5-Aはほぼセキュリティ関連の拡張となっている。
これは、MeltdownやSpectreからはじまるCPUマイクロアーキテクチャ上のセキュリティ問題に対策するためだ。サイドチャネルアタックの一種であるMeltdownやSpectreが、CPUベンダーに表面化したのが2017年。そのため、ArmだけでなくIntelやAMDも含めて、高性能CPUを開発するベンダーは、過去2~3年は、CPUアーキテクチャやマイクロアーキテクチャにセキュリティ機能を組み込むことに注視して来た。
Armの場合は、Armプラットフォームへの依存度が高いGoogleが重要なパートナーとなり、アーキテクチャ上でのセキュリティ対策を進めてきた。それがArmv8.4-A(2017)やArmv8.5-A(2018)といった最新のISA小数点バージョンに組み込まれている。
上のArmv8.x-Aの各バージョンの新機能を見れば、セキュリティへの傾斜が一目瞭然だ。図では、SIMD/FP(浮動小数点)演算系の機能がグリーン色、セキュリティ系の機能がパープル色、システムやメモリ系の機能がカーキ色で示してある。セキュリティ機能は、Armv8.3-Aから始まり、Armv8.4-A/Armv8.5-Aで一気に増えている。
そして、これらのセキュリティ機能では、ソフトウェアパートナーとの調整が極めて重要となる。セキュリティ機能が揃い、パートナーとの検証が進み、実際のIPへと実装できる段階にまで持って行くまでに時間が必要だったと考えられる。セキュリティ拡張に穴がないかをパートナーと検証して完成させる必要がある。一連のセキュリティ拡張のなかでももっとも重要な「Memory Tagging」が揃ったのはArmv8.5-Aであり、そこから実装へ2年と考えると、2020年のMatterhorn世代のコアからになるのも無理がないかもしれない。
セキュリティから再び深層学習へとフォーカスが移る
サイドチャネルアタック問題は、高性能CPUのアーキテクチャ開発を激変させた。それまでは、優れた高速化のテクニックを実装するだけだったのが、Meltdown/Spectre以降は、そのテクニックにセキュリティの問題がないかどうかをチェックする必要が生じるようになった。そして、サイドチャネルアタックに対する、抜本的なセキュリティ機能をアーキテクチャ/マイクロアーキテクチャに組み込む必要が出てきた。
高性能CPUベンダーは、2017年中盤以降は、この問題で奔走していた。Armだけでなく、IntelやAMDをはじめすべての高性能CPUベンダーの現在の目的は、サイドチャネルアタックから防護されたアーキテクチャの完成にある。
Armv8-A命令セットの進化は、こうした状況を明確に示している。そして、Armは、セキュリティ拡張はArmv8.5-Aで一区切りをつけて、Matterhornでの実装に向かっている。そのためか、次の命令拡張であるArmv8.6-Aはセキュリティではなく、深層学習対応にスポットを当てたものになった。
Armは、Armv8.2-AでFP16(16-bit半精度浮動小数点演算)をサポート、Armv8.4-Aで8-bitのドット積(Dot Product)命令をサポートした。CPUのSIMD(Single Instruction, Multiple Data)演算での深層学習サポートを強めてきた。Armv8.6-Aでは、さらにマトリックス演算とBFloat16をサポートすることで、深層学習への傾斜を強める。CPUにマトリックス演算とBFloat16を持ってくる理由の1つは、エッジサイドでのトレーニング(学習)をサポートするためだ。クラウド側でのヘビーなトレーニングではなく、中間のエッジでの軽いトレーニングをサポートする。
ちなみに、ArmのSIMD演算は、Armv8-Aは2本立てとなっている。Armv8の標準のSIMD命令は「NEON(aarch64ではASIMD)」。だが、スーパーコンピュータ向けに富士通と開発した「Scalable Vector Extension (SVE)」もある。Armv8.xの要求仕様ではASIMDとSVEはどちらかというサポートになっており両方をサポートする必要はない。そして、Armは当面はASIMDとSVEを並列進化させる路線で、マトリックス演算もASIMDとSVEの両方に実装される。しかし、現状では、SVEは、まだスーパーコンピュータスペースのみの命令となっており、ASIMDと置き換えるビジョンは見えていない。