Mike Ash se na svém blogu věnoval praktickým implikacím přechodu na 64bitovou architekturu v iPhonu 5S. Tento článek čerpá z jeho poznatků.
Důvodem tohoto textu je převážně velké množství šířících se dezinformaci o tom, co ve skutečnosti nový iPhone 5s s 64bitovým ARM procesorem znamená pro uživatele a trh. Zde se budeme snažit přinést objektivní informace o výkonu, schopnostech a následcích tohoto přechodu pro vývojáře.
„64 bitů“
V procesoru jsou dvě části, na které se označení „X-bit“ může vztahovat – šířka celočíselných registrů a šířka ukazatelů. Naštěstí jsou u většiny moderních procesorů tyto šířky totožné, v případě A7 to tedy znamená 64bitové celočíselné registry a 64bitové ukazatele.
Neméně důležité je však poukázat na to, co „64bit“ NEznamená: Velikost fyzické adresy RAM. Počet bitů pro komunikaci s RAM (tím pádem množství RAM, které může zařízení podporovat) nesouvisí s počtem bitů CPU. ARM procesory mají kdekoliv mezi 26- a 40bitovými adresami a lze je měnit nezávisle na zbytku systému.
- Velikost datové sběrnice. Množství dat přijatého od RAM nebo vyrovnávací paměti jsou podobně na tomto faktoru nezávislé. Jednotlivé instrukce procesoru si mohou vyžádat různá množství dat, ale z paměti se buď pošlou po částech, nebo se jich přijme více, než je potřeba. Závisí to na velikosti datového kvanta. Již iPhone 5 přijímá data z paměti v 64bitových kvantech (a má 32bitový procesor) a můžeme se setkat až s velikostmi do 192 bitů.
- Cokoliv souvisejícího s plovoucí desetinnou čárkou. Velikost takových registrů (FPU) jsou opět nezávislé na vnitřním fungování procesoru. ARM používá 64bitové FPU už od doby před ARM64 (64bitový ARM procesor).
Obecné výhody a nevýhody
Pokud porovnáme jinak identické 32bit a 64bit architektury, obecně nejsou až tak rozdílné. To je jeden z důvodů obecného zmatení veřejnosti hledajícího důvod, proč se Apple přesouvá na 64bit i v mobilních zařízeních. Vše však plyne z konkrétních parametrů A7 (ARM64) procesoru a toho, jak ho Apple využívá, ne pouze z toho, že procesor má 64bit architekturu.
Avšak když se přesto podíváme na rozdíly těchto dvou architektur, několik rozdílů nalezneme. Ten očividný je, že 64bitové celočíselné registry umí efektivněji pracovat s 64bitovými celými čísly. I předtím s nimi šlo pracovat na 32bitových procesoru, avšak většinou to znamenalo je rozdělit na 32bitů dlouhé kusy, což způsobovalo pomalejší výpočty. 64bitový procesor tedy obecně dokáže počítat s 64bitovými typy stejně rychle jako s 32bitovými. Z toho plyne, že aplikace valně využívající 64bitové typy mohou pracovat mnohem rychleji na 64bitovém procesoru.
Ačkoliv 64bit nijak neovlivňuje celkové množství RAM paměti, kterou může procesor využít, může zjednodušit práci s velkými částmi RAM paměti v jednom programu. Každý jeden program běžící na 32bitovém procesoru má pouze asi 4 GB adresního místa. Když vezmeme v úvahu, že operační systém a standardní knihovny něco zaberou, zůstane programu někde mezi 1–3 GB k aplikačnímu použití. Jestliže má však 32bitový systém více než 4 GB RAM, využití této paměti je trochu složitější. Musíme se uchýlit k donucení operačního systému, aby mapoval tyto větší části paměti pro náš program (virtualizace paměti), či můžeme rozdělit program na více procesů (kde má každý proces opět teoreticky 4 GB paměti k dispozici k přímému adresování).
Tyto „hacky“ jsou však natolik náročné a pomalé, že je minimum aplikací používá. V praxi si na 32bitovém procesoru každý program využije jen svých 1–3 GB paměti a více dostupné RAM můžeme uplatnit v běhu více programů zároveň či využití této paměti jako vyrovnávací (cachování). Tato použití jsou praktická, avšak chtěli bychom, aby mohl každý program jednoduše využít větší kusy paměti než 4 GB.
Nyní se dostáváme k častému (fakticky špatnému) tvrzení, že bez více než 4 GB paměti je 64bitová architektura zbytečná. Větší adresní prostor je totiž užitečný i na systému s menším množstvím paměti. Soubory zmapované do paměti jsou praktický nástroj, kdy je část obsahu souboru logicky propojena s pamětí procesu, aniž by celý soubor musel být načten v paměti. Systém tak může např. postupně zpracovávat velké soubory i mnohokrát větší, než je kapacita RAM. Na 32bitovém systému takto velké soubory nelze spolehlivě namapovat do paměti, oproti tomu na 64bitovém je to hračka, díky mnohem většímu adresnímu prostoru.
Větší velikost ukazatelů však přináší i jednu velkou nevýhodu: jinak identické programy potřebují více paměti na 64bitovém procesoru (někam se tyto větší ukazatele totiž musí ukládat). Jelikož jsou ukazatele častou součástí programů, tento rozdíl může zatížit cache, která na oplátku způsobí pomalejší chod celého systému. Z perspektivy tedy vidíme, že pokud bychom pouze změnili architekturu procesoru na 64bitovou, ve skutečnosti by se celý systém zpomalil. Tento faktor tedy musí být vyvážen větším množstvím optimalizací na jiných místech.
ARM64
A7, 64bitový procesor pohánějící nový iPhone 5s, není jen běžný ARM procesor s širšími registry. ARM64 obsahuje zásadní vylepšení oproti starší, 32bitové verzi.
Registry
ARM64 pojímá dvojnásobný počet celočíselných registrů než 32bitový ARM (pozor, neplést počet a šířku registrů – o šířce jsme mluvili v sekci „64 bitů“. ARM64 tedy má jak dvakrát širší registry, tak jich má dvakrát více). 32bitový ARM má 16 celočíselných registrů: jeden programový čítač (PC – obsahuje číslo aktuální instrukce), stack ukazatel (ukazatel na probíhající funkci), link registr (ukazatel na návrat po skončení funkce), a zbylých 13 jsou k aplikačnímu použití. ARM64 má však 32 celočíselných registrů, z toho jeden nulový registr, link registr, ukazatel na rámec (podobný jako stack ukazatel) a jeden rezervovaný do budoucna. To nám nechává 28 registrů k aplikačnímu použití, více než dvojnásobek 32bitového ARMu. Zároveň ARM64 zdvojnásobil počet registrů pro čísla s plovoucí desetinnou čárkou (FPU) z 16 na 32 128bitových registrů.
V čem je však počet registrů tak důležitý? Paměť je obecně pomalejší než výpočty procesoru a čtení/zápis mohou trvat velmi dlouho. Tím by musel rychlý procesor stále čekat na paměť a narazili bychom na přirozenou hranici rychlosti systému. Procesory se tento handicap snaží skrýt vrstvami vyrovnávacích pamětí, avšak i ta nejrychlejší (L1) je stále pomalejší než výpočet procesoru. Registry jsou však paměťové buňky přímo v procesoru a jejich čtení/zápis jsou dostatečně rychlé na to, aby procesor nezpomalovaly. Počet registrů tedy prakticky znamená množství té nejrychlejší paměti pro výpočty procesoru, čímž značně ovlivňuje rychlost celého systému.
Tato rychlost zároveň potřebuje dobrou podporu optimalizace od kompilátoru, aby jazyk uměl tyto registry využít a nemusel vše ukládat do obecné aplikační (té pomalé) paměti.
Instrukční sada
ARM64 také přináší zásadní změny instrukční sady. Instrukční sada je množina atomických operací, které procesor umí vykonat (např. ‚ADD registr1 registr2‘ sečte čísla ve dvou registrech). Funkce dostupné jednotlivým jazykům jsou složené z těchto instrukcí. Složitější funkce musí vykonat více instrukcí, mohou být proto pomalejší.
Novinkami v ARM64 jsou instrukce pro AES šifrování, SHA-1 a SHA-256 hashovací funkce. Místo složité implementace tedy bude pouze jazyk volat tuto instrukci – což přinese obrovské zrychlení výpočtu takových funkcí a doufejme i přidanou bezpečnost v aplikacích. Např. nové Touch ID v šifrování také využívá tyto instrukce, čímž umožňuje opravdovou rychlost a bezpečnost (pro napadení by teoreticky musel útočník pozměnit samotný procesor, aby se k datům dostal – což je přinejmenším nepraktické vzhledem k jeho miniaturním rozměrům).
Kompatibilita s 32bit
Je důležité zmínit, že A7 umí plně běžet v 32bitovém režimu bez potřeby emulace. Znamená to, že nový iPhone 5s umí spustit aplikace kompilované na 32bitový ARM bez jakéhokoliv zpomalení. Avšak potom nemůže využít nových funkcí ARM64, tudíž se vždy vyplatí udělat speciální build právě pro A7, který by měl běžet mnohem rychleji.
Runtime změny
Runtime se nazývá kód přidávající programovacímu jazyku funkce, které je schopen využít během chodu aplikace, až po překladu. Jelikož Apple nepotřebuje zachovat kompatibilitu aplikací (že by 64bit binárka běžela na 32bit), mohli si dovolit učinit pár dalších vylepšení jazyka Objective-C.
Jednou z nich je tzv. tagged pointer (označený ukazatel). Běžně se objekty a ukazatele na tyto objekty ukládají v odlišných částech paměti. Avšak nové typy ukazatelů umožňují třídám s málo daty ukládat objekty přímo v ukazateli. Tento krok eliminuje potřebu alokovat paměť přímo pro objekt, stačí vytvořit ukazatel a objekt v něm. Tagged pointers jsou podporovány pouze v 64bitové architektuře také kvůli tomu, že v 32bitovém pointeru už není dost místa na uložení dostatku užitečných dat. Proto iOS, na rozdíl od OS X, prozatím tuto funkci nepodporovalo. S příchodem ARM64 se to však mění a iOS se i v tomto ohledu srovnalo s OS X.
Ačkoliv jsou ukazatele dlouhé 64 bitů, na ARM64 se využije pouze 33 bitů na vlastní adresu ukazatele. A pokud jsme schopni spolehlivě odmaskovat zbytek bitů ukazatele, můžeme toto místo využít na uložení dalších dat – jak v případě zmíněných tagged pointers. Koncepčně jde o jednu z největších změn v historii Objective-C, přestože to není marketingově využitelná funkce – většina uživatelů se tedy nedozví, jak kupředu Apple Objective-C táhne.
Co se týče užitečných dat, které se dají uložit do zbylého místa takového tagged pointeru, Objective-C ho například nově využívá pro uložení tzv. reference count (počtu referencí). Dříve se reference count ukládal v odlišném místě v paměti, v hashovací tabulce pro to připravenou, avšak to v případě velkého množství alloc/dealloc/retain/release volání mohlo celý systém zpomalovat. Tabulka se totiž musela kvůli vláknové bezpečnosti zamykat, tudíž dvěma objektům ve dvou vláknech nemohl být zároveň měněn reference count. Avšak nově se tato hodnota vloží do zbytku tzv. isa ukazatele. Jde o další nenápadnou, avšak do budoucna obrovskou výhodu a zrychlení. To by však v 32bitové architektuře nikdy nemohlo být dosaženo.
Do zbylého místa ukazatelů na objekty se také nově vkládají informace o asociovaných objektech, zda-li je objekt referencován slabě, zda-li je třeba vygenerovat pro objekt destruktor atd. Runtime Objective-C je díky těmto informacím schopen zásadně zrychlit běh, což se projeví v rychlosti každé aplikace. Z testování to znamená asi 40–50% zrychlení všech memory management volání. Jen přechodem na 64bitové ukazatele a využitím tohoto nového prostoru.
Závěr
Ačkoliv se budou konkurenti snažit rozšířit názor, že přechod na 64bitovou architekturu je zbytečný, vy už budete vědět, že jde jen o velmi neinformovaný názor. Je pravda, že samotný přechod na 64bit, aniž byste tomu přizpůsobili jazyk či aplikace, opravdu nic neznamená – ba dokonce celý systém zpomalí. Ale nový A7 využívá moderní ARM64 s novou instrukční sadou a Apple si dal práci zmodernizovat celý jazyk Objective-C a využít nové možnosti – z toho plyne slibované zrychlení.
Zde jsme zmínili velké množství důvodů, proč je 64bitová architektura správným krokem kupředu. Jde o další revoluci „pod kapotou“, díky které se Apple bude snažit nadále udržet na špici nejen designem, uživatelským rozhraním a bohatým ekosystémem, ale hlavně nejmodernějšími technologiemi na trhu.
Veľa neinforomovaných Android/Samsung ľudí by si malo tento článok prečítať a potom sa hanbiť v kúte.
No, musime s nemi mit soucit. Roky omlouvali tragicke UX a UI Androidu tim, ze maji ten technologicky nejpokrocilejsi OS s featuretkami a tedka zjistili, ze jsou zase roky pozadu :)
Pokud clovek neni ovce a naslouchac reklam (a ma na to) tak po osobni zkusenosti si muze udelat vlastni nazor :-).
Ja zkousim takrka vsechnu konkurenci a delam si vlastni nazor.
Pro me je treba novej super vykonej mobil zbytecnej protoze na nem nejdelam nic velkyho. Tzn. staci mi mensi vykon za mensi cenu ;-). Mozna bych bral radej pomalejsi s vetsi baterkou.
Na druhou stranu u iPadu kde parim hry by se hodil ten novej procak :-).
Jsem Android/HTC :) jelikož IT mě celkem baví a rootovat a předělat si kvalitní HW na rychlou stíhačku je můj takovej koníček. A to mi iOS nedovolí. (Ani to není potřeba. Více méně iOS je dělanej tak aby vše fungovalo jak mělo a člověk tam nemusel nic dělat.. Až mě přestane bavit si hrát tak koupím apple a zdarec). Ale nevím proč se tak furt jak děcka napadáte. Applu jde úplně o něco jak Androidu. Je to jako srovnávat Demokracii s Diktátorstvím a podobně… Sledoval jsem konferenci při představování iPhonu 5S a navzdory tomu, že nic od applu nevlastním se mi 64bit a další vylepšení co přišli líbili. Ale ne, protože jsem zakomplexovaný honimír trtko co sedí za pc a honí nad Androidem nebo Applem ale protože vidím ten POKROK, kterej nenechá na sebe dlouho čekat. Lidi by měli začít pořádně makat aby neměli čas řešit hovadiny když to řeknu slušně.
konstruktivny prispevok od druhej strany :) kiez by otvorilo oci aj zvysnych 99% android positive
možná by se mělo nejdřív probrat 99% apple fanatiků, pak se mužeme konstruktivně bavit
hodne slozity veci vysvetleny jednoduse… diky
Super článek ! Ano, souhlasím, že uživatelé Android/WP by si tento článek měli povinně přečíst. Místo trolování a chytrých řečí o tom „jak je 64b v mobilech zbytečný“…
asi si wp nikdy v ruce neměl, jinak by jsi tohle nemlel
Samsung od svých prvních úspěchů na trhu mobilů nedělá nic jiného než špiní konkurenci, ale ve své podstatě kráčí celou tu dobu v jejích šlépějích. Apple byl vždy vzorem pro technologické firmy a pokud se budou tyto firmy soustředit pouze na zesměšňování a neustálé dezinformování zákazníků, brzy narazí. Apple si šel vždy svou cestou a vždycky šlo o velmi dobré načasování což mnohým konkurenčním firmám v odvětví chybí.
Dalo by se říci, že Samsung se veze na vlně a využívá svých možností. Vsadil na Android, má skvělý HW, spoustu věcí si vyrábí sám, má slušnou podporu. A jako každá dravá Asijská společnost, využívá všech možností reklamy. A samozřejmě, že i vykrádá, kopíruje. Co umí „šikmooký“ dobře, je kopírování. Moc dobře mají spočítané, že je to daleko levnější, než jít svou cestou, krok za krokem. A jako silná společnost si toto může prostě dovolit. Zatím…
Ja len nechpem naco je komu ta rychlost telefonu, stale stale sa zvysujuca, dajte sem nejake priklady na co to vyuzivate, pomaly mi to nedava zmysel zvysovat mobilu vykon ale teda odstranim slovo marketing.
Hry, zle optimalizovane hry. Taky Transport Tycoon na iPad 3 nebezi tak plynulo a v takom rozliseni ako bezi na desktopu. Priklad.
Ja len nechapem naco je komu ta rychlost telefonu, stale stale sa zvysujuca, dajte sem nejake priklady na co to vyuzivate, pomaly mi to nedava zmysel zvysovat mobilu vykon ak teda odstranim z toho slovo marketing.
Na spracovanie videa, zvuku a obrazkov. A dalej na hry.
Kto pouziva iPhone len na telefonovanie, sms, a obcas cita alebo posiela maily a obcas surfuje po internete tak mu staci iPhone 4. Verim, ze takych pouzivatelov je vela. Najlepsi telefon na svete nepotrebuje kazdy :-)
ovce
Vecny zavod mezi hardwarem a softwarem vam nic nerika? Tohle mi trochu pripomina konec 19. stoleti, kdy fyzici te doby rekli, ze vse z fyziky jiz bylo objeveno a neni potreba pokracovat (dekadu pred teorii relativity a tri pred kvantovou teorii).
Hon za lepsim nikdy nekonci. Jen chvili vede software a chvili hardware. Ale pokud se jeden zasekne, druhemu to nedovoli jit dal. Nebudme tak sobecti k nasim potomkum :) Takze k vasemu komentari – rychlejsi telefon umozni vykonnejsi aplikace, ktere budou moci delat zase o kus vic nez driv. A jednou veci, na ktere zatim nestaci ani dnesni pocitace. Budoucnost je vzrusujici.
Presne tak :)
Pekny clanek, nicmene nechapu, ze Apple nedal do A7 2GB pameti RAM. Ano, multitasking iOS neni takovy, ze by byly 2GB nutne potreba, ale vzhledem k dvojnasobne delce ukazatelu do pameti by byly mnohem vhodnejsi.
Ale jinak souhlasim s tim, ze 64bit procesor je do mobilu „zbytecny“, stejne jako byl zbytecny retina displej nebo opticka mys misto kulickove – vsechny tyto vynalezy byly oznaceny za „zbytecne“, podle me je vsak spravne slovo „nadcasove“, nebot jednou prijit musi a Apple se neboji prijit s necim novym.
S tim naprosto souhlasim. Bohuzel ani „zbytecny“ neni presny vyraz. Zbytecny znamena neco, jehoz prednost clovek nepozna. To rozhodne neni pravda. Rychlost mozna takovou rychlost nepotrebuje, ale rozhodne ji pozna. A az software dozene hardware, opet bude kde zlepsovat.
Jasne, ja jsem pro, myslim to tak, ze iP5 je opravdu dost rychly smaryphone, takze by 5S nemusel byt vubec 64bit. Ale jednou s tim nekdo zase prijit musel a byl to Apple a bylo to ted. Co se pamatuju, tak taky experti zvatlali, jak budou 64bit procesory zbytecny i v pocitadlech.
Pro mě, jako pro IT laika co z matiky skoro propadal, je důležitý ten závěr. Celý článek (podložený komentáři) na mě působí dost zasvěceně a přestože to nebudu umět vysvětlit, je A7 s 64bit architekturou krokem vpřed. Díky za informace.
Upravil bych název článku, jelikož o marketingový tah jde. Každá inovace je ve své podstatě marketingovým tahem. :-)
Nemyslím si. Marketingové ťahy využíva napríklad Samsung. Ich ukazovanie sa s RAM, ktorú iPhone vôbec nepotrebuje takú. Ich vyťahovanie sa s funkciami, ktoré nie sú vôbec využiteľné. Ich zámerne zvyšovanie výkonu procesora pro testoch. Atď. To je marketing, aj keď síce áno, zavádzajúci, čo by im len tak prechádzať nemalo ;)