AArch64

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

AArch64またはARM64は、 ARMアーキテクチャの64ビット拡張です

これは、 ARMv8-Aアーキテクチャ で最初に導入されました。

ARMv8-A

2011年10月に発表された[1] ARMv8-Aは、ARMアーキテクチャの根本的な変更を表しています。これは、「AArch64」という名前のオプションの64ビットアーキテクチャと、関連する新しい「A64」命令セットを追加します。AArch64は、既存の32ビットアーキテクチャ( "AArch32" / ARMv7-A)および命令セット( "A32")とのユーザースペース互換性を提供します。16ビットのThumb命令セットは「T32」と呼ばれ、64ビットの命令セットはありません。ARMv8-Aを使用すると、32ビットアプリケーションを64ビットOSで実行し、32ビットOSを64ビットハイパーバイザーの制御下に置くことができます。[2] ARMは、2012年10月30日にCortex-A53およびCortex-A57コアを発表しました。 消費者向け製品(iPhone 5S )のCyclone ) 。FPGAを使用するAppliedMicroは、 ARMv8-Aを最初にデモしました。[4] Samsungの最初のARMv8- ASoCは、 Galaxy Note4で使用されているExynos5433で、 big.LITTLE構成の4つのCortex-A57およびCortex-A53コアの2つのクラスターを備えています。ただし、AArch32モードでのみ実行されます。[5]

AArch32とAArch64の両方に対して、ARMv8-AはVFPv3 / v4と高度なSIMD(Neon)を標準にします。また、 AESSHA-1 / SHA-256、および有限体演算をサポートする暗号化命令も追加します[6]

命名規則

  • 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 [7]

AArch64の機能

  • 新しい命令セット、A64
    • 31個の汎用64ビットレジスタがあります。
    • 専用のゼロまたはスタックポインタ(SP)レジスタがあります(命令によって異なります)。
    • プログラムカウンター(PC)は、レジスターとして直接アクセスできなくなりました。
    • 命令はまだ32ビット長で、ほとんどA32と同じです(LDM / STM命令があり、ほとんどの条件付き実行が削除されています)。
      • (LDM / STMの代わりに)ロード/ストアがペアになっています。
      • ほとんどの命令(ブランチを除く)の予測はありません。
    • ほとんどの命令は、32ビットまたは64ビットの引数を取ることができます。
    • アドレスは64ビットと見なされます。
  • 高度なSIMD(ネオン)拡張
    • 32×128ビットレジスタ(16から)があり、VFPv4からもアクセスできます。
    • 倍精度浮動小数点形式をサポートします
    • IEEE754に完全に準拠しています。
    • AES暗号化/復号化およびSHA-1 / SHA-2ハッシュ命令もこれらのレジスタを使用します。
  • 新しい例外システム
    • バンクされたレジスタとモードが少なくなります。
  • 64ビットに簡単に拡張できるように設計された既存のLargePhysical Address Extension(LPAE)に基づく48ビット仮想アドレスからのメモリ変換。

拡張機能:データ収集のヒント(ARMv8.0-DGH)

AArch64はARMv8-Aで導入され、ARMV8-Aの後続バージョンに含まれています。AArch64は、どちらも32ビットアーキテクチャであるため、ARMv8-RまたはARMv8-Mには含まれていません。

命令フォーマット

A64命令が属するグループを選択するための主なオペコードは、ビット25〜28にあります。

A64命令フォーマット
タイプ 少し
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
予約済み op0 0000 op1 即時定数16ビット
未割り当て 0001
SVEの説明 0010
未割り当て 0011
データ処理—即時のPC関連。 op immlo 10000 immhi Rd
データ処理—即時その他 sf 100 01-11 Rd
ブランチ+システム命令 op0 101 op1 op2
命令のロードと保存 op0 1 op1 0 op2 op3 op4
データ処理—登録 sf op0 op1 101 op2 op3
データ処理—フローティングポイントとSIMD op0 111 op1 op2 op3

ARMv8.1-A

2014年12月、ARMv8.1-A [8]、「v8.0を超える増分メリット」のアップデートが発表されました。拡張機能は、命令セットの変更と、例外モデルとメモリ変換の変更の2つのカテゴリに分類されました。

命令セットの機能強化には、次のものが含まれます。

  • AArch64アトミック読み取り/書き込み命令のセット。
  • 一部のライブラリ最適化の機会を可能にするためのAArch32とAArch64の両方の高度なSIMD命令セットへの追加:
    • 符号付き飽和丸め倍増積和、高い半分を返します。
    • 符号付き飽和丸め2倍乗算減算、高い半分を返します。
    • 命令は、ベクトル形式とスカラー形式で追加されます。
  • 構成可能なアドレス領域に制限されたメモリアクセス順序を提供できるAArch64ロードおよびストア命令のセット。
  • v8.0のオプションのCRC命令は、ARMv8.1の要件になります。

例外モデルとメモリ変換システムの機能強化には、次のものが含まれます。

  • 新しい特権アクセスなし(PAN)状態ビットは、明示的に有効にされていない限り、ユーザーデータへの特権アクセスを防止する制御を提供します。
  • 仮想化のためのVMID範囲の拡大。多数の仮想マシンをサポートします。
  • ページテーブルアクセスフラグのハードウェア更新のオプションのサポート、およびオプションのハードウェア更新されたダーティビットメカニズムの標準化。
  • 仮想化ホスト拡張機能(VHE)。これらの拡張機能は、ホストオペレーティングシステムとゲストオペレーティングシステム間の移行時に関連するソフトウェアオーバーヘッドを削減することにより、タイプ2ハイパーバイザーのパフォーマンスを向上させます。拡張機能により、ホストOSは、実質的な変更なしに、EL1ではなくEL2で実行できます。
  • OSがハードウェアサポートを必要としない場合に、オペレーティングシステムで使用するために一部の変換テーブルビットを解放するメカニズム。
  • 上位バイトはメモリのタグ付けを無視します[9]

ARMv8.2-A

2016年1月、ARMv8.2-Aが発表されました。[10]その機能強化は、次の4つのカテゴリに分類されます。

スケーラブルベクトル拡張(SVE)

スケーラブルベクター拡張機能(SVE)は、ハイパフォーマンスコンピューティングの科学的ワークロードのベクトル化のために特別に開発された「ARMv8.2-Aアーキテクチャー以降のオプションの拡張機能」です。[11] [12]この仕様では、128〜2048ビットの可変ベクトル長を実装できます。この拡張機能は、 NEON拡張機能を補完するものであり、これに置き換わるものではありません

512ビットのSVEバリアントは、富士通A64FXARMプロセッサを使用して富岳スーパーコンピュータにすでに実装されています。「2021年頃に本格稼働を開始することを目標」として、世界最高性能のスーパーコンピューターを目指しています。[13]

SVEはGCCコンパイラによってサポートされており、GCC 8は自動ベクトル化[12]をサポートし、GCC10はC組み込み関数をサポートしています。2020年7月の時点で、LLVMclangはCとIRの組み込み関数をサポートしています。ARM独自のLLVMフォークは、自動ベクトル化をサポートしています。[14]

ARMv8.3-A

2016年10月、ARMv8.3-Aが発表されました。その機能強化は6つのカテゴリーに分類されました:[15]

  • ポインタ認証[16](AArch64のみ)。アーキテクチャへの必須の拡張(新しいブロック暗号、QARMA [17]に基づく)(コンパイラはセキュリティ機能を利用する必要がありますが、命令はNOPスペースにあるため、古いチップでは追加のセキュリティを提供しませんが、下位互換性があります)。
  • ネストされた仮想化(AArch64のみ)
  • 高度なSIMD複素数のサポート(AArch64およびAArch32); たとえば、90度の倍数の回転。
  • 新しいFJCVTZS(浮動小数点JavaScriptを符号付き固定小数点に変換、ゼロに丸める)命令。[18]
  • メモリ整合性モデルへの変更(AArch64のみ)。C ++ 11 / C11の(デフォルトではない)より弱いRCpc(リリース・コンシステンシー・プロセッサー・コンシステント)モデルをサポートするため(デフォルトのC ++ 11 / C11コンシステンシー・モデルは以前のARMv8ですでにサポートされていました)。
  • より大きなシステム可視キャッシュ(AArch64およびAArch32)のIDメカニズムのサポート

ARMv8.3-アーキテクチャは(少なくとも)GCC7コンパイラでサポートされるようになりまし[19]

ARMv8.4-A

2017年11月、ARMv8.4-Aが発表されました。その拡張機能は次のカテゴリに分類されます:[20] [21] [22]

  • 「SHA3 / SHA512 / SM3 / SM4暗号拡張」
  • 改善された仮想化サポート
  • メモリのパーティション分割と監視(MPAM)機能
  • 新しいセキュアEL2状態とアクティビティモニター
  • 符号付きおよび符号なし整数ドット積(SDOTおよびUDOT)命令。

ARMv8.5-A

2018年9月、ARMv8.5-Aが発表されました。その拡張機能は次のカテゴリに分類されます:[23] [24]

  • メモリタグ拡張(MTE)[25]
  • 「攻撃者が任意のコードを実行する能力」を低減するための分岐ターゲットインジケータ(BTI)、
  • 乱数ジェネレーターの指示–「さまざまな国内および国際規格に準拠した決定論的で真の乱数を提供する」

