Isara ang ad

Mike Ash dedicated sa blog niya ang mga praktikal na implikasyon ng paglipat sa 64-bit na arkitektura sa iPhone 5S. Ang artikulong ito ay kumukuha sa kanyang mga natuklasan.

Ang dahilan para sa tekstong ito ay higit sa lahat dahil sa malaking halaga ng maling impormasyon na kumakalat tungkol sa kung ano talaga ang ibig sabihin ng bagong iPhone 5s na may 64-bit ARM processor para sa mga user at sa merkado. Dito ay susubukan naming magdala ng layuning impormasyon tungkol sa pagganap, mga kakayahan at mga implikasyon ng paglipat na ito para sa mga developer.

"64 bit"

Mayroong dalawang bahagi ng isang processor na maaaring sumangguni sa label na "X-bit" - ang lapad ng mga integer register at ang lapad ng mga pointer. Sa kabutihang palad, sa karamihan ng mga modernong processor ang mga lapad na ito ay pareho, kaya sa kaso ng A7 nangangahulugan ito ng 64-bit integer registers at 64-bit pointer.

Gayunpaman, parehong mahalaga na ituro kung ano ang HINDI ibig sabihin ng "64bit": Laki ng pisikal na address ng RAM. Ang bilang ng mga bit upang makipag-ugnayan sa RAM (kaya ang dami ng RAM na maaaring suportahan ng isang aparato) ay hindi nauugnay sa bilang ng mga bit ng CPU. Ang mga processor ng ARM ay may kahit saan sa pagitan ng 26- at 40-bit na mga address at maaaring baguhin nang hiwalay sa iba pang bahagi ng system.

  • Laki ng data bus. Ang dami ng data na natanggap mula sa RAM o buffer memory ay katulad na independiyente sa kadahilanang ito. Ang mga indibiduwal na tagubilin sa processor ay maaaring humiling ng iba't ibang dami ng data, ngunit ang mga ito ay ipinadala sa mga tipak o natatanggap ng higit sa kinakailangan mula sa memorya. Depende ito sa laki ng data quantum. Ang iPhone 5 ay nakakatanggap na ng data mula sa memorya sa 64-bit quanta (at may 32-bit na processor), at maaari tayong makatagpo ng mga sukat na hanggang 192 bits.
  • Anumang bagay na nauugnay sa floating point. Ang laki ng naturang mga rehistro (FPU) ay muling independiyente sa mga panloob na gawain ng processor. Gumagamit ang ARM ng 64-bit FPU mula noong bago ang ARM64 (64-bit ARM processor).

Pangkalahatang mga pakinabang at disadvantages

Kung ihahambing natin ang magkaparehong 32bit at 64bit na mga arkitektura, sa pangkalahatan ay hindi gaanong naiiba ang mga ito. Isa ito sa mga dahilan ng pangkalahatang pagkalito ng publiko na naghahanap ng dahilan kung bakit lumilipat din ang Apple sa 64bit sa mga mobile device. Gayunpaman, ang lahat ay nagmumula sa mga partikular na parameter ng processor ng A7 (ARM64) at kung paano ito ginagamit ng Apple, hindi lamang mula sa katotohanan na ang processor ay may 64-bit na arkitektura.

Gayunpaman, kung titingnan pa rin natin ang mga pagkakaiba sa pagitan ng dalawang arkitektura na ito, makakahanap tayo ng ilang pagkakaiba. Ang halata ay ang 64-bit integer registers ay maaaring humawak ng 64-bit integers nang mas mahusay. Kahit na dati, posible na magtrabaho kasama ang mga ito sa 32-bit na mga processor, ngunit ito ay karaniwang nangangahulugan na hatiin ang mga ito sa 32-bit na mahabang piraso, na nagdulot ng mas mabagal na mga kalkulasyon. Kaya ang isang 64-bit na processor ay karaniwang maaaring mag-compute sa mga 64-bit na uri na kasing bilis ng mga 32-bit na mga uri. Nangangahulugan ito na ang mga application na karaniwang gumagamit ng mga 64-bit na uri ay maaaring tumakbo nang mas mabilis sa isang 64-bit na processor.

Bagama't hindi naaapektuhan ng 64bit ang kabuuang halaga ng RAM na magagamit ng processor, maaari nitong gawing mas madali ang pagtatrabaho sa malalaking tipak ng RAM sa isang programa. Ang anumang solong program na tumatakbo sa isang 32-bit na processor ay mayroon lamang humigit-kumulang 4 GB ng address space. Isinasaalang-alang na ang operating system at karaniwang mga aklatan ay kumukuha ng isang bagay, nag-iiwan ito sa programa ng isang lugar sa pagitan ng 1-3 GB para sa paggamit ng application. Gayunpaman, kung ang isang 32-bit system ay may higit sa 4 GB ng RAM, ang paggamit ng memorya na iyon ay medyo mas kumplikado. Kailangan nating pilitin ang operating system na imapa ang mas malalaking tipak ng memory na ito para sa ating programa (memory virtualization), o maaari nating hatiin ang program sa maraming proseso (kung saan ang bawat proseso ay muli sa teoryang may 4GB ng memorya na magagamit para sa direktang pagtugon).

Gayunpaman, ang mga "hack" na ito ay napakahirap at mabagal na ang isang minimum na mga application ay gumagamit ng mga ito. Sa pagsasagawa, sa isang 32-bit na processor, ang bawat programa ay gagamit lamang ng 1-3 GB ng memorya nito, at ang mas maraming available na RAM ay maaaring gamitin upang magpatakbo ng maraming program nang sabay-sabay o gamitin ang memorya na ito bilang buffer (caching). Praktikal ang mga paggamit na ito, ngunit gusto naming madaling magamit ng anumang programa ang mga tipak ng memorya na mas malaki kaysa sa 4GB.

Ngayon ay dumating kami sa madalas (aktwal na hindi tama) claim na walang higit sa 4GB ng memorya, ang isang 64-bit na arkitektura ay walang silbi. Ang isang mas malaking address space ay kapaki-pakinabang kahit na sa isang system na may mas kaunting memorya. Ang memory-mapped na mga file ay isang madaling gamiting tool kung saan ang bahagi ng mga nilalaman ng file ay lohikal na naka-link sa memorya ng proseso nang hindi kinakailangang i-load ang buong file sa memorya. Kaya, ang system ay maaaring, halimbawa, unti-unting magproseso ng malalaking file nang maraming beses na mas malaki kaysa sa kapasidad ng RAM. Sa isang 32-bit system, ang mga malalaking file ay hindi mapagkakatiwalaan na memory-mapped, samantalang sa isang 64-bit system, ito ay isang piraso ng cake, salamat sa mas malaking address space.

Gayunpaman, ang mas malaking sukat ng mga pointer ay nagdudulot din ng isang malaking kawalan: kung hindi, ang magkaparehong mga programa ay nangangailangan ng higit na memorya sa isang 64-bit na processor (ang mga mas malalaking pointer na ito ay kailangang itago sa isang lugar). Dahil ang mga pointer ay isang madalas na bahagi ng mga programa, ang pagkakaibang ito ay maaaring magpabigat sa cache, na nagiging sanhi ng buong sistema na tumakbo nang mas mabagal. Kaya sa pananaw, makikita natin na kung babaguhin lang natin ang arkitektura ng processor sa 64-bit, ito ay talagang magpapabagal sa buong sistema. Kaya ang salik na ito ay kailangang balansehin ng higit pang mga pag-optimize sa ibang mga lugar.

ARM64

Ang A7, ang 64-bit na processor na nagpapagana sa bagong iPhone 5s, ay hindi lamang isang regular na processor ng ARM na may mas malawak na mga rehistro. Ang ARM64 ay naglalaman ng mga pangunahing pagpapahusay sa mas lumang, 32-bit na bersyon.

Proseso ng Apple A7.

pagpapatala

Ang ARM64 ay mayroong dalawang beses na mas maraming integer na rehistro kaysa sa 32-bit na ARM (mag-ingat na huwag malito ang bilang at lapad ng mga rehistro - pinag-usapan namin ang lapad sa seksyong "64-bit". Kaya ang ARM64 ay may dalawang beses na mas malawak na mga rehistro at dalawang beses na mas marami mga rehistro). Ang 32-bit ARM ay may 16 na integer na rehistro: isang program counter (PC - naglalaman ng bilang ng kasalukuyang pagtuturo), isang stack pointer (isang pointer sa isang function na isinasagawa), isang link register (isang pointer sa pagbabalik pagkatapos ng pagtatapos. ng function), at ang natitirang 13 ay para sa paggamit ng application. Gayunpaman, ang ARM64 ay may 32 integer register, kabilang ang isang zero register, isang link register, isang frame pointer (katulad ng isang stack pointer), at isang nakalaan para sa hinaharap. Nag-iiwan ito sa amin ng 28 na rehistro para sa paggamit ng application, higit sa doble ang 32-bit na ARM. Kasabay nito, dinoble ng ARM64 ang bilang ng floating-point number (FPU) na mga rehistro mula 16 hanggang 32 128-bit na mga rehistro.

Ngunit bakit napakahalaga ng bilang ng mga rehistro? Karaniwang mas mabagal ang memorya kaysa sa mga kalkulasyon ng CPU at maaaring tumagal ng napakahabang panahon ang pagbabasa/pagsusulat. Ito ay gagawing ang mabilis na processor ay kailangang patuloy na maghintay para sa memorya at maabot namin ang natural na limitasyon ng bilis ng system. Sinusubukan ng mga processor na itago ang kapansanan na ito sa mga layer ng buffer, ngunit kahit na ang pinakamabilis (L1) ay mas mabagal pa rin kaysa sa pagkalkula ng processor. Gayunpaman, ang mga rehistro ay mga memory cell nang direkta sa processor at ang kanilang pagbabasa/pagsusulat ay sapat na mabilis upang hindi pabagalin ang processor. Ang bilang ng mga rehistro ay halos nangangahulugan ng dami ng pinakamabilis na memorya para sa mga kalkulasyon ng processor, na lubos na nakakaapekto sa bilis ng buong system.

Kasabay nito, ang bilis na ito ay nangangailangan ng mahusay na suporta sa pag-optimize mula sa compiler, upang magamit ng wika ang mga rehistrong ito at hindi kailangang iimbak ang lahat sa pangkalahatang application (ang mabagal) na memorya.

Listahan ng dapat gagawin

Ang ARM64 ay nagdadala din ng malalaking pagbabago sa set ng pagtuturo. Ang set ng pagtuturo ay isang set ng atomic operations na maaaring gawin ng isang processor (hal. 'ADD register1 register2' ay nagdaragdag ng mga numero sa dalawang register). Ang mga function na magagamit sa mga indibidwal na wika ay binubuo ng mga tagubiling ito. Ang mga mas kumplikadong pag-andar ay dapat magsagawa ng higit pang mga tagubilin, upang maaari silang maging mas mabagal.

Bago sa ARM64 ay mga tagubilin para sa AES encryption, SHA-1 at SHA-256 hash functions. Kaya sa halip na isang kumplikadong pagpapatupad, ang wika lamang ang tatawag sa pagtuturo na ito - na magdadala ng isang malaking bilis sa pagkalkula ng mga naturang function at sana ay magdagdag ng seguridad sa mga application. Hal. ginagamit din ng bagong Touch ID ang mga tagubiling ito sa pag-encrypt, na nagbibigay-daan para sa tunay na bilis at seguridad (sa teorya, kailangang baguhin ng isang attacker ang mismong processor para ma-access ang data - na hindi praktikal na sabihin ang pinakamaliit na ibinigay sa maliit na laki nito).

Pagkatugma sa 32bit

Mahalagang banggitin na ang A7 ay maaaring tumakbo nang buo sa 32-bit na mode nang hindi nangangailangan ng pagtulad. Nangangahulugan ito na ang bagong iPhone 5s ay maaaring magpatakbo ng mga application na pinagsama-sama sa 32-bit ARM nang walang anumang pagbagal. Gayunpaman, hindi nito magagamit ang mga bagong function ng ARM64, kaya laging sulit na gumawa ng espesyal na build para lamang sa A7, na dapat tumakbo nang mas mabilis.

Mga pagbabago sa runtime

Ang Runtime ay ang code na nagdaragdag ng mga function sa programming language, na magagamit nito habang tumatakbo ang application, hanggang pagkatapos ng pagsasalin. Dahil hindi kailangang panatilihin ng Apple ang pagiging tugma ng application (na ang isang 64-bit na binary ay tumatakbo sa 32-bit), kaya nilang gumawa ng ilang higit pang mga pagpapabuti sa wikang Objective-C.

Ang isa sa kanila ay ang tinatawag na naka-tag na pointer (may markang tagapagpahiwatig). Karaniwan, ang mga bagay at pointer sa mga bagay na iyon ay nakaimbak sa magkahiwalay na bahagi ng memorya. Gayunpaman, pinapayagan ng mga bagong uri ng pointer ang mga klase na may kaunting data na mag-imbak ng mga bagay nang direkta sa pointer. Ang hakbang na ito ay nag-aalis ng pangangailangan na direktang maglaan ng memorya para sa bagay, lumikha lamang ng isang pointer at ang bagay sa loob nito. Ang mga naka-tag na pointer ay sinusuportahan lamang sa 64-bit na arkitektura dahil din sa katotohanan na wala nang sapat na espasyo sa isang 32-bit na pointer upang mag-imbak ng sapat na kapaki-pakinabang na data. Samakatuwid, ang iOS, hindi katulad ng OS X, ay hindi pa sumusuporta sa tampok na ito. Gayunpaman, sa pagdating ng ARM64, nagbabago ito, at naabutan din ng iOS ang OS X sa bagay na ito.

Kahit na ang mga pointer ay 64 bits ang haba, sa ARM64 33 bits lamang ang ginagamit para sa sariling address ng pointer. At kung mapagkakatiwalaan nating i-unmask ang natitirang bahagi ng pointer bits, magagamit natin ang espasyong ito para mag-imbak ng karagdagang data – tulad ng sa kaso ng mga nabanggit na naka-tag na pointer. Sa konsepto, isa ito sa mga pinakamalaking pagbabago sa kasaysayan ng Objective-C, bagama't hindi ito isang feature na nabibili - kaya hindi malalaman ng karamihan sa mga user kung paano isinusulong ng Apple ang Objective-C.

Tulad ng para sa kapaki-pakinabang na data na maaaring maimbak sa natitirang espasyo ng naturang naka-tag na pointer, ang Objective-C, halimbawa, ay ginagamit na ngayon upang iimbak ang tinatawag na bilang ng sanggunian (bilang ng mga sanggunian). Dati, ang bilang ng sanggunian ay nakaimbak sa ibang lugar sa memorya, sa isang hash table na inihanda para dito, ngunit maaari nitong pabagalin ang buong system sa kaso ng malaking bilang ng mga alloc/dealloc/retain/release na mga tawag. Kinailangang i-lock ang talahanayan dahil sa kaligtasan ng thread, kaya ang bilang ng reference ng dalawang bagay sa dalawang thread ay hindi maaaring baguhin nang sabay. Gayunpaman, ang halagang ito ay bagong ipinasok sa natitirang bahagi ng tinatawag na isa mga tagapagpahiwatig. Ito ay isa pang hindi mahalata, ngunit malaking kalamangan at acceleration sa hinaharap. Gayunpaman, hinding-hindi ito makakamit sa isang 32-bit na arkitektura.

Ang impormasyon tungkol sa mga nauugnay na bagay, kung ang bagay ay mahina ang pagtukoy, kung kinakailangan upang makabuo ng isang destructor para sa bagay, atbp., ay bagong ipinasok din sa natitirang lugar ng mga pointer sa mga bagay. Salamat sa impormasyong ito, ang Objective-C Ang runtime ay nagagawang pabilisin ang runtime, na makikita sa bilis ng bawat aplikasyon. Mula sa pagsubok, nangangahulugan ito ng tungkol sa 40-50% na bilis ng lahat ng mga tawag sa pamamahala ng memorya. Sa pamamagitan lamang ng paglipat sa 64-bit na mga pointer at paggamit ng bagong espasyong ito.

Konklusyon

Bagama't susubukan ng mga kakumpitensya na ipalaganap ang ideya na ang paglipat sa isang 64-bit na arkitektura ay hindi kailangan, malalaman mo na na ito ay isang napakawalang kaalamang opinyon lamang. Totoo na ang simpleng paglipat sa 64bit nang hindi inaangkop ang wika o mga application dito ay hindi talaga ibig sabihin - kahit na pinapabagal nito ang buong system. Ngunit ang bagong A7 ay gumagamit ng modernong ARM64 na may bagong set ng pagtuturo, at pinaghirapan ng Apple na gawing moderno ang buong wika ng Objective-C at samantalahin ang mga bagong kakayahan - kaya ang ipinangakong bilis.

Dito nabanggit namin ang isang malaking bilang ng mga dahilan kung bakit ang isang 64-bit na arkitektura ay ang tamang hakbang pasulong. Ito ay isa pang rebolusyon "sa ilalim ng hood", salamat sa kung saan susubukan ng Apple na manatili sa unahan hindi lamang sa disenyo, interface ng gumagamit at mayamang ekosistema, ngunit higit sa lahat sa mga pinaka-modernong teknolohiya sa merkado.

Pinagmulan: Mikeash.com
.