AArch64
AArch64またはARM64は、ARMアーキテクチャの64ビット命令セットである。
最初に、Armv8-Aアーキテクチャとして導入された。Armは毎年新しい拡張機能をリリースしている[1]。
Armv8.xおよびArmv9.x拡張機能
2011年10月に発表された[2] Armv8-Aは、ARMアーキテクチャの根本的な変化を示した。これは、「AArch64」という名前のオプションの64ビットアーキテクチャと、関連する新しい「A64」命令セットを追加した。AArch64は、既存の32ビットアーキテクチャ("AArch32"/ARMv7-A)および命令セット("A32")とのユーザースペース互換性を提供する。16ビットのThumb命令セットは「T32」と呼ばれ、64ビットの命令セットがない。Armv8-Aを使用すると、32ビットアプリケーションを64ビットOSで実行し、32ビットOSを64ビットハイパーバイザーの制御下に置くことができる[3]。ARMは、2012年10月30日にCortex-A53およびCortex-A57コアを発表した[4]。
Appleは、消費者向け製品(iPhone 5s)でArmv8-A互換コア(Cyclone)を最初にリリースした。AppliedMicroは、シリコンチップ化される前のArmv8-A アーキテクチャをFPGAに構築し、64ビットLinuxを実行する最初のデモを行った[5]。Samsungの最初のArmv8-A SoCは、Galaxy Note 4で使用されているExynos 5433であり、big.LITTLE構成の4つのCortex-A57コアとCortex-A53コアの2つのクラスターを備えている。ただし、AArch32モードでのみ実行される[6]。
AArch32とAArch64の両方に対して、Armv8-AはVFPv3/v4とAdvanced SIMD (NEON)を標準としている。また、AES、SHA-1/SHA-256、および有限体演算(英語版)をサポートする暗号化命令も追加する[7]。
命名規則
- 64+32ビット
- アーキテクチャ:AArch64
- 仕様:Armv8-A
- 命令セット:A64 + A32
- サフィックス:v8-A
- 32 + 16(サム)ビット
- アーキテクチャ:AArch32
- 仕様:Armv8-R/ARMv7-A
- 命令セット:A32 + T32
- サフィックス:-A32/-R/v7-A
- 例:Armv8-R、Cortex-A32 [8]
AArch64の機能
- 新しい命令セット、A64
- 31個の汎用64ビットレジスタがある。
- 専用のゼロレジスタまたはスタックポインタ(SP)レジスタがある(命令によって異なる)。
- プログラムカウンタ(PC)は、レジスタとして直接アクセスできなくなった。
- 命令はまだ32ビット長で、ほとんどA32と同じである(LDM/STM命令とほとんどの条件付き実行が削除された)。
- LDM/STMの代わりにロード/ストアのペアを搭載。
- ほとんどの命令で予測を行わない(分岐予測を除く)。
- ほとんどの命令は、32ビットまたは64ビットの引数を取ることができる。
- アドレスは64ビットと見なされる。
- Advanced SIMD拡張 (NEON)
- 32個の128ビットレジスタ(以前の16個から増加)があり、VFPv4からもアクセスできる。
- 倍精度浮動小数点形式をサポート。
- IEEE 754に完全に準拠。
- AES暗号化/復号およびSHA-1/SHA-2ハッシュ命令もこれらのレジスタを使用。
- 新しい例外システム
- レジスタとモードのバンク切り替えが少なくなる。
- 既存のLarge Physical Address Extension(LPAE)に基づく48ビット仮想アドレスから64ビットに簡単に拡張できるよう設計されたメモリ変換。
拡張:データ収集のヒント(Armv8.0-DGH)
AArch64はArmv8-Aで導入され、後続のバージョンに含まれている。AArch64は、Armv8-Aへの導入後にオプションとしてArmv8-Rにも導入された。Armv8-Mには含まれていない。
命令エンコード
A64命令は以下の表のビットアサインに基づいてエンコードされる。命令はグルーピングされており、主にビット25から28が命令の所属グループを表現している。
タイプ | ビット | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
予約 | 0 | op0 | 0000 | op1 | ||||||||||||||||||||||||||||
SME命令 | 1 | op0 | 0000 | op1 | op2 | op3 | ||||||||||||||||||||||||||
未割当 | 0001 | |||||||||||||||||||||||||||||||
SVE命令 | op0 | 0010 | op1 | op2 | op3 | op4 | ||||||||||||||||||||||||||
未割当 | 0011 | |||||||||||||||||||||||||||||||
データ処理(即値) | 100 | op0 | ||||||||||||||||||||||||||||||
分岐/例外生成/システム命令 | op0 | 101 | op1 | op2 | ||||||||||||||||||||||||||||
ロード・ストア命令 | op0 | 1 | op1 | 0 | op2 | op3 | op4 | |||||||||||||||||||||||||
データ処理(レジスタ) | op0 | op1 | 101 | op2 | op3 | |||||||||||||||||||||||||||
データ処理(浮動小数/SIMD) | op0 | 111 | op1 | op2 | op3 |
Armv8.1-A
2014年12月、「v8.0を超える増分メリット」をもたらすアップデートであるArmv8.1-A[10]が発表された。拡張機能は2つのカテゴリ、すなわち命令セットの変更、および例外モデルとメモリ変換の変更に分類される。
命令セットの機能強化には、次のものが含まれる。
- AArch64アトミック読み取り/書き込み命令のセット。
- 一部のライブラリ最適化の機会を可能にするためのAArch32とAArch64の両方のAdvanced SIMD命令セットへの追加:
- 符号付き飽和丸め2倍乗算積算、上位半分を返す。
- 符号付き飽和丸め2倍乗算減算、上位半分を返す。
- 命令は、ベクトル形式とスカラー形式で追加される。
- 構成可能なアドレス領域に制限されたメモリアクセス順序を提供できるAArch64ロードおよびストア命令のセット。
- v8.0ではオプションだったCRC命令は、Armv8.1では要件になった。
例外モデルとメモリ変換システムの機能強化には、次のものが含まれる。
- 新しいPrivileged Access Never(PAN)状態ビット:明示的に有効にされていない限り、ユーザーデータへの特権アクセスを防止する制御を提供。
- 仮想化のためのVMID範囲の拡大。多数の仮想マシンをサポート。
- ページテーブルアクセスフラグのハードウェア更新のオプションのサポート、およびオプションのハードウェア更新されたダーティビットメカニズムの標準化。
- 仮想化ホスト拡張機能(VHE):この拡張機能は、ホストオペレーティングシステムとゲストオペレーティングシステム間の移行時に関連するソフトウェアオーバーヘッドを削減し、タイプ2ハイパーバイザーのパフォーマンスを向上する。この拡張機能により、ホストOSは実質的な変更なしにEL1ではなくEL2で実行可能。
- OSがハードウェアサポートを必要としない場合に、オペレーティングシステムで使用するために一部の変換テーブルビットを解放するメカニズム。
- メモリのタグ付け機能を提供するTop-byte Ignore[11]。
Armv8.2-A
2016年1月、Armv8.2-Aが発表された[12]。その機能強化は、次の4つのカテゴリに分類される。
- オプションの半精度浮動小数点データ処理(半精度は以前からストレージ形式ではサポートされていたが、演算ではサポートされていなかった)。
- メモリモデルの機能強化
- 信頼性、可用性、および保守性の拡張(RAS拡張)の導入
- 統計的プロファイリングの導入
Scalable Vector Extension(SVE)
スケーラブルベクター拡張機能(SVE)は、特にハイパフォーマンスコンピューティングの科学的ワークロードのベクトル化のために開発された「Armv8.2-Aアーキテクチャ以降のオプションの拡張機能」である[13][14]。この仕様では、128から2048ビットの可変ベクトル長を実装できる。当初は、この拡張機能は、NEON拡張機能を補完するものであり、これに置き換わるものではなかったが、SVE2からはNEONのスーパーセットとなった[15]。
512ビットのSVEの一種は、富士通A64FX ARMプロセッサを使用して富岳スーパーコンピュータに実装されている。富岳は、2021年に本格稼働を開始し、当時世界最高性能のスーパーコンピュータとなった[16]。
SVEはGCCコンパイラによってサポートされており、GCC 8は自動ベクトル化をサポートし[14]、GCC10はC組み込み関数をサポートしている。2020年7月の時点で、LLVMとclangはCとIRの組み込み関数をサポートしている。ARM独自のLLVMフォークは、自動ベクトル化をサポートしている[17]。
Armv8.3-A
2016年10月、Armv8.3-Aが発表された。その機能強化は6つのカテゴリに分類される[18]。
- ポインタ認証[19](AArch64のみ)。アーキテクチャへの必須の拡張(新しいブロック暗号、QARMA(英語版)[20]に基づく)(コンパイラはセキュリティ機能を利用する必要があるが、命令はNOPスペースにあるため、古いチップでは追加のセキュリティを提供しないが、下位互換性がある)。
- ネストされた仮想化(AArch64のみ)
- Advanced SIMDでの複素数のサポート(AArch64およびAArch32)。たとえば、90度の倍数の回転
- 新しいFJCVTZS(Floating-point JavaScript Convert to Signed fixed-point, rounding toward Zero:JavaScriptの浮動小数点数を符号付き固定小数点数に変換し、ゼロ方向に丸める)命令[21]
- メモリ整合性モデルへの変更(AArch64のみ)。C++11/C11の(デフォルトではない)より弱いRCpc(Release Consistent processor consistent)モデルをサポートするため(デフォルトのC++11/C11コンシステンシー・モデルは以前のArmv8ですでにサポートされていた)
- より大きなシステム可視キャッシュのIDメカニズムのサポート(AArch64およびAArch32)
Armv8.3-Aアーキテクチャは(少なくとも)GCC7コンパイラでサポートされるようになった[22]。
Armv8.4-A
2017年11月、Armv8.4-Aが発表された。この拡張機能は次のカテゴリに分類される[23][24][25]。
- SHA3/SHA512/SM3/SM4暗号拡張
- 改善された仮想化サポート
- メモリパーティショニングおよびモニタリング(MPAM)機能
- 新しいセキュアEL2状態とアクティビティモニター
- 符号付きおよび符号なし整数ドット積(SDOTおよびUDOT)命令
Armv8.5-AおよびArmv9.0-A[26]
2018年9月、Armv8.5-Aが発表された。その拡張機能は次のカテゴリに分類される[27][28]。
- Memory Tagging Extension(MTE)[29]
- 「攻撃者が任意のコードを実行する能力」を低減するための分岐ターゲットインジケータ(BTI)
- 乱数ジェネレーター命令:さまざまな国内および国際規格に準拠した決定論的で真の乱数を提供する
2019年8月2日、GoogleはAndroidがMemory Tagging Extension(MTE)を採用すると発表した。[30]
2021年3月、Armv9-Aが発表された。Armv9-Aのベースラインは、Armv8.5のすべての機能である[31][32][33]。Armv9-Aは以下も追加している。
- スケーラブルベクターエクステンション2(SVE2)。SVE2は、SVEのスケーラブルなベクトル化に基づいて構築されており、細粒度のデータレベル並列処理(DLP)を向上させ、命令ごとにより多くの作業を実行できる。SVE2は、Advanced SIMD (NEON)のスーパーセットとなり、現在NEONを使用しているDSPやマルチメディアSIMDコードなど、幅広いソフトウェアにこれらのメリットをもたらすことを目的とする[34]。LLVM/Clang 9およびGCC 10からSVE2をサポートしている[34][35]。
- トランザクションメモリ拡張(TME)。x86拡張機能に続いて、TMEはハードウェアトランザクションメモリ(HTM)とトランザクションロックエリジオン(TLE)のサポートを提供する。TMEは、スケーラブルな同時実行性を実現して、粗粒度のスレッドレベル並列処理(TLP)を向上させ、スレッドごとにより多くの作業を実行できるようにすることを目的としている[34]。LLVM/Clang 9およびGCC 10からTMEをサポートしている[35]。
- 機密コンピューティングアーキテクチャ(CCA)[36][37]
Armv8.6-AおよびArmv9.1-A[26]
2019年9月、Armv8.6-Aが発表された。その拡張機能は次のカテゴリに分類される[38]。
- 一般的な行列積(GEMM)
- bfloat16フォーマットのサポート
- SIMD行列操作命令、BFDOT、BFMMLA、BFMLAL、およびBFCVT
- 仮想化、システム管理、およびセキュリティの強化
- 次の拡張機能(LLVM 11ではすでにこれらの機能のサポートを追加済み[39]):
- 拡張カウンター仮想化(Armv8.6-ECV)
- ファイングレイントラップ(Armv8.6-FGT)
- アクティビティモニターの仮想化(Armv8.6-AMU)
たとえば、きめ細かいトラップ、Wait-for-Event(WFE)命令、EnhancedPAC2、FPACなどがある。SVEおよびNEONのBfloat16拡張機能は、主に深層学習で使用するためのものである[40]。
Armv8.7-AおよびArmv9.2-A[26]
2020年9月、Armv8.7-Aが発表された。
- スケーラブルマトリックス拡張(SME)(Armv9.2のみ)[41]。SMEは行列を効率的に処理するために、次のような新機能を追加する。
- 行列タイルストレージ
- オンザフライの行列転置
- タイルベクトルのロード/保存/挿入/抽出
- SVEベクトルの行列外積
- 「ストリーミングモード」SVE
- PCIeホットプラグの拡張サポート(AArch64)
- アトミックな64バイトロード/ストアでのアクセラレータへのアクセス(AArch64)
- タイムアウト指定付きのWait For Instruction(WFI)およびWait For Event(WFE)(AArch64)
- 分岐レコードの記録(Armv9.2のみ)
Armv8.8-AおよびArmv9.3-A[26]
2021年9月、Armv8.8-AおよびArmv9.3-Aが発表された。
- マスク不可能な割り込み(AArch64)
- memcpy()およびmemset()スタイルの操作を最適化する命令(AArch64)
- PACへの拡張機能(AArch64)
- ヒント付き条件分岐(AArch64)
Armv8.9-AおよびArmv9.4-A[26]
2022年9月、ARMv8.9-AとARMv9.4-Aが発表された。[42]
- 仮想メモリシステムアーキテクチャ(VMSA)の機能強化
- パーミッションインダイレクトとオーバーレイ
- translation hardening
- 128 ビット変換テーブル(ARMv9 のみ)
- Scalable Matrix Extension 2 (SME2) (ARMv9のみ)
- マルチベクトル命令
- マルチベクトルpredicate
- 2b/4b のウェイト圧縮
- 1b バイナリーネットワーク
- レンジプリフェッチ
- ガード付きコントロールスタック(GCS)(ARMv9のみ)
- コンフィデンシャル・コンピューティング
- メモリ暗号化コンテクスト
- デバイスの割り当て
Armv8-R(リアルタイムアーキテクチャ)
オプションのAArch64サポートがArmv8-Rプロファイルに追加され、最初のARMコアがCortex-R82を実装した[43]。A64命令セットが追加され、メモリバリア命令にいくつかの変更が加えられている[44]。
脚注
- ^ “Overview”. Learn the architecture: Understanding the Armv8.x and Armv9.x extensions. 2022年8月24日閲覧。
- ^ "ARM Discloses Technical Details Of The Next Version Of The ARM Architecture" (Press release). Arm Holdings. 27 October 2011. 2019年1月1日時点のオリジナルよりアーカイブ。2013年9月20日閲覧。
- ^ Grisenthwaite (2011年). “ARMv8-A Technology Preview”. 2011年11月11日時点のオリジナルよりアーカイブ。2011年10月31日閲覧。
- ^ "ARM Launches Cortex-A50 Series, the World's Most Energy-Efficient 64-bit Processors" (Press release). Arm Holdings. 2012年10月31日閲覧。
- ^ "AppliedMicro Showcases World's First 64-bit ARM v8 Core" (Press release). AppliedMicro. 28 October 2011. 2014年2月11日閲覧。
- ^ “Samsung's Exynos 5433 is an A57/A53 ARM SoC”. AnandTech. 2014年9月17日閲覧。
- ^ “ARM Cortex-A53 MPCore Processor Technical Reference Manual: Cryptography Extension”. ARM. 2016年9月11日閲覧。
- ^ “Cortex-A32 Processor – ARM”. 2016年12月18日閲覧。
- ^ “Top-level encodings for A64 - Arm A-profile A64 Instruction Set Architecture”. ARM. 2022年5月8日閲覧。
- ^ Brash (2014年12月2日). “The ARMv8-A architecture and its ongoing development”. 2015年1月23日閲覧。
- ^ “Top-byte ignore (TBI)”. WikiChip. 2022年7月17日閲覧。
- ^ Brash (2016年1月5日). “ARMv8-A architecture evolution”. 2016年6月7日閲覧。
- ^ “The scalable vector extension sve for the Armv8 a architecture” (英語). Arm Community. (2016年8月22日). https://community.arm.com/processors/b/blog/posts/technology-update-the-scalable-vector-extension-sve-for-the-armv8-a-architecture 2018年7月8日閲覧。
- ^ a b “GCC 8 Release Series – Changes, New Features, and Fixes – GNU Project – Free Software Foundation (FSF)” (英語). gcc.gnu.org. 2018年7月9日閲覧。
- ^ “Learn the architecture - Introducing SVE2”. 2024年6月1日閲覧。
- ^ "Fujitsu Completes Post-K Supercomputer CPU Prototype, Begins Functionality Trials – Fujitsu Global" (Press release) (英語). 2018年7月8日閲覧。
- ^ “⚙ D71712 Downstream SVE/SVE2 implementation (LLVM)”. reviews.llvm.org. 2020年9月5日閲覧。
- ^ David Brash (2016年10月26日). “ARMv8-A architecture – 2016 additions”. 2022年7月17日閲覧。
- ^ “[Ping~,AArch64 Add commandline support for -march=armv8.3-a]”. 2022年8月24日閲覧。 “pointer authentication extension is defined to be mandatory extension on ARMv8.3-A and is not optional”
- ^ “Qualcomm releases whitepaper detailing pointer authentication on ARMv8.3” (2017年1月10日). 2022年8月24日閲覧。
- ^ “A64 Floating-point Instructions: FJCVTZS”. arm.com. 2019年7月11日閲覧。
- ^ “GCC 7 Release Series – Changes, New Features, and Fixes”. 2022年8月24日閲覧。 “The ARMv8.3-A architecture is now supported. It can be used by specifying the -march=armv8.3-a option. [..] The option -msign-return-address= is supported to enable return address protection using ARMv8.3-A Pointer Authentication Extensions.”
- ^ “Introducing 2017's extensions to the Arm Architecture” (英語). community.arm.com. 2019年6月15日閲覧。
- ^ “Exploring dot product machine learning” (英語). community.arm.com. 2019年6月15日閲覧。
- ^ “ARM Preps ARMv8.4-A Support For GCC Compiler – Phoronix” (英語). www.phoronix.com. 2018年1月14日閲覧。
- ^ a b c d e “Armv8.x and Armv9.x extensions and features”. Learn the architecture: Understanding the Armv8.x and Armv9.x extensions. 2022年5月4日閲覧。
- ^ “Arm Architecture Armv8.5-A Announcement – Processors blog – Processors – Arm Community” (英語). community.arm.com. 2019年4月26日閲覧。
- ^ “Arm Architecture Reference Manual Armv8, for Armv8-A architecture profile” (英語). ARM Developer. 2019年8月6日閲覧。
- ^ “Arm MTE architecture: Enhancing memory safety” (英語). community.arm.com. 2021年7月27日閲覧。
- ^ “Adopting the Arm Memory Tagging Extension in Android” (英語). Google Online Security Blog. 2019年8月6日閲覧。
- ^ “Arm's solution to the future needs of AI, security and specialized computing is v9” (英語). Arm | The Architecture for the Digital World. 2021年7月27日閲覧。
- ^ Schor (2021年3月30日). “Arm Launches ARMv9” (英語). WikiChip Fuse. 2021年7月27日閲覧。
- ^ Frumusanu. “Arm Announces Armv9 Architecture: SVE2, Security, and the Next Decade”. www.anandtech.com. 2021年7月27日閲覧。
- ^ a b c “Arm releases SVE2 and TME for A-profile architecture – Processors blog – Processors – Arm Community” (英語). community.arm.com. 2019年5月25日閲覧。
- ^ a b “Arm SVE2 Support Aligning For GCC 10, LLVM Clang 9.0 – Phoronix”. www.phoronix.com. 2019年5月26日閲覧。
- ^ “Unlocking the power of data with Arm CCA” (英語). community.arm.com. 2021年7月27日閲覧。
- ^ “Arm Introduces Its Confidential Compute Architecture” (英語). WikiChip Fuse (2021年6月23日). 2021年7月27日閲覧。
- ^ “Arm A profile architecture update 2019” (英語). community.arm.com. 2019年9月26日閲覧。
- ^ “LLVM 11.0.0 Release Notes”. releases.llvm.org. 2021年3月11日閲覧。
- ^ “BFloat16 extensions for Armv8-A” (英語). community.arm.com. 2019年8月30日閲覧。
- ^ “Scalable Matrix Extension for the Armv9-A Architecture” (英語). community.arm.com. 2021年7月27日閲覧。
- ^ “Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community” (英語). community.arm.com. 2022年12月9日閲覧。
- ^ Frumusanu (2020年9月3日). “ARM Announced Cortex-R82: First 64-bit Real Time Processor”. AnandTech. 2022年7月17日閲覧。
- ^ “Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch64 architecture profile”. Arm Ltd. 2022年7月17日閲覧。