AArch64 atau ARM64 adalah ekstensi 64-bit dari keluarga arsitektur ARM.

Platform Armv8-A dengan Cortex-A57/A53 MPCore big.LITTLE CPU chip

Ini pertama kali diperkenalkan dengan arsitektur Armv8-A. Arm merilis ekstensi baru setiap tahun.[1]

Ekstensi dan fitur: ARMv8.x dan ARMv9.x sunting

Diumumkan pada bulan Oktober 2011, ARMv8-A mewakili perubahan mendasar dalam arsitektur ARM.[2] Ini menambahkan arsitektur 64 bit opsional, bernama "AArch64", dan set instruksi baru "A64" yang terkait. AArch64 menyediakan kompatibilitas ruang pengguna dengan arsitektur 32-bit yang ada ("AArch32"/ARMv7-A), dan set instruksi ("A32"). Set instruksi Thumb 16-32bit disebut dengan "T32" dan tidak memiliki lawan 64-bit. ARMv8-A memungkinkan aplikasi 32-bit untuk dijalankan dalam OS 64-bit, dan OS 32-bit untuk berada di bawah kendali dari hypervisor 64-bit.[3] ARM mengumumkan inti Cortex-A53 dan Cortex- A57 pada 30 Oktober 2012.[4] Apple adalah yang pertama kali merilis inti kompatibel ARMv8-A (Cyclone) dalam produk konsumen (iPhone 5S). AppliedMicro, menggunakan FPGA, adalah yang pertama untuk mendemonstrasikan ARMv8-A.[5] SoC ARMv8A pertama dari Samsung yaitu Exynos 5433 yang digunakan dalam Galaxy Note 4, yang menampilkan dua kluster dari empat inti Cortex-A57 dan Cortex- A53 dalam kongfigurasi big.LITTLE; namun hanya akan berjalan pada mode AArch32.[6]

Untuk AArch32 dan AArch64, ARMv8-A membuat standar VFPv3/v4 dan SIMD (Neon) lanjutan. Itu juga menambahkan instruksi kriptografi yang mendukung AES, SHA-1/SHA-256 dan aritmatika bidang terbatas.[7]

Konvensi penamaan sunting

  • 64 + 32 bit
    • Architecture: AArch64
    • Spesifikasi: ARMv8-A
    • Instruction sets: A64 + A32
    • Suffixes: v8-A
  • 32 + 16 (Thumb) bit
    • Architecture: AArch32
    • Spesifikasi: ARMv8-R / ARMv7-A
    • Instruction sets: A32 + T32
    • Suffixes: -A32 / -R / v7-A
    • Contoh: ARMv8-R, Cortex-A32[8]

Fitur AArch64 sunting

  • Set instruksi baru, A64
    • Memiliki 31 register 64-bit tujuan umum.
    • Memiliki register zero atau stack pointer (SP) khusus (tergantung pada instruksi).
    • Penghitung program (PC) tidak lagi dapat diakses secara langsung sebagai register.
    • Instruksi masih 32 bit panjang dan sebagian besar sama dengan A32 (dengan instruksi LDM/STM dan sebagian besar eksekusi bersyarat dibatalkan).
      • Telah memasangkan beban/penyimpanan (sebagai pengganti LDM/STM).
      • Tidak ada predikasi untuk sebagian besar instruksi (kecuali cabang).
    • Sebagian besar instruksi dapat menggunakan argumen 32-bit atau 64-bit.
    • Alamat dianggap 64-bit.
  • Advanced SIMD (Neon) ditingkatkan
    • Memiliki register 32 × 128-bit (naik dari 16), juga dapat diakses via VFPv4.
    • Mendukung format floating-point presisi ganda.
    • Sepenuhnya sesuai dengan IEEE 754.
    • AES mengenkripsi/mendekripsi dan instruksi hashing SHA-1/SHA-2 juga menggunakan register ini.
  • Sistem pengecualian baru
    • Lebih sedikit register dan mode yang dibelokkan.
  • Terjemahan memori dari alamat virtual 48-bit berdasarkan Ekstensi Alamat Fisik Besar (LPAE) yang ada, yang dirancang agar mudah diperluas ke 64-bit.

Ekstensi: Petunjuk pengumpulan data (ARMv8.0-DGH)

AArch64 diperkenalkan di ARMv8-A dan disertakan dalam versi selanjutnya dari ARMv8-A. Itu juga diperkenalkan di ARMv8-R sebagai opsi, setelah diperkenalkan di ARMv8-A; itu tidak termasuk dalam ARMv8-M.

Format instruksi sunting

Opcode utama untuk memilih grup mana yang termasuk dalam instruksi A64 adalah pada bit 25-28.

A64 instruction formats
Tipe Bit
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
Reserved op0 0000 op1 Immediate constant 16 bits
Unallocated 0001
Intruksi SVE 0010
Unallocated 0011
Data Processing — Immediate PC-rel. op immlo 10000 immhi Rd
Data Processing — Immediate Others sf 100 01-11 Rd
Branches + System Instructions op0 101 op1 op2
Load and Store Instructions op0 1 op1 0 op2 op3 op4
Data Processing — Register sf op0 op1 101 op2 op3
Data Processing — Floating Point and SIMD op0 111 op1 op2 op3

ARMv8.1-A sunting

Pada bulan Desember 2014, ARMv8.1-A,[9] pembaruan dengan diumumkannya "manfaat tambahan dari v8.0". Perangkat tambahan jatuh ke dalam dua kategori: perubahan set instruksi, dan perubahan model pengecualian dan terjemahan memori.

Penyempurnaan set instruksi termasuk yang berikut:

  • Satu set instruksi baca-tulis atomik AArch64.
  • Tambahan pada set instruksi SIMD Lanjutan untuk AArch32 dan AArch64 untuk mengaktifkan peluang bagi beberapa pengoptimalan perpustakaan:
    • Ditandatangani Saturating Rounding Doubling Multiply Accumulate, Returning High Half.
    • Ditandatangani Saturating Rounding Doubling Multiply Subtract, Returning High Half.
    • Instruksi ditambahkan dalam bentuk vektor dan skalar.
  • Serangkaian instruksi pemuatan dan penyimpanan AArch64 yang dapat memberikan urutan akses memori yang terbatas pada wilayah alamat yang dapat dikonfigurasi.
  • Instruksi CRC opsional di v8.0 menjadi persyaratan di ARMv8.1.

Penyempurnaan untuk model pengecualian dan sistem terjemahan memori termasuk yang berikut ini:

  • Bit status Privileged Access Never (PAN) terbaru menyediakan kontrol yang mencegah akses istimewa ke data pengguna kecuali diaktifkan secara eksplisit.
  • Peningkatan rentang VMID untuk virtualisasi; mendukung jumlah mesin virtual yang lebih banyak.
  • Dukungan opsional untuk pembaruan perangkat keras dari bendera akses tabel halaman, dan standarisasi mekanisme bit kotor, pembaruan perangkat keras, dan opsional.
  • Ekstensi Host Virtualisasi (VHE). Penyempurnaan ini meningkatkan kinerja hypervisor Tipe 2 dengan mengurangi overhead perangkat lunak yang terkait saat bertransisi antara sistem operasi Host dan Guest. Ekstensi memungkinkan OS Host untuk mengeksekusi di EL2, bukan EL1, tanpa modifikasi substansial.
  • Mekanisme untuk membebaskan beberapa bit tabel terjemahan untuk penggunaan sistem operasi, di mana dukungan perangkat keras tidak diperlukan oleh OS.
  • Top byte ignore untuk memory tagging.[10]

ARMv8.2-A sunting

Pada bulan Januari 2016, ARMv8.2-A telah diumumkan.[11] Perangkat tambahannya jatuh ke dalam empat kategori:

  • Pemrosesan data half-precision floating-point opsional (setengah presisi sudah didukung, tetapi tidak untuk diproses, hanya sebagai format penyimpanan.)
  • Peningkatan model memori
  • Pengenalan Ekstensi Keandalan, Ketersediaan, dan Kemudahan Servis (Ekstensi RAS)
  • Pengenalan profil statistik

Scalable Vector Extension (SVE) sunting

Scalable Vector Extension (SVE) adalah "ekstensi opsional untuk arsitektur ARMv8.2-A dan yang lebih baru" yang dikembangkan secara khusus untuk vektorisasi beban kerja ilmiah komputasi performa tinggi.[12][13] Spesifikasi yang memungkinkan panjang vektor variabel diimplementasikan dari 128 sampai 2048 bit. Ekstensi ini melengkapi, dan tidak menggantikan, ekstensi NEON.

Varian SVE 512-bit telah diimplementasikan pada superkomputer Fugaku menggunakan prosesor Fujitsu A64FX ARM. Ini bertujuan untuk menjadi superkomputer dengan kinerja tertinggi di dunia dengan "tujuan untuk memulai operasi penuh sekitar tahun 2021."[14] Versi yang lebih fleksibel, 2x256 SVE, diimplementasikan oleh prosesor AWS Graviton3 ARM.

SVE didukung oleh kompiler GCC, dengan GCC 8 mendukung vektorisasi otomatis[13] dan GCC 10 mendukung intrinsik C. Mulai bulan Juli 2020, LLVM dan <i>clang</i> mendukung intrinsik C dan IR. Garpu LLVM ARM sendiri mendukung vektorisasi otomatis.[15]

ARMv8.3-A sunting

Pada bulan Oktober 2016, ARMv8.3-A telah diumumkan. Perangkat tambahannya jatuh ke dalam enam kategori:[16]

  • Otentikasi penunjuk[17] (hanya AArch64); ekstensi wajib (berdasarkan cipher blok baru, QARMA[18]) ke arsitektur (kompiler perlu mengeksploitasi fitur keamanan, tetapi karena instruksi berada di ruang NOP, mereka kompatibel ke belakang meskipun tidak memberikan keamanan ekstra pada chip lama).
  • Virtualisasi bersarang (khusus AArch64)
  • Dukungan bilangan kompleks SIMD tingkat lanjut (AArch64 dan AArch32); misalnya rotasi dengan kelipatan 90 derajat.
  • Instruksi FJCVTZS terbaru (Floating-point JavaScript Convert to Signed fixed-point, pembulatan menuju Nol).[19]
  • Perubahan pada model konsistensi memori (hanya AArch64); untuk mendukung model RCpc (Rilis Konsisten prosesor yang konsisten) (non-default) yang lebih lemah dari C++11/C11 (model konsistensi C++ 11/C11 default sudah didukung di ARMv8 sebelumnya).
  • Dukungan mekanisme ID untuk cache yang terlihat sistem yang lebih besar (AArch64 dan AArch32)

Arsitektur ARMv8.3-A sekarang didukung oleh (setidaknya) kompiler GCC 7.[20]

ARMv8.4-A sunting

Pada bulan November 2017, ARMv8.4-A telah diumumkan. Peningkatannya termasuk dalam kategori berikut:[21][22][23]

  • "Ekstensi kripto SHA3/SHA512/SM3/SM4"
  • Dukungan virtualisasi yang ditingkatkan
  • Kemampuan Partisi dan Pemantauan Memori (MPAM).
  • Status EL2 Aman dan Monitor Aktivitas baru
  • Petunjuk produk dot bilangan bulat (SDOT dan UDOT) yang ditandatangani dan tidak ditandatangani.

ARMv8.5-A dan ARMv9.0-A [24] sunting

Pada bulan September 2018, ARMv8.5-A telah diumumkan. Perangkat tambahannya termasuk dalam kategori berikut:[25][26]

  • Ekstensi Penandaan Memori (MTE)[27]
  • Indikator Target Cabang (BTI) untuk mengurangi "kemampuan penyerang untuk mengeksekusi kode arbitrer",
  • Instruksi Penghasil Bilangan Acak – "menyediakan Bilangan Acak Deterministik dan Benar yang sesuai dengan berbagai Standar Nasional dan Internasional"

Pada tanggal 2 Agustus 2019, Google mengumumkan Android akan mengadopsi Ekstensi Penandaan Memori (MTE).[28]

Pada bulan Maret 2021, ARMv9-A telah diumumkan. Baseline ARMv9-A adalah semua fitur yang ada di ARMv8.5.[29][30][31] ARMv9-A juga menambahkan:

  • Ekstensi Vektor yang Dapat Diskalakan 2 (SVE2). SVE2 dibangun di atas vektorisasi SVE yang dapat diskalakan untuk meningkatkan Paralelisme Tingkat Data (DLP) fine-grain, untuk memungkinkan lebih banyak pekerjaan dilakukan per instruksi. SVE2 bertujuan untuk membawa manfaat ini ke perangkat lunak yang lebih luas termasuk DSP dan kode multimedia SIMD yang saat ini menggunakan Neon.[32] Kode pengembangan LLVM/Clang 9.0 dan GCC 10.0 diperbarui untuk mendukung SVE2.[32][33]
  • Ekstensi Memori Transaksional (TME). Mengikuti ekstensi x86, TME membawa dukungan untuk Hardware Transactional Memory (HTM) dan Transactional Lock Elision (TLE). TME bertujuan untuk menghadirkan konkurensi yang dapat diskalakan untuk meningkatkan Thread Level Parallelism (TLP) berbutir kasar, untuk memungkinkan lebih banyak pekerjaan dilakukan per utas.[32] Kode pengembangan LLVM/Clang 9.0 dan GCC 10.0 diperbarui untuk mendukung TME.[33]
  • Arsitektur Komputasi Rahasia (CCA)[34][35]

ARMv8.6-A dan ARMv9.1-A [24] sunting

Pada bulan September 2019, ARMv8.6-A telah diumumkan. Perangkat tambahannya termasuk dalam kategori berikut:[36]

  • Perkalian Matriks Umum (GEMM)
  • dukungan format bfloat16
  • Instruksi manipulasi matriks SIMD, BFDOT, BFMMLA, BFMLAL dan BFCVT
  • perangkat tambahan untuk virtualisasi, manajemen sistem dan keamanan
  • dan ekstensi berikut (yang LLVM 11 telah menambahkan dukungan untuk[37]):
    • Peningkatan Kontra Virtualisasi (ARMv8.6-ECV)
    • Perangkap Berbutir Halus (ARMv8.6-FGT)
    • Monitor Aktivitas virtualisasi (ARMv8.6-AMU)

Sebagai contoh, perangkap berbutir halus, instruksi Wait-for-Event (WFE), EnhancedPAC2 dan FPAC. Ekstensi bfloat16 untuk SVE dan Neon sebagian besar digunakan untuk pembelajaran mendalam.[38]

ARMv8.7-A dan ARMv9.2-A[24] sunting

Pada bulan September 2020, ARMv8.7-A telah diumumkan. Perangkat tambahannya termasuk dalam kategori berikut:[39]

  • Ekstensi Matriks yang Dapat Diskalakan (SME) (khusus ARMv9.2).[40] SME menambahkan fitur baru untuk memproses matriks secara efisien, seperti:
    • Penyimpanan ubin matriks
    • Transposisi matriks dengan cepat
    • Muat/simpan/sisipkan/ekstrak petak vektor
    • Produk luar matriks dari vektor SVE
    • SVE "mode streaming".
  • Dukungan yang ditingkatkan untuk PCIe hot plug (AArch64)
  • Pemuatan 64-byte atomik dan simpan ke akselerator (AArch64)
  • Tunggu Instruksi (WFI) dan Tunggu Acara (WFE) dengan batas waktu (AArch64)
  • Perekaman Branch-Record (khusus ARMv9.2)

ARMv8.8-A dan ARMv9.3-A[24] sunting

Pada bulan September 2021, ARMv8.8-A dan ARMv9.3-A telah diumumkan. Perangkat tambahan mereka termasuk dalam kategori ini: [41]

  • Interupsi non-maskable (AArch64)
  • Petunjuk untuk mengoptimalkan operasi gaya memcpy() dan memset() (AArch64)
  • Peningkatan ke PAC (AArch64)
  • Cabang bersyarat yang diisyaratkan (AArch64)

LLVM 15 mendukung ARMv8.8-A dan ARMv9.3-A.[42]

ARMv8.9-A dan ARMv9.4-A sunting

Pada September 2022, ARMv8.9-A dan ARMv9.4-A telah diumumkan, termasuk: [43]

  • Peningkatan Arsitektur Sistem Memori Virtual (VMSA).
    • Izin inderection dan overlay
    • Pengerasan terjemahan
    • Tabel terjemahan 128-bit (khusus ARMv9)
  • Ekstensi Matriks yang Dapat Diskalakan 2 (SME2) (khusus ARMv9)
    • Instruksi multi-vektor
    • Predikat multi-vektor
    • Kompresi berat 2b/4b
    • 1b jaringan biner
    • Rentang Prefetch
  • Guarded Control Stack (GCS) (khusus ARMv9)
  • Komputasi Rahasia
    • Konteks Enkripsi Memori
    • Penugasan Perangkat

Armv8-R (arsitektur real-time) sunting

Dukungan AArch64 opsional telah ditambahkan ke profil Armv8-R, dengan inti Arm pertama yang mengimplementasikannya ialah Cortex-R82.[44] Itu menambahkan set instruksi A64, dengan beberapa perubahan pada instruksi penghalang memori.[45]

Referensi sunting

  1. ^ "Overview". Learn the architecture: Understanding the Armv8.x and Armv9.x extensions. 
  2. ^ (Siaran pers). Arm Holdings. Diarsipkan dari versi asli Parameter |archive-url= membutuhkan |url= (bantuan) tanggal 1 January 2019.  Tidak memiliki atau tanpa |title= (bantuan);
  3. ^ Grisenthwaite, Richard (2011). "ARMv8-A Technology Preview" (PDF). Diarsipkan dari versi asli (PDF) tanggal 11 November 2011. Diakses tanggal 31 October 2011. 
  4. ^ (Siaran pers). Arm Holdings.  Tidak memiliki atau tanpa |title= (bantuan);
  5. ^ (Siaran pers). AppliedMicro.  Tidak memiliki atau tanpa |title= (bantuan);
  6. ^ "Samsung's Exynos 5433 is an A57/A53 ARM SoC". AnandTech. Diakses tanggal 17 September 2014. 
  7. ^ "ARM Cortex-A53 MPCore Processor Technical Reference Manual: Cryptography Extension". ARM. Diakses tanggal 11 September 2016. 
  8. ^ "Cortex-A32 Processor – ARM". Diakses tanggal 18 December 2016. 
  9. ^ Brash, David (2 December 2014). "The ARMv8-A architecture and its ongoing development". Diakses tanggal 23 January 2015. 
  10. ^ "Top-byte ignore (TBI)". WikiChip. 
  11. ^ Brash, David (5 January 2016). "ARMv8-A architecture evolution". Diakses tanggal 7 June 2016. 
  12. ^ "The scalable vector extension sve for the ARMv8 a architecture". Arm Community (dalam bahasa Inggris). 22 August 2016. Diakses tanggal 8 July 2018. 
  13. ^ a b "GCC 8 Release Series – Changes, New Features, and Fixes – GNU Project – Free Software Foundation (FSF)". gcc.gnu.org (dalam bahasa Inggris). Diakses tanggal 9 July 2018. 
  14. ^ "Fujitsu Completes Post-K Supercomputer CPU Prototype, Begins Functionality Trials – Fujitsu Global". www.fujitsu.com (Siaran pers) (dalam bahasa Inggris). Diakses tanggal 8 July 2018. 
  15. ^ "⚙ D71712 Downstream SVE/SVE2 implementation (LLVM)". reviews.llvm.org. 
  16. ^ David Brash (26 October 2016). "ARMv8-A architecture – 2016 additions". 
  17. ^ "[Ping~,AArch64] Add commandline support for -march=armv8.3-a". pointer authentication extension is defined to be mandatory extension on ARMv8.3-A and is not optional 
  18. ^ "Qualcomm releases whitepaper detailing pointer authentication on ARMv8.3". 10 January 2017. 
  19. ^ "A64 Floating-point Instructions: FJCVTZS". arm.com. Diakses tanggal 11 July 2019. 
  20. ^ "GCC 7 Release Series – Changes, New Features, and Fixes". 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. 
  21. ^ "Introducing 2017's extensions to the Arm Architecture". community.arm.com (dalam bahasa Inggris). Diakses tanggal 15 June 2019. 
  22. ^ "Exploring dot product machine learning". community.arm.com (dalam bahasa Inggris). Diakses tanggal 15 June 2019. 
  23. ^ "ARM Preps ARMv8.4-A Support For GCC Compiler – Phoronix". www.phoronix.com (dalam bahasa Inggris). Diakses tanggal 14 January 2018. 
  24. ^ a b c d "ARMv8.x and ARMv9.x extensions and features". Learn the architecture: Understanding the ARMv8.x and ARMv9.x extensions.  Kesalahan pengutipan: Tanda <ref> tidak sah; nama "armv8-x-and-armv9-x-extensions-and-features" didefinisikan berulang dengan isi berbeda
  25. ^ "Arm Architecture ARMv8.5-A Announcement – Processors blog – Processors – Arm Community". community.arm.com (dalam bahasa Inggris). Diakses tanggal 26 April 2019. 
  26. ^ "Arm Architecture Reference Manual ARMv8, for ARMv8-A architecture profile". ARM Developer (dalam bahasa Inggris). Diakses tanggal 6 August 2019. 
  27. ^ "Arm MTE architecture: Enhancing memory safety". community.arm.com (dalam bahasa Inggris). Diakses tanggal 27 July 2021. 
  28. ^ "Adopting the Arm Memory Tagging Extension in Android". Google Online Security Blog (dalam bahasa Inggris). Diakses tanggal 6 August 2019. 
  29. ^ "Arm's solution to the future needs of AI, security and specialized computing is v9". Arm | The Architecture for the Digital World (dalam bahasa Inggris). Diakses tanggal 27 July 2021. 
  30. ^ Schor, David (30 March 2021). "Arm Launches ARMv9". WikiChip Fuse (dalam bahasa Inggris). Diakses tanggal 27 July 2021. 
  31. ^ Frumusanu, Andrei. "Arm Announces ARMv9 Architecture: SVE2, Security, and the Next Decade". www.anandtech.com. Diakses tanggal 27 July 2021. 
  32. ^ a b c "Arm releases SVE2 and TME for A-profile architecture – Processors blog – Processors – Arm Community". community.arm.com (dalam bahasa Inggris). Diakses tanggal 25 May 2019. 
  33. ^ a b "Arm SVE2 Support Aligning For GCC 10, LLVM Clang 9.0 – Phoronix". www.phoronix.com. Diakses tanggal 26 May 2019. 
  34. ^ "Unlocking the power of data with Arm CCA". community.arm.com (dalam bahasa Inggris). Diakses tanggal 27 July 2021. 
  35. ^ "Arm Introduces Its Confidential Compute Architecture". WikiChip Fuse (dalam bahasa Inggris). 23 June 2021. Diakses tanggal 27 July 2021. 
  36. ^ "Arm A profile architecture update 2019". community.arm.com (dalam bahasa Inggris). Diakses tanggal 26 September 2019. 
  37. ^ "LLVM 11.0.0 Release Notes". releases.llvm.org. Diakses tanggal 11 March 2021. 
  38. ^ "BFloat16 extensions for ARMv8-A". community.arm.com (dalam bahasa Inggris). Diakses tanggal 30 August 2019. 
  39. ^ Weidmann, Martin (21 September 2020). "Arm A-Profile Architecture Developments 2020". community.arm.com. ARM. Diakses tanggal 28 September 2022. 
  40. ^ "Scalable Matrix Extension for the ARMv9-A Architecture". community.arm.com (dalam bahasa Inggris). Diakses tanggal 27 July 2021. 
  41. ^ Weidmann, Martin (8 September 2021). "Arm A-Profile Architecture Developments 2021". community.arm.com. ARM. Diakses tanggal 28 September 2022. 
  42. ^ "What is New in LLVM 15? - Architectures and Processors blog - Arm Community blogs - Arm Community". Diakses tanggal 2023-04-15. 
  43. ^ "Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community". community.arm.com (dalam bahasa Inggris). Diakses tanggal 2022-12-09. 
  44. ^ Frumusanu, Andrei (3 September 2020). "ARM Announced Cortex-R82: First 64-bit Real Time Processor". AnandTech. 
  45. ^ "Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch64 architecture profile". Arm Ltd.