2019年8月2日、GoogleAndroidがMemory Tagging Extension(MTE)を採用すると発表しました。[26]

ARMv8.6-A

2019年9月、ARMv8.6-Aが発表されました。追加:[27]

  • 一般的な行列の乗算(GEMM)
  • Bfloat16フォーマットのサポート
  • SIMD行列操作命令、BFDOT、BFMMLA、BFMLAL、およびBFCVT
  • 仮想化、システム管理、およびセキュリティの強化
  • および次の拡張機能(LLVM 11はすでに[28]のサポートを追加しています):
    • 拡張カウンター仮想化(ARMv8.6-ECV)
    • ファイングレイントラップ(ARMv8.6-FGT)
    • アクティビティモニターの仮想化(ARMv8.6-AMU)

たとえば、きめ細かいトラップ、Wait-for-Event(WFE)命令、EnhancedPAC2、FPACなどです。SVEおよびNeonのBfloat16拡張機能は、主に深層学習で使用するためのものです。[29]

ARMv9-A

2021年3月、ARMv9-Aが発表されました。ARMv9-Aのベースラインは、ARMv8.5のすべての機能です。[30] [31] [32] ARMv9-Aは次も追加します。

  • スケーラブルベクターエクステンション2(SVE2)。SVE2は、SVEのスケーラブルなベクトル化に基づいて構築されており、細粒度のデータレベル並列処理(DLP)を向上させ、命令ごとにより多くの作業を実行できるようにします。SVE2は、現在Neonを使用しているDSPやマルチメディアSIMDコードなど、幅広いソフトウェアにこれらのメリットをもたらすことを目的としています[33] LLVM / Clang9.0およびGCC10.0開発コードは、SVE2をサポートするように更新されました。[33] [34]
  • トランザクションメモリ拡張(TME)。x86拡張機能に続いて、TMEはHardware Transactional Memory(HTM)およびTransactional Lock Elision(TLE)のサポートを提供します。TMEは、スケーラブルな同時実行性を実現して、粗粒度のスレッドレベル並列処理(TLP)を向上させ、スレッドごとにより多くの作業を実行できるようにすることを目的としています。[33] LLVM / Clang9.0およびGCC10.0開発コードは、TMEをサポートするように更新されました[34]
  • 機密コンピューティングアーキテクチャ(CCA)[35] [36]
  • スケーラブルマトリックス拡張(SME)。[37] SMXは、マトリックスを効率的に処理するために、次のような新機能を追加します。
    • マトリックスタイルストレージ
    • オンザフライの行列転置
    • タイルベクトルのロード/保存/挿入/抽出
    • SVEベクトルの行列外積
    • 「ストリーミングモード」SVE

ARMv8-R(リアルタイムアーキテクチャ)

オプションのAArch64サポートがARMv8-Rプロファイルに追加され、最初のARMコアがCortex-R82を実装しました。[38] メモリバリア命令にいくつかの変更を加えて、A64命令セットを追加します。[39]

