Mike Ash posvećeno na svom blogu praktične implikacije prelaska na 64-bitnu arhitekturu u iPhone 5S. Ovaj članak se oslanja na njegove nalaze.
Razlog za ovaj tekst je uglavnom zbog velike količine dezinformacija koje se šire o tome šta 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 performansama, mogućnostima i implikacijama ove tranzicije za programere.
"64 bit"
Postoje dva dela procesora na koja se oznaka "X-bit" može odnositi - širina celobrojnih registara i širina pokazivača. Srećom, na većini modernih procesora ove širine su 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 istaći šta "64bit" NE znači: Veličina fizičke adrese RAM-a. Broj bitova za komunikaciju sa RAM-om (dakle, količina RAM-a koju uređaj može da podrži) nije povezan sa brojem CPU bitova. ARM procesori imaju bilo gde između 26- i 40-bitnih adresa i mogu se menjati nezavisno od ostatka sistema.
- Veličina magistrale podataka. Količina podataka primljenih iz RAM-a ili međumemorije je na sličan način nezavisna od ovog faktora. Pojedinačne instrukcije procesora mogu zahtijevati različite količine podataka, ali se oni ili šalju u komadima ili primaju više nego što je potrebno iz memorije. Zavisi od veličine kvanta podataka. iPhone 5 već prima podatke iz memorije u 64-bitnim kvantima (i ima 32-bitni procesor), a možemo naići i na veličine do 192 bita.
- Bilo šta vezano za pokretni zarez. Veličina takvih registara (FPU) je opet nezavisna od internog rada procesora. ARM koristi 64-bitni FPU od prije ARM64 (64-bitni ARM procesor).
Opće prednosti i nedostaci
Ako uporedimo inače identične 32-bitne i 64-bitne arhitekture, one se uglavnom ne razlikuju toliko. Ovo je jedan od razloga za opću zbunjenost javnosti koja traži razlog zašto Apple prelazi na 64-bit i na mobilnim uređajima. Međutim, sve dolazi 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, naći ćemo nekoliko razlika. Očigledno je da 64-bitni celobrojni registri mogu efikasnije da rukuju 64-bitnim celim brojevima. Čak je i prije bilo moguće raditi s njima na 32-bitnim procesorima, ali to je obično značilo podjelu na 32-bitne dugačke dijelove, što je uzrokovalo sporije proračune. Dakle, 64-bitni procesor općenito može računati sa 64-bitnim tipovima jednako brzo kao i sa 32-bitnim. To znači da aplikacije koje općenito koriste 64-bitne tipove mogu raditi mnogo brže na 64-bitnom procesoru.
Iako 64bit ne utiče na ukupnu količinu RAM-a koju procesor može da koristi, može olakšati rad sa velikim delovima 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 sistem i standardne biblioteke nešto zauzimaju, ovo ostavlja programu negdje između 1-3 GB za korištenje aplikacije. Međutim, ako 32-bitni sistem ima više od 4 GB RAM-a, korištenje te memorije je malo složenije. Moramo pribjeći prisiljavanju operativnog sistema da mapira ove veće komade memorije za naš program (virtuelizacija memorije), ili možemo podijeliti program na više procesa (gdje svaki proces opet teoretski ima 4 GB memorije dostupne za direktno adresiranje).
Međutim, ovi "hakovi" su toliko teški i spori da ih koristi minimalan broj aplikacija. U praksi, na 32-bitnom procesoru, svaki program će koristiti samo svojih 1-3 GB memorije, a više raspoložive RAM memorije može se koristiti za pokretanje više programa u isto vrijeme ili korištenje ove memorije kao bafera (keširanje). Ove namjene su praktične, ali bismo željeli da bilo koji program može lako koristiti dijelove memorije veće od 4 GB.
Sada dolazimo do česte (zapravo netačne) tvrdnje da je bez više od 4 GB memorije 64-bitna arhitektura beskorisna. Veći adresni prostor je koristan čak i na sistemu sa manje memorije. Datoteke mapirane u memoriju su zgodan alat gdje je dio sadržaja datoteke logički povezan sa memorijom procesa bez potrebe da se cijeli fajl učitava u memoriju. Tako sistem može, na primjer, postepeno obraditi velike datoteke mnogo puta veće od kapaciteta RAM-a. Na 32-bitnom sistemu, tako velike datoteke ne mogu se pouzdano mapirati u memoriju, dok je na 64-bitnom sistemu to jednostavno, zahvaljujući mnogo većem adresnom prostoru.
Međutim, veća veličina pokazivača također donosi jedan veliki nedostatak: inače identični programi trebaju više memorije na 64-bitnom procesoru (ovi veći pokazivači moraju biti pohranjeni negdje). Budući da su pokazivači čest dio programa, ova razlika može opteretiti keš memoriju, što zauzvrat uzrokuje da cijeli sistem radi sporije. Dakle, u perspektivi, možemo vidjeti da ako samo promijenimo arhitekturu procesora u 64-bitnu, to bi zapravo usporilo cijeli sistem. Dakle, ovaj faktor mora biti uravnotežen sa više optimizacija 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.
registar
ARM64 sadrži duplo više celobrojnih registara nego 32-bitni ARM (pazite da ne pobrkate broj i širinu registara - govorili smo o širini u odeljku "64-bit". Dakle, ARM64 ima i duplo šire registre i duplo više registri). 32-bitni ARM ima 16 celobrojnih registara: jedan programski brojač (PC - sadrži broj trenutne instrukcije), pokazivač steka (pokazivač na funkciju u toku), registar veze (pokazivač na povratak nakon završetka funkcije), a preostalih 13 je za upotrebu u aplikacijama. Međutim, ARM64 ima 32 celobrojna registra, uključujući jedan nulti registar, registar veze, pokazivač okvira (slično pokazivaču steka) i jedan rezervisan za budućnost. Ovo nam ostavlja 28 registara za upotrebu u aplikacijama, što je 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 generalno sporija od CPU proračuna i čitanje/pisanje može potrajati jako dugo. Zbog toga bi brzi procesor morao stalno čekati na memoriju, a mi bismo dostigli prirodno ograničenje brzine sistema. Procesori pokušavaju da sakriju ovaj nedostatak slojevima bafera, ali čak i onaj najbrži (L1) je i dalje sporiji od procesorskog proračuna. Međutim, registri su memorijske ćelije direktno u procesoru i njihovo čitanje/pisanje je dovoljno brzo da ne uspori procesor. Broj registara praktično znači količinu najbrže memorije za procesorske proračune, što u velikoj meri utiče na brzinu čitavog sistema.
U isto vrijeme, ovoj brzini je potrebna dobra podrška za optimizaciju od kompajlera, tako da jezik može koristiti ove registre i ne mora sve pohranjivati u opštu (sporu) memoriju aplikacije.
Set 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' dodaje brojeve u dva registra). Funkcije dostupne pojedinačnim jezicima sastavljene su od ovih uputstava. Složenije funkcije moraju izvršiti više instrukcija, tako da mogu biti sporije.
Novo u ARM64 su instrukcije za AES enkripciju, SHA-1 i SHA-256 hash funkcije. Dakle, umjesto složene implementacije, samo će jezik zvati ovu instrukciju - što će donijeti ogromno ubrzanje izračunavanja takvih funkcija i, nadamo se, dodatnu sigurnost u aplikacijama. Npr. novi Touch ID takođe koristi ove instrukcije u šifrovanju, omogućavajući stvarnu brzinu i sigurnost (u teoriji, napadač bi morao da modifikuje sam procesor da bi pristupio podacima - što je u najmanju ruku nepraktično s obzirom na njegovu minijaturnu veličinu).
Kompatibilnost sa 32bit
Važno je napomenuti da A7 može raditi u potpunosti u 32-bitnom modu 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 funkcije ARM64, tako da uvijek vrijedi napraviti poseban build samo za A7, koji bi trebao raditi mnogo brže.
Promjene vremena izvođenja
Runtime je kod koji dodaje funkcije programskom jeziku, koje može koristiti dok je aplikacija pokrenuta, sve do prijevoda. Budući da Apple ne mora održavati kompatibilnost aplikacija (da 64-bitna binarna datoteka radi na 32-bitnoj), mogli bi sebi priuštiti još nekoliko poboljšanja jezika Objective-C.
Jedan od njih je tzv označeni pokazivač (označeni pokazivač). Obično se objekti i pokazivači na te objekte pohranjuju u odvojenim dijelovima memorije. Međutim, novi tipovi pokazivača dozvoljavaju klasama s malo podataka da pohranjuju objekte direktno u pokazivač. Ovaj korak eliminira potrebu da se memorija dodijeli direktno objektu, samo kreirajte pokazivač i objekt unutar njega. Označeni pokazivači su podržani samo u 64-bitnoj arhitekturi i zbog činjenice da više nema dovoljno prostora u 32-bitnom pokazivaču za pohranjivanje dovoljno korisnih podataka. Stoga iOS, za razliku od OS X, još nije podržavao ovu funkciju. Međutim, 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 koriste za vlastitu adresu pokazivača. A ako smo u mogućnosti da pouzdano demaskiramo ostatak bitova pokazivača, možemo koristiti ovaj prostor za pohranjivanje dodatnih podataka – kao u slučaju spomenutih označenih pokazivača. Konceptualno, ovo je jedna od najvećih promjena u historiji Objective-C, iako nije tržišna karakteristika - tako da većina korisnika neće znati kako Apple ide naprijed prema Objective-C.
Što se tiče korisnih podataka koji se mogu pohraniti u preostalom prostoru tako označenog pokazivača, Objective-C ga, na primjer, sada koristi za pohranjivanje tzv. broj referenci (broj referenci). Ranije je referentni broj bio pohranjen na drugom mjestu u memoriji, u hash tabeli pripremljenoj za to, ali bi to moglo usporiti cijeli sistem u slučaju velikog broja poziva alloc/dealloc/retain/release. Tabela je morala biti zaključana zbog sigurnosti niti, tako da se broj referenci dva objekta u dvije niti nije mogao mijenjati u isto vrijeme. Međutim, ova vrijednost je novo umetnuta u ostatak tzv je indikatori. Ovo je još jedna neupadljiva, ali ogromna prednost i ubrzanje u budućnosti. Međutim, to se nikada ne može postići u 32-bitnoj arhitekturi.
Informacije o pridruženim objektima, da li je objekt slabo referenciran, da li je potrebno generirati destruktor za objekt, itd., također se novo ubacuju na preostalo mjesto pokazivača na objekte. Zahvaljujući ovim informacijama, Objective-C runtime može fundamentalno ubrzati vrijeme izvođenja, što se odražava u brzini 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 prelazak na 64-bitni bez prilagođavanja vašeg jezika ili aplikacija zapravo ne znači ništa - čak usporava cijeli sistem. Ali novi A7 koristi moderan ARM64 sa novim skupom instrukcija, a Apple se potrudio da modernizuje ceo Objective-C jezik i iskoristi 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 u prvom planu ne samo dizajnom, korisničkim interfejsom i bogatim ekosistemom, već uglavnom najsavremenijim tehnologijama na tržištu.
Mnogi neupućeni Android/Samsung ljudi bi trebali pročitati ovaj članak, a zatim se sakriti u kut.
Pa, moramo ih sažaljevati. Godinama su opravdavali tragični UX i UI Androida govoreći da imaju tehnološki najnapredniji OS sa funkcijama, a sada su otkrili da su ponovo godinama iza :)
Ako čovjek nije ovca i sluša reklame (a u tome je dobar), onda nakon ličnog iskustva može formirati svoje mišljenje :-).
Pokušavam skoro svu konkurenciju i stvaram svoje mišljenje.
Za mene je potreban novi mobilni telefon super visokih performansi, jer ne trošim mnogo na njega. To je Treba mi manje performansi za manju cijenu ;-). Možda bih više volio sporiju sa većom baterijom.
S druge strane, novi procak bi bio koristan za iPad gdje ima puno igrica :-).
Ja sam Android/HTC :) jer mi je to prilično zabavno, a rukovanje i pretvaranje visokokvalitetnog HW-a u brzi borac je moj hobi. A iOS mi to ne dozvoljava. (Nije ni potrebno. Manje-više, iOS je dizajniran tako da sve radi kako treba i da tu ne morate ništa raditi. Kad prestanem da uživam u igri, kupiću jabuku i uživati). Ali ne znam zašto se napadate kao djeca. Apple je potpuno poput Androida. To je kao da poredim demokratiju sa diktaturom i slično... Gledao sam konferenciju kada je predstavljen iPhone 5S i uprkos činjenici da ne posedujem ništa od Apple-a, svidela mi se 64-bitna i druga poboljšanja koja su došla. Ali ne zato što sam kompleksan honimír trtko koji sjedi za PC-om i juri Android ili Apple, već zato što vidim NAPREDAK koji me neće natjerati da dugo čekam. Ljudi bi trebali početi jako puno raditi da nemaju vremena da se bave sranjima, pristojno rečeno.
konstruktivan doprinos sa druge strane :) kiez to bi otvorilo oci preostalih 99% android pozitivnih
možda prvo treba razgovarati o 99% fanatika jabuke, pa onda možemo imati konstruktivan razgovor
vrlo kompleksne stvari objasnjene jednostavno... hvala
Odličan članak! Da, slažem se da korisnici Androida/WP-a moraju obavezno pročitati ovaj članak. Umjesto trolanja i pametnih priča o tome "kako je 64b beskoristan u mobitelima"...
vjerovatno nikada niste imali wp u ruci, inače ne biste imali ovo
Od svojih prvih uspeha na tržištu mobilnih telefona, Samsung nije uradio ništa osim da je ukaljao konkurenciju, ali je u suštini sve ovo vreme pratio njegove stope. Apple je oduvijek bio uzor tehnološkim kompanijama, a ako se fokusiraju samo na ismijavanje i stalno dezinformisanje kupaca, uskoro će posrnuti. Apple je uvijek išao svojim putem i uvijek je bilo pitanje vrlo dobrog vremena, što nedostaje mnogim konkurentskim kompanijama u industriji.
Moglo bi se reći da Samsung jaše na talasu i koristi prednosti svojih mogućnosti. Kladio se na Android, ima odličnu HW, mnogo stvari sam pravi, ima pristojnu podršku. I kao svaka grabežljiva azijska kompanija, 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 mnogo jeftinije nego da idu svojim putem, korak po korak. A kao jaka kompanija, to jednostavno može priuštiti. Ipak…
Samo ne razumijem zasto se brzina telefona stalno povecava, dajte mi neke primjere za sta ga koristite, polako mi nema smisla povecati performanse mobilnog telefona, ali maknut cu rijec marketing .
Igre, loše optimizovane igre. Takođe, Transport Tycoon na iPad 3 ne radi tako glatko i u istoj rezoluciji kao na desktopu. Primjer.
Samo ne razumijem zasto se brzina telefona stalno povecava, daj mi neke primjere za sta ga koristis, polako mi nema smisla povecati performanse mobilnog telefona, ako izbacim rijec marketing iz njega .
Za video, audio i obradu slike. I na igre.
Svakome ko koristi iPhone samo za pozivanje, slanje poruka, povremeno čitanje ili slanje e-pošte i povremeno surfanje internetom trebat će iPhone 4. Vjerujem da takvih korisnika ima mnogo. 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 pomalo podsjeća na kraj 19. stoljeća, kada su tadašnji fizičari govorili da je sve u fizici već otkriveno i da nema potrebe da se nastavlja (deceniju prije teorije relativnosti i tri prije kvantne teorije) .
Potraga za najboljim nikada ne prestaje. Ponekad softver vodi, a ponekad hardver. Ali ako se jedan zaglavi, neće pustiti drugog. Nećemo biti toliko sebični prema našim potomcima :) Pa na vaš komentar - brži telefon će omogućiti moćnije aplikacije, koje će moći puno više od pogona. I nekada stvari za koje ni današnji kompjuteri nisu dovoljni. Budućnost je uzbudljiva.
Upravo :)
Dobar članak, ali ne razumijem zašto Apple nije stavio 7GB RAM-a u A2. Da, iOS multitasking nije takav da je potrebno 2 GB, ali s obzirom na duplo veću dužinu memorijskog pokazivača, bilo bi mnogo prikladnije.
Ali inače se slažem da je 64-bitni procesor "nepotreban" za mobilni telefon, kao što je bio nepotreban retina displej ili optički miš umjesto kuglice - svi ti izumi su označeni kao "nepotrebni", ali po mom mišljenju tačna riječ je "bezvremenski", jer jednom mora doći i Apple se ne plaši da smisli nešto novo.
Slažem se sa tim. Nažalost, čak ni "beskorisno" nije tačan izraz. Nepotrebno znači nešto čiji prioritet osoba ne poznaje. To definitivno nije istina. Brzini možda neće biti potrebna takva brzina, ali će je svakako prepoznati. A kada softver uhvati korak sa hardverom, ponovo će biti prostora za poboljšanje.
Naravno, ja sam za, mislim da je iP5 zaista prilično brz pametni telefon, tako da 5S uopće ne bi morao biti 64-bitni. Ali jednog dana se neko ponovo morao suočiti s tim i to je bio Apple i to je bilo sada. Otkad znam za sebe, stručnjaci su takođe govorili o tome kako će 64-bitni procesori biti beskorisni čak i u računarima.
Za mene, kao informatičkog laika koji je zamalo pao na matrici, zaključak je važan. Cijeli članak (potkrijepljen komentarima) mi se čini prilično pronicljivim, i iako ga neću moći objasniti, A7 sa 64-bitnom arhitekturom je korak naprijed. Hvala na informacijama.
Uredio bih naslov članka, jer je marketinški potez. Svaka inovacija je u suštini marketinški potez. :-)
Ne mislim. Na primjer, Samsung koristi marketinške poteze. Pojavljuju se sa RAM memorijom, koja iPhoneu uopće nije potrebna. Oni se izvlače sa funkcijama koje uopšte nisu upotrebljive. Njihovo namjerno povećanje performansi procesora za testove. itd. To je marketing, mada da, obmanjujuće je, s čime se ne bi trebali izvlačiti ;)