Reklamê bigire

Mike Ash li ser bloga xwe veqetand encamên pratîkî yên guherandina mîmariya 64-bit di iPhone 5S de. Ev gotar xwe dispêre dîtinên wî.

Sedema vê nivîsê bi giranî ji ber gelek agahdariya xelet e ku di derbarê ka iPhone 5s-a nû ya bi pêvajoyek ARM ya 64-bit bi rastî ji bo bikarhêner û bazarê tê çi wateyê tê belav kirin. Li vir em ê hewl bidin ku agahdariya objektîf di derbarê performans, jêhatîbûn û encamên vê veguheztinê de ji bo pêşdebiran bînin.

"64 bit"

Du beşên pêvajoyek hene ku etîketa "X-bit" dikare jê re behs bike - firehiya qeydên jimare û firehiya nîşankeran. Xweşbextane, li ser piraniya pêvajoyên nûjen ev firehî yek in, ji ber vê yekê di doza A7 de ev tê wateya tomarên hejmarên 64-bit û nîşangirên 64-bit.

Lêbelê, bi heman rengî girîng e ku meriv destnîşan bike ka "64bit" NE tê wateya: Mezinahiya navnîşana fîzîkî ya RAM. Hejmara bitên ku bi RAM-ê re têkilî daynin (bi vî rengî mîqdara RAM-a ku amûrek dikare piştgirî bike) bi hejmara bitên CPU re ne têkildar e. Pêvajoyên ARM-ê di navbera navnîşanên 26- û 40-bit de hene û dikarin ji pergalên mayî serbixwe werin guhertin.

  • Mezinahiya otobusê ya daneyê. Mîqdara daneya ku ji RAM an bîra tampon hatî wergirtin bi heman rengî ji vê faktorê serbixwe ye. Dibe ku rêwerzên pêvajoyê yên takekesî mîqdarên cûda yên daneyan daxwaz bikin, lê ew an bi perçeyan têne şandin an jî ji hewcedariyê bêtir ji bîranînê têne wergirtin. Ew bi mezinahiya kuantuma daneyê ve girêdayî ye. IPhone 5 berê daneyan ji bîrê di quntayên 64-bit distîne (û pêvajoyek 32-bit heye), û em dikarin bi mezinahiyên heya 192 bit re rûbirû bibin.
  • Tiştek ku bi xala herikînê ve girêdayî ye. Mezinahiya tomarên weha (FPU) dîsa ji xebata navxweyî ya pêvajoyê serbixwe ne. ARM ji berî ARM64 (pêvajoya ARM 64-bit) FPU 64-bit bikar tîne.

Avantaj û dezawantajên giştî

Ger em mîmariyên 32bit û 64bit ên wekî din bidin ber hev, ew bi gelemperî ew çend cûda ne. Ev yek ji sedemên tevliheviya gelemperî ya gelemperî ye ku li sedemek digerin ku Apple di cîhazên mobîl de jî berbi 64bit ve diçe. Lêbelê, ew hemî ji pîvanên taybetî yên pêvajoya A7 (ARM64) û çawa Apple wê bikar tîne, ne tenê ji rastiya ku pêvajo xwedan mîmariya 64-bit e.

Lêbelê, heke em hîn jî li cûdahiyên di navbera van her du mîmaran de binihêrin, em ê çend cûdahiyan bibînin. Ya eşkere ev e ku qeydên jimarên 64-bit dikarin hêjmarên 64-bit bi bandortir bi rê ve bibin. Berê jî, gengaz bû ku bi wan re li ser pêvajoyên 32-bit bixebitin, lê ev bi gelemperî tê wateya dabeşkirina wan li perçeyên dirêj ên 32-bit, ku bû sedema hesabên hêdîtir. Ji ber vê yekê pêvajoyek 64-bit dikare bi gelemperî bi celebên 64-bit bi qasî yên 32-bit zû hesab bike. Ev tê vê wateyê ku serîlêdanên ku bi gelemperî celebên 64-bit bikar tînin dikarin li ser pêvajoyek 64-bit pir zûtir bixebitin.

Her çend 64bit bandorê li ser mîqdara giştî ya RAM-ê ya ku pêvajo dikare bikar bîne bandor nake, ew dikare hêsantir bike ku meriv bi perçeyên mezin ên RAM-ê di yek bernameyê de bixebite. Bernameyek yekane ku li ser pêvajoyek 32-bit tê xebitandin tenê bi qasî 4 GB cîhê navnîşanê heye. Ji ber ku pergala xebitandinê û pirtûkxaneyên standard tiştek digire, ev bernameyê ji bo karanîna serîlêdanê di navbera 1-3 GB de dihêle. Lêbelê, heke pergalek 32-bit zêdetirî 4 GB RAM hebe, karanîna wê bîranînê hinekî tevlihevtir e. Pêdivî ye ku em zorê bidin pergala xebitandinê ku van perçeyên bîranînê yên mezin ji bo bernameya me nexşe bike (virtuelkirina bîranînê), an jî em dikarin bernameyê li gelek pêvajoyan veqetînin (ku her pêvajo dîsa bi teorîkî 4 GB bîranîn heye ku ji bo navnîşana rasterast heye).

Lêbelê, ev "hacks" ew qas dijwar û hêdî ne ku herî kêm serlêdan wan bikar tînin. Di pratîkê de, li ser pêvajoyek 32-bit, her bername dê tenê 1-3 GB bîra xwe bikar bîne, û RAM-a bêtir berdest dikare were bikar anîn da ku di heman demê de gelek bernameyan bimeşîne an jî vê bîranînê wekî tamponek (caching) bikar bîne. Van karanîna pratîkî ne, lê em dixwazin ku her bernameyek bikaribe bi hêsanî perçeyên bîranînê ji 4 GB mezintir bikar bîne.

Naha em têne ser îdiaya pir caran (bi rastî nerast) ku bêyî bêtir ji 4 GB bîranîn, mîmariya 64-bit bêkêr e. Cihê navnîşana mezintir di heman demê de li ser pergalek bi bîranîna hindiktir bikêr e. Pelên nexşeya bîranînê amûrek bikêr e ku beşek ji naveroka pelê bi mentiqî bi bîranîna pêvajoyê ve girêdayî ye bêyî ku tevahiya pelê di bîranînê de were barkirin. Bi vî rengî, pergal dikare, mînakî, hêdî hêdî pelên mezin gelek caran ji kapasîteya RAM-ê mezintir pêvajoyê bike. Li ser pergalek 32-bit, pelên weha mezin nikarin bi pêbaweriya bîranîn-nexşeyê bêne nexşandin, lê li ser pergalek 64-bit, ew bi xêra cîhê navnîşana pir mezintir ew perçeyek e.

Lêbelê, mezinahiya nîşankeran kêmasiyek mezin jî bi xwe re tîne: Wekî din, bernameyên wekhev li ser pêvajoyek 64-bit bêtir bîranîn hewce ne (divê ev nîşankerên mezin li cîhek werin hilanîn). Ji ber ku nîşanker beşek pir caran bernameyan in, ev cûdahî dikare cacheyê bar bike, ku di encamê de dibe sedem ku tevahiya pergalê hêdîtir bixebite. Ji ber vê yekê di perspektîfê de, em dikarin bibînin ku ger me tenê mîmariya pêvajoyê bi 64-bit biguhezîne, ew ê bi rastî tevahî pergalê hêdî bike. Ji ber vê yekê pêdivî ye ku ev faktor li deverên din bi xweşbîniyên bêtir were hevseng kirin.

ARM64

A7, pêvajoya 64-bit ku iPhone 5s-a nû hêzdar dike, ne tenê pêvajoyek ARM-ya birêkûpêk e ku bi tomarên berfirehtir ve girêdayî ye. ARM64 li ser guhertoya kevintir, 32-bit pêşkeftinên mezin dihewîne.

Pêvajoya Apple A7.

Registry

ARM64 ji ARM-ya 32-bit du qat zêdetir qeydên yekjimar digire (hişyar bin ku hejmar û firehiya qeydan tevlihev nekin - me di beşa "64-bit" de qala firehiyê kir. Ji ber vê yekê qeydên ARM64-ê hem du caran firehtir û hem jî du caran pirtir hene. tomar). ARM-ya 32-bit xwedan 16 qeydên bêhejmar e: yek jimarvana bernameyê (PC - hejmara talîmata heyî dihewîne), nîşankerek stûnê (nîşanderek fonksiyonek di pêşkeftinê de), tomarek girêdanê (nîşanek ji bo vegerê piştî dawiyê ya fonksiyonê), û 13 yên mayî ji bo karanîna serîlêdanê ne. Lêbelê, ARM64 xwedan 32 tomarên bêkêmasî ye, di nav de yek qeydek zero, qeydek girêdanek, nîşanek çarçove (wekî nîşankerek stack), û yek ji bo pêşerojê ve hatî veqetandin. Ev yek ji me re 28 qeydên ji bo karanîna serîlêdanê dihêle, ji ARM-ya 32-bit ducar zêdetir. Di heman demê de, ARM64 jimara tomarên jimareya hêlînê (FPU) ji 16-ê ducar kir 32 tomarên 128-bit.

Lê çima hejmara qeydan ew qas girîng e? Bîr bi gelemperî ji hesabên CPU hêdîtir e û xwendin/nivîsandin dikare demek pir dirêj bigire. Ev ê dihêle ku pêvajoya bilez li benda bîranînê bimîne û em ê li sînorê leza xwezayî ya pergalê bixin. Prosesor hewl didin ku vê kêmasiyê bi qatên tamponan veşêrin, lê tewra ya herî bilez (L1) dîsa jî ji hesabê pêvajoyê hêdîtir e. Lêbelê, tomar hucreyên bîranînê rasterast di pêvajoyê de ne û xwendin / nivîsandina wan têra xwe bilez e ku pêvajoyê hêdî neke. Hejmara tomar bi pratîkî tê wateya mîqdara bîranîna zûtirîn ji bo hesabên pêvajoyê, ku pir bandor li leza tevahiya pergalê dike.

Di heman demê de, vê lezê ji berhevkerê piştgiriyek xweşbîniyê ya baş hewce dike da ku ziman bikaribe van tomaran bikar bîne û ne hewce ye ku her tiştî di serîlêdana giştî (hêdî) de hilîne.

Instruction set

ARM64 di koma rêwerzan de jî guhertinên mezin tîne. Komek rêwerzan komek operasyonên atomî ye ku pêvajoyek dikare pêk bîne (mînak 'ADD register1 register2' hejmaran di du qeydan de zêde dike). Fonksiyonên ku ji bo zimanên kesane hene ji van rêwerzan pêk tên. Pêdivî ye ku fonksiyonên tevlihevtir bêtir rêwerzan bicîh bikin, da ku ew hêdîtir bibin.

Di ARM64-ê de nû talîmatên ji bo şîfrekirina AES, fonksiyonên hash SHA-1 û SHA-256 hene. Ji ber vê yekê li şûna pêkanîna tevlihev, tenê ziman dê vê rêwerzanê bi nav bike - ku dê bilezek mezin ji hesabkirina fonksiyonên weha re bîne û hêvîdar e ku di serlêdanan de ewlehî zêde bike. Mînak. Touch ID-a nû van rêwerzan di şîfrekirinê de jî bikar tîne, ku rê dide lez û ewlehiya rastîn (di teoriyê de, êrîşkar neçar e ku pêvajoyê bixwe biguhezîne da ku bigihîje daneyan - ku bi kêmanî ji ber mezinahiya wê ya piçûktir re bêje ne pratîk e).

Lihevhatina bi 32bit

Girîng e ku were gotin ku A7 dikare bi tevahî di moda 32-bit de bêyî hewcedariya emûlasyonê bixebite. Ev tê vê wateyê ku iPhone 5s-a nû dikare serîlêdanên ku li ser 32-bit ARM-ê hatine berhev kirin bêyî hêdîbûn bimeşîne. Lêbelê, wê hingê ew nikare fonksiyonên nû yên ARM64 bikar bîne, ji ber vê yekê ew her gav hêja ye ku meriv tenê ji bo A7-ê avahiyek taybetî çêbike, ku divê pir zûtir bixebite.

Guherandinên dema xebitandinê

Runtime kodek e ku fonksiyonan li zimanê bernamesaziyê zêde dike, ku ew dikare dema ku serîlêdan dimeşîne, heya piştî wergerê bikar bîne. Ji ber ku Apple ne hewce ye ku lihevhatina serîlêdanê bidomîne (ku binaryek 64-bit li ser 32-bit dimeşe), ew dikaribûn çend çêtirkirinên din li zimanê Objective-C bikin.

Yek ji wan jî tê gotin nîşanderê nîşankirî (nîşana nîşankirî). Bi gelemperî, tişt û nîşangirên wan tiştan di beşên cihê yên bîranînê de têne hilanîn. Lêbelê, celebên nîşankerên nû destûrê didin çînên bi daneya hindik ku tiştan rasterast di nîşankerê de hilînin. Vê gavê hewcedariya veqetandina bîranînê rasterast ji bo objektê ji holê radike, tenê nîşanek û tiştê di hundurê wê de biafirîne. Nîşangerên nîşankirî tenê di mîmariya 64-bit de têne piştgirî kirin, di heman demê de ji ber vê yekê ku êdî cîhê têr li nîşankerek 32-bit tune ku têra daneyên kêrhatî hilîne. Ji ber vê yekê, iOS, berevajî OS X-ê, hîna vê taybetmendiyê piştgirî nekiriye. Lêbelê, bi hatina ARM64 re, ev yek diguhere, û iOS di vî warî de bi OS X-ê re jî girtiye.

Her çend nîşander 64 bit dirêj in jî, li ser ARM64 tenê 33 bit ji bo navnîşana nîşanderê bixwe têne bikar anîn. Û heke em karibin bi pêbawerî mayî bit nîşankeran veşêrin, em dikarin vê cîhê bikar bînin da ku daneya zêde hilînin - wekî mînaka nîşangirên nîşankirî yên navborî. Bi têgînî, ev yek ji mezintirîn guheztinên di dîroka Objective-C de ye, her çend ew ne taybetmendiyek bazarê ye - ji ber vê yekê pir bikarhêner dê nizanin ka Apple çawa Objective-C pêşde diçe.

Ji bo daneyên kêrhatî yên ku dikarin li cîhê mayî ya nîşanek wusa nîşankirî werin hilanîn, mînakî Objective-C, naha wê bikar tîne da ku jê re tê gotin hilanîn. jimartina referansê (hejmara referansê). Berê, jimareya referansê li cîhek cûda di bîranînê de, di tabloyek hash a ku ji bo wê hatî amadekirin de hate hilanîn, lê ev dikare di rewşa hejmareke mezin a bangên alloc/dealloc/vegirtin/berdestkirinê de tevahiya pergalê hêdî bike. Diviyabû ku tablo ji ber ewlehiya têlan were girtin, ji ber vê yekê jimareya referansê ya du tiştan di du mijaran de di heman demê de nedihat guhertin. Lêbelê, ev nirx ji nû ve di nav yên mayî de tê gotin isa nîşankeran. Ev di pêşerojê de avantaj û bilezbûnek din a nediyar, lê mezin e. Lêbelê, ev çu carî di mîmariya 32-bit de çênebû.

Agahiyên li ser nesneyên têkildar, ka ew tişt bi qelsî tête referans kirin, gelo pêdivî ye ku ji bo objektê xerakerek çêbibe, hwd., her weha nû di cîhê mayî yê nîşangirên tiştan de tê danîn. Bi saya vê agahiyê, Objective-C runtime dikare bi bingehîn dema xebitandinê bilez bike, ku di leza her serîlêdanê de tê xuyang kirin. Ji ceribandinê, ev tê vê wateyê ku bi qasî 40-50% bilezkirina hemî bangên rêveberiya bîranînê ye. Tenê bi guheztina nîşangirên 64-bit û karanîna vê cîhê nû.

Xelasî

Her çend pêşbaz dê hewl bidin ku ramanê belav bikin ku çûna ber bi mîmariya 64-bit nepêwist e, hûn ê jixwe dizanin ku ev tenê nerînek pir neagahdar e. Rast e ku guheztina 64-bit bêyî adaptekirina ziman an serîlêdanên xwe bi rastî tiştek nayê wateya - ew tewra pergalê tevahî hêdî dike. Lê A7-a nû ARM64-ya nûjen bi komek rêwerzek nû bikar tîne, û Apple-ê zehmetî kişand ku tevahiya zimanê Objective-C nûjen bike û ji kapasîteyên nû sûd werbigire - ji ber vê yekê leza soz da.

Li vir me gelek sedem behs kiriye ku çima mîmariya 64-bit gavê rast e. Ew şoreşek din a "di bin serşokê" de ye, bi saya wê Apple dê hewl bide ku ne tenê bi sêwiran, navbeynkariya bikarhêner û ekosîstema dewlemend, lê bi giranî bi teknolojiyên herî nûjen ên li ser sûkê di pêş de bimîne.

Kanî: mikeash.com
.