参考文献

  1. ^ 「ARMはARMアーキテクチャの次のバージョンの技術的な詳細を開示します」(プレスリリース)。アームホールディングス2011年10月27日。2019年1月1日のオリジナルからアーカイブ2013年9月20日取得
  2. ^ Grisenthwaite、リチャード(2011)。「ARMv8-テクノロジープレビュー」(PDF)2011年11月11日にオリジナル(PDF)からアーカイブされました2011年10月31日取得
  3. ^ 「ARMは世界で最もエネルギー効率の良い64ビットプロセッサであるCortex-A50シリーズを発表しました」(プレスリリース)。アームホールディングス2012年10月31日取得
  4. ^ 「AppliedMicroは世界初の64ビットARMv8コアを紹介します」(プレスリリース)。アプライドマイクロ。2011年10月28日2014年2月11日取得
  5. ^ 「SamsungのExynos5433はA57 / A53 ARMSoCです」AnandTech 2014年9月17日取得
  6. ^ 「ARMCortex-A53MPCoreプロセッサテクニカルリファレンスマニュアル:暗号化拡張」ARM 2016年9月11日取得
  7. ^ 「Cortex-A32プロセッサ–ARM」2016年12月18日取得
  8. ^ ブラッシュ、デビッド(2014年12月2日)。「ARMv8-Aアーキテクチャとその進行中の開発」2015年1月23日取得
  9. ^ 「TBI」
  10. ^ ブラッシュ、デビッド(2016年1月5日)。「ARMv8-アーキテクチャの進化」2016年6月7日取得
  11. ^ 「Armv8アーキテクチャ用のスケーラブルなベクトル拡張sve」アームコミュニティ2016年8月22日2018年7月8日取得
  12. ^ a b "GCC 8リリースシリーズ–変更、新機能、および修正– GNUプロジェクト–フリーソフトウェアファウンデーション(FSF)"gcc.gnu.org 2018年7月9日取得
  13. ^ 「富士通はポストKスーパーコンピューターCPUプロトタイプを完成させ、機能試験を開始–富士通グローバル」www.fujitsu.com(プレスリリース)2018年7月8日取得
  14. ^ "⚙D71712ダウンストリームSVE / SVE2実装(LLVM)"reviews.llvm.org
  15. ^ David Brash(2016年10月26日)。「ARMv8-Aアーキテクチャ– 2016年の追加」
  16. ^ "[Ping〜、AArch64] -march = armv8.3-aのコマンドラインサポートを追加"ポインタ認証拡張機能は、ARMv8.3-Aで必須の拡張機能として定義されており、オプションではありません。
  17. ^ 「QualcommはARMv8.3でのポインタ認証を詳述したホワイトペーパーをリリースしました」2017年1月10日。
  18. ^ 「A64浮動小数点命令:FJCVTZS」arm.com 2019年7月11日取得
  19. ^ 「GCC7リリースシリーズ–変更、新機能、および修正」ARMv8.3-Aアーキテクチャがサポートされるようになりました。-march = armv8.3-aオプションを指定して使用できます。[..]オプション-msign-return-address =は、ARMv8.3-A Pointer AuthenticationExtensionsを使用した差出人アドレス保護を有効にするためにサポートされています。
  20. ^ 「Armアーキテクチャへの2017年の拡張機能の紹介」community.arm.com 2019年6月15日取得
  21. ^ 「ドット積機械学習の調査」community.arm.com 2019年6月15日取得
  22. ^ 「ARMはARMv8.4を準備します-GCCコンパイラのサポート–Phoronix」www.phoronix.com 2018年1月14日取得
  23. ^ 「ArmアーキテクチャArmv8.5-発表–プロセッサブログ–プロセッサ–アームコミュニティ」community.arm.com 2019年4月26日取得
  24. ^ 「ArmアーキテクチャリファレンスマニュアルArmv8、Armv8用-アーキテクチャプロファイル」ARM開発者2019年8月6日取得
  25. ^ 「ArmMTEアーキテクチャ:メモリ安全性の強化」community.arm.com 2021年7月27日取得
  26. ^ 「AndroidでのArmメモリタグ付け拡張機能の採用」Googleオンラインセキュリティブログ2019年8月6日取得
  27. ^ 「ArmAプロファイルアーキテクチャアップデート2019」community.arm.com 2019年9月26日取得
  28. ^ 「LLVM11.0.0リリースノート」releases.llvm.org 2021-03-11を取得
  29. ^ 「Armv8-A用のBFloat16拡張機能」community.arm.com 2019年8月30日取得
  30. ^ 「AI、セキュリティ、および特殊コンピューティングの将来のニーズに対するArmのソリューションはv9です」アーム| デジタル世界のアーキテクチャ2021年7月27日取得
  31. ^ Schor、David(2021-03-30)。「ArmはARMv9を起動します」WikiChipヒューズ2021年7月27日取得
  32. ^ フルムサヌ、アンドレイ。「ArmがArmv9アーキテクチャを発表:SVE2、セキュリティ、そして次の10年」www.anandtech.com 2021年7月27日取得
  33. ^ a b c "ArmはAプロファイルアーキテクチャ用のSVE2とTMEをリリース–プロセッサブログ–プロセッサ–Armコミュニティ"community.arm.com 2019年5月25日取得
  34. ^ a b "Arm SVE2 Support Aligning For GCC 10、LLVM Clang 9.0 –Phoronix"www.phoronix.com 2019年5月26日取得
  35. ^ 「ArmCCAでデータの力を解き放つ」community.arm.com 2021年7月27日取得
  36. ^ 「Armはその機密計算アーキテクチャを導入します」WikiChipヒューズ2021-06-23 2021年7月27日取得
  37. ^ 「Armv9-Aアーキテクチャ用のスケーラブルなマトリックス拡張」community.arm.com 2021年7月27日取得
  38. ^ Frumusanu、Andrei(2020年9月3日)。「ARMがCortex-R82を発表:最初の64ビットリアルタイムプロセッサ」AnandTech
  39. ^ 「Armアーキテクチャリファレンスマニュアル補足-Armv8、Armv8-RAArch64アーキテクチャプロファイル用」アーム株式会社