Funga tangazo

Mike Ash kujitolea kwenye blogi yake athari za vitendo za kubadili usanifu wa 64-bit katika iPhone 5S. Makala haya yanategemea matokeo yake.

Sababu ya maandishi haya ni hasa kutokana na kiasi kikubwa cha habari potofu inayoenezwa kuhusu kile ambacho iPhone 5 mpya yenye kichakataji cha 64-bit ARM ina maana kwa watumiaji na soko. Hapa tutajaribu kuleta maelezo ya lengo kuhusu utendakazi, uwezo na athari za mpito huu kwa wasanidi programu.

"64 kidogo"

Kuna sehemu mbili za kichakataji ambazo lebo ya "X-bit" inaweza kurejelea - upana wa rejista kamili na upana wa viashiria. Kwa bahati nzuri, kwa wasindikaji wengi wa kisasa upana huu ni sawa, kwa hiyo katika kesi ya A7 hii ina maana rejista za 64-bit integer na 64-bit pointers.

Walakini, ni muhimu pia kuashiria ni nini "64bit" haimaanishi: Ukubwa wa anwani ya kawaida ya RAM. Idadi ya biti za kuwasiliana na RAM (kwa hivyo kiasi cha RAM ambacho kifaa kinaweza kutumia) haihusiani na idadi ya biti za CPU. Vichakataji vya ARM vina anwani popote kati ya 26- na 40-bit na vinaweza kubadilishwa bila kujali mfumo mzima.

  • Ukubwa wa basi la data. Kiasi cha data iliyopokelewa kutoka kwa RAM au kumbukumbu ya bafa vile vile haitegemei kipengele hiki. Maagizo ya kichakataji binafsi yanaweza kuomba kiasi tofauti cha data, lakini yanatumwa kwa vipande vipande au kupokewa zaidi ya inavyohitajika kutoka kwa kumbukumbu. Inategemea saizi ya quantum ya data. IPhone 5 tayari inapokea data kutoka kwa kumbukumbu katika quanta ya 64-bit (na ina processor ya 32-bit), na tunaweza kukutana na ukubwa hadi 192 bits.
  • Kitu chochote kinachohusiana na sehemu ya kuelea. Saizi ya rejista kama hizo (FPU) hazitegemei tena kazi za ndani za processor. ARM imekuwa ikitumia FPU ya 64-bit tangu kabla ya ARM64 (kichakataji cha 64-bit ARM).

Faida na hasara za jumla

Ikiwa tutalinganisha usanifu wa 32bit na 64bit unaofanana, kwa ujumla sio tofauti. Hii ni moja ya sababu za mkanganyiko wa jumla wa umma kutafuta sababu kwa nini Apple inahamia 64bit katika vifaa vya rununu pia. Hata hivyo, yote yanatoka kwa vigezo maalum vya processor ya A7 (ARM64) na jinsi Apple inavyotumia, si tu kutokana na ukweli kwamba processor ina usanifu wa 64-bit.

Hata hivyo, ikiwa bado tunaangalia tofauti kati ya usanifu huu wawili, tutapata tofauti kadhaa. Jambo lililo wazi ni kwamba rejista kamili za biti 64 zinaweza kushughulikia nambari kamili za biti 64 kwa ufanisi zaidi. Hata kabla, iliwezekana kufanya kazi nao kwenye wasindikaji wa 32-bit, lakini hii kwa kawaida ilimaanisha kugawanya vipande vipande 32-bit, ambayo ilisababisha mahesabu ya polepole. Kwa hivyo kichakataji cha biti-64 kwa ujumla kinaweza kukokotoa na aina za biti-64 haraka kama zile za 32-bit. Hii ina maana kwamba programu ambazo kwa ujumla hutumia aina 64-bit zinaweza kufanya kazi kwa kasi zaidi kwenye kichakataji cha 64-bit.

Ingawa 64bit haiathiri jumla ya kiasi cha RAM ambacho kichakataji kinaweza kutumia, inaweza kurahisisha kufanya kazi na vipande vikubwa vya RAM katika programu moja. Programu yoyote moja inayoendeshwa kwenye kichakataji cha 32-bit ina takriban GB 4 tu ya nafasi ya anwani. Kwa kuzingatia kwamba mfumo wa uendeshaji na maktaba ya kawaida huchukua kitu, hii inaacha programu na mahali fulani kati ya GB 1-3 kwa matumizi ya maombi. Hata hivyo, ikiwa mfumo wa 32-bit una zaidi ya GB 4 ya RAM, kutumia kumbukumbu hiyo ni ngumu zaidi. Tunapaswa kuamua kulazimisha mfumo endeshi kuweka ramani hizi kubwa za kumbukumbu kwa programu yetu (uboreshaji wa kumbukumbu), au tunaweza kugawanya programu katika michakato mingi (ambapo kila mchakato tena kinadharia una GB 4 za kumbukumbu zinazopatikana kwa kushughulikia moja kwa moja).

Walakini, "haki" hizi ni ngumu sana na polepole kwamba kiwango cha chini cha programu huzitumia. Kwa mazoezi, kwenye kichakataji cha 32-bit, kila programu itatumia kumbukumbu yake ya GB 1-3 tu, na RAM inayopatikana zaidi inaweza kutumika kuendesha programu nyingi kwa wakati mmoja au kutumia kumbukumbu hii kama buffer (caching). Matumizi haya ni ya vitendo, lakini tungependa programu yoyote iweze kutumia kwa urahisi vipande vya kumbukumbu kubwa kuliko 4GB.

Sasa tunakuja kwa madai ya mara kwa mara (kwa kweli sio sahihi) kwamba bila zaidi ya 4GB ya kumbukumbu, usanifu wa 64-bit hauna maana. Nafasi kubwa ya anwani ni muhimu hata kwenye mfumo ulio na kumbukumbu kidogo. Faili zilizopangwa kwa kumbukumbu ni zana inayofaa ambapo sehemu ya yaliyomo kwenye faili huunganishwa kimantiki na kumbukumbu ya mchakato bila faili nzima kupakiwa kwenye kumbukumbu. Kwa hivyo, mfumo unaweza, kwa mfano, hatua kwa hatua kusindika faili kubwa mara nyingi zaidi kuliko uwezo wa RAM. Kwenye mfumo wa 32-bit, faili kubwa kama hizo haziwezi kupangwa kwa kumbukumbu, wakati kwenye mfumo wa 64-bit, ni kipande cha keki, shukrani kwa nafasi kubwa zaidi ya anwani.

Walakini, saizi kubwa ya viashiria pia huleta shida moja kubwa: vinginevyo programu zinazofanana zinahitaji kumbukumbu zaidi kwenye kichakataji cha 64-bit (viashiria hivi vikubwa vinapaswa kuhifadhiwa mahali pengine). Kwa kuwa viashiria ni sehemu ya mara kwa mara ya programu, tofauti hii inaweza kubeba cache, ambayo husababisha mfumo mzima kufanya kazi polepole. Kwa hivyo kwa mtazamo, tunaweza kuona kwamba ikiwa tungebadilisha usanifu wa processor hadi 64-bit, itapunguza kasi ya mfumo mzima. Kwa hivyo jambo hili lazima lisawazishwe na uboreshaji zaidi katika maeneo mengine.

ARM64

A7, kichakataji cha 64-bit kinachoendesha iPhone 5s mpya, sio kichakataji cha kawaida cha ARM na rejista pana zaidi. ARM64 ina maboresho makubwa zaidi ya toleo la zamani, la 32-bit.

Kichakataji cha Apple A7.

Msajili

ARM64 inashikilia rejista kamili mara mbili ya 32-bit ARM (kuwa mwangalifu usichanganye idadi na upana wa rejista - tulizungumza juu ya upana katika sehemu ya "64-bit". Kwa hivyo ARM64 ina rejista pana mara mbili na mara mbili zaidi. madaftari). ARM ya biti 32 ina rejista 16 kamili: kaunta moja ya programu (PC - ina nambari ya maagizo ya sasa), kiashiria cha mrundikano (kielekezi cha kazi inayoendelea), rejista ya kiunga (kielekezi cha kurudi baada ya mwisho. ya kitendakazi), na 13 zilizobaki ni za matumizi ya programu. Hata hivyo, ARM64 ina rejista 32 kamili, ikiwa ni pamoja na rejista moja ya sifuri, rejista ya kiungo, kiashiria cha fremu (sawa na kiashiria cha mrundikano), na moja iliyohifadhiwa kwa siku zijazo. Hii inatuacha na rejista 28 za matumizi ya programu, zaidi ya mara mbili ya ARM ya 32-bit. Wakati huo huo, ARM64 iliongeza mara mbili idadi ya rejista za nambari za kuelea (FPU) kutoka 16 hadi 32 rejista za 128-bit.

Lakini kwa nini idadi ya rejista ni muhimu sana? Kumbukumbu kwa ujumla ni ya polepole kuliko hesabu za CPU na kusoma/kuandika kunaweza kuchukua muda mrefu sana. Hii ingefanya kichakataji cha haraka kiendelee kusubiri kumbukumbu na tungefikia kikomo cha kasi cha asili cha mfumo. Wachakataji hujaribu kuficha ulemavu huu kwa tabaka za bafa, lakini hata ile ya haraka sana (L1) bado ni ya polepole kuliko hesabu ya kichakataji. Hata hivyo, rejista ni seli za kumbukumbu moja kwa moja kwenye kichakataji na kusoma/kuandika kwao ni haraka vya kutosha kutopunguza kasi ya kichakataji. Idadi ya rejista inamaanisha kiasi cha kumbukumbu ya haraka zaidi kwa mahesabu ya processor, ambayo huathiri sana kasi ya mfumo mzima.

Wakati huo huo, kasi hii inahitaji usaidizi mzuri wa uboreshaji kutoka kwa mkusanyaji ili lugha iweze kutumia rejista hizi na sio lazima kuhifadhi kila kitu kwenye kumbukumbu ya jumla ya matumizi (polepole).

Seti ya maagizo

ARM64 pia huleta mabadiliko makubwa kwa seti ya maagizo. Seti ya maagizo ni seti ya shughuli za atomiki ambazo kichakataji kinaweza kufanya (kwa mfano, 'ADD register1 register2' huongeza nambari katika rejista mbili). Kazi zinazopatikana kwa lugha za kibinafsi zinajumuisha maagizo haya. Vitendaji ngumu zaidi lazima vitekeleze maagizo zaidi, ili viweze kuwa polepole.

Mpya katika ARM64 ni maagizo ya usimbaji fiche wa AES, SHA-1 na vitendaji vya heshi vya SHA-256. Kwa hivyo badala ya utekelezaji mgumu, lugha pekee ndiyo itaita maagizo haya - ambayo yataleta kasi kubwa kwa hesabu ya kazi kama hizo na kwa matumaini kuongeza usalama katika programu. K.m. Kitambulisho kipya cha Kugusa pia hutumia maagizo haya katika usimbaji fiche, kuruhusu kasi na usalama halisi (kwa nadharia, mshambulizi atalazimika kurekebisha kichakataji chenyewe ili kufikia data - ambayo haiwezekani kusema hata kidogo kutokana na ukubwa wake mdogo).

Utangamano na 32bit

Ni muhimu kutaja kwamba A7 inaweza kukimbia kikamilifu katika hali ya 32-bit bila hitaji la kuiga. Inamaanisha kuwa iPhone 5s mpya zinaweza kuendesha programu zilizokusanywa kwenye 32-bit ARM bila kushuka kwa kasi yoyote. Walakini, basi haiwezi kutumia kazi mpya za ARM64, kwa hivyo inafaa kila wakati kutengeneza muundo maalum kwa A7, ambayo inapaswa kukimbia haraka zaidi.

Mabadiliko ya wakati wa utekelezaji

Runtime ni msimbo unaoongeza vitendaji kwa lugha ya programu, ambayo inaweza kutumia wakati programu inaendeshwa, hadi baada ya tafsiri. Kwa kuwa Apple haihitaji kudumisha upatanifu wa programu (kwamba mfumo wa binary wa 64-bit unatumia 32-bit), wanaweza kumudu kufanya maboresho machache zaidi kwa lugha ya Objective-C.

Mmoja wao ni kinachojulikana kiashiria kilichowekwa alama (kiashiria chenye alama). Kwa kawaida, vitu na viashiria kwa vitu hivyo huhifadhiwa katika sehemu tofauti za kumbukumbu. Walakini, aina mpya za vielelezo huruhusu darasa zilizo na data kidogo kuhifadhi vitu moja kwa moja kwenye kielekezi. Hatua hii huondoa hitaji la kutenga kumbukumbu moja kwa moja kwa kitu, tengeneza tu pointer na kitu kilicho ndani yake. Viashiria vilivyowekwa alama vinatumika tu katika usanifu wa 64-bit pia kutokana na ukweli kwamba hakuna nafasi ya kutosha katika kielekezi cha 32-bit ili kuhifadhi data muhimu ya kutosha. Kwa hiyo, iOS, tofauti na OS X, bado haikuunga mkono kipengele hiki. Walakini, kwa kuwasili kwa ARM64, hii inabadilika, na iOS imeshikamana na OS X katika suala hili pia.

Ingawa viashiria vina urefu wa biti 64, kwenye ARM64 biti 33 pekee ndizo hutumika kwa anwani ya kielekezi. Na ikiwa tunaweza kufichua vijiti vingine vya vielelezo kwa uhakika, tunaweza kutumia nafasi hii kuhifadhi data ya ziada - kama ilivyo kwa viashiria vilivyotajwa. Kwa dhana, hii ni moja ya mabadiliko makubwa katika historia ya Lengo-C, ingawa sio kipengele cha soko - kwa hivyo watumiaji wengi hawatajua jinsi Apple inavyosonga Objective-C mbele.

Kuhusu data muhimu ambayo inaweza kuhifadhiwa katika nafasi iliyobaki ya kielekezi kama hicho, Lengo-C, kwa mfano, sasa inaitumia kuhifadhi kinachojulikana kama pointer. hesabu ya kumbukumbu (idadi ya marejeleo). Hapo awali, hesabu ya marejeleo ilihifadhiwa mahali tofauti kwenye kumbukumbu, katika jedwali la hashi iliyoandaliwa kwa ajili yake, lakini hii inaweza kupunguza kasi ya mfumo mzima katika kesi ya idadi kubwa ya simu za alloc/dealloc/retain/release. Jedwali lilipaswa kufungwa kwa sababu ya usalama wa nyuzi, kwa hivyo hesabu ya kumbukumbu ya vitu viwili kwenye nyuzi mbili haikuweza kubadilishwa kwa wakati mmoja. Hata hivyo, thamani hii ni wapya kuingizwa katika mapumziko ya kinachojulikana isa viashiria. Hii ni faida nyingine isiyoonekana, lakini kubwa na kuongeza kasi katika siku zijazo. Walakini, hii haiwezi kamwe kupatikana katika usanifu wa 32-bit.

Taarifa kuhusu vitu vinavyohusishwa, ikiwa kitu kinarejelewa kwa unyonge, ikiwa ni muhimu kutengeneza kiharibifu kwa kitu, n.k., pia imeingizwa upya katika sehemu iliyobaki ya vielelezo vya vitu. Shukrani kwa maelezo haya, Lengo-C. Runtime inaweza kuharakisha kimsingi wakati wa kukimbia, ambao unaonyeshwa kwa kasi ya kila programu. Kutoka kwa majaribio, hii ina maana kuhusu kasi ya 40-50% ya simu zote za usimamizi wa kumbukumbu. Kwa kubadili tu viashiria 64-bit na kutumia nafasi hii mpya.

záver

Ingawa washindani watajaribu kueneza wazo kwamba kuhamia usanifu wa 64-bit sio lazima, utajua tayari kuwa hii ni maoni tu ambayo hayana habari. Ni kweli kwamba kubadili hadi 64-bit bila kurekebisha lugha yako au programu haimaanishi chochote - hata hupunguza kasi ya mfumo mzima. Lakini A7 mpya hutumia ARM64 ya kisasa iliyo na seti mpya ya maagizo, na Apple imechukua shida kusasisha lugha nzima ya Objective-C na kuchukua fursa ya uwezo mpya - kwa hivyo kasi iliyoahidiwa.

Hapa tumetaja idadi kubwa ya sababu kwa nini usanifu wa 64-bit ni hatua sahihi mbele. Ni mapinduzi mengine "chini ya kofia", shukrani ambayo Apple itajaribu kukaa mstari wa mbele sio tu na muundo, interface ya mtumiaji na mfumo wa ikolojia tajiri, lakini haswa na teknolojia za kisasa zaidi kwenye soko.

Zdroj: mikeash.com
.