Mike Ash posvetio na svom blogu praktične implikacije prelaska na 64-bitnu arhitekturu u iPhoneu 5S. Ovaj se članak oslanja na njegova otkrića.
Razlog za ovaj tekst je uglavnom zbog velike količine dezinformacija koje se šire o tome što novi iPhone 5s sa 64-bitnim ARM procesorom zapravo znači za korisnike i tržište. Ovdje ćemo pokušati donijeti objektivne informacije o izvedbi, mogućnostima i implikacijama ovog prijelaza za programere.
"64 bita"
Dva su dijela procesora na koje se oznaka "X-bit" može odnositi - širina registara cjelobrojnih brojeva i širina pokazivača. Srećom, kod većine modernih procesora te su širine iste, tako da u slučaju A7 to znači 64-bitne cjelobrojne registre i 64-bitne pokazivače.
Međutim, jednako je važno istaknuti što "64bit" NE znači: Veličina fizičke adrese RAM-a. Broj bitova za komunikaciju s RAM-om (dakle, količina RAM-a koju uređaj može podržati) nije povezana s brojem CPU bitova. ARM procesori imaju adrese između 26 i 40 bita i mogu se mijenjati neovisno o ostatku sustava.
- Veličina sabirnice podataka. Količina primljenih podataka iz RAM-a ili međuspremnika također je neovisna o ovom faktoru. Pojedinačne instrukcije procesora mogu zahtijevati različite količine podataka, ali se ili šalju u komadima ili iz memorije primaju više nego što je potrebno. Ovisi o veličini kvantuma podataka. iPhone 5 već prima podatke iz memorije u 64-bitnim kvantima (i ima 32-bitni procesor), a možemo susresti veličine do 192 bita.
- Sve što je povezano s pomičnim zarezom. Veličina takvih registara (FPU) opet je neovisna o unutarnjem radu procesora. ARM koristi 64-bitni FPU od prije ARM64 (64-bitni ARM procesor).
Opće prednosti i nedostaci
Ako usporedimo inače identične 32-bitne i 64-bitne arhitekture, one općenito nisu toliko različite. To je jedan od razloga opće zbunjenosti javnosti koja traži razlog zašto Apple prelazi na 64bit i u mobilnim uređajima. No, sve proizlazi iz specifičnih parametara A7 (ARM64) procesora i načina na koji ga Apple koristi, a ne samo iz činjenice da procesor ima 64-bitnu arhitekturu.
Međutim, ako još uvijek pogledamo razlike između ove dvije arhitekture, pronaći ćemo nekoliko razlika. Očigledno je da 64-bitni registri cijelih brojeva mogu učinkovitije rukovati 64-bitnim cijelim brojevima. I prije je bilo moguće raditi s njima na 32-bitnim procesorima, ali to je obično značilo njihovo dijeljenje na 32-bitne dijelove, što je uzrokovalo sporije izračune. Dakle, 64-bitni procesor općenito može računati sa 64-bitnim tipovima jednako brzo kao i s 32-bitnim. To znači da aplikacije koje općenito koriste 64-bitne vrste mogu raditi mnogo brže na 64-bitnom procesoru.
Iako 64-bitni ne utječe na ukupnu količinu RAM-a koju procesor može koristiti, može olakšati rad s velikim komadima RAM-a u jednom programu. Svaki pojedinačni program koji radi na 32-bitnom procesoru ima samo oko 4 GB adresnog prostora. Uzimajući u obzir da operativni sustav i standardne biblioteke zauzimaju nešto, to programu ostavlja negdje između 1-3 GB za korištenje aplikacije. Međutim, ako 32-bitni sustav ima više od 4 GB RAM-a, korištenje te memorije je malo kompliciranije. Moramo pribjeći prisiljavanju operativnog sustava da mapira ove veće dijelove memorije za naš program (virtualizacija memorije), ili možemo podijeliti program u više procesa (gdje svaki proces opet teoretski ima 4 GB memorije dostupne za izravno adresiranje).
Međutim, ti "hakovi" su toliko teški i spori da ih koristi minimalno aplikacija. U praksi, na 32-bitnom procesoru, svaki program će koristiti samo svojih 1-3 GB memorije, a više dostupnog RAM-a može se koristiti za pokretanje više programa u isto vrijeme ili koristiti ovu memoriju kao međuspremnik (caching). Ove upotrebe su praktične, ali bismo voljeli da svaki program može lako koristiti dijelove memorije veće od 4 GB.
Sada dolazimo do česte (zapravo netočne) tvrdnje da je bez više od 4GB memorije 64-bitna arhitektura beskorisna. Veći adresni prostor koristan je čak i na sustavu s manje memorije. Datoteke s mapiranjem memorije zgodan su alat gdje je dio sadržaja datoteke logički povezan s memorijom procesa bez potrebe za učitavanjem cijele datoteke u memoriju. Tako sustav može, primjerice, postupno obraditi velike datoteke višestruko veće od kapaciteta RAM-a. Na 32-bitnom sustavu tako velike datoteke ne mogu se pouzdano memorijsko preslikati, dok je na 64-bitnom sustavu to jednostavno, zahvaljujući mnogo većem adresnom prostoru.
Međutim, veća veličina pokazivača donosi i jedan veliki nedostatak: inače identični programi trebaju više memorije na 64-bitnom procesoru (ovi veći pokazivači moraju biti negdje pohranjeni). Budući da su pokazivači čest dio programa, ova razlika može opteretiti predmemoriju, što zauzvrat uzrokuje sporiji rad cijelog sustava. Dakle, iz perspektive, možemo vidjeti da ako samo promijenimo arhitekturu procesora na 64-bitnu, to bi zapravo usporilo cijeli sustav. Stoga se ovaj faktor mora uravnotežiti dodatnim optimizacijama na drugim mjestima.
ARM64
A7, 64-bitni procesor koji pokreće novi iPhone 5s, nije samo običan ARM procesor sa širim registrima. ARM64 sadrži velika poboljšanja u odnosu na stariju, 32-bitnu verziju.
registra
ARM64 sadrži dvostruko više cijelih registara od 32-bitnog ARM-a (pazite da ne pomiješate broj i širinu registara - govorili smo o širini u odjeljku "64-bitni". Dakle, ARM64 ima i dvostruko šire registre i dvostruko više registri). 32-bitni ARM ima 16 cjelobrojnih registara: jedan programski brojač (PC - sadrži broj trenutne instrukcije), pokazivač stoga (pokazivač na funkciju u tijeku), registar veze (pokazivač na povratak nakon završetka funkcije), a preostalih 13 je za korištenje aplikacije. Međutim, ARM64 ima 32 cjelobrojna registra, uključujući jedan nulti registar, registar veze, pokazivač okvira (slično pokazivaču stoga) i jedan rezerviran za budućnost. To nam ostavlja 28 registara za korištenje aplikacija, više nego dvostruko više od 32-bitnog ARM-a. U isto vrijeme, ARM64 je udvostručio broj registara brojeva s pomičnim zarezom (FPU) sa 16 na 32 128-bitna registra.
Ali zašto je broj registara toliko važan? Memorija je općenito sporija od CPU izračuna i čitanje/pisanje može trajati jako dugo. Zbog toga bi brzi procesor morao čekati na memoriju i dosegnuli bismo prirodno ograničenje brzine sustava. Procesori pokušavaju sakriti ovaj nedostatak slojevima međuspremnika, ali čak i onaj najbrži (L1) još uvijek je sporiji od proračuna procesora. Međutim, registri su memorijske ćelije izravno u procesoru i njihovo je čitanje/pisanje dovoljno brzo da ne usporavaju procesor. Broj registara praktički znači količinu najbrže memorije za proračune procesora, što uvelike utječe na brzinu cijelog sustava.
U isto vrijeme, ova brzina zahtijeva dobru optimizacijsku podršku prevoditelja, tako da jezik može koristiti te registre i ne mora sve pohranjivati u memoriju opće aplikacije (sporu).
Skup instrukcija
ARM64 također donosi velike promjene u skupu instrukcija. Skup instrukcija je skup atomskih operacija koje procesor može izvesti (npr. 'ADD register1 register2' zbraja brojeve u dva registra). Funkcije dostupne pojedinim jezicima sastoje se od ovih uputa. Složenije funkcije moraju izvršavati više instrukcija, pa mogu biti sporije.
Novo u ARM64 su upute za AES enkripciju, SHA-1 i SHA-256 hash funkcije. Dakle, umjesto složene implementacije, samo će jezik pozivati ovu instrukciju - što će donijeti veliko ubrzanje računanja takvih funkcija i nadamo se dodatnu sigurnost u aplikacijama. npr. novi Touch ID također koristi ove upute u enkripciji, što omogućuje stvarnu brzinu i sigurnost (u teoriji, napadač bi morao modificirati sam procesor da pristupi podacima - što je u najmanju ruku nepraktično s obzirom na njegovu minijaturnu veličinu).
Kompatibilnost s 32-bitnim
Važno je spomenuti da A7 može u potpunosti raditi u 32-bitnom načinu rada bez potrebe za emulacijom. To znači da novi iPhone 5s može pokretati aplikacije kompajlirane na 32-bitnom ARM-u bez ikakvog usporavanja. Međutim, tada ne može koristiti nove ARM64 funkcije, pa se uvijek isplati napraviti posebnu verziju samo za A7, koja bi trebala raditi puno brže.
Promjene vremena izvođenja
Runtime je kod koji programskom jeziku dodaje funkcije koje on može koristiti dok je aplikacija pokrenuta, sve do prijevoda. Budući da Apple ne treba održavati kompatibilnost aplikacija (da 64-bitna binarna datoteka radi na 32-bitnoj), mogli su si priuštiti još nekoliko poboljšanja jezika Objective-C.
Jedan od njih je i tzv označeni pokazivač (označeni indikator). Obično su objekti i pokazivači na te objekte pohranjeni u zasebnim dijelovima memorije. Međutim, novi tipovi pokazivača omogućuju klasama s malo podataka da spremaju objekte izravno u pokazivač. Ovaj korak eliminira potrebu za dodjeljivanjem memorije izravno za objekt, samo stvorite pokazivač i objekt unutar njega. Označeni pokazivači podržani su samo u 64-bitnoj arhitekturi i zbog činjenice da u 32-bitnom pokazivaču više nema dovoljno prostora za pohranu dovoljno korisnih podataka. Stoga iOS, za razliku od OS X, još nije podržavao ovu značajku. No, dolaskom ARM64 to se mijenja, a iOS je i po tom pitanju sustigao OS X.
Iako su pokazivači dugi 64 bita, na ARM64 se samo 33 bita koristi za vlastitu adresu pokazivača. A ako smo u mogućnosti pouzdano demaskirati ostatak bitova pokazivača, možemo koristiti ovaj prostor za pohranu dodatnih podataka – kao u slučaju spomenutih označenih pokazivača. Konceptualno, ovo je jedna od najvećih promjena u povijesti Objective-C, iako to nije tržišna značajka - tako da većina korisnika neće znati kako Apple pomiče Objective-C naprijed.
Što se tiče korisnih podataka koji se mogu pohraniti u preostali prostor tako označenog pokazivača, Objective-C ga, primjerice, sada koristi za pohranjivanje tzv. broj referenci (broj referenci). Prethodno je broj referenci bio pohranjen na drugom mjestu u memoriji, u hash tablici pripremljenoj za njega, ali to bi moglo usporiti cijeli sustav u slučaju velikog broja alloc/dealloc/retain/release poziva. Tablica je morala biti zaključana zbog sigurnosti niti, tako da se broj referenci dvaju objekata u dvije niti nije mogao promijeniti u isto vrijeme. Međutim, ta je vrijednost novoumetnuta u ostatak tzv isa indikatori. Ovo je još jedna neupadljiva, ali ogromna prednost i ubrzanje u budućnosti. Međutim, to se nikada ne bi moglo postići u 32-bitnoj arhitekturi.
Na preostala mjesta pokazivača na objekte također se novo ubacuju informacije o pridruženim objektima, je li objekt slabo referenciran, je li potrebno generirati destruktor za objekt itd. Zahvaljujući tim informacijama Objective-C runtime može bitno ubrzati vrijeme izvođenja, što se odražava na brzinu svake aplikacije. Iz testiranja to znači oko 40-50% ubrzanja svih poziva upravljanja memorijom. Samo prelaskom na 64-bitne pokazivače i korištenjem ovog novog prostora.
Zaključak
Iako će konkurenti pokušati proširiti ideju da je prelazak na 64-bitnu arhitekturu nepotreban, već ćete znati da je to samo vrlo neupućeno mišljenje. Istina je da jednostavno prebacivanje na 64bit bez prilagođavanja jezika ili aplikacija tome zapravo ne znači ništa - čak usporava cijeli sustav. Ali novi A7 koristi moderni ARM64 s novim skupom instrukcija, a Apple se potrudio modernizirati cijeli Objective-C jezik i iskoristiti prednosti novih mogućnosti – otuda i obećano ubrzanje.
Ovdje smo spomenuli veliki broj razloga zašto je 64-bitna arhitektura pravi korak naprijed. Riječ je o još jednoj revoluciji "ispod haube", zahvaljujući kojoj će Apple pokušati ostati na čelu ne samo dizajnom, korisničkim sučeljem i bogatim ekosustavom, već ponajprije najmodernijim tehnologijama na tržištu.
Puno neupućenih Android/Samsung ljudi bi trebali pročitati ovaj članak i onda se sakriti u kut.
Pa, moramo ih žaliti. Godinama su se opravdavali za tragični UX i UI Androida govoreći da imaju tehnološki najnapredniji OS sa značajkama, a sada su otkrili da su opet godinama u zaostatku :)
Ako covjek nije ovca i slusa reklame (a dobro mu ide), onda si nakon osobnog iskustva moze stvoriti svoje misljenje :-).
Probam gotovo svu konkurenciju i stvaram vlastito mišljenje.
Što se mene tiče, trebam novi mobitel super visokih performansi, jer ne trošim puno na njega. To je Trebam manje performansi za nižu cijenu ;-). Možda bih više volio neki sporiji s većom baterijom.
S druge strane, novi procak bi dobro došao za iPad gdje ima puno igrica :-).
Ja sam Android/HTC :) jer mi je TO prilično zabavno, a rootanje i pretvaranje visokokvalitetnog HW-a u brzi borac mi je hobi. I iOS mi to ne dopušta. (Nije ni potrebno. Manje-više, iOS je napravljen tako da sve radi kako treba i da tu ne morate ništa raditi. Kad prestanem uživati u igranju, kupit ću jabuku i uživati). Ali ne znam zašto se stalno napadate kao djeca. Apple je potpuno poput Androida. To je kao da uspoređuješ demokraciju s diktaturom i slično... Gledao sam konferenciju kada je predstavljen iPhone 5S i unatoč činjenici da ne posjedujem ništa od Applea, svidio mi se 64bit i druga poboljšanja koja su došla. Ali ne zato što sam iskompleksirani honimír trtko koji sjedi za PC-om i juri za Androidom ili Appleom, već zato što vidim NAPREDAK na koji neću dugo čekati. Ljudi bi trebali početi jako puno raditi da se ne bi imali vremena baviti sranjima, pristojno rečeno.
konstruktivan doprinos s druge strane :) kiez to bi otvorilo oci preostalih 99% android pozitivnih
možda prvo treba razgovarati o 99% fanatika jabuka, pa onda možemo voditi konstruktivan razgovor
vrlo složene stvari objašnjene jednostavno... hvala
Sjajan članak! Da, slažem se da korisnici Androida/WP-a moraju pročitati ovaj članak. Umjesto trolanja i pametovanja o tome "kako je 64b beskoristan u mobitelima"...
vjerojatno nikad nisi imao wp u ruci, inače ne bi imao ovo
Od svojih prvih uspjeha na mobilnom tržištu, Samsung je samo blatio konkurenciju, ali u suštini sve vrijeme ide njezinim stopama. Apple je oduvijek bio uzor tehnološkim tvrtkama, a ako se fokusiraju samo na ismijavanje i stalno dezinformiranje kupaca, vrlo brzo će posrnuti. Apple je uvijek išao svojim putem i uvijek se radilo o vrlo dobrom tajmingu, koji nedostaje mnogim konkurentskim tvrtkama u industriji.
Moglo bi se reći da Samsung jaše na valu i iskorištava njegove mogućnosti. Kladio se na Android, ima odličan HW, dosta stvari radi sam, ima pristojnu podršku. I kao svaka predatorska azijska tvrtka, koristi sve mogućnosti oglašavanja. I naravno krade i kopira. Ono u čemu je "kosooki" dobar je kopiranje. Dobro su izračunali da je to puno jeftinije nego ići svojim putem, korak po korak. A kao jaka tvrtka, to si jednostavno može priuštiti. Još…
Samo mi nije jasno zašto se stalno povećava brzina telefona, daj mi neke primjere za što ga koristiš, polako mi nema smisla povećavati performanse mobitela, ali ću izbaciti riječ marketing .
Igre, loše optimizirane igre. Također, Transport Tycoon na iPadu 3 ne radi tako glatko i u istoj razlučivosti kao na stolnom računalu. Primjer.
Samo mi nije jasno zašto se brzina telefona stalno povećava, daj mi neke primjere za što ga koristiš, polako mi nema smisla povećavati performanse mobitela, ako iz njega izbacim riječ marketing .
Za obradu videa, zvuka i slike. I na igre.
Svakome tko iPhone koristi samo za telefoniranje, slanje poruka, povremeno čitanje ili slanje mailova i povremeno surfanje internetom trebat će iPhone 4. Vjerujem da takvih korisnika ima puno. Ne treba svima najbolji telefon na svijetu :-)
ovce
Ne znači li vam ništa fizički kompromis između hardvera i softvera? Ovo me malo podsjeća na kraj 19. stoljeća kada su tadašnji fizičari govorili da je u fizici sve već otkriveno i da nema potrebe dalje (desetljeće prije teorije relativnosti i tri prije kvantne teorije) .
Potraga za najboljima nikada ne prestaje. Ponekad vodi softver, a ponekad hardver. Ali ako jedan zapne, drugog neće pustiti. Nećemo biti toliko sebični prema našim potomcima :) Pa na tvoj komentar - brži telefon će omogućiti snažnije aplikacije, koje će moći puno više od pogona. I nekad stvari za koje ni današnja računala nisu dovoljna. Budućnost je uzbudljiva.
točno :)
Dobar članak, ali ne razumijem zašto Apple nije stavio 7 GB RAM-a u A2. Da, iOS multitasking nije takav da je nužno potrebno 2 GB, ali s obzirom na dvostruko veću duljinu pokazivača memorije, bio bi puno prikladniji.
Ali inače se slažem da je 64-bitni procesor "nepotreban" za mobilni telefon, kao što je bio nepotreban retina zaslon ili optički miš umjesto kuglice - svi su ti izumi označeni kao "nepotrebni", ali po mom mišljenju točna riječ je "bezvremenski", jer jednom se mora doći i Apple se ne boji smisliti nešto novo.
Slažem se. Nažalost, čak ni "beskoristan" nije točan izraz. Nepotrebno znači nešto čiji prioritet osoba ne zna. To definitivno nije istina. Speed možda ne treba takvu brzinu, ali će je sigurno prepoznati. A kada softver uhvati korak s hardverom, opet će biti mjesta za napredak.
Naravno, ja sam za, mislim da je iP5 stvarno prilično brz pametni telefon, tako da 5S uopće ne bi trebao biti 64-bitni. Ali jednog dana netko se ponovno morao pozabaviti time i bio je to Apple i to je bilo sada. Otkad pamtim, stručnjaci su također govorili kako će 64-bitni procesori biti beskorisni čak iu računalima.
Za mene, kao informatičkog laika koji je skoro pao na maturi, važan je zaključak. Cijeli članak (potkrijepljen komentarima) mi se čini prilično pronicljivim, a iako ga neću znati objasniti, A7 sa 64-bitnom arhitekturom je korak naprijed. Hvala na informaciji.
Uredio bih naslov članka, jer je to marketinški potez. Svaka inovacija je u biti marketinški potez. :-)
Ne mislim. Na primjer, Samsung koristi marketinške poteze. Pojavljuju se s RAM-om, koji iPhoneu uopće nije potreban. Izvlače se sa značajkama koje uopće nisu upotrebljive. Njihovo namjerno povećanje performansi procesora za testove. itd. To je marketing, iako da, obmanjujuće, s čime se ne bi trebali tek tako izvući ;)