Mike Ash posvetil na svojem blogu praktične posledice prehoda na 64-bitno arhitekturo v iPhone 5S. Ta članek temelji na njegovih ugotovitvah.
Razlog za to besedilo je predvsem v veliki količini dezinformacij, ki se širijo o tem, kaj novi iPhone 5s s 64-bitnim procesorjem ARM dejansko pomeni za uporabnike in trg. Tukaj bomo poskušali ponuditi objektivne informacije o uspešnosti, zmožnostih in posledicah tega prehoda za razvijalce.
"64 bit"
Oznaka "X-bit" se lahko nanaša na dva dela procesorja - na širino celih registrov in širino kazalcev. Na srečo so pri večini sodobnih procesorjev te širine enake, tako da v primeru A7 to pomeni 64-bitne cele registre in 64-bitne kazalce.
Vendar je enako pomembno poudariti, kaj "64bit" NE pomeni: Velikost fizičnega naslova RAM. Število bitov za komunikacijo z RAM-om (torej količino RAM-a, ki ga naprava lahko podpira) ni povezano s številom bitov CPU. Procesorji ARM imajo med 26- in 40-bitnimi naslovi in jih je mogoče spremeniti neodvisno od preostalega sistema.
- Velikost podatkovnega vodila. Količina podatkov, prejetih iz RAM-a ali medpomnilnika, je podobno neodvisna od tega faktorja. Posamezna navodila procesorja lahko zahtevajo različne količine podatkov, vendar se pošiljajo v kosih ali pa iz pomnilnika prejmejo več, kot je potrebno. Odvisno je od velikosti kvantuma podatkov. iPhone 5 podatke iz pomnilnika že sprejema v 64-bitnih kvantih (in ima 32-bitni procesor), srečamo pa lahko velikosti do 192 bitov.
- Vse, kar je povezano s plavajočo vejico. Velikost takih registrov (FPU) je spet neodvisna od notranjega delovanja procesorja. ARM uporablja 64-bitni FPU že pred ARM64 (64-bitni procesor ARM).
Splošne prednosti in slabosti
Če primerjamo sicer enaki 32-bitni in 64-bitni arhitekturi, na splošno nista tako različni. To je eden od razlogov za splošno zmedo javnosti, ki išče razlog, zakaj Apple prehaja na 64bit tudi v mobilnih napravah. Vendar vse izhaja iz posebnih parametrov procesorja A7 (ARM64) in tega, kako ga Apple uporablja, ne le iz dejstva, da ima procesor 64-bitno arhitekturo.
Vendar, če še vedno pogledamo razlike med tema dvema arhitekturama, bomo našli več razlik. Očitno je, da lahko 64-bitni registri celih števil učinkoviteje obravnavajo 64-bitna cela števila. Že prej je bilo z njimi mogoče delati na 32-bitnih procesorjih, vendar je to običajno pomenilo razdelitev na 32-bitne dele, kar je povzročilo počasnejše izračune. Torej lahko 64-bitni procesor na splošno računa s 64-bitnimi tipi enako hitro kot z 32-bitnimi. To pomeni, da lahko aplikacije, ki običajno uporabljajo 64-bitne vrste, delujejo veliko hitreje na 64-bitnem procesorju.
Čeprav 64-bit ne vpliva na skupno količino RAM-a, ki ga procesor lahko uporablja, lahko olajša delo z velikimi kosi RAM-a v enem programu. Vsak posamezen program, ki se izvaja na 32-bitnem procesorju, ima samo približno 4 GB naslovnega prostora. Če upoštevamo, da operacijski sistem in standardne knjižnice nekaj zavzamejo, ostane programu nekje med 1-3 GB za uporabo aplikacij. Če pa ima 32-bitni sistem več kot 4 GB RAM-a, je uporaba tega pomnilnika nekoliko bolj zapletena. Zateči se moramo k prisili operacijskega sistema, da preslika te večje kose pomnilnika za naš program (virtualizacija pomnilnika), ali pa lahko program razdelimo na več procesov (kjer ima vsak proces spet teoretično 4 GB pomnilnika, ki je na voljo za neposredno naslavljanje).
Vendar so ti "heki" tako težki in počasni, da jih uporablja minimalno število aplikacij. V praksi bo na 32-bitnem procesorju vsak program uporabljal samo svojih 1-3 GB pomnilnika, več razpoložljivega RAM-a pa je mogoče uporabiti za izvajanje več programov hkrati ali ta pomnilnik uporabiti kot medpomnilnik (predpomnilnik). Te uporabe so praktične, vendar želimo, da bi kateri koli program zlahka uporabljal dele pomnilnika, večje od 4 GB.
Zdaj smo prišli do pogoste (pravzaprav napačne) trditve, da je brez več kot 4 GB pomnilnika 64-bitna arhitektura neuporabna. Večji naslovni prostor je uporaben tudi v sistemu z manj pomnilnika. Datoteke s preslikavo pomnilnika so priročno orodje, kjer je del vsebine datoteke logično povezan s pomnilnikom procesa, ne da bi bilo treba celotno datoteko naložiti v pomnilnik. Tako lahko sistem na primer postopoma obdela velike datoteke, večkrat večje od kapacitete RAM-a. V 32-bitnem sistemu tako velikih datotek ni mogoče zanesljivo preslikati v pomnilnik, medtem ko je v 64-bitnem sistemu to zaradi veliko večjega naslovnega prostora kos torte.
Vendar pa večja velikost kazalcev prinaša tudi eno veliko slabost: sicer enaki programi potrebujejo več pomnilnika na 64-bitnem procesorju (te večje kazalce je treba nekje shraniti). Ker so kazalci pogost del programov, lahko ta razlika obremeni predpomnilnik, kar posledično povzroči počasnejše delovanje celotnega sistema. Torej v perspektivi lahko vidimo, da če bi samo spremenili arhitekturo procesorja na 64-bitno, bi to dejansko upočasnilo celoten sistem. Zato je treba ta dejavnik uravnotežiti z več optimizacijami na drugih mestih.
ARM64
A7, 64-bitni procesor, ki poganja novi iPhone 5s, ni le navaden procesor ARM s širšimi registri. ARM64 vsebuje velike izboljšave v primerjavi s starejšo, 32-bitno različico.
registra
ARM64 vsebuje dvakrat več celih registrov kot 32-bitni ARM (pazite, da ne zamenjate števila in širine registrov – o širini smo govorili v razdelku »64-bitni«. Torej ima ARM64 dvakrat širše registre in dvakrat več registri). 32-bitni ARM ima 16 celih registrov: en programski števec (PC - vsebuje številko trenutnega ukaza), kazalec sklada (kazalec na funkcijo v teku), povezovalni register (kazalec na vrnitev po koncu funkcije), preostalih 13 pa je za uporabo v aplikaciji. Vendar ima ARM64 32 celih registrov, vključno z enim ničelnim registrom, povezovalnim registrom, kazalcem okvirja (podobno kazalcu sklada) in enim, ki je rezerviran za prihodnost. To nam pušča 28 registrov za uporabo aplikacij, več kot dvakrat več kot 32-bitni ARM. Hkrati je ARM64 podvojil število registrov števil s plavajočo vejico (FPU) s 16 na 32 128-bitnih registrov.
Toda zakaj je število registrov tako pomembno? Pomnilnik je na splošno počasnejši od izračunov procesorja in branje/pisanje lahko traja zelo dolgo. Zaradi tega bi moral hitri procesor še naprej čakati na pomnilnik in dosegli bi naravno omejitev hitrosti sistema. Procesorji poskušajo to pomanjkljivost skriti s plastmi medpomnilnikov, vendar je tudi najhitrejši (L1) še vedno počasnejši od procesorjevega izračuna. So pa registri pomnilniške celice neposredno v procesorju in njihovo branje/pisanje je dovolj hitro, da ne upočasni procesorja. Število registrov praktično pomeni količino najhitrejšega pomnilnika za izračune procesorja, kar močno vpliva na hitrost celotnega sistema.
Hkrati ta hitrost potrebuje dobro optimizacijsko podporo prevajalnika, tako da lahko jezik uporablja te registre in mu ni treba shranjevati vsega v splošnem aplikacijskem (počasnem) pomnilniku.
Komplet navodil
ARM64 prinaša tudi velike spremembe v naboru navodil. Nabor ukazov je nabor atomskih operacij, ki jih lahko izvaja procesor (npr. 'ADD register1 register2' sešteje številke v dveh registrih). Funkcije, ki so na voljo za posamezne jezike, so sestavljene iz teh navodil. Bolj zapletene funkcije morajo izvajati več ukazov, zato so lahko počasnejše.
Novost v ARM64 so navodila za šifriranje AES, zgoščene funkcije SHA-1 in SHA-256. Namesto zapletene implementacije bo torej ta ukaz klical le jezik - kar bo prineslo ogromno pospešitev računanja takšnih funkcij in, upajmo, dodano varnost v aplikacijah. Npr. novi Touch ID ta navodila uporablja tudi pri šifriranju, kar omogoča resnično hitrost in varnost (teoretično bi moral napadalec spremeniti sam procesor za dostop do podatkov – kar je vsaj nepraktično glede na njegovo miniaturno velikost).
Združljivost z 32bit
Pomembno je omeniti, da lahko A7 v celoti deluje v 32-bitnem načinu brez potrebe po emulaciji. To pomeni, da lahko novi iPhone 5s poganja aplikacije, prevedene na 32-bitni ARM brez kakršne koli upočasnitve. Vendar takrat ne more uporabljati novih funkcij ARM64, zato se vedno splača narediti posebno gradnjo samo za A7, ki naj bi delovala veliko hitreje.
Spremembe izvajalnega časa
Runtime je koda, ki programskemu jeziku doda funkcije, ki jih ta lahko uporablja med izvajanjem aplikacije, do prevajanja. Ker Appleu ni treba vzdrževati združljivosti aplikacij (da 64-bitna binarna datoteka deluje na 32-bitni), si lahko privoščijo še nekaj izboljšav jezika Objective-C.
Eden od njih je t.i označen kazalec (označen indikator). Običajno so objekti in kazalci na te objekte shranjeni v ločenih delih pomnilnika. Vendar novi tipi kazalcev omogočajo razredom z malo podatkov shranjevanje objektov neposredno v kazalec. Ta korak odpravlja potrebo po dodeljevanju pomnilnika neposredno za objekt, samo ustvarite kazalec in objekt v njem. Označeni kazalci so podprti le v 64-bitni arhitekturi tudi zaradi dejstva, da v 32-bitnem kazalcu ni več dovolj prostora za shranjevanje dovolj uporabnih podatkov. Zato iOS za razliko od OS X še ni podpiral te funkcije. Vendar se s prihodom ARM64 to spreminja in iOS je tudi v tem pogledu dohitel OS X.
Čeprav so kazalci dolgi 64 bitov, se na ARM64 za lastni naslov kazalca uporablja le 33 bitov. In če nam uspe zanesljivo razkriti ostale bite kazalca, lahko ta prostor uporabimo za shranjevanje dodatnih podatkov – kot v primeru omenjenih označenih kazalcev. Konceptualno je to ena največjih sprememb v zgodovini Objective-C, čeprav ni tržna lastnost – zato večina uporabnikov ne bo vedela, kako Apple premika Objective-C naprej.
Kar zadeva uporabne podatke, ki jih je mogoče shraniti v preostali prostor tako označenega kazalca, jih na primer Objective-C zdaj uporablja za shranjevanje t.i. referenčno število (število referenc). Prej je bilo štetje sklicev shranjeno na drugem mestu v pomnilniku, v zanj pripravljeni zgoščeni tabeli, vendar bi to lahko upočasnilo celoten sistem v primeru velikega števila klicev alloc/dealloc/retain/release. Tabela je morala biti zaklenjena zaradi varnosti niti, tako da števila referenc dveh objektov v dveh nitih ni bilo mogoče spremeniti hkrati. Je pa ta vrednost na novo vstavljena v preostalo t.i ISA indikatorji. To je še ena neopazna, a velika prednost in pospešek v prihodnosti. Vendar tega nikoli ne bi bilo mogoče doseči v 32-bitni arhitekturi.
Na preostalo mesto kazalcev na objekte so na novo vstavljene tudi informacije o povezanih objektih, ali je objekt šibko referenciran, ali je treba za objekt ustvariti destruktor itd.. Zahvaljujoč tem podatkom Objective-C runtime lahko temeljito pospeši čas izvajanja, kar se odraža v hitrosti posamezne aplikacije. Iz testiranja to pomeni približno 40-50-odstotno pospešitev vseh klicev upravljanja pomnilnika. Samo s preklopom na 64-bitne kazalce in uporabo tega novega prostora.
Zaključek
Čeprav bodo tekmeci skušali širiti idejo, da je prehod na 64-bitno arhitekturo nepotreben, boste že vedeli, da je to le zelo nepoučeno mnenje. Res je, da preklop na 64-bit brez prilagajanja jezika ali aplikacij pravzaprav ne pomeni ničesar – celo upočasni celoten sistem. Toda novi A7 uporablja sodoben ARM64 z novim naborom navodil in Apple se je potrudil posodobiti celoten jezik Objective-C in izkoristiti nove zmožnosti - od tod tudi obljubljeno pospešitev.
Tukaj smo omenili veliko razlogov, zakaj je 64-bitna arhitektura pravi korak naprej. Gre za še eno revolucijo »pod pokrovom«, zahvaljujoč kateri bo Apple poskušal ostati v ospredju ne le z dizajnom, uporabniškim vmesnikom in bogatim ekosistemom, temveč predvsem z najsodobnejšimi tehnologijami na trgu.
Veliko neinformiranih Android/Samsung ljudi bi moralo prebrati ta članek in se potem skriti v kot.
Pa se jim moramo smiliti. Dolga leta so opravičevali tragični UX in UI Androida s tem, da imajo tehnološko najnaprednejši OS s funkcijami, zdaj pa so ugotovili, da spet zaostajajo :)
Če človek ni ovca in posluša reklame (in mu gre), potem si lahko po osebnih izkušnjah ustvari svoje mnenje :-).
Preizkusim skoraj vso konkurenco in si ustvarim svoje mnenje.
Zame potrebujem nov super zmogljiv mobilni telefon, ker zanj ne porabim veliko. To je Potrebujem manj zmogljivosti za nižjo ceno ;-). Mogoče bi raje imel počasnejšega z večjo baterijo.
Po drugi strani pa bi bil nov procak uporaben za iPad kjer je ogromno igric :-).
Jaz sem Android/HTC :), ker mi je IT zelo zabavno, rootanje in pretvorba visokokakovostnega HW v hitrega bojlerja pa je moj hobi. In iOS mi tega ne dovoli. (Sploh ni nujno. Bolj ali manj je iOS narejen tako, da vse deluje kot mora in ti tam ni treba nič početi. Ko bom nehal uživati v igranju, bom kupil jabolko in užival). Ampak ne vem zakaj se kar naprej napadate kot otroci. Apple je popolnoma podoben Androidu. To je tako, kot bi primerjal Demokracijo z Diktaturo in podobno... Gledal sem predstavitveno konferenco iPhone 5S in kljub temu, da nimam ničesar od Appla, mi je bil všeč 64bit in druge izboljšave, ki so prišle. Pa ne zato, ker sem kompleksen honimír trtko, ki sedi za PC-jem in se peha za Androidom ali Applom, ampak zato, ker vidim NAPREDEK, ki me ne bo pustil dolgo čakati. Ljudje bi morali začeti res trdo delati, da ne bi imeli časa ukvarjati se s sranjem, vljudno rečeno.
konstruktiven prispevek z druge strani :) kiez bi odprlo oči preostalim 99% android pozitivnim
morda bi se morali najprej pogovoriti o 99% fanatikov apple, potem pa lahko imamo konstruktiven pogovor
zelo kompleksne stvari razložene preprosto... hvala
Odličen članek! Da, strinjam se, da morajo uporabniki Android/WP ta članek obvezno prebrati. Namesto trolanja in pametovanja o tem, "kako je 64b neuporaben v mobitelih"...
verjetno nikoli nisi imel wp v roki, sicer tega ne bi imel
Samsung od prvih uspehov na mobilnem trgu ni počel nič drugega kot blatil konkurenco, v bistvu pa je ves ta čas sledil njeni poti. Apple je bil vedno vzor tehnološkim podjetjem in če se bodo osredotočala le na norčevanje in nenehno napačno informiranje kupcev, bodo kmalu spotaknila. Apple je vedno šel svojo pot in vedno je šlo za zelo dober timing, ki ga številnim konkurenčnim podjetjem v panogi primanjkuje.
Lahko bi rekli, da Samsung jezdi na valu in izkorišča njegove možnosti. Stavi na Android, ima super HW, veliko stvari naredi sam, ima spodobno podporo. In kot vsako grabežljivo azijsko podjetje uporablja vse možnosti oglaševanja. In seveda krade in kopira. Tisto, v čemer je "poševni" dober, je kopiranje. Dobro so izračunali, da je to veliko ceneje kot iti po svoje, korak za korakom. In kot močno podjetje si to preprosto lahko privošči. Vendar…
Samo ne razumem zakaj se hitrost telefona vedno veča, daj mi nekaj primerov za kaj ga uporabljaš, počasi se mi zdi nesmiselno povečevati zmogljivost mobitela, bom pa črkal besedo marketing.
Igre, slabo optimizirane igre. Poleg tega Transport Tycoon na iPadu 3 ne deluje tako gladko in v enaki ločljivosti kot na namizju. Primer.
Samo ne razumem zakaj se telefon stalno povečuje, daj mi nekaj primerov za kaj ga uporabljaš, počasi se mi zdi nesmiselno povečevati zmogljivost mobitela, če iz njega črtam besedo marketing .
Za obdelavo videa, zvoka in slike. In na igre.
Kdor iPhone uporablja le za telefoniranje, pošiljanje sporočil, občasno branje ali pošiljanje elektronske pošte in občasno brskanje po internetu, bo potreboval iPhone 4. Verjamem, da je takih uporabnikov veliko. Ne potrebuje vsak najboljšega telefona na svetu :-)
ovce
Ali vam fizični kompromis med strojno in programsko opremo ne pomeni nič? To me malo spominja na konec 19. stoletja, ko so takratni fiziki govorili, da je v fiziki že vse odkrito in ni treba nadaljevati (desetletje pred teorijo relativnosti in tri pred kvantno teorijo) .
Gonja za najboljšimi se nikoli ne konča. Včasih vodi programska oprema, včasih pa strojna oprema. A če se eden zatakne, drugega ne izpusti. Ne bomo tako sebični do zanamcev :) Torej na tvoj komentar - hitrejši telefon bo omogočal zmogljivejše aplikacije, ki bodo zmogle veliko več kot pogoni. In nekoč stvari, za katere tudi današnji računalniki niso dovolj. Prihodnost je razburljiva.
točno :)
Lep članek, vendar ne razumem, zakaj Apple ni dal 7 GB RAM-a v A2. Ja, iOS večopravilnost ni takšna, da bi nujno potrebovali 2 GB, a glede na dvakratno dolžino pomnilniškega kazalca bi bil veliko bolj primeren.
Sicer pa se strinjam, da je 64-bitni procesor za mobitel "nepotreben", tako kot je bil nepotreben retina zaslon ali optična miška namesto žogice - vsi ti izumi so bili označeni kot "nepotrebni", a po mojem pravilna beseda je "brezčasen", ker enkrat mora priti in Apple se ne boji pripraviti nečesa novega.
Podpiram to. Na žalost tudi "neuporaben" ni točen izraz. Nepotrebno pomeni nekaj, česar oseba ne pozna prioritete. To vsekakor ne drži. Hitrost morda ne potrebuje takšne hitrosti, vendar jo bo zagotovo prepoznala. In ko bo programska oprema dohitela strojno opremo, bo spet prostor za izboljšave.
Seveda sem za, hočem reči, da je iP5 res precej hiter pametni telefon, tako da 5S sploh ne bi bilo treba imeti 64 bitov. Toda nekega dne se je nekdo spet moral ukvarjati s tem in to je bil Apple in zdaj je bilo. Odkar pomnim, so strokovnjaki govorili tudi o tem, kako bodo 64-bitni procesorji neuporabni tudi v računalnikih.
Zame, kot IT-laika, ki je skoraj padel na maturi, je sklep pomemben. Celoten članek (podkrepljen s komentarji) se mi zdi precej pronicljiv in čeprav ga ne bom znal razložiti, je A7 s 64-bitno arhitekturo korak naprej. Hvala za informacije.
Naslov članka bi uredil, saj gre za marketinško potezo. Vsaka inovacija je v bistvu marketinška poteza. :-)
Jaz ne mislim. Na primer, Samsung uporablja marketinške poteze. Pojavijo se z RAM-om, ki ga iPhone sploh ne potrebuje. Pobegnejo s funkcijami, ki sploh niso uporabne. Njihovo namensko povečanje zmogljivosti procesorja za teste. itd. To je marketing, čeprav ja, zavajajoč, čemur se ne bi smeli kar tako izogniti ;)