AArch64
[Wikipedia|▼Menu]

AArch64またはARM64は、ARMアーキテクチャの64ビット命令セットである。ARMv8- Cortex-A57/A53 MPCore big.LITTLE CPUチップ

最初に、Armv8-Aアーキテクチャとして導入された。Armは毎年新しい拡張機能をリリースしている[1]
Armv8.xおよびArmv9.x拡張機能「en:Comparison of ARMv8-A processors」も参照

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)を標準としている。また、AESSHA-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が命令の所属グループを表現している。

A64命令エンコード[9]タイプビット
313029282726252423222120191817161514131211109876543210
予約0op00000op1
SME命令1op00000op1op2op3
未割当0001
SVE命令op00010op1op2op3op4
未割当0011
データ処理(即値)100op0
分岐/例外生成/システム命令op0101op1op2
ロード・ストア命令op01op10op2op3op4
データ処理(レジスタ)op0op1101op2op3
データ処理(浮動小数/SIMD)op0111op1op2op3

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拡張機能を補完するものであり、これに置き換わるものではない。

512ビットのSVEの一種は、富士通A64FX ARMプロセッサを使用して富岳スーパーコンピュータに実装されている。富岳は、2021年に本格稼働を開始し、当時世界最高性能のスーパーコンピュータとなった[15]

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

2016年10月、Armv8.3-Aが発表された。その機能強化は6つのカテゴリに分類される[17]

ポインタ認証[18](AArch64のみ)。アーキテクチャへの必須の拡張(新しいブロック暗号、QARMA(英語版)[19]に基づく)(コンパイラはセキュリティ機能を利用する必要があるが、命令はNOPスペースにあるため、古いチップでは追加のセキュリティを提供しないが、下位互換性がある)。

ネストされた仮想化(AArch64のみ)

Advanced SIMDでの複素数のサポート(AArch64およびAArch32)。たとえば、90度の倍数の回転

新しいFJCVTZS(Floating-point JavaScript Convert to Signed fixed-point, rounding toward Zero:JavaScriptの浮動小数点数を符号付き固定小数点数に変換し、ゼロ方向に丸める)命令[20]

メモリ整合性モデルへの変更(AArch64のみ)。C++11/C11の(デフォルトではない)より弱いRCpc(Release Consistent processor consistent)モデルをサポートするため(デフォルトのC++11/C11コンシステンシー・モデルは以前のArmv8ですでにサポートされていた)

より大きなシステム可視キャッシュのIDメカニズムのサポート(AArch64およびAArch32)

Armv8.3-Aアーキテクチャは(少なくとも)GCC7コンパイラでサポートされるようになった[21]
Armv8.4-A

2017年11月、Armv8.4-Aが発表されました。この拡張機能は次のカテゴリに分類される[22][23][24]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:33 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef