Chiudi annunziu

Mike Ash dedicatu nantu à u so blog l'implicazioni pratiche di cambià à l'architettura 64-bit in l'iPhone 5S. Questu articulu si basa nantu à e so scuperte.

U mutivu di stu testu hè soprattuttu duvuta à a grande quantità di misinformazione chì si sparghje nantu à ciò chì u novu iPhone 5s cù un prucissuri ARM 64-bit significa veramente per l'utilizatori è u mercatu. Quì avemu da pruvà à purtà infurmazione objetiva nantu à u rendiment, capacità è implicazioni di sta transizione per i sviluppatori.

"64 bit"

Ci hè duie parte di un processore chì l'etichetta "X-bit" pò riferite - a larghezza di i registri interi è a larghezza di i puntatori. Fortunatamente, nantu à a maiò parte di i prucessori muderni, sti larghetti sò listessi, cusì in u casu di l'A7 questu significa registri interi 64-bit è punters 64-bit.

Tuttavia, hè ugualmente impurtante di nutà ciò chì "64bit" ùn significa micca: Dimensione di l'indirizzu fisicu RAM. U numaru di bits per cumunicà cù RAM (cusì a quantità di RAM chì un dispositivu pò sustene) ùn hè micca ligatu à u numeru di bits CPU. I prucessori ARM anu in ogni locu trà indirizzi 26 è 40-bit è ponu esse cambiati indipindentamente da u restu di u sistema.

  • Dimensione bus di dati. A quantità di dati ricevuti da a RAM o memoria di buffer hè simile indipindente da stu fattore. Istruzzioni individuali di u processatore ponu dumandà quantità diverse di dati, ma sò mandati in pezzi o ricivuti più di ciò chì hè necessariu da a memoria. Dipende da a dimensione di u quantum di dati. L'iPhone 5 riceve digià dati da a memoria in quanta 64-bit (è hà un prucessore 32-bit), è pudemu scontru dimensioni finu à 192 bits.
  • Tuttu ciò chì hè in relazione cù a virgola flottante. A dimensione di tali registri (FPU) hè torna indipendente da u funziunamentu internu di u processatore. ARM hà utilizatu FPU 64-bit da prima di ARM64 (processore ARM 64-bit).

Vantaghji generali è disadvantages

Se paragunemu altri architetture 32bit è 64bit identiche, in generale ùn sò micca cusì diverse. Questu hè unu di i mutivi di a cunfusione generale di u publicu chì cerca un mutivu perchè Apple si move ancu à 64bit in i dispositi mobile. In ogni casu, tuttu vene da i paràmetri specifichi di u processatore A7 (ARM64) è cumu Apple l'utiliza, micca solu da u fattu chì u processatore hà una architettura 64-bit.

Tuttavia, s'è no guardemu sempre e sfarenze trà sti dui architetture, truveremu parechje sfarenze. L'ovvi hè chì i registri interi 64-bit ponu trattà integer 64-bit in modu più efficiente. Ancu prima, era pussibule di travaglià cun elli nantu à i prucessori 32-bit, ma questu generalmente significava divisu in pezzi longhi di 32-bit, chì causavanu calculi più lenti. Dunque, un processore di 64 bit pò generalmente calculà cù i tipi di 64 bit cum'è veloce cù quelli di 32 bit. Questu significa chì l'applicazioni chì generalmente utilizanu tipi di 64-bit ponu esse più veloci nantu à un processore 64-bit.

Ancu s'ellu 64bit ùn affetta micca a quantità totale di RAM chì u processatore pò utilizà, pò fà più faciule per travaglià cù grossi pezzi di RAM in un prugramma. Ogni prugramma unicu chì funziona in un processore 32-bit hà solu circa 4 GB di spaziu di indirizzu. In cunsiderà chì u sistema operatore è e biblioteche standard piglianu qualcosa, questu abbanduneghja u prugramma cù un locu trà 1-3 GB per l'usu di l'applicazione. Tuttavia, se un sistema di 32-bit hà più di 4 GB di RAM, l'usu di quella memoria hè un pocu più complicatu. Avemu da ricurdà à furzà u sistema operatore per mappe di sti pezzi più grande di memoria per u nostru prugramma (virtualizazione di memoria), o pudemu sparte u prugramma in parechji prucessi (induve ogni prucessu torna in teorica 4 GB di memoria dispunibule per l'indirizzu direttu).

Tuttavia, sti "hacks" sò cusì difficiuli è lenti chì un minimu di applicazioni l'utilizanu. In pràtica, nantu à un processore 32-bit, ogni prugramma aduprà solu a so 1-3 GB di memoria, è più RAM dispunibile pò esse usata per eseguisce parechji prugrammi à u stessu tempu o aduprà sta memoria cum'è un buffer (caching). Questi usi sò pratichi, ma vulemu chì qualsiasi prugramma pò esse facilmente aduprà pezzi di memoria più grande di 4GB.

Avà venenu à l'affirmazioni frequenti (in realtà incorrecte) chì senza più di 4GB di memoria, una architettura di 64-bit hè inutile. Un spaziu di indirizzu più grande hè utile ancu in un sistema cù menu memoria. I fugliali mappati in memoria sò un strumentu praticu induve una parte di u cuntenutu di u schedariu sò logicamente ligati à a memoria di u prucessu senza chì tuttu u schedariu deve esse caricatu in memoria. Cusì, u sistema pò, per esempiu, prucessa gradualmente i fugliali grandi assai volte più grande di a capacità RAM. In un sistema di 32-bit, tali schedarii grandi ùn ponu micca esse mappati in memoria di manera affidabile, mentre chì in un sistema di 64-bit, hè un pezzu di torta, grazia à u spaziu di indirizzu assai più grande.

In ogni casu, a dimensione più grande di i puntatori porta ancu un grande svantaghju: altrimente i prugrammi identici necessitanu più memoria nantu à un processore di 64 bit (questi puntatori più grandi anu da esse guardati in un locu). Siccomu i puntatori sò una parte frequente di i prugrammi, sta diffarenza pò agghicà a cache, chì à u turnu face chì u sistema tutale scorri più lento. Allora in perspettiva, pudemu vede chì se avemu solu cambiatu l'architettura di u processatore à 64-bit, in realtà rallentà u sistema tutale. Allora stu fattore deve esse equilibratu da più ottimisazioni in altri lochi.

ARM64

L'A7, u processore 64-bit chì alimenta u novu iPhone 5s, ùn hè micca solu un processore ARM regulare cù registri più largu. ARM64 cuntene megliurenze maiò nantu à a versione più vechja di 32-bit.

Processore Apple A7.

Registru

ARM64 cuntene duie volte integer registers cum'è 32-bit ARM (attenti à ùn cunfundà u numeru è a larghezza di i registri - avemu parlatu di larghezza in a sezione "64-bit". Allora ARM64 hà dui volte più largu registri è duie volte più. registri). L'ARM 32-bit hà 16 registri interi: un contatore di prugramma (PC - cuntene u numeru di l'istruzzioni attuale), un puntatore di stack (un puntatore à una funzione in corso), un registru di ligame (un puntatore à u ritornu dopu à a fine). di a funzione), è i 13 restanti sò per l'usu di l'applicazione. In ogni casu, l'ARM64 hà 32 registri integer, cumpresu un registru zero, un registru di ligame, un puntatore di frame (simile à un puntatore di pila), è unu riservatu per u futuru. Questu ci lascia 28 registri per l'usu di l'applicazioni, più di u doppiu di l'ARM 32-bit. À u listessu tempu, l'ARM64 hà radduppiatu u numeru di registri di numeri in virgola flottante (FPU) da 16 à 32 registri 128-bit.

Ma perchè u numeru di registri hè cusì impurtante? A memoria hè generalmente più lenta cà i calculi di CPU è a lettura / scrittura pò piglià assai tempu. Questu faria chì u processatore veloce hà da cuntinuà à aspittà per a memoria è avemu da chjappà u limitu di velocità naturale di u sistema. I prucessori pruvate à ammuccià stu handicap cù strati di buffers, ma ancu u più veloce (L1) hè sempre più lento di u calculu di u processatore. Tuttavia, i registri sò cellule di memoria direttamente in u processatore è a so lettura / scrittura hè abbastanza veloce per ùn rallentà u processatore. U numaru di registri praticamenti significa a quantità di a memoria più veloce per i calculi di u processatore, chì afecta assai a velocità di u sistema sanu.

À u listessu tempu, sta velocità hà bisognu di un bonu sustegnu di ottimisazione da u compilatore, perchè a lingua pò utilizà sti registri è ùn deve micca guardà tuttu in l'applicazione generale (a lenta) memoria.

Set d'istruzzioni

ARM64 porta ancu cambiamenti maiò à u settore di struzzioni. Un inseme d'istruzzioni hè un inseme di operazioni atomiche chì un processore pò esse realizatu (per esempiu "ADD register1 register2" aghjunghje i numeri in dui registri). E funzioni dispunibuli per e lingue individuali sò cumposti da sti struzzioni. E funzioni più cumplesse devenu eseguisce più struzzioni, perchè ponu esse più lente.

Novu in ARM64 sò struzzioni per a criptografia AES, SHA-1 è SHA-256 funzioni hash. Dunque, invece di una implementazione cumplessa, solu a lingua chjamà sta struzzione - chì purtarà una grande accelerazione à u calculu di tali funzioni è sperendu aghjunte a sicurità in l'applicazioni. p.e. u novu Touch ID utilizeghja ancu sti struzzioni in criptografia, chì permettenu una vera rapidità è sicurità (in teoria, un attaccante avissi da mudificà u processatore stessu per accede à e dati - chì hè impraticabile per dì u minimu datu a so dimensione miniatura).

Compatibilità cù 32 bit

Hè impurtante di mintuvà chì l'A7 pò eseguisce cumplettamente in modu 32-bit senza a necessità di emulazione. Significa chì u novu iPhone 5s pò eseguisce applicazioni compilate in 32-bit ARM senza alcuna rallentazione. In ogni casu, ùn pò micca aduprà e novi funzioni ARM64, cusì vale sempre a pena di fà una custruzzione speciale solu per l'A7, chì duverebbe correre assai più veloce.

Runtime cambia

Runtime hè u codice chì aghjunghje funzioni à a lingua di prugrammazione, chì hè capaci di utilizà mentre l'applicazione hè in esecuzione, finu à dopu a traduzzione. Siccomu Apple ùn hà micca bisognu di mantene a cumpatibilità di l'applicazioni (chì un binariu 64-bit corre nantu à 32-bit), puderanu permette di fà uni pochi di più migliure à a lingua Objective-C.

Unu di elli hè u cusì chjamatu puntatore marcatu (indicatore marcatu). Normalmente, l'uggetti è l'indicatori à quelli ogetti sò almacenati in parti separate di memoria. Tuttavia, i novi tippi di puntatori permettenu classi cù pocu dati per almacenà l'ogetti direttamente in u puntatore. Stu passu elimina a necessità di assignà memoria direttamente per l'ughjettu, basta à creà un puntatore è l'ughjettu in ellu. I puntatori taggati sò supportati solu in l'architettura 64-bit ancu per u fattu chì ùn ci hè più spaziu abbastanza in un puntatore 32-bit per almacenà abbastanza dati utili. Dunque, iOS, à u cuntrariu di OS X, ùn hà ancu supportatu sta funzione. In ogni casu, cù l'arrivu di ARM64, questu hè cambiatu, è iOS hà pigliatu ancu OS X in questu sensu.

Ancu se i puntatori sò 64 bits longu, nantu à l'ARM64 solu 33 bits sò usati per l'indirizzu propiu di u puntatore. È s'ellu simu capaci di smascherà in modu affidabile u restu di i puntatori, pudemu usà stu spaziu per almacenà dati supplementari - cum'è in u casu di i puntatori tagged citati. Conceptually, questu hè unu di i più grandi cambiamenti in a storia di Objective-C, ancu s'ellu ùn hè micca una funzione cummercializabile - cusì a maiò parte di l'utilizatori ùn sanu micca cumu Apple avanza Objective-C.

In quantu à i dati utili chì ponu esse guardati in u spaziu restu di un tali puntatore tagged, Objective-C, per esempiu, l'utiliza ora per almacenà u cusì chjamatu. conte di riferimentu (numeru di referenze). Nanzu, u cuntu di riferimentu era guardatu in un locu diversu in memoria, in una tavola hash preparata per questu, ma questu puderia rallentà u sistema tutale in u casu di un gran numaru di alloc/dealloc/retain/release calls. A tavula hà da esse chjusu per via di a sicurezza di filu, cusì u cuntu di riferimentu di dui ogetti in dui fili ùn pò micca esse cambiatu à u stessu tempu. Tuttavia, stu valore hè novu inseritu in u restu di u cusì chjamatu gesù indicatori. Questu hè un altru inconspicuous, ma enormi vantaghju è accelerazione in u futuru. Tuttavia, questu ùn puderia mai esse ottenutu in una architettura di 32-bit.

L'infurmazione nantu à l'uggetti assuciati, se l'ughjettu hè debbuli riferitu, s'ellu hè necessariu di generà un distruttore per l'ughjettu, etc., hè ancu inseritu novu in u locu restante di punters à l'uggetti. runtime hè capaci di accelerà fundamentalmente u runtime, chì si riflette in a vitezza di ogni applicazione. Da a prova, questu significa circa 40-50% accelerazione di tutte e chjama di gestione di memoria. Basta à cambià à i puntatori 64-bit è utilizendu stu novu spaziu.

Cunclusione

Ancu s'è i cuncurrenti pruvaranu di sparghje l'idea chì u muvimentu in una architettura di 64-bit ùn hè micca necessariu, sapete digià chì questu hè solu una opinione assai informata. Hè vera chì passà à 64-bit senza adattà a vostra lingua o l'applicazioni ùn significa micca veramente nunda - ancu rallenta tuttu u sistema. Ma u novu A7 usa un ARM64 mudernu cù un novu set di struzzioni, è Apple hà pigliatu u prublemu di mudernizà tutta a lingua Objective-C è prufittà di e novi capacità - da quì l'accelerazione prumessa.

Quì avemu menzionatu un gran numaru di ragiuni perchè una architettura di 64-bit hè u passu ghjustu avanti. Hè una altra rivoluzione "sottu u cappucciu", grazie à quale Apple pruverà à stà in prima linea micca solu cù u disignu, l'interfaccia d'utilizatore è l'ecosistema riccu, ma soprattuttu cù e tecnulugia più muderne di u mercatu.

Surghjente: mikeash.com
.