Mike Ash sa na svojom blogu venoval praktickým implikáciám prechodu na 64-bitovú architektúru v iPhone 5S. Tento článok čerpá z jeho poznatkov.
Dôvodom tohto textu je prevažne veľké množstvo šíriacich sa dezinformácii o tom, čo v skutočnosti nový iPhone 5s so 64-bitovým ARM procesorom znamená pre užívateľov a trh. Tu sa budeme snažiť priniesť objektívne informácie o výkone, schopnostiach a následkoch tohto prechodu pre vývojárov.
„64 bitov“
V procesore sú dve časti, na ktoré sa označenie „X-bit“ môže vzťahovať – šírka celočíselných registrov a šírka ukazovateľov. Našťastie sú u väčšiny moderných procesorov tieto šírky totožné, v prípade A7 to teda znamená 64-bitové celočíselné registre a 64-bitové ukazovatele.
Nemenej dôležité je však poukázať na to, čo „64bit“ NEznamená: Veľkosť fyzickej adresy RAM. Počet bitov pre komunikáciu s RAM (tým pádom množstvo RAM, ktoré môže zariadenie podporovať) nesúvisí s počtom bitov CPU. ARM procesory majú kdekoľvek medzi 26- a 40-bitovými adresami a je možné ich meniť nezávisle od zvyšku systému.
- Veľkosť dátovej zbernice. Množstvo dát prijatého od RAM alebo vyrovnávacej pamäte sú podobne na tomto faktore nezávislé. Jednotlivé inštrukcie procesora si môžu vyžiadať rôzne množstvo dát, ale z pamäte sa buď pošlú po častiach, alebo sa ich prijme viac, než je potrebné. Závisí to od veľkosti dátového kvanta. Už iPhone 5 prijíma dáta z pamäte v 64-bitových kvantoch (a má 32-bitový procesor) a môžeme sa stretnúť až s veľkosťami do 192 bitov.
- Čokoľvek súvisiace s plávajúcou desatinnou čiarkou. Veľkosť takýchto registrov (FPU) sú opäť nezávislé na vnútornom fungovaní procesora. ARM používa 64-bitové FPU už od doby pred ARM64 (64-bitový ARM procesor).
Všeobecné výhody a nevýhody
Pokiaľ porovnáme inak identické 32bit a 64bit architektúry, všeobecne nie sú až také rozdielne. To je jeden z dôvodov všeobecného zmätenia verejnosti hľadajúceho dôvod, prečo sa Apple presúva na 64bit aj v mobilných zariadeniach. Všetko však plynie z konkrétnych parametrov A7 (ARM64) procesora a toho, ako ho Apple využíva, nie iba z toho, že procesor má 64-bitovú architektúru.
Avšak keď sa napriek tomu pozrieme na rozdiely týchto dvoch architektúr, niekoľko rozdielov nájdeme. Ten očividný je, že 64-bitové celočíselné registre vedia efektívnejšie pracovať so 64-bitovými celými číslami. Aj predtým s nimi išlo pracovať na 32-bitovom procesore, avšak väčšinou to znamenalo ich rozdeliť na 32-bitové dlhé kusy, čo spôsobovalo pomalšie výpočty. 64-bitový procesor teda všeobecne dokáže počítať so 64-bitovými typmi rovnako rýchlo ako s 32-bitovými. Z toho vyplýva, že aplikácie valne využívajúce 64-bitové typy môžu pracovať oveľa rýchlejšie na 64-bitovom procesore.
Hoci 64bit nijako neovplyvňuje celkové množstvo RAM pamäte, ktorú môže procesor využiť, môže zjednodušiť prácu s veľkými časťami RAM pamäte v jednom programe. Každý jeden program bežiaci na 32-bitovom procesore má iba asi 4 GB adresného miesta. Keď vezmeme do úvahy, že operačný systém a štandardné knižnice niečo zaberú, zostane programu niekde medzi 1–3 GB na aplikačné použitie. Ak má však 32-bitový systém viac ako 4 GB RAM, využitie tejto pamäte je trochu zložitejšie. Musíme sa uchýliť k donúteniu operačného systému, aby mapoval tieto väčšie časti pamäte pre náš program (virtualizácia pamäte), alebo môžeme rozdeliť program na viac procesov (kde má každý proces opäť teoreticky 4 GB pamäte k dispozícii na priame adresovanie).
Tieto „hacky“ sú však natoľko náročné a pomalé, že ich minimum aplikácií používa. V praxi si na 32-bitovom procesore každý program využije len svoje 1-3 GB pamäte a viac dostupné RAM môžeme uplatniť v behu viacerých programov zároveň či využitie tejto pamäte ako vyrovnávacie (cachovanie). Tieto použitia sú praktické, avšak chceli by sme, aby mohol každý program jednoducho využiť väčšie kusy pamäte ako 4 GB.
Teraz sa dostávame k častému (fakticky zlému) tvrdeniu, že bez viac ako 4 GB pamäte je 64-bitová architektúra zbytočná. Väčší adresný priestor je totiž užitočný aj na systéme s menším množstvom pamäte. Súbory zmapované do pamäte sú praktický nástroj, kedy je časť obsahu súboru logicky prepojená s pamäťou procesu bez toho, aby celý súbor musel byť načítaný v pamäti. Systém tak môže napr. postupne spracovávať veľké súbory aj mnohokrát väčšie, než je kapacita RAM. Na 32-bitovom systéme takto veľké súbory nemožno spoľahlivo namapovať do pamäte, oproti tomu na 64-bitovom je to hračka, vďaka oveľa väčšiemu adresnému priestoru.
Väčšia veľkosť ukazovateľov však prináša aj jednu veľkú nevýhodu: inak identické programy potrebujú viac pamäte na 64-bitovom procesore (niekam sa tieto väčšie ukazovatele totiž musia ukladať). Keďže sú ukazovatele častou súčasťou programov, tento rozdiel môže zaťažiť cache, ktorá na oplátku spôsobí pomalší chod celého systému. Z perspektívy teda vidíme, že ak by sme iba zmenili architektúru procesora na 64-bitovú, v skutočnosti by sa celý systém spomalil. Tento faktor teda musí byť vyvážený väčším množstvom optimalizácií na iných miestach.
ARM64
A7, 64-bitový procesor poháňajúci nový iPhone 5s, nie je len bežný ARM procesor so širšími registrami. ARM64 obsahuje zásadné vylepšenia oproti staršej, 32-bitovej verzii.
register
ARM64 poníma dvojnásobný počet celočíselných registrov ako 32-bitový ARM (pozor, nepliesť počet a šírku registrov – o šírke sme hovorili v sekcii „64 bitov“. ARM64 teda má ako dvakrát širšie registre, tak ich má dvakrát viac). 32-bitový ARM má 16 celočíselných registrov: jeden programový čítač (PC – obsahuje číslo aktuálnej inštrukcie), stack ukazovateľ (ukazovateľ na prebiehajúcu funkciu), link register (ukazovateľ na návrat po skončení funkcie), a zvyšných 13 sú na aplikačné použitie. ARM64 má však 32 celočíselných registrov, z toho jeden nulový register, link register, ukazovateľ na rámec (podobný ako stack ukazovateľ) a jeden rezervovaný do budúcnosti. To nám necháva 28 registrov na aplikačné použitie, viac ako dvojnásobok 32-bitového ARMu. Zároveň ARM64 zdvojnásobil počet registrov pre čísla s plávajúcou desatinnou čiarkou (FPU) zo 16 na 32 128-bitových registrov.
V čom je však počet registrov taký dôležitý? Pamäť je všeobecne pomalšia ako výpočty procesora a čítanie/zápis môžu trvať veľmi dlho. Tým by musel rýchly procesor stále čakať na pamäť a narazili by sme na prirodzenú hranicu rýchlosti systému. Procesory sa tento handicap snažia skryť vrstvami vyrovnávacích pamätí, avšak aj tá najrýchlejšia (L1) je stále pomalšia ako výpočet procesora. Registre sú však pamäťové bunky priamo v procesore a ich čítanie/zápis sú dostatočne rýchle na to, aby procesor nespomaľovali. Počet registrov teda prakticky znamená množstvo tej najrýchlejšej pamäte pre výpočty procesora, čím značne ovplyvňuje rýchlosť celého systému.
Táto rýchlosť zároveň potrebuje dobrú podporu optimalizácie od kompilátora, aby jazyk vedel tieto registre využiť a nemusel všetko ukladať do všeobecnej aplikačnej (tej pomalej) pamäte.
Inštrukčná sada
ARM64 tiež prináša zásadné zmeny inštrukčnej sady. Inštrukčná sada je množina atomických operácií, ktoré procesor vie vykonať (napr. ‚ADD registr1 registr2' spočíta čísla v dvoch registroch). Funkcie dostupné jednotlivým jazykom sú zložené z týchto inštrukcií. Zložitejšie funkcie musia vykonať viac inštrukcií, môžu byť preto pomalšie.
Novinkami v ARM64 sú inštrukcie pre AES šifrovanie, SHA-1 a SHA-256 hashovacie funkcie. Namiesto zložitej implementácie teda bude iba jazyk volať túto inštrukciu – čo prinesie obrovské zrýchlenie výpočtu takýchto funkcií a dúfajme aj pridanú bezpečnosť v aplikáciách. Napr. nové Touch ID v šifrovaní tiež využíva tieto inštrukcie, čím umožňuje skutočnú rýchlosť a bezpečnosť (pre napadnutie by teoreticky musel útočník pozmeniť samotný procesor, aby sa k dátam dostal – čo je prinajmenšom nepraktické vzhľadom na jeho miniatúrne rozmery).
Kompatibilita s 32bit
Je dôležité spomenúť, že A7 vie plne bežať v 32-bitovom režime bez potreby emulácie. Znamená to, že nový iPhone 5s vie spustiť aplikácie kompilované na 32-bitový ARM bez akéhokoľvek spomalenia. Avšak potom nemôže využiť nové funkcie ARM64, teda sa vždy oplatí urobiť špeciálny build práve pre A7, ktorý by mal bežať oveľa rýchlejšie.
Runtime zmeny
Runtime sa nazýva kód pridávajúci programovaciemu jazyku funkcie, ktoré je schopný využiť počas chodu aplikácie, až po preklade. Keďže Apple nepotrebuje zachovať kompatibilitu aplikácií (že by 64bit binárka bežala na 32bit), mohli si dovoliť urobiť pár ďalších vylepšení jazyka Objective-C.
Jednou z nich je tzv. tagged pointer (označený ukazovateľ). Bežne sa objekty a ukazovatele na tieto objekty ukladajú v odlišných častiach pamäte. Avšak nové typy ukazovateľov umožňujú triedam s málo dátami ukladať objekty priamo v ukazovateli. Tento krok eliminuje potrebu alokovať pamäť priamo pre objekt, stačí vytvoriť ukazovateľ a objekt v ňom. Tagged pointers sú podporované iba v 64-bitovej architektúre aj kvôli tomu, že v 32-bitovom pointere už nie je dosť miesta na uloženie dostatku užitočných dát. Preto iOS, na rozdiel od OS X, zatiaľ túto funkciu nepodporovalo. S príchodom ARM64 sa to však mení a iOS sa aj v tomto ohľade porovnalo s OS X.
Hoci sú ukazovatele dlhé 64 bitov, na ARM64 sa využije iba 33 bitov na vlastnú adresu ukazovateľa. A ak sme schopní spoľahlivo odmaskovať zvyšok bitov ukazovateľa, môžeme toto miesto využiť na uloženie ďalších dát - ako v prípade spomínaných tagged pointers. Koncepčne ide o jednu z najväčších zmien v histórii Objective-C, hoci to nie je marketingovo využiteľná funkcia – väčšina používateľov sa teda nedozvie, ako vpred Apple Objective-C ťahá.
Čo sa týka užitočných dát, ktoré sa dajú uložiť do zvyšného miesta takého tagged pointeru, Objective-C ho napríklad novo využíva na uloženie tzv. referencie count (počtu referencií). Predtým sa referencie count ukladal v odlišnom mieste v pamäti, v hashovacej tabuľke pre to pripravenú, avšak to v prípade veľkého množstva alloc/dealloc/retain/release volania mohlo celý systém spomaľovať. Tabuľka sa totiž musela kvôli vláknovej bezpečnosti zamykať, teda dvom objektom v dvoch vláknach nemohol byť zároveň menený referencie count. Avšak novo sa táto hodnota vloží do zvyšku tzv. isa ukazovatele. Ide o ďalšiu nenápadnú, avšak do budúcna obrovskú výhodu a zrýchlenie. To by však v 32-bitovej architektúre nikdy nemohlo byť dosiahnuté.
Do zvyšného miesta ukazovateľov na objekty sa tiež novo vkladajú informácie o asociovaných objektoch, či je objekt referencovaný slabo, či je potrebné vygenerovať pre objekt destruktor atď. Runtime Objective-C je vďaka týmto informáciám schopný zásadne zrýchliť beh, čo sa prejaví v rýchlosti každej aplikácie. Z testovania to znamená asi 40-50% zrýchlenie všetkých memory management volaní. Len prechodom na 64-bitové ukazovatele a využitím tohto nového priestoru.
Záver
Hoci sa budú konkurenti snažiť rozšíriť názor, že prechod na 64-bitovú architektúru je zbytočný, vy už budete vedieť, že ide len o veľmi neinformovaný názor. Je pravda, že samotný prechod na 64bit bez toho, aby ste tomu prispôsobili jazyk či aplikácie, naozaj nič neznamená – ba dokonca celý systém spomalí. Ale nový A7 využíva modernú ARM64 s novou inštrukčnou sadou a Apple si dal prácu zmodernizovať celý jazyk Objective-C a využiť nové možnosti – z toho plynie sľubované zrýchlenie.
Tu sme spomenuli veľké množstvo dôvodov, prečo je 64-bitová architektúra správnym krokom dopredu. Ide o ďalšiu revolúciu „pod kapotou“, vďaka ktorej sa Apple bude snažiť naďalej udržať na špici nielen dizajnom, užívateľským rozhraním a bohatým ekosystémom, ale hlavne najmodernejšími technológiami na trhu.
Veľa neinforomovaných Android/Samsung ľudí by si malo tento článok prečítať a potom sa hanbiť v koute.
No, musíme s nimi mať súcit. Roky ospravedlňovali tragické UX a UI Androidu tým, že majú ten technologicky najpokročilejší OS s featuretkami a teraz zistili, že sú zase roky pozadu :)
Ak človek nie je ovce a počúvač reklám (a má na to) tak po osobnej skúsenosti si môže urobiť vlastný názor :-).
Ja skúsim takmer všetku konkurenciu a robím si vlastný názor.
Pre mňa je treba nový super vykonaný mobil zbytočnej pretoze na ňom najrobím nič veľkého. Tzn. stačí mi menší výkon za menšiu cenu ;-). Možno by som bral radšej pomalšie s väčšou baterkou.
Na druhú stranu pri iPade kde parim hry by sa hodil ten nový procak :-).
Som Android/HTC :) nakoľko IT ma celkom baví a rootovať a prerobiť si kvalitné HW na rýchlu stíhačku je môj taký koníček. A to mi iOS nedovolí. (Ani to nie je potreba. Viac menej iOS je robený tak aby všetko fungovalo ako malo a človek tam nemusel nič robiť.. Až ma prestane baviť sa hrať tak kúpim apple a zdarec). Ale neviem prečo sa tak furt ako decká napádate. Applu ide úplne o niečo ako Androidu. Je to ako porovnávať Demokraciu s Diktátorstvom a podobne… Sledoval som konferenciu pri predstavovaní iPhone 5S a napriek tomu, že nič od applu nevlastním sa mi 64bit a ďalšie vylepšenia čo prišli páčili. Ale nie, pretože som zakomplexovaný honimír trtko čo sedí za pc a naháňa nad Androidom alebo Applem ale pretože vidím ten POKROK, ktorý nenechá na seba dlho čakať. Ľudia by mali začať poriadne makať aby nemali čas riešiť hovadiny keď to poviem slušne.
konštruktívny príspevok od druhej strany :) kiez by otvorilo oči aj zvysnych 99% android positive
možno by sa malo najskôr prebrať 99% apple fanatikov, potom sa môžeme konštruktívne baviť
Veľa zložité veci vysvetlené jednoducho… vďaka
Super článok! Áno, súhlasím, že používatelia Android/WP by si tento článok mali povinne prečítať. Namiesto trolovania a múdrych rečí o tom „ako je 64b v mobiloch zbytočný“…
asi si wp nikdy v ruke nemal, inak by si toto nemlel
Samsung od svojich prvých úspechov na trhu mobilov nerobí nič iné ako špiní konkurenciu, ale vo svojej podstate kráča celú tú dobu v jej šľapajach. Apple bol vždy vzorom pre technologické firmy a pokiaľ sa budú tieto firmy sústrediť iba na zosmiešňovanie a neustále dezinformovanie zákazníkov, čoskoro narazia. Apple si šiel vždy svojou cestou a vždy išlo o veľmi dobré načasovanie, čo mnohým konkurenčným firmám v odvetví chýba.
Dalo by sa povedať, že Samsung sa vezie na vlne a využíva svoje možnosti. Stavil na Android, má skvelý HW, veľa vecí si vyrába sám, má slušnú podporu. A ako každá dravá Ázijská spoločnosť, využíva všetky možnosti reklamy. A samozrejme, že aj vykráda, kopíruje. Čo vie „šikmooký“ dobre, je kopírovanie. Veľmi dobre majú spočítané, že je to oveľa lacnejšie, než ísť svojou cestou, krok za krokom. A ako silná spoločnosť si toto môže jednoducho dovoliť. Zatiaľ...
Ja len nechpom načo je komu tá rýchlosť telefónu, stále sa zvyšujúca, dajte sem nejaké príklady na čo to využívate, pomaly mi to nedáva zmysel zvyšovať mobilný výkon ale teda odstránim slovo marketing.
Hry, zle optimalizované hry. Tiež Transport Tycoon na iPad 3 nebezi tak plynulo av takom rozlisení ako bez na desktope. Príklad.
Ja len nechápam načo je komu tá rýchlosť telefónu, stále sa zvyšujúca, dajte sem nejaké príklady na čo to využívate, pomaly mi to nedáva zmysel zvyšovať mobilný výkon ak teda odstránim z toho slovo marketing.
Na spracovanie videa, zvuku a obrazkov. A ďalej na hry.
Kto používa iPhone len na telefonovanie, sms, a občas cita alebo posiela maily a občas surfuje po internete tak mu stačí iPhone 4. Verím, že takých užívateľov je veľa. Najlepsi telefón na svete nepotrebuje kazdy :-)
ovce
Večný závod medzi hardvérom a softvérom vám nič nerika? Toto mi trochu pripomína koniec 19. storočia, keď fyzici tej doby povedali, že všetko z fyziky už bolo objavené a nie je potreba pokračovať (dekadu pred teóriou relativity a tri pred kvantovou teóriou).
Hon za lepsím nikdy nekonci. Len chvili vedie softvér a chvili hardvér. Ale ak sa jeden zasekne, druhému to nedovoli ísť dal. Nebudme tak sebeckí k našim potomkom :) Takže k vášmu komentárovi – rýchlejší telefón umožní výkonnejšie aplikácie, ktoré budú môcť robiť zase o kus viac ako predtým. A raz veci, na ktoré zatiaľ nestačia ani dnešné počítače. Budúcnosť je vzrušujúca.
Presne tak :)
Pekný článok, však nechápem, že Apple nedal do A7 2GB pamäte RAM. Áno, multitasking iOS nie je taký, že by bola 2GB nutná potreba, ale vzhľadom k dvojnásobnej dĺžke ukazovateľa do pamäte by boli oveľa vhodnejšie.
Ale inak súhlasím s tým, že 64bit procesor je do mobilu „zbytočný“, rovnako ako bol zbytočný retina displej alebo optická mys miesto guľôčkové – všetky tieto vynálezy boli označené za „zbytočné“, podľa mňa je však správne slovo „nadčasové“, lebo raz prísť musí a Apple sa nebojí prísť s niečím novým.
S tým úplne súhlasím. Bohužiaľ ani „zbytočný“ nie je presný výraz. Zbytočný znamená niečo, ktorého prednosť ľudí nepozná. To rozhodne nie je pravda. Rýchlosť možno takú rýchlosť nepotrebuje, ale rozhodne ju spozná. A az software dozrie hardvér, opäť bude kde zlepsovať.
Jasné, ja som za, myslím to tak, že iP5 je naozaj dosť rýchly smaryphone, takže by 5S nemusel byť vôbec 64bit. Ale raz s tým niekto zase prísť musel a bol to Apple a bolo to teraz. Čo sa pamätám, tak aj experti zvlatla, ako budú 64bit procesory zbytočné aj v počítačoch.
Pre mňa, ako pre IT laika čo z matiky skoro prepadal, je dôležitý ten záver. Celý článok (podložený komentármi) na mňa pôsobí dosť zasvätene a hoci to nebudem vedieť vysvetliť, je A7 so 64-bitovou architektúrou krokom vpred. Vďaka za informácie.
Upravil by som názov článku, pretože o marketingový ťah ide. Každá inovácia je vo svojej podstate marketingovým ťahom. :-)
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 pre testoch. Nech. To je marketing, aj keď síce áno, zavádzajúci, čo by im len tak prechádzať nemalo ;)