Je tomu zhruba osm a půl roku, co firma ARM oznámila první 64bitová jádra stejnojmenné procesorové architektury (byl to Cortex-A57 a Cortex-A53, ale samotná instrukční sada byla oznámená ještě dřív). 64bitová instrukční sada ARM se označuje ARMv8 a byla velkým přelomem proti minulosti, na rozdíl od 64bitového rozšíření x86 byla totiž navržena jako zcela nová nekompatibilní instrukční sada, takže má čistější moderní návrh. To patrně přináší minimálně nějaké výhody v efektivitě a výkonu.
Teď ARM oznámil největší změnu ve svých procesorech od tohoto přelomu: novou generaci označenou ARMv9. Jak vám už asi naskakuje podle navýšeného čísla verze, mělo by opět jít o velmi signifikantní změnu.
Konsolidace fragmentovaných rozšíření
ARMv9 tentokrát není předěl, kdy by se zahodilo to předchozí. Místo toho jde o navázání na ARMv8 s přidanými novými funkcemi. Některé součásti, které již v architektuře ARM existovaly jako separátní nepovinná rozšíření architektury ARMv8.0 až ARMv8.5, nyní v ARMv9 budou zahrnutá přímo do základu. Podstatné je, že kód napsaný pro ARMv8 poběží beze změn, v tomto smyslu bude kompatibilita zachovaná.
ARMv9 tedy je spíše evoluční vývoj, který reaguje na značnou fragmentaci jader ARM mezi různé verze architektury, která vznikla postupným vydáváním dílčích verzí 8.1, 8.2, 8.3, 8.4 a 8.5. Konsolidace to bude ale jen na chvíli, protože další novinky budou přidávány později (verze 9.1 a tak dále).
Na jednu stranu to proto může vypadat, že se nic moc neděje. Ale to, že v rámci této konsolidace dostávají dříve nepovinné novinky do základu, v praxi může znamenat dost. Jádra ARM na trhu (včetně Cortexů přímo od ARMu, které využívá většina výrobců ARM čipů) totiž volitelné věci často ignorují a zůstávají na nižších verzích architektury, místo aby použily tu nejaktuálnější. V praxi proto novinky v architektuře moc nebyly podporovány hardwarem. Když nyní v ARMv9 bude mnoho těchto věcí povinných, teprve teď začnou být dostupné v ARM procesorech, doufejme včetně jader Cortex.
SVE a SVE2 konečně v reálném nasazení?
Tyto novinky jsou hlavně dvojího rázu – bezpečnostního a výkonnostního. Začněme výkonem. Zde je hlavní novinka jasná: v instrukční sadě ARMv9 přicházejí poprvé SIMD instrukce SVE a zároveň jejich rozšíření SVE2. SVE již existuje na papíře už dlouhou dobu, původně bylo vyvinuté pro HPC procesory Fujitsu. Dosud ale nebyl vydán žádný další procesor, který by je podporoval. Je to tedy částečně ten případ, kdy bylo rozšíření jen na papíře.
SVE(2) jsou instrukce, které by měly dohnat určitou slabinu či deficit ve výkonu SIMD operací, podstatných pro výkonné výpočty v superpočítačích, ale i multimédia, zpracování obrazu a podobné operace včetně AI. Bez SVE totiž procesory ARM měly jen 128bitové vektorové instrukce Neon, což je srovnatelné s SSEx u x86. Mezitím Intel s AMD nasadily 256bitové instrukce AVX a AVX2 a poté i 512bitové AVX-512. Výhoda je u nich jasná: dvakrát širší vektor naráz provede dvojnásobek operací, 4× širší už čtyřnásobek. V kódu umožňujícím provádění stylem SIMD (jedna operace, například součet, je najednou provedena třeba až s různými 32 položkami dat) to zajistí značný nárůst výkonu.
SVE je tak odpověď ARMu na AVX, ale nakonec i na AVX-512. Přičemž SVE je zaměřené na floating-point HPC výpočty, což vyplývá ze zaměření architektury Fujitsu, které je s ARMem vyvinulo. SVE2 pak ale přidává také podporu výpočtů s menšími (16bitovými, 8bitovými) hodnotami včetně celočíselných, což jsou operace užitečné pro multimédia jako je video, obraz, pro DSP operace a také pro práci s neuronovými sítěmi (AI), byť to je oblast, pro kterou se místo CPU nejlépe hodí specializované obvody.
SIMD nezávislé na šířce vektorového registru
Od řešení v táboře x86 se SVE a SVE2 výrazně liší. SSE, AVX(2) a AVX-512 jsou vždy postavené kolem speciálních registrů (XMM, YMM, ZMM) o dané šířce 128, 256 a 512 bitů, které také určují, s jak širokým vektorem operace fungují. Nevýhoda je, že 512bitové operace jsou prováděné jinými instrukcemi než 256bitové, i když by třeba šlo o identický výpočet. Vždy je proto nutné program znovu přeložit nebo přepsat, pokud chcete využít větší šířku vektoru.
SVE a SVE2 má místo toho flexibilní šířku. Pracují s šířkou, která může být až 2048 bitů, přičemž se ale počítá s tím, že reálné jednotky budou mít šířku menší (většinou 128 nebo 256 bitů; HPC procesor Fujitsu A64FX má 512bitové jednotky). Instrukce jsou ale navržené tak, aby programátor napsal jen jeden kód a ten pak běžel na procesorech jak se 128bitovými, tak 256bitovými a v budoucnu ještě širšími jednotkami; programy by pak na budoucích CPU s širšími jednotkami měly automaticky být rychlejší, aniž by bylo nutní přepsání softwaru.
Příznivci architektury ARM toto řešení rádi prezentují jako mnohem progresivnější a technicky lepší než AVX/AVX-512, ale teprve uvidíme, jak se osvědčí. Zatím totiž pořád existuje jediný procesor s podporou SVE (ono Fujitsu A64FX, jež má specifické využití), takže je zatím brzo mluvit o tom, že by SVE (natož SVE2) naplnilo v ně vkládané naděje. Uvidíme, zda ona abstrakce od šířky vektoru nebude mít určitý dopad na dosažitelný výkon a nebude trošku překážkou/zátěží navíc pro programátory, kteří píší maximálně vyladěný kód ručně v assembleru.
Je možné, že se koncepce osvědčí (použít podobnou mimochodem chce i RISC-V), ale zatím těžko soudit. Každopádně pro úspěch nemusí ARM nutně platformu x86 překonat. Stačí, když bude SVE fungovat jakž takž stejně a nabízet stejné nebo srovnatelné možnosti – a SVE(2) opravdu přináší možnost mít procesory s podobným SIMD výkonem, jako je možný s AVX až AVX-512. Pokud by byly implementované 1024bitové jednotky, tak jsme dokonce na vyšším výkonu, ale takováto šířka asi není moc pravděpodobná v obecném CPU.
Dosavadní SIMD rozšíření Neon v procesorech zůstává pro kompatibilitu s programy napsanými pro architekturu ARMv8, bude ale považované za „legacy“. V tomto smyslu ho SVE/SVE2 nahrazuje a v budoucnu by se teoreticky mohlo stát, že Neon bude odstraněn, i když je asi pravda, že by nemělo být náročné udržovat kompatibilitu.
Aktualizováno (11. 5. 2024): SVE 2 není součástí ARMv9
Podle novějších zpráv ARM nakonec neudělal SVE 2 povinou částí ARMv9. V době, kdy oznámil tuto instrukční sadu, se tato informace uváděla, později ale zmínky o povinném SVE2 ze specifikace byly odstraněny. Procesory tedy zřejmě reálně mohou implementovat ARMv9, aniž by podporovaly SVE a SVE 2.
Bezpečnostní rozšíření
Druhá velká skupina novinek je bezpečnostního rázu. ARMv9 jednak integruje řadu inkrementálních rozšíření ARMv8, které například poskytovaly ochrany před side-channel útoky a různými podobnými hrozbami, které se objevily po publikování zranitelností Spectre (tomu slouží rozšíření Branch Target Identifier).
V ARMv9 je tak v základu zahrnutá například technologie Memory Tagging (MTE z rozšíření ARMv8.5) a Pointer Autentification z ARMv8.3. Mělo by poskytovat ochranu před exploity jako jsou přetečení zásobníku (buffer overflow) nebo use-after-free a před return-oriented útoky (podobné ochrany Controw Flow Enforcement mají ve světě x86 procesorů Tiger Lake a Zen 3).
Confidential Computer Architecture (CCA)
Mezi novinkami pro zabezpečení hraje prim nová funkce CCA (Confidential Computer Architecture). Jde o něco, co by mohlo mít podobné využití jako Intel SGX a bezpečné enklávy, nebo šifrování virtuálních strojů na platformě x86. Tato technologie má sloužit pro aplikace nebo systémy pracující s citlivými daty, které je potřeba ochránit před krádeží či vyzrazením.
Confidential Compute Architecture zavádí enklávy označené jako „Realm“, k jejich obsahu nemá zbytek běžícího systému přístup. A to ani operační systém, ani hypervizor při virtualizaci. Běžné pojetí počítačové bezpečnosti spočívalo dlouho v tom, že nižší „ringy“ chrání vyšší úrovně jako třeba uživatelský prostor nebo aplikace před tím, aby jednotliví uživatelé mohli šmírovat cizí data. Ale nižší úroveň naopak měla přístup do paměti všech těchto uživatelů, hypervizor do paměti hostovaných operačních systémů a tak podobně. Což je problém, protože nelze vždy věřit, že se tudy citlivá data nedostanou do cizích rukou.
Enkláva Realm je proto zcela oddělaná a má separátní adresní prostor, ke kterému nemá zbytek systému přístup. Například v Realmu může běžet virtualizovaný operační systém, jehož obsah a paměť jsou tímto skryté před hypervizorem a hostitelským OS. Klient cloudového serveru tak může mít ochranu před špionáží ze strany provozovatele serveru nebo před útočníkem, který by hostující server ovládl. Samozřejmě za předpokladu, že může věřit mechanismu, kterým s tímto serverem komunikuje, což je separátní, ale související problém.
Použití by ale asi mohlo být i na jednouživatelském osobním systému, jakým je PC nebo telefon. V CCA Realmu by mohla běžet citlivá aplikace, kterou chcete ochránit před malwarem nebo útočníky. Například správce přihlášení a hesel, aplikace ovládající nějakou kritickou funkci (ARM uvádí jako příklad zdravotnická zařízení), nebo i technologie ochrany proti kopírování neboli DRM.
ARMv9: nový výchozí základ (eventuálně)
Z architektury ARMv9 by se v budoucnu mohl či měl stát jakýsi výchozí standard, proti kterému by byl kompilovaný software pro platformu ARM. To samozřejmě bude trvat nějakou dobu, protože nějakou dobu budou v používaných zařízeních převážně starší procesory. Ještě hodně let asi uplyne, než bude software „ARMv9-only“.
Zatím ARM oznámil například technologii CCA a obecně architekturu ARMv9 v hrubých rysech. Další oznámení mají následovat během letoška. Zatím nebyla oznámena nová CPU jádra, která budou jako první založená na ARMv9 – ta by ale měla během následujících měsících následovat. První hardware by pak asi měl následovat zhruba do roka, i když je možné, že nějaké čipy to stihnou ještě do konce roku 2021.
Tip: ARM představuje serverové procesory Neoverse V1 a N2. Slibuje o 50 % vyšší IPC a až 192 jader
Tip: ARM oznámil budoucí jádra Matterhorn a Makalu: +30 % výkonu v roce 2022 a konec 32 bitů
První generace ARMv9 procesorů (Matterhorn, Neoverse N2), která by se měla začít objevovat možná již letos, také pořád budou zachovávat kompatibilitu s 32bitovou architekturou ARMv7 (byť jen v uživatelském prostoru, ne v jaderném). Ta by ale měla být v budoucí generaci (jádrech Makalu, která ARM uvede v roce 2022) odstraněna, od té doby ARM bude jen čistě 64bitový – tedy pokud se ARM nerozhodne paralelně 32bitovou kompatibilitu udržovat například v malých jádrech, což je teoreticky možné.
Apple na ARMv9/SVE nepočkal
Je trošku nešťastné, že se architektura ARMv9 nestihla dostat do prvních počítačů Apple s architekturou ARM. Pokud totiž Apple v některé z nejbližších generací na ARMv9 přejde, dost možná to bude znamenat, že pak po nějaké době budou odstřiženy od podpory první stroje s jinak povedeným procesorem M1, který podporuje jen ARMv8.
Je pro to precedent. Při přechodu na procesory x86 nebyl Apple ochoten čekat také jen několik měsíců na dostupnost 64bitových Core 2 Duo a vydal první x86 Macy s posledními jen 32bitovými procesory Intel. Tyto stroje pak měly kvůli tomu zkrácenou životnost, přestaly dostávat nové verze MacOS relativně záhy (šly upgradovat jen na OS X 10.5 a 10.6) v porovnání s první 64bitovou generací, která vyšla záhy. Doufejme, že se to nezopakuje, ale je určité riziko, že podobně by možná kvůli nepodpoře ARMv9 a SVE/SVE2 mohla podpora notebooků s M1 skončit jen za několik let, pokud by se Apple zachoval stejně a opět došlo na někdy uváděné „pravidlo“, že první generace produktu nebývá u něj nejlepší investice.