Zoumaachen Annonce

Mike Esch op sengem Blog gewidmet déi praktesch Implikatioune vum Wiessel op 64-Bit Architektur am iPhone 5S. Dësen Artikel zitt op seng Erkenntnisser.

De Grond fir dësen Text ass haaptsächlech wéinst der grousser Quantitéit vu falschen Informatioune verbreet iwwer wat den neien iPhone 5s mat engem 64-Bit ARM Prozessor eigentlech fir d'Benotzer an de Maart bedeit. Hei wäerte mir probéieren objektiv Informatioun iwwer d'Performance, d'Fäegkeeten an d'Implikatioune vun dësem Iwwergang fir Entwéckler ze bréngen.

"64 bit"

Et ginn zwee Deeler vun engem Prozessor op deen den "X-Bit" Label bezéie kann - d'Breet vun den ganzen Zuelenregisteren an d'Breet vun de Pointer. Glécklech, op de meeschte modernen Prozessoren sinn dës Breeten d'selwecht, also am Fall vun der A7 heescht dat 64-Bit Integer Registere a 64-Bit Pointer.

Wéi och ëmmer, et ass gläich wichteg ze weisen wat "64bit" NET bedeit: RAM kierperlech Adress Gréisst. D'Zuel vun de Bits fir mat RAM ze kommunizéieren (also de Betrag vum RAM en Apparat kann ënnerstëtzen) ass net mat der Unzuel vun de CPU Bits verbonnen. ARM Prozessoren hunn iwwerall tëscht 26- an 40-Bit Adressen a kënnen onofhängeg vum Rescht vum System geännert ginn.

  • Daten Bus Gréisst. D'Quantitéit vun Donnéeën, déi aus RAM oder Puffer Erënnerung kritt gëtt, ass ähnlech onofhängeg vun dësem Faktor. Individuell Prozessorinstruktioune kënne verschidde Quantitéiten un Daten ufroen, awer si ginn entweder a Stécker geschéckt oder méi wéi néideg aus der Erënnerung kritt. Et hänkt vun der Gréisst vum Datequant of. Den iPhone 5 kritt schonn Daten aus der Erënnerung an 64-Bit Quanta (an huet en 32-Bit Prozessor), a mir kënne mat Gréissten bis zu 192 Bits begéinen.
  • Alles wat mam Schwemmpunkt verbonnen ass. D'Gréisst vun esou Registere (FPU) sinn erëm onofhängeg vun der interner Aarbecht vum Prozessor. ARM benotzt 64-Bit FPU zënter virum ARM64 (64-Bit ARM Prozessor).

Allgemeng Virdeeler an Nodeeler

Wa mir soss identesch 32bit a 64bit Architekturen vergläichen, si si meeschtens net sou ënnerschiddlech. Dëst ass ee vun de Grënn fir déi allgemeng Duercherneen vun der Ëffentlechkeet, déi no engem Grond sicht firwat Apple och op mobilen Apparater op 64bit plënnert. Wéi och ëmmer, et kënnt alles aus de spezifesche Parameteren vum A7 (ARM64) Prozessor a wéi Apple et benotzt, net nëmmen aus der Tatsaach datt de Prozessor eng 64-Bit Architektur huet.

Wéi och ëmmer, wa mir nach ëmmer d'Ënnerscheeder tëscht dësen zwou Architekturen kucken, fanne mir e puer Differenzen. Déi offensichtlech ass datt 64-Bit Integer Registere 64-Bit Integer méi effizient kënne handhaben. Och virdru war et méiglech mat hinnen op 32-Bit Prozessoren ze schaffen, awer dëst huet normalerweis gemengt se an 32-Bit laang Stécker opzedeelen, wat méi lues Berechnungen verursaacht huet. Also e 64-Bit Prozessor kann allgemeng mat 64-Bit Typen esou séier wéi mat 32-Bit-Typen berechnen. Dëst bedeit datt Uwendungen déi allgemeng 64-Bit Typen benotzen, vill méi séier op engem 64-Bit Prozessor lafen.

Obwuel 64bit Afloss net de Gesamtbetrag vun RAM datt de Prozessor benotzen kann, et kann maachen et méi einfach mat grousse Stécker vun RAM an engem Programm ze schaffen. All eenzege Programm, deen op engem 32-Bit Prozessor leeft, huet nëmmen ongeféier 4 GB Adressraum. Wann Dir berécksiichtegt datt de Betribssystem an de Standardbibliothéiken eppes ophuelen, léisst dëst de Programm iergendwou tëscht 1-3 GB fir Applikatioun benotzen. Wéi och ëmmer, wann en 32-Bit System méi wéi 4 GB RAM huet, ass dës Erënnerung e bësse méi komplizéiert ze benotzen. Mir mussen de Betribssystem forcéiere fir dës gréisser Stécker vun Erënnerung fir eise Programm ze mapen (Erënnerungsvirtualiséierung), oder mir kënnen de Programm a verschidde Prozesser opdeelen (wou all Prozess erëm theoretesch 4 GB Erënnerung verfügbar huet fir direkt Adresséierung).

Wéi och ëmmer, dës "Hacks" sinn sou schwéier a lues datt e Minimum vun Uwendungen se benotzen. An der Praxis, op engem 32-Bit Prozessor, wäert all Programm nëmmen seng 1-3 GB Erënnerung benotzen, a méi verfügbare RAM ka benotzt ginn fir verschidde Programmer zur selwechter Zäit ze lafen oder dës Erënnerung als Puffer (Caching) ze benotzen. Dës Notzunge si praktesch, awer mir wëllen datt all Programm fäeg ass Stécker vun Erënnerung méi grouss wéi 4GB ze benotzen.

Elo komme mir zu der heefeg (tatsächlech falsch) Fuerderung datt ouni méi wéi 4GB Erënnerung eng 64-Bit Architektur nëtzlos ass. E gréissere Adressraum ass nëtzlech och op engem System mat manner Erënnerung. Memory-mapped Dateien sinn e praktescht Tool wou en Deel vum Inhalt vun der Datei logesch mat der Erënnerung vum Prozess verbonne sinn ouni datt déi ganz Datei an d'Erënnerung gelueden muss ginn. Sou kann de System, zum Beispill, lues a lues grouss Dateien vill Mol méi grouss wéi d'RAM Kapazitéit veraarbechten. Op engem 32-Bit System kënnen esou grouss Dateien net zouverlässeg Gedächtnismapéiert ginn, wärend op engem 64-Bit System et e Stéck Kuch ass, dank dem vill méi groussen Adressraum.

Wéi och ëmmer, déi méi grouss Gréisst vun de Pointer bréngt och e groussen Nodeel: soss brauche identesch Programmer méi Erënnerung op engem 64-Bit Prozessor (dës méi grouss Pointer mussen iergendwou gespäichert ginn). Zënter Zeeche sinn e reegelméissegen Deel vu Programmer, kann dësen Ënnerscheed de Cache belaaschten, wat am Tour verursaacht datt de ganze System méi lues leeft. Also a Perspektiv kënne mir gesinn datt wa mir just d'Prozessorarchitektur op 64-Bit geännert hunn, et géif de ganze System tatsächlech verlangsamen. Also muss dëse Faktor duerch méi Optimisatiounen op anere Plazen ausgeglach ginn.

ARM64

Den A7, de 64-Bit Prozessor, deen den neien iPhone 5s dréit, ass net nëmmen e reguläre ARM Prozessor mat méi breet Registere. ARM64 enthält grouss Verbesserungen iwwer déi eeler, 32-Bit Versioun.

Apple A7 Prozessor.

Registry

ARM64 hält duebel sou vill ganz Zuelen Registere wéi 32-Bit ARM (passt virsiichteg d'Zuel an d'Breet vun de Registere net ze verwiesselen - mir hunn iwwer Breet an der "64-Bit" Sektioun geschwat. Also ARM64 huet zweemol esou breet Registere an duebel sou vill Registere). Den 32-Bit ARM huet 16 Integer Registere: e Programmzähler (PC - enthält d'Zuel vun der aktueller Instruktioun), e Stackpointer (e Zeiger op eng Funktioun déi amgaang ass), e Linkregister (e Zeiger op de Retour nom Enn vun der Funktioun), an déi reschtlech 13 si fir Applikatioun benotzt. Wéi och ëmmer, den ARM64 huet 32 ​​Integer Registere, dorënner een Nullregister, e Linkregister, e Frame Pointer (ähnlech wéi e Stack Pointer), an een reservéiert fir d'Zukunft. Dëst léisst eis mat 28 Registere fir Uwendungsnotzung, méi wéi duebel den 32-Bit ARM. Zur selwechter Zäit huet den ARM64 d'Zuel vun de Floating Point Number (FPU) Registere vu 16 op 32 128-Bit Registere verduebelt.

Mee firwat ass d'Zuel vun de Registere sou wichteg? D'Erënnerung ass allgemeng méi lues wéi d'CPU Berechnungen an d'Liesen / Schreiwen ka ganz laang daueren. Dëst géif maachen datt de schnelle Prozessor op Erënnerung muss waarden a mir géifen déi natierlech Geschwindegkeetslimit vum System schloen. Prozessoren probéieren dës Handicap mat Schichten vu Puffer ze verstoppen, awer och déi schnellsten (L1) ass ëmmer méi lues wéi d'Berechnung vum Prozessor. Wéi och ëmmer, Registere sinn Erënnerungszellen direkt am Prozessor an hir Liesen / Schreiwen ass séier genuch fir de Prozessor net ze luesen. D'Zuel vun de Registere bedeit praktesch de Montant vun der schnellsten Erënnerung fir Prozessor Berechnungen, déi staark d'Vitesse vum ganze System beaflosst.

Zur selwechter Zäit brauch dës Geschwindegkeet eng gutt Optimiséierungsunterstëtzung vum Compiler, sou datt d'Sprooch dës Registere benotze kann an net alles an der allgemenger Applikatioun (de luesen) Gedächtnis muss späicheren.

Instruktiounsset

ARM64 bréngt och grouss Ännerungen un der Instruktiounsset. En Instruktiounsset ass eng Rei vun atomarer Operatiounen déi e Prozessor ausféiere kann (zB 'ADD register1 register2' setzt d'Zuelen an zwee Registere derbäi). D'Funktioune verfügbar fir eenzel Sprooche besteet aus dësen Instruktiounen. Méi komplex Funktiounen musse méi Instruktiounen ausféieren, sou datt se méi lues kënne sinn.

Nei am ARM64 sinn Instruktioune fir AES Verschlësselung, SHA-1 an SHA-256 Hash Funktiounen. Also amplaz vun enger komplexer Implementatioun, nennt nëmmen d'Sprooch dës Instruktioun - wat e grousse Geschwindegkeet fir d'Berechnung vun esou Funktiounen bréngt an hoffentlech d'Sécherheet an Uwendungen bäigefüügt. z.B. déi nei Touch ID benotzt och dës Instruktiounen an der Verschlësselung, wat fir richteg Geschwindegkeet a Sécherheet erlaabt (an der Theorie muss en Ugräifer de Prozessor selwer änneren fir Zougang zu den Donnéeën ze kréien - wat onpraktesch ass fir d'mannst ze soen wéinst senger Miniaturgréisst).

Kompatibilitéit mat 32bit

Et ass wichteg ze ernimmen datt d'A7 voll am 32-Bit Modus lafen kann ouni d'Emuléierung ze brauchen. Et heescht datt den neien iPhone 5s Applikatiounen op 32-Bit ARM kompiléiert kënne lafen ouni Verlängerung. Wéi och ëmmer, da kann et déi nei ARM64 Funktiounen net benotzen, sou datt et ëmmer lount sech e spezielle Bau just fir d'A7 ze maachen, déi vill méi séier soll lafen.

Runtime Ännerungen

Runtime ass de Code dee Funktiounen un d'Programméierungssprooch bäidréit, déi et fäeg ass ze benotzen wann d'Applikatioun leeft, bis no der Iwwersetzung. Zënter Apple brauch net d'Applikatiounskompatibilitéit z'erhalen (datt e 64-Bit Binär op 32-Bit leeft), konnten se sech leeschten, e puer méi Verbesserunge vun der Objective-C Sprooch ze maachen.

Ee vun hinnen ass de sougenannte markéiert pointer (markéiert Zeiger). Normalerweis ginn Objeten an Hiweiser op dës Objeten a getrennten Deeler vun der Erënnerung gespäichert. Wéi och ëmmer, nei Zeigertypen erlaben Klassen mat wéineg Daten Objekter direkt am Zeiger ze späicheren. Dëse Schrëtt eliminéiert de Besoin fir Erënnerung direkt fir den Objet ze verdeelen, erstellt just e Pointer an den Objet dran. Tagged Pointer ginn nëmmen an der 64-Bit Architektur ënnerstëtzt och wéinst der Tatsaach datt et net méi genuch Plaz an engem 32-Bit Pointer ass fir genuch nëtzlech Daten ze späicheren. Dofir huet iOS, am Géigesaz zu OS X, dës Feature nach net ënnerstëtzt. Wéi och ëmmer, mat der Arrivée vum ARM64, ännert sech dëst, an iOS huet OS X och an dëser Hisiicht agefaang.

Och wann d'Pointer 64 Bit laang sinn, ginn op der ARM64 nëmmen 33 Bits fir d'Eigen Adress vum Pointer benotzt. A wa mir fäeg sinn de Rescht vun de Pointer Bits zouverlässeg ze demaskéieren, kënne mir dëse Raum benotze fir zousätzlech Donnéeën ze späicheren - wéi am Fall vun den ernimmten markéierte Pointer. Konzeptuell ass dëst eng vun de gréissten Ännerungen an der Geschicht vum Objective-C, obwuel et keng vermaartbar Feature ass - sou datt déi meescht Benotzer net wësse wéi Apple Objective-C no vir beweegt.

Wat déi nëtzlech Donnéeën ugeet, déi am reschtleche Raum vun esou engem markéierte Pointer gespäichert kënne ginn, benotzt Objective-C, zum Beispill, se elo fir de sougenannte späicheren. Referenzzuel (Zuel vun de Referenzen). Virdru war d'Referenzzuel op enger anerer Plaz an der Erënnerung gespäichert, an engem Hash-Table, deen dofir virbereet ass, awer dëst kéint de ganze System am Fall vun enger grousser Unzuel vun alloc/dealloc/retain/release-Uriff verlangsamen. Den Dësch huet misse wéinst Fuedemsécherheet gespaart ginn, sou datt d'Referenzzuel vun zwee Objeten an zwee thread net zur selwechter Zäit geännert ka ginn. Allerdéngs ass dëse Wäert nei agebaut an de Rescht vun der sougenannten isa Indicateuren. Dëst ass eng aner onopfälleg, awer e grousse Virdeel a Beschleunegung an Zukunft. Wéi och ëmmer, dëst konnt ni an enger 32-Bit Architektur erreecht ginn.

Informatioun iwwer assoziéiert Objeten, ob den Objet schwaach referenzéiert ass, ob et néideg ass en Zerstéierer fir den Objet ze generéieren, asw., gëtt och nei agebaut an déi verbleiwen Plaz vun de Pointer op d'Objeten. Dank dëser Informatioun ass den Objective-C Runtime ass fäeg d'Runtime grondsätzlech ze beschleunegen, wat an der Geschwindegkeet vun all Applikatioun reflektéiert gëtt. Vun Testen heescht dat ongeféier 40-50% Geschwindegkeet vun all Erënnerungsmanagement Appellen. Just andeems Dir op 64-Bit Pointer wiesselt an dësen neie Raum benotzt.

Fazit

Och wann d'Konkurrenten probéieren d'Iddi ze verbreeden datt d'Plënneren op eng 64-Bit Architektur onnéideg ass, wësst Dir schonn datt dëst just eng ganz oninforméiert Meenung ass. Et ass richteg datt op 64-Bit ze wiesselen ouni Är Sprooch oder Uwendungen unzepassen net wierklech eppes bedeit - et verlangsamt souguer de ganze System. Awer déi nei A7 benotzt e modernen ARM64 mat engem neien Instruktiounsset, an Apple huet d'Schwieregkeet geholl fir d'ganz Objective-C Sprooch ze moderniséieren an vun den neie Fäegkeeten ze profitéieren - dofir de versprachene Geschwindegkeet.

Hei hu mir eng grouss Zuel vu Grënn ernimmt firwat eng 64-Bit Architektur de richtege Schrëtt no vir ass. Et ass eng aner Revolutioun "ënnert der Hood", duerch déi Apple wäert probéieren un der Spëtzt ze bleiwen net nëmme mat Design, User Interface a räichem Ökosystem, awer haaptsächlech mat de modernsten Technologien um Maart.

Source: mikeash.com
.