AArch64
Az AArch64 vagy ARM64 az ARM architektúra család 64 bites kiterjesztése, az ARMv8 utasításkészlet-architektúra 64 bites végrehajtási állapota.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/ARMCortexA57A53.jpg/220px-ARMCortexA57A53.jpg)
Elsőként az ARMv8-A architektúrával együtt mutatták be. Az architektúrához az ARM minden évben új kierjesztést ad ki.[1]
ARMv8.x és ARMv9.x kiterjesztések és jellemzőik
A 2011. októberében bejelentett[2] ARMv8-A alapvető változást jelent az ARM architektúrában.Ebben jelent meg az új opcionális 64 bites „AArch64” elnevezésű végrehajtási mód és a hozzá tartozó új „A64” utasításkészlet.Az AArch64 felhasználói tér-beli kompatibilitást biztosít a meglévő 32 bites architektúrával („AArch32” / ARMv7-A) és utasításkészlettel („A32”).A 32/16 bites Thumb utasításkészletet „T32”-nek nevezik, és nincs 64 bites megfelelője.Az ARMv8-A lehetővé teszi a 32 bites alkalmazások futtatását 64 bites operációs környezetben, és a 32 bites programfuttatást egy 64 bites hypervisor felügyelete alatt.[3]Az ARM 2012. október 30-án jelentette be a Cortex-A53 és a Cortex-A57 magokat.[4] Az Apple volt az első, amely ARMv8-A kompatibilis magot alkalmazott (Cyclone) egy fogyasztói termékben (iPhone 5S).Az ARMv8-A rendszert az AppliedMicro félvezetőgyártó demonstrálta elsőként egy FPGA-n.[5]A Samsung a Galaxy Note 4-be épített először ARMv8-A típusú SoC-t, ez a 2014-ben megjelent Exynos 5433 rendszercsip, amely két, négy Cortex-A57 és négy Cortex-A53 magból álló klasztert tartalmaz big.LITTLE konfigurációban, de ez csak AArch32 módban működik.[6]
Az ARM az ARMv8-A-tól kezdve kötelezővé tette a VFPv3/v4 és fejlett SIMD (Neon) használatát mind az AArch32, mind az AArch64 architektúrákban, valamint újabb utasításokat adott az AES, SHA-1/SHA-256 és véges testek feletti aritmetikát támogató készlethez.[7]
Elnevezési konvenciók
- 64 + 32 bites
- Architektúra: AArch64
- Specifikáció: ARMv8-A
- Utasításkészletek: A64 + A32
- Utótagok: v8-A
- 32 + 16 bites (Thumb)
- Architektúra: AArch32
- Specifikáció: ARMv8-R / ARMv7-A
- Utasításkészletek: A32 + T32
- Utótagok: -A32 / -R / v7-A
- Példa: ARMv8-R, Cortex-A32[8]
Az AArch64 jellemzői
- Új utasításkészlet, A64
- 31 általános célú 64 bites regiszterrel rendelkezik.
- Dedikált nulla (zr) és veremmutató (sp) regiszter.
- A programszámláló (pc) regiszter már közvetlenül nem elérhető.
- Az utasítások mindig 32 bitesek, és többnyire megegyeznek az A32-beliekkel (az LDM/STM regiszterbetöltő-tároló utasítások, a PUSH/POP és a feltételes végrehajtású utasítások – néhány kivételtől eltekintve – megszűntek).
- Páros betöltő/tároló utasításokkal rendelkezik (LDM/STM helyett LDP/STP).
- A legtöbb utasításhoz nincs feltételes végrehajtás (predication), kivéve az elágazásokat.
- A legtöbb utasítás 32 vagy 64 bites argumentumokat kaphat.
- A címeket 64 bitesként kezeli.
- Továbbfejlesztett SIMD (Neon)
- Külön 32 db. 128 bites regiszterrel rendelkezik (korábban 16), amelyek a VFPv4-ben is elérhetőek.
- Támogatja a dupla pontosságú lebegőpontos formátumot.
- Teljesen IEEE 754 kompatibilis.
- Új kriptográfiai utasítások (AES, SHA-1, SHA-256 számításához) és polinom-szorzás.
- Új kivételkezelő rendszer
- Kevesebb bankolt regiszter és üzemmód.
- Memória-címfordítás 48 bites virtuális címekről a létező Large Physical Address Extension (LPAE) alapján, amelyet úgy terveztek, hogy könnyen bővíthető legyen 64 bitesre.
Kiterjesztés: Adatgyűjtési tipp (ARMv8.0-DGH, data gathering hint utasítás)
Az AArch64-et az ARMv8-A architektúra-kiadásban vezették be, és az ARMv8-A későbbi verziói is tartalmazzák. Választható elemként az ARMv8-R-ben is bevezették, miután az ARMv8-A-ban megjelent; az ARMv8-M nem tartalmazza.
Utasításformátumok
Az A64 utasítások csoportokba vannak szervezve, ezek kiválasztására szolgálnak a fő műveleti kódrész 25–28. bitjei.
típus | 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 | |
Fenntartott | op0 | 0000 | op1 | közvetlen állandó 16 bit | ||||||||||||||||||||||||||||
Nem kiosztott | 0001 | |||||||||||||||||||||||||||||||
SVE utasítások | 0010 | |||||||||||||||||||||||||||||||
Nem kiosztott | 0011 | |||||||||||||||||||||||||||||||
Adatfeldolgozás – közvetlen PC-relatív | op | immlo | 10000 | immhi | Rd | |||||||||||||||||||||||||||
Adatfeldolgozás – közvetlen egyéb | sf | 100 | 01-11 | Rd | ||||||||||||||||||||||||||||
Elágazások + Rendszerutasítások | op0 | 101 | op1 | op2 | ||||||||||||||||||||||||||||
Betöltő és tároló utasítások | op0 | 1 | op1 | 0 | op2 | op3 | op4 | |||||||||||||||||||||||||
Adatfeldolgozás – regiszter | sf | op0 | op1 | 101 | op2 | op3 | ||||||||||||||||||||||||||
Adatfeldolgozás – Lebegőpontos és SIMD | op0 | 111 | op1 | op2 | op3 |
- immlo: közvetlen érték alacsony része
- immhi: közvetlen érték magas része
ARMv8.1-A
2014 decemberében jelentették be az ARMv8.1-A kiegészítést,[9] amely „a v8.0-hoz képest többletelőnyöket” nyújt.A fejlesztések két kategóriába sorolhatók: az utasításkészlet módosításai, valamint a kivételmodell és a memóriafordítás módosításai.
Az utasításkészlet fejlesztései a következők voltak:
- AArch64 atomi olvasó-író utasítások készlete.
- Az AArch32 és az AArch64 Advanced SIMD utasításkészletének kiegészítései, amelyek lehetővé tesznek bizonyos könyvtári optimalizálási lehetőségeket:
- Signed Saturating Rounding Doubling Multiply Accumulate returning High Half (SQRDMLAH utasítás, előjeles telített kerekítés kétszerező szorzás-összeadás, magas fél visszaadása)
- Signed Saturating Rounding Doubling Multiply Subtract returning High Half (SQRDMLSH, előjeles telített kerekítés kétszerező szorzás-kivonás, magas fél visszaadása)
- Az utasítások vektor és skalár paramétereket kaphatnak.
- AArch64 betöltő és tároló utasítások készlete, amely a memória hozzáférési sorrendjét konfigurálható címtartományokra korlátozva biztosíthatja.
- A v8.0-ban opcionális CRC utasítások az ARMv8.1-ban kötelezővé váltak.
A kivételmodell és a memóriafordítási rendszer fejlesztései a következők voltak:
- Egy új Privileged Access Never (PAN) állapotbit olyan vezérlést biztosít, amely szabályozza a felhasználói adatokhoz történő kiváltságos hozzáférést.
- Megnövelt VMID-tartomány a virtualizációhoz; nagyobb számú virtuális gép támogatása.
- A laptábla-hozzáférési jelző hardveres frissítésének opcionális támogatása és egy opcionális, hardveresen frissített, piszkos bit mechanizmus szabványosítása.
- A Virtualization Host Extensions (VHE). Ezek a kiterjesztések javítják a 2-es típusú hipervizorok teljesítményét, csökkentve a gazdagép és a vendég operációs rendszer közötti váltás során felmerülő szoftverterhelést. A kiterjesztések lehetővé teszik, hogy a gazda operációs rendszer EL2-n fusson, ne EL1-en, lényeges módosítás nélkül.
- Mechanizmus, amely felszabadít néhány fordítótábla bitet az operációs rendszer számára, mikor az operációs rendszernek nincs szüksége a hardver támogatására.
- A felső bájt figyelmen kívül hagyása memóriacímkézéshez.[10]
ARMv8.2-A
2016 januárjában jelentették be az ARMv8.2-A-t.[11] Benne a fejlesztések négy kategóriába sorolhatók:
- Választható félpontos lebegőpontos adatfeldolgozás (a félpontos formátum eddig csak tárolási formátumként volt támogatva, a feldolgozásban nem)
- Memóriamodell fejlesztések
- A megbízhatósági, rendelkezésre állási és szervizelhetőségi bővítmény (RAS bővítmény) bevezetése
- A statisztikai profilozás bevezetése
Scalable Vector Extension (SVE)
A Scalable Vector Extension (SVE) az ARMv8.2-A és újabb architektúrák opcionális kiterjesztése, amelyet kifejezetten a nagy teljesítményű számítástechnikában előforduló tudományos munkafolyamatok vektorizálásához fejlesztettek ki.[12][13]A specifikáció lehetővé teszi a 128 és 2048 bit közötti változó vektorhosszúságok megvalósítását. A kiterjesztés kiegészíti a NEON bővítményeket, és nem helyettesíti azokat.
Egy 512 bites SVE-változatot már megvalósítottak a Fugaku szuperszámítógépen a Fujitsu A64FX ARM processzor segítségével.Ez a világ legnagyobb teljesítményű szuperszámítógépének szerepére pályázott, „teljes körű működését” 2021 körülre tervezték.[14]Egy rugalmasabb változatát, a 2x256 SVE-t az AWS Graviton3 ARM processzorban valósították meg.
Az SVE-t támogatja a GCC fordító: a GCC 8-ban megjelent az automatikus vektorizálás[13] a GCC 10-ben pedig a C intrinsic függvények támogatása.2020 júliusától az LLVM és a clang is támogatja a C és az IR intrinsic függvényeket.[15]Az ARM saját LLVM forkja szintén támogatja az automatikus vektorizálást.[16]
ARMv8.3-A
2016 októberében jelentették be az ARMv8.3-A-t. Ebben a fejlesztések hat kategóriába sorolhatók:[17]
- Mutató hitelesítés[18] (csak AARch64); kötelező kiterjesztése (új blokkrejtjel, a QARMA[19] alapján) az architektúrára (a fordítóknak ki kell használniuk a biztonsági funkciót, de mivel az utasítások NOP térben vannak, visszafelé kompatibilisek, bár nem nyújtanak extra biztonságot a régebbi chipeken).
- Beágyazott virtualizáció (csak AARch64)
- Fejlett SIMD komplex számok támogatása (AArch64 és AArch32); pl. 90 fokos elforgatások.
- Új FJCVTZS utasítás (lebegőpontos JavaScript konvertálás előjeles fixpontosra, nulla felé kerekítéssel).[20]
- Változás a memória konzisztenciamodelljében (csak AARch64); a C++11/C11 (nem alapértelmezett) gyengébb RCpc (Release Consistent processor consistent) modelljének támogatására (az alapértelmezett C++11/C11 konzisztenciamodellt már az előző ARMv8 is támogatta).
- Azonosító mechanizmus támogatása nagyobb, rendszer által látható gyorsítótárak számára (AArch64 és AArch32)
Az ARMv8.3-A architektúrát a GCC fordító a 7. verziótól kezdve támogatja.[21]
ARMv8.4-A
2017 novemberében jelentették be az ARMv8.4-A-t. A fejlesztések áttekintése:[22][23][24]
- SHA3 / SHA512 / SM3 / SM4 kriptográfiai bővítmények
- Továbbfejlesztett virtualizációs támogatás
- Memóriaparticionálás és -felügyelet (MPAM) képességek
- Új Secure EL2 állapot és aktivitásfigyelők
- Előjeles és előjel nélküli egész skaláris szorzat (SDOT és UDOT) utasítások.
ARMv8.5-A és ARMv9.0-A[25]
2018 szeptemberében jelentették be az ARMv8.5-A-t. A fejlesztések az alábbiak:[26][27]
- Memóriacímkéző kiterjesztés (Memory Tagging Extension, MTE)[28]
- Branch Target Indicators (BTI) utasítás, végrehajtási védelem céljaira a kódban.
- Véletlenszám-generátor utasítások – „különböző nemzeti és nemzetközi szabványoknak megfelelő determinisztikus és valódi véletlen számok biztosítása”
2019. augusztus 2-án a Google bejelentette, hogy Android operációs rendszerében bevezeti a Memory Tagging Extension (MTE, memóriacímkéző kiterjesztés) bővítményt.[29]
2021 márciusában jelentették be az ARMv9-A-t. Az ARMv9-A alapját az ARMv8.5 összes szolgáltatása képezi.[30][31][32]Az ARMv9-A kiegészítései:
- Scalable Vector Extension 2 (SVE2). Az SVE2 az SVE skálázható vektorizálására épít a megnövelt finomszemcsés adatszintű párhuzamosság (DLP) érdekében, így több munkavégzést tesz lehetővé utasításonként. Az SVE2 célja, hogy ezeket az előnyöket a szoftverek szélesebb körébe hozza, beleértve a DSP-t és a multimédiás SIMD kódot, amelyek jelenleg NEON-t használnak.[33] Az LLVM / Clang 9.0 és a GCC 10.0 fejlesztői kódok frissítéseibe bekerült az SVE2 támogatás.[33][34]
- Tranzakciós memória kiterjesztés (TME). Az x86-os Transactional Synchronization Extensions kiterjesztéseket követően a TME támogatja a hardveres tranzakciós memóriát (HTM) és a Transactional Lock Elision (TLE) mechanizmust. A TME célja a méretezhető párhuzamosság létrehozása a durvaszemcsés szálszintű párhuzamosság (TLP) növelése érdekében, hogy több munkavégzést tegyen lehetővé szálanként.[33] Az LLVM / Clang 9.0 és GCC 10.0 fejlesztői kódokat frissítették a TME támogatásához.[34]
- Confidential Compute Architecture (CCA, bizalmas számítási architektúra)[35][36]
ARMv8.6-A és ARMv9.1-A[25]
2019 szeptemberében jelentették be az ARMv8.6-A-t. Ebben a fejlesztések a következők:[37]
- Általános mátrixszorzás (GEMM)
- A bfloat16 formátum támogatása
- SIMD mátrixkezelő utasítások, BFDOT, BFMMLA, BFMLAL és BFCVT
- fejlesztések a virtualizáció, a rendszerfelügyelet és a biztonság terén
- és a következő kiterjesztések (ezeket az LLVM 11 már támogatta[38]):
- Továbbfejlesztett számlálóvirtualizáció (Enhanced Counter Virtualization, ARMv8.6-ECV)
- Finomszemcsés csapdák (Fine-Grained Traps, ARMv8.6-FGT)
- Aktivitásmonitorok virtualizációja (ARMv8.6-AMU)
Például finomszemcsés csapdák, Wait-for-Event (WFE) utasítások, EnhancedPAC2 és FPAC. Az SVE és a NEON bfloat16 bővítményei elsősorban a mélytanulásban való felhasználásra szolgálnak.[39]
ARMv8.7-A és ARMv9.2-A[25]
2020 szeptemberében jelentették be az ARMv8.7-A-t. Fontosabb fejlesztései a következők:[40]
- Scalable Matrix Extension (SME) (csak ARMv9.2).[41] Az SME új funkciókat ad a mátrixok hatékony feldolgozásához, mint például:
- Mátrix csempe tárolás
- Gyors mátrixtranszponálás
- Csempevektorok betöltése/tárolása/beszúrása/kivonása
- SVE vektorok mátrix külső szorzata
- Streaming módú SVE
- Továbbfejlesztett támogatás a PCIe hot plughoz (AArch64)
- Atomi 64 bájtos betöltés és tárolás a gyorsítókhoz (AArch64)
- Wait For Instruction (WFI) és Wait For Event (WFE) utasítások időtúllépéssel (AArch64)
- Branch-Record felvétel (csak ARMv9.2)
ARMv8.8-A és ARMv9.3-A[25]
2021 szeptemberében jelentették be az ARMv8.8-A és ARMv9.3-A verziót. Fejlesztései az alábbiak:[42]
- Nem maszkolható megszakítások (AArch64)
- Utasítások a memcpy() és memset() típusú műveletek optimalizálásához (AArch64)
- A PAC továbbfejlesztései (AArch64)
- Súgóval segített (hinted) feltételes elágazások (AArch64)
Az LLVM 15 támogatja az ARMv8.8-A és ARMv9.3-A utasításkészleteket.[43]
ARMv8.9-A és ARMv9.4-A
2022 szeptemberében jelentették be az ARMv8.9-A és ARMv9.4-A verziókat, az alábbi jellemzőkkel:[44]
- A Virtual Memory System Architecture (VMSA) továbbfejlesztései
- Engedélyközvetítés és átfedések
- Translation hardening: címfordító táblák biztonságának növelése, behatolás elleni védelem erősítése céljából
- 128 bites fordítótáblák (csak ARMv9)
- Scalable Matrix Extension 2 (SME2) (csak ARMv9)
- Többvektoros utasítások
- Többvektoros predikátumok
- 2b/4b súlytömörítés (pl. neurális hálózatokban alkalmazott technika)
- 1b bináris hálózatok
- Tartomány előzetes lehívása
- Guarded Control Stack (GCS) (csak ARMv9)
- Bizalmas számítástechnika
- Memóriatitkosítási környezetek
- Eszköz-hozzárendelés
Armv8-R (valós idejű architektúra)
Az Armv8-R profilt opcionális AArch64 támogatással bővítették; az első Arm mag, amely ezt megvalósítja Cortex-R82.[45]Ez lehetővé teszi az A64 utasításkészlet használatát, kisebb változtatásokkal a memóriakorlát-utasításokban (fence?).[46]
Jegyzetek
Fordítás
Ez a szócikk részben vagy egészben az AArch64 című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.