AArch64 - AArch64

AArch64 nebo ARM64 je 64bitové rozšíření architektury ARM .

Platforma ARMv8-A s procesorem Cortex A57/A53 MPCore big.LITTLE CPU

Poprvé byl představen s architekturou ARMv8-A .

ARMv8-A

Oznámeno v říjnu 2011, ARMv8-A představuje zásadní změnu architektury ARM. Přidává volitelnou 64bitovou architekturu s názvem „AArch64“ a přidruženou novou instrukční sadu „A64“. AArch64 poskytuje kompatibilitu uživatelského prostoru se stávající 32bitovou architekturou („AArch32“ / ARMv7-A) a sadou instrukcí („A32“). Sada instrukcí 16-32bit Thumb je označována jako "T32" a nemá žádný 64bitový protějšek. ARMv8-A umožňuje spouštění 32bitových aplikací v 64bitovém operačním systému a 32bitový operační systém je pod kontrolou 64bitového hypervisoru . Společnost ARM oznámila svá jádra Cortex-A53 a Cortex-A57 dne 30. října 2012. Apple jako první uvedl na trh spotřební zboží ( iPhone 5S ) jádro kompatibilní s ARMv8-A ( Apple A7 ). AppliedMicro , využívající FPGA , byl první, kdo demo ARMv8-A. První SoC ARMv8-A od Samsungu je Exynos 5433 používaný v Galaxy Note 4 , který obsahuje dva klastry čtyř jader Cortex-A57 a Cortex-A53 ve velké konfiguraci.LITTLE; ale poběží pouze v režimu AArch32.

Pro AArch32 i AArch64 je ARMv8-A standardem VFPv3/v4 a pokročilým SIMD (Neon). Přidává také kryptografické pokyny podporující AES , SHA-1 / SHA-256 a aritmetiku konečných polí .

Konvence pojmenování

  • 64 + 32 bitů
    • Architektura: AArch64
    • Specifikace: ARMv8-A
    • Instrukční sady: A64 + A32
    • Přípony: v8-A
  • 32 + 16 (palec) bit
    • Architektura: AArch32
    • Specifikace: ARMv8-R / ARMv7-A
    • Instrukční sady: A32 + T32
    • Přípony: -A32 / -R / v7 -A
    • Příklad: ARMv8-R, Cortex-A32

Funkce AArch64

  • Nová instrukční sada, A64
    • Má 31 univerzálních 64bitových registrů.
    • Má vyhrazený registr nulového bodu nebo ukazatele zásobníku (SP) (v závislosti na pokynu).
    • Počitadlo programů (PC) již není přímo přístupné jako registr.
    • Instrukce jsou stále 32 bitů dlouhé a většinou stejné jako A32 (s vynechanými instrukcemi LDM/STM a většinou podmíněného spuštění).
      • Má spárované zatížení/obchody (namísto LDM/STM).
      • Pro většinu instrukcí (kromě poboček) žádná predikce .
    • Většina pokynů může mít 32bitové nebo 64bitové argumenty.
    • Předpokládá se, že adresy jsou 64bitové.
  • Pokročilá SIMD (Neon) vylepšena
  • Nový systém výjimek
    • Méně převýšených registrů a režimů.
  • Překlad paměti ze 48bitových virtuálních adres na základě stávajícího rozšíření LPAE (Large Physical Address Extension), které bylo navrženo tak, aby bylo možné jej snadno rozšířit na 64bitové.

Rozšíření: Nápověda pro shromažďování dat (ARMv8.0-DGH)

AArch64 byl představen v ARMv8-A a je zahrnut v následujících verzích ARMV8-A. AArch64 není součástí ARMv8-R nebo ARMv8-M, protože oba jsou 32bitové architektury.

Formáty instrukcí

Hlavní operační kód pro výběr, do které skupiny patří instrukce A64, je na bitech 25-28.

Formáty instrukcí A64
Typ 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
Rezervováno op0 0000 op1 Okamžitá konstanta 16 bitů
Nepřidělené 0001
Pokyny SVE 0010
Nepřidělené 0011
Zpracování dat-okamžité vydání PC op imlo 10 000 Imhi Rd
Zpracování dat - bezprostřední ostatní sf 100 01-11 Rd
Pobočky + systémové pokyny op0 101 op1 op2
Pokyny k nakládání a skladování op0 1 op1 0 op2 op3 op4
Zpracování dat - Zaregistrujte se sf op0 op1 101 op2 op3
Zpracování dat - plovoucí desetinná čárka a SIMD op0 111 op1 op2 op3

ARMv8.1-A

V prosinci 2014 byl oznámen ARMv8.1-A, aktualizace s „přírůstkovými výhodami oproti v8.0“. Vylepšení spadala do dvou kategorií: změny sady instrukcí a změny modelu výjimky a překladu paměti.

Vylepšení sady instrukcí zahrnovala následující:

  • Sada pokynů pro atomové čtení a zápis AArch64.
  • Přírůstky do sady instrukcí Advanced SIMD pro AArch32 i AArch64, které umožňují příležitosti pro některé optimalizace knihoven:
    • Podepsané sytící zaokrouhlování se zdvojnásobuje a násobí, vrací vysokou polovinu.
    • Podepsané sytící zaokrouhlování zdvojnásobení odečítání, návrat vysoká polovina.
    • Pokyny jsou přidány ve vektorových a skalárních formách.
  • Sada pokynů pro načítání a ukládání AArch64, které mohou poskytovat pořadí přístupu k paměti, které je omezeno na konfigurovatelné oblasti adres.
  • Volitelné pokyny CRC ve verzi 8.0 se stávají požadavkem v ARMv8.1.

Vylepšení modelu výjimky a systému překladu paměti zahrnovaly následující:

  • Nový stavový bit Privileged Access Never (PAN) poskytuje ovládání, které brání privilegovanému přístupu k uživatelským datům, pokud není výslovně povoleno.
  • Rozšířený rozsah VMID pro virtualizaci; podporuje větší počet virtuálních strojů.
  • Volitelná podpora hardwarové aktualizace příznaku přístupu k tabulce stránek a standardizace volitelného hardwarově aktualizovaného špinavého bitového mechanismu.
  • Virtualization Host Extensions (VHE). Tato vylepšení zlepšují výkon hypervizorů typu 2 tím, že snižují režijní náklady na software související s přechodem mezi operačním systémem Host a Host. Rozšíření umožňují hostitelskému OS spouštět na EL2, na rozdíl od EL1, bez podstatných úprav.
  • Mechanismus pro uvolnění některých bitů překladové tabulky pro použití v operačním systému, kde OS nepotřebuje hardwarovou podporu.
  • Ignorování horního bajtu pro značkování paměti .

ARMv8.2-A

V lednu 2016 byl oznámen ARMv8.2-A. Jeho vylepšení spadala do čtyř kategorií:

Scalable Vector Extension (SVE)

Scalable Vector Extension (SVE) je „volitelné rozšíření architektury ARMv8.2-A a novější“ vyvinuté speciálně pro vektorizaci vysoce výkonných vědeckých úloh výpočetní techniky . Specifikace umožňuje implementaci proměnných délek vektorů od 128 do 2048 bitů. Rozšíření je doplňkem a nenahrazuje rozšíření NEON .

512bitová varianta SVE již byla implementována do superpočítače Fugaku pomocí procesoru Fujitsu A64FX ARM. Jeho cílem je být nejvýkonnějším superpočítačem na světě s „cílem zahájení plné operace kolem roku 2021“.

SVE je podporováno kompilátorem GCC , přičemž GCC 8 podporuje automatickou vektorizaci a GCC 10 podporuje C vnitřní vlastnosti. Od července 2020 LLVM a clang podporují C a IR intrinsics. ARK vlastní vidlice LLVM podporuje automatickou vektorizaci.

ARMv8.3-A

V říjnu 2016 byl oznámen ARMv8.3-A. Jeho vylepšení spadala do šesti kategorií:

  • Ověření ukazatele (pouze AArch64); povinné rozšíření (založené na nové blokové šifře, QARMA ) do architektury (kompilátory potřebují využít funkce zabezpečení, ale jelikož jsou pokyny v prostoru NOP, jsou zpětně kompatibilní, i když na starších čipech neposkytují žádné další zabezpečení).
  • Vnořená virtualizace (pouze AArch64)
  • Pokročilá podpora komplexních čísel SIMD (AArch64 a AArch32); např. otočení o násobky 90 stupňů.
  • Nová instrukce FJCVTZS ( Javascript s plovoucí desetinnou čárkou Převést na podepsaný pevný bod, zaokrouhlování směrem k nule).
  • Změna modelu konzistence paměti (pouze AArch64); na podporu (ne výchozí) slabšího RCpc (Release Consistent processor consistent) modelu C ++ 11 / C11 (výchozí model konzistence C ++ 11 / C11 byl již podporován v předchozím ARMv8).
  • Podpora ID mechanismu pro větší mezipaměti viditelné systémem (AArch64 a AArch32)

Architektura ARMv8.3-A je nyní podporována (alespoň) kompilátorem GCC 7.

ARMv8.4-A

V listopadu 2017 byl oznámen ARMv8.4-A. Jeho vylepšení spadala do těchto kategorií:

  • „Kryptografická rozšíření SHA3 / SHA512 / SM3 / SM4
  • Vylepšená podpora virtualizace
  • Možnosti dělení a monitorování paměti (MPAM)
  • Nový stav Secure EL2 a monitory aktivity
  • Podepsaný a nepodepsaný celočíselný bodový produkt (SDOT a UDOT).

ARMv8.5-A

V září 2018 byl oznámen ARMv8.5-A. Jeho vylepšení spadala do těchto kategorií:

  • Rozšíření paměti (MTE)
  • Branch Target Indicators (BTI), aby se snížila „schopnost útočníka spustit libovolný kód“,
  • Pokyny generátoru náhodných čísel - „poskytování deterministických a pravdivých náhodných čísel v souladu s různými národními a mezinárodními normami“

Dne 2. srpna 2019 společnost Google oznámila, že Android přijme rozšíření pro označování paměti (MTE).

ARMv8.6-A

V září 2019 byl oznámen ARMv8.6-A. Dodává:

  • Násobení obecné matice (GEMM)
  • Formát Bfloat16 podpora
  • Pokyny pro manipulaci s maticí SIMD, BFDOT, BFMMLA, BFMLAL a BFCVT
  • vylepšení pro virtualizaci, správu systému a zabezpečení
  • a následující rozšíření (pro která LLVM 11 již přidala podporu):
    • Vylepšená virtualizace čítače (ARMv8.6-ECV)
    • Jemně zrnité pasti (ARMv8.6-FGT)
    • Virtualizace monitorů aktivity (ARMv8.6-AMU)

Například jemnozrnné pasti, instrukce WFE (Wait-for-Event), EnhancedPAC2 a FPAC. Rozšíření Bfloat16 pro SVE a Neon jsou hlavně pro použití v hlubokém učení.

ARMv9-A

V březnu 2021 byl oznámen ARMv9-A. Základem ARMv9-A jsou všechny funkce ARMv8.5. ARMv9-A také dodává:

  • Scalable Vector Extension 2 (SVE2). SVE2 staví na škálovatelné vektorizaci SVE pro zvýšení jemnozrnného Parallelism Data Level Parallelism (DLP) , aby bylo možné vykonat více práce podle instrukcí. SVE2 si klade za cíl přinést tyto výhody širšímu spektru softwaru včetně DSP a multimediálního SIMD kódu, který v současné době používá Neon . The LLVM / Clang 9.0 a GCC kódy 10,0 vývoje byly aktualizovány tak, aby podporovaly SVE2.
  • Rozšíření transakční paměti (TME). V návaznosti na rozšíření x86 přináší TME podporu pro hardwarovou transakční paměť (HTM) a transakční zámek Elision (TLE). TME si klade za cíl přinést škálovatelnou souběžnost ke zvýšení hrubozrnného paralelního úrovně vláken (TLP) , aby bylo možné provést více práce na jedno vlákno. The LLVM / Clang 9.0 a GCC kódy 10,0 vývoje byly aktualizovány tak, aby podporovaly TME.
  • Confidential Compute Architecture (CCA)
  • Scalable Matrix Extension (SME). SMX přidává nové funkce pro efektivní zpracování matic, jako například:
    • Ukládání maticových dlaždic
    • Transpozice matice za běhu
    • Načíst/uložit/vložit/extrahovat vektory dlaždic
    • Maticový vnější produkt vektorů SVE
    • „Režim streamování“ SVE

ARMv8-R (architektura v reálném čase)

K profilu ARMv8-R byla přidána volitelná podpora AArch64, přičemž prvním jádrem ARM, které jej implementovalo, byl Cortex-R82. Přidává sadu instrukcí A64 s některými změnami v instrukcích bariéry paměti.

Reference