Itxi iragarkia

Mike Ash bere blogean eskainia iPhone 64S-n 5 biteko arkitekturara aldatzearen ondorio praktikoak. Artikulu honek bere aurkikuntzetan oinarritzen da.

Testu honen arrazoia, batez ere, 5 biteko ARM prozesadoredun iPhone 64s berriak erabiltzaileentzat eta merkaturako benetan esan nahi duenari buruz zabaltzen ari den desinformazio kopuru handiagatik da. Hemen saiatuko gara garatzaileentzako trantsizio honen errendimenduari, gaitasunei eta inplikazioei buruzko informazio objektiboa ekartzen.

"64 bit"

"X-bit" etiketak erreferentzia ditzakeen prozesadore baten bi zati daude: osoko erregistroen zabalera eta erakusleen zabalera. Zorionez, prozesadore moderno gehienetan zabalera horiek berdinak dira, beraz, A7-ren kasuan 64 biteko osoko erregistroak eta 64 biteko erakusleak esan nahi du.

Hala ere, berdin garrantzitsua da "64bit"-ek zer esan nahi ez duen adieraztea: RAM helbide fisikoaren tamaina. RAMarekin komunikatzeko bit kopurua (beraz, gailu batek onar dezakeen RAM kopurua) ez dago PUZaren bit kopuruarekin erlazionatuta. ARM prozesadoreek 26 eta 40 biteko helbideak dituzte eta gainerako sistemaren arabera alda daitezke.

  • Datu-busaren tamaina. RAM edo buffer memoriatik jasotako datu kopurua faktore horretatik independentea da. Banakako prozesadorearen argibideek datu kopuru desberdinak eska ditzakete, baina zatika bidaltzen dira edo memoriatik behar baino gehiago jasotzen dira. Datu kuantikoaren tamainaren araberakoa da. iPhone 5-ak dagoeneko jasotzen ditu memoriako datuak 64 biteko kantetan (eta 32 biteko prozesadorea du), eta 192 biteko tamainak topa ditzakegu.
  • Koma flotagarriarekin zerikusia duen edozer. Erregistro horien tamaina (FPU) berriro prozesadorearen barne funtzionamendutik independentea da. ARM-k 64 biteko FPU erabiltzen ari da ARM64 aurretik (64 biteko ARM prozesadorea).

Abantaila eta desabantaila orokorrak

Bestela 32 biteko eta 64 biteko arkitektura berdinak alderatzen baditugu, orokorrean ez dira horren desberdinak. Hau da publikoaren nahasmen orokorraren arrazoietako bat Apple gailu mugikorretan ere 64 bit-era mugitzen ari den arrazoi baten bila. Hala ere, dena A7 (ARM64) prozesadorearen parametro zehatzetatik eta Applek erabiltzen duen modutik dator, ez bakarrik prozesadoreak 64 biteko arkitektura duela.

Hala ere, oraindik ere bi arkitektura hauen arteko desberdintasunei erreparatzen badiegu, hainbat desberdintasun aurkituko ditugu. Bistan dena da 64 biteko osoko erregistroek 64 biteko osoko erregistroek modu eraginkorragoan maneiatu ditzaketela. Aurretik ere, 32 biteko prozesadoreetan lan egitea posible zen, baina horrek normalean 32 biteko zati luzeetan zatitzea suposatzen zuen, eta horrek kalkulu motelagoak eragiten zituen. Beraz, 64 biteko prozesadore batek, oro har, 64 biteko motekin konputatu dezake 32 bitekoekin bezain azkar. Horrek esan nahi du orokorrean 64 biteko motak erabiltzen dituzten aplikazioak askoz azkarrago exekutatu daitezkeela 64 biteko prozesadore batean.

64bit-ek prozesadoreak erabil dezakeen RAM kopuru osoa eragiten ez badu ere, programa batean RAM zati handiekin lan egitea erraztu dezake. 32 biteko prozesadore batean exekutatzen den edozein programak 4 GB inguru helbide-espazio besterik ez du. Kontuan izanda sistema eragileak eta liburutegi estandarrak zerbait hartzen dutela, honek 1-3 GB artean uzten du programa aplikazioa erabiltzeko. Hala ere, 32 biteko sistema batek 4 GB RAM baino gehiago baditu, memoria hori erabiltzea pixka bat zailagoa da. Sistema eragilea gure programarako memoria zati handiago hauek mapatzera behartzera jo behar dugu (memoriaren birtualizazioa), edo programa hainbat prozesutan zatitu dezakegu (non prozesu bakoitzak berriro teorikoki 4 GB memoria duen zuzeneko helbideratzeetarako eskuragarri).

Hala ere, "hack" hauek hain zailak eta motelak dira, non gutxieneko aplikazioek erabiltzen dituzte. Praktikan, 32 biteko prozesadore batean, programa bakoitzak bere 1-3 GB-ko memoria baino ez du erabiliko, eta erabilgarri dagoen RAM gehiago erabil daiteke hainbat programa aldi berean exekutatzeko edo memoria hau buffer gisa (caching) erabiltzeko. Erabilera hauek praktikoak dira, baina nahi genuke edozein programak 4GB baino gehiagoko memoria zatiak erraz erabiltzeko gai izatea.

Orain 4 GB baino gehiagoko memoriarik gabe, 64 biteko arkitekturak ez duela ezertarako balioko aldarrikapen maiz (benetan okerra) gatoz. Helbide-espazio handiagoa erabilgarria da memoria gutxiago duen sistema batean ere. Memoria-mapatutako fitxategiak tresna erabilgarriak dira, non fitxategiaren edukiaren zati bat prozesuko memoriarekin logikoki lotzen den fitxategi osoa memorian kargatu beharrik gabe. Horrela, sistemak, adibidez, pixkanaka-pixkanaka fitxategi handiak prozesatu ditzake RAMaren edukiera baino askoz ere handiagoak. 32 biteko sistema batean, horrelako fitxategi handiak ezin dira fidagarriki mapeatu memorian, 64 biteko sisteman, berriz, oso erraza da, helbide-espazio askoz handiagoari esker.

Hala ere, erakusleen tamaina handiagoak desabantaila handi bat ere ekartzen du: bestela, programa berdinek memoria gehiago behar dute 64 biteko prozesadore batean (erakusle handiago hauek nonbait gorde behar dira). Erakusleak programen maiz parte direnez, desberdintasun horrek cachea zamatu dezake, eta, ondorioz, sistema osoa motelago exekutatzen da. Beraz, ikuspuntutik, ikus dezakegu prozesadorearen arkitektura 64 bitekora aldatuko bagenu, benetan sistema osoa motelduko litzatekeela. Beraz, faktore hau beste toki batzuetan optimizazio gehiagorekin orekatu behar da.

ARM64

A7, iPhone 64s berria elikatzen duen 5 biteko prozesadorea, ez da erregistro zabalagoak dituen ARM prozesadore arrunta soilik. ARM64-k hobekuntza handiak ditu 32 biteko bertsio zaharragoaren aldean.

Apple A7 prozesadorea.

Erregistroan

ARM64-k 32 biteko ARM-ko zenbaki osoko erregistroak baino bi aldiz gehiago ditu (kontuz erregistroen kopurua eta zabalera ez nahasteko - zabaleraz hitz egin dugu "64 biteko" atalean. Beraz, ARM64-k bi erregistro zabal eta bi aldiz gehiago ditu. erregistroak). 32 biteko ARM-ak 16 zenbaki oso-erregistro ditu: programa-kontagailu bat (PC - uneko instrukzio-zenbakia dauka), pila-erakuslea (abian den funtzio baten erakuslea), esteka-erregistroa (amaieraren ondoren itzulera erakuslea). funtzioaren), eta gainerako 13ak aplikazioak erabiltzeko dira. Hala ere, ARM64-k 32 zenbaki oso-erregistro ditu, zero erregistro bat, esteka-erregistroa, marko-erakuslea (pila-erakuslearen antzekoa) eta etorkizunerako gordetako bat barne. Honek 28 erregistro uzten dizkigu aplikazioak erabiltzeko, 32 biteko ARMaren bikoitza baino gehiago. Aldi berean, ARM64-k puntu mugikorreko zenbakien (FPU) erregistroen kopurua bikoiztu zuen 16 32 biteko erregistrotik 128ra.

Baina zergatik da hain garrantzitsua erregistro kopurua? Memoria, oro har, PUZaren kalkuluak baino motelagoa da eta irakurketa/idazketa oso denbora luzea izan daiteke. Honek prozesadore azkarrak memoriaren zain jarraitu beharko luke eta sistemaren abiadura muga naturala lortuko genuke. Prozesadoreak urritasun hori buffer geruzekin ezkutatzen saiatzen dira, baina azkarrena (L1) ere prozesadorearen kalkulua baino motelagoa da. Hala ere, erregistroak memoria-zelulak dira zuzenean prozesadorean eta haien irakurketa/idazketa nahikoa azkarra da prozesadorea ez moteltzeko. Erregistro kopuruak ia prozesadorearen kalkuluetarako memoriarik azkarrenaren zenbatekoa esan nahi du, eta horrek asko eragiten du sistema osoaren abiadura.

Aldi berean, abiadura honek konpiladorearen optimizazio euskarri ona behar du, hizkuntzak erregistro hauek erabil ditzan eta aplikazio orokorrean (motelean) memorian dena gorde behar izan ez dezan.

Argibide multzoa

ARM64-k ere aldaketa handiak ekartzen ditu instrukzio-multzoan. Agindu-multzoa prozesadore batek egin ditzakeen eragiketa atomikoen multzoa da (adibidez, 'GEHITU erregistro1 erregistro2' zenbakiak bi erregistrotan gehitzen ditu). Hizkuntza indibidualentzat eskuragarri dauden funtzioak argibide hauek osatzen dituzte. Funtzio konplexuagoek instrukzio gehiago exekutatu behar dituzte, beraz, motelagoak izan daitezke.

ARM64-n berriak dira AES enkriptatzeko argibideak, SHA-1 eta SHA-256 hash funtzioak. Beraz, inplementazio konplexu baten ordez, hizkuntzak soilik deituko dio instrukzio honi, eta horrek funtzio horien konputazioan bizkortze handia ekarriko du eta aplikazioetan segurtasuna gehituko du. Adib. Touch ID berriak enkriptazioan ere argibide hauek erabiltzen ditu, benetako abiadura eta segurtasuna ahalbidetuz (teorian, erasotzaile batek prozesadorea bera aldatu beharko luke datuak atzitzeko, eta hori ez da praktikoa bere miniaturazko tamaina kontuan hartuta).

32 biteko bateragarritasuna

Garrantzitsua da aipatzea A7 32 biteko moduan guztiz exekutatu daitekeela emulazio beharrik gabe. Horrek esan nahi du iPhone 5s berriak 32 biteko ARM-n konpilatutako aplikazioak exekutatu ditzakeela moteltzerik gabe. Hala ere, orduan ezin ditu ARM64 funtzio berriak erabili, beraz, beti merezi du A7rako soilik eraikuntza berezi bat egitea, askoz azkarrago exekutatu beharko litzatekeena.

Exekuzio-denbora aldaketak

Exekuzio-denbora programazio-lengoaiari funtzioak gehitzen dizkion kodea da, eta aplikazioa exekutatzen ari den bitartean erabiltzeko gai da, itzulpena amaitu arte. Applek ez duelako aplikazioen bateragarritasuna mantendu behar (64 biteko bitar bat 32 biteko exekutatzen dela), Objective-C hizkuntzan hobekuntza batzuk gehiago egin ditzakete.

Horietako bat izenekoa da etiketatutako erakuslea (markatutako erakuslea). Normalean, objektuak eta objektu horien erakusleak memoriaren zati bereizietan gordetzen dira. Hala ere, erakusle mota berriek datu gutxi dituzten klaseei objektuak erakuslean zuzenean gordetzeko aukera ematen diete. Urrats honek objektuari memoria zuzenean esleitzeko beharra ezabatzen du, erakuslea eta barruan dagoen objektua sortu besterik ez dago. Etiketatutako erakusleak 64 biteko arkitekturan soilik onartzen dira, 32 biteko erakusle batean jada ez dagoelako nahikoa leku datu erabilgarriak gordetzeko. Hori dela eta, iOS, OS X ez bezala, oraindik ez zuen funtzio hau onartzen. Hala ere, ARM64-ren etorrerarekin, hori aldatzen ari da, eta iOS-ek OS X-rekin harrapatu du zentzu honetan ere.

Erakusleak 64 biteko luzera izan arren, ARM64-n 33 bit baino ez dira erabiltzen erakuslearen helbiderako. Eta gainerako erakusle-bitak modu fidagarrian azaltzeko gai bagara, espazio hori erabil dezakegu datu gehigarriak gordetzeko, aipatu etiketadun erakusleen kasuan bezala. Kontzeptuki, hau da Objective-C-ren historiako aldaketarik handienetako bat, nahiz eta ez den eginbide komertziala; beraz, erabiltzaile gehienek ez dute jakingo Apple-k nola egiten duen aurrera Objective-C.

Etiketatutako erakusle baten gainerako espazioan gorde daitezkeen datu baliagarriei dagokienez, Objective-C, adibidez, orain erabiltzen ari da deitutakoa gordetzeko. erreferentzia zenbaketa (erreferentzia kopurua). Aurretik, erreferentzia-zenbaketa memoriako beste leku batean gordetzen zen, horretarako prestatutako hash-taula batean, baina horrek sistema osoa moteldu lezake alloc/dealloc/retain/release dei kopuru handi baten kasuan. Taula blokeatu behar izan zen hariaren segurtasunagatik, beraz, bi haritako bi objekturen erreferentzia-zenbaketa ezin izan da aldi berean aldatu. Hala ere, balio hori deitzen diren gainerakoetan txertatu berri da jesus adierazleak. Etorkizuneko abantaila eta azelerazio nabarmena da hau. Hala ere, hori ezin izan da inoiz lortu 32 biteko arkitektura batean.

Lotutako objektuei buruzko informazioa, objektua erreferentzia ahulean dagoen ala ez, objektuaren suntsitzaile bat sortzea beharrezkoa den, etab., objektuen erakusleen gainerako lekuan txertatu berri da. Informazio horri esker, Objective-C exekuzio-denborak exekuzio-denbora funtsean bizkortzeko gai da, eta hori aplikazio bakoitzaren abiaduran islatzen da. Probetatik, horrek memoria kudeatzeko dei guztien % 40-50 inguru bizkortzea esan nahi du. 64 biteko erakusleetara aldatuz eta espazio berri hau erabiliz.

záver

Lehiakideek 64 biteko arkitekturara pasatzea beharrezkoa ez den ideia zabaltzen saiatuko diren arren, dagoeneko jakingo duzue hori oso informaziorik gabeko iritzia dela. Egia da hizkuntza edo aplikazioak egokitu gabe 64 bit-era aldatzeak ez duela ezer esan nahi, sistema osoa moteltzen duela ere. Baina A7 berriak ARM64 moderno bat erabiltzen du instrukzio-multzo berri batekin, eta Apple-k ardura hartu du Objective-C hizkuntza osoa modernizatzeko eta gaitasun berriak aprobetxatzeko - hortik agindutako bizkortzea.

Hemen 64 biteko arkitektura bat aurrerapauso egokia izateko arrazoi ugari aipatu ditugu. Beste iraultza bat da "kapapean", eta horri esker Apple diseinuarekin, erabiltzaile-interfazearekin eta ekosistema aberatsarekin ez ezik, merkatuan dauden teknologia modernoenekin ere abangoardian mantentzen saiatuko da.

iturria: mikeash.com
.