Жарнама жабуу

Майк Эш өзүнүн блогунда арналган iPhone 64Sдеги 5 биттик архитектурага өтүүнүн практикалык натыйжалары. Бул макала анын жыйынтыктарына таянат.

Бул тексттин себеби, негизинен, 5 биттик ARM процессору бар жаңы iPhone 64s колдонуучулар жана рынок үчүн чындыгында эмнени билдире тургандыгы жөнүндө туура эмес маалыматтардын көп таралышы менен шартталган. Бул жерде биз иштеп чыгуучулар үчүн бул өткөөлдүн натыйжалуулугу, мүмкүнчүлүктөрү жана кесепеттери жөнүндө объективдүү маалымат берүүгө аракет кылабыз.

"64 бит"

Процессордун эки бөлүктөрү бар, аларга "X-бит" энбелгиси кайрыла алат - бүтүн регистрлердин туурасы жана көрсөткүчтөрдүн туурасы. Бактыга жараша, көпчүлүк заманбап процессорлордо бул кеңдиктер бирдей, ошондуктан A7де бул 64 биттик бүтүн регистрлерди жана 64 бит көрсөткүчтөрдү билдирет.

Бирок, "64бит" деген эмнени билдирбейт: RAM физикалык дарек өлчөмү. RAM менен байланышуу үчүн биттердин саны (ошондуктан аппарат колдоого ала турган RAM көлөмү) CPU биттеринин санына байланыштуу эмес. ARM процессорлору 26 жана 40 биттик даректерге ээ жана системанын калган бөлүгүнөн көз карандысыз өзгөртүлүшү мүмкүн.

  • Маалымат автобусунун өлчөмү. RAM же буфердик эстутумдан алынган маалыматтардын көлөмү да ушул фактордон көз каранды эмес. Процессордун жеке инструкциялары ар кандай көлөмдөгү маалыматтарды талап кылышы мүмкүн, бирок алар же бөлүктөргө бөлүнүп жиберилет же эстутумдан керектүүдөн көбүрөөк кабыл алынат. Бул маалымат квантынын өлчөмүнө жараша болот. iPhone 5 эстутумдан маалыматтарды 64 биттик кванттарда кабыл алат (жана 32 биттик процессору бар) жана биз 192 битке чейинки өлчөмдөргө туш болушубуз мүмкүн.
  • Калкыма чекит менен байланышкан бардык нерсе. Мындай регистрлердин өлчөмү (FPU) кайра процессордун ички иштерине көз каранды эмес. ARM ARM64 (64-бит ARM процессору) мурунтан бери 64-бит FPU колдонуп келет.

Жалпы артыкчылыктары жана кемчиликтери

Эгерде биз окшош 32бит жана 64бит архитектураларды салыштырсак, алар жалпысынан анчалык деле айырмаланбайт. Бул Apple мобилдик түзмөктөрдө да 64битке көчүп жатканынын себебин издеп жаткан коомчулуктун жалпы башаламандыгынын себептеринин бири. Бирок, мунун баары A7 (ARM64) процессорунун спецификалык параметрлеринен жана Apple аны кантип колдонот, процессордун 64 биттик архитектурасына ээ болгондугунан гана эмес.

Бирок, эгерде биз дагы эле бул эки архитектуранын ортосундагы айырмачылыктарды карап чыга турган болсок, анда биз бир нече айырмачылыктарды табабыз. Ачык нерсе, 64 биттик бүтүн сандарды регистрлер 64 биттик бүтүн сандарды натыйжалуураак иштете алат. Мурда да алар менен 32 биттик процессорлордо иштөөгө мүмкүн болгон, бирок бул адатта аларды 32 биттик узун бөлүктөргө бөлүүнү билдирген, бул жайыраак эсептөөлөрдү шарттаган. Ошентип, 64 биттик процессор жалпысынан 64 биттик типтер менен 32 биттиктер сыяктуу тез эсептей алат. Бул жалпысынан 64 биттик типтерди колдонгон тиркемелер 64 биттик процессордо тезирээк иштей аларын билдирет.

64 бит процессор колдоно турган оперативдүү эс тутумдун жалпы көлөмүнө таасирин тийгизбесе да, бир программада оперативдүү эстутумдун чоң бөлүктөрү менен иштөөнү жеңилдетет. 32 биттик процессордо иштеген ар бир программанын 4 ГБга жакын дарек мейкиндиги бар. Иштетүү системасы жана стандарттык китепканалар бир нерсени ээлей турганын эске алуу менен, бул программаны колдонуу үчүн 1-3 ГБ арасында калтырат. Бирок, 32 биттик системада 4 ГБ ашык оперативдүү эс тутум болсо, ал эстутумду колдонуу бир аз татаалыраак. Биз операциялык системаны программабыз үчүн эстутумдун бул чоң бөлүктөрүн картага түшүрүүгө мажбурлашыбыз керек (эстуумду виртуалдаштыруу) же биз программаны бир нече процесстерге бөлө алабыз (мында ар бир процессте теориялык жактан түз дарек үчүн 4 ГБ эстутум бар).

Бирок, бул "хактер" ушунчалык кыйын жана жай болгондуктан, аларды минималдуу тиркемелер колдонот. Иш жүзүндө, 32 биттик процессордо ар бир программа өзүнүн 1-3 ГБ эстутумун гана колдонот, ал эми көбүрөөк жеткиликтүү оперативдик эстутум бир эле учурда бир нече программаларды иштетүү үчүн же бул эстутумду буфер (кэш) катары колдонуу үчүн колдонулушу мүмкүн. Бул колдонуу практикалык, бирок биз каалаган программанын 4 ГБдан чоңураак эстутумдун бөлүктөрүн оңой колдоно алышын каалайбыз.

Эми биз 4 ГБдан ашык эстутумсуз 64 биттик архитектура пайдасыз деген тез-тез (чындыгында туура эмес) дооматка келе жатабыз. Чоңураак дарек мейкиндиги эс тутуму азыраак системада да пайдалуу. Эстутум картасына түшүрүлгөн файлдар файлдын мазмунунун бир бөлүгү процесстин эс тутумуна логикалык жактан байланышкан, бүт файл эстутумга жүктөлбөй турган ыңгайлуу курал. Ошентип, система, мисалы, RAM сыйымдуулугунан бир нече эсе чоң файлдарды акырындык менен иштете алат. 32 биттик системада мындай чоң файлдарды эстутум картасына ишенимдүүлүк менен түшүрүү мүмкүн эмес, ал эми 64 биттик тутумда бул бир топ чоң дарек мейкиндигинин аркасында бир кесим болуп саналат.

Бирок көрсөткүчтөрдүн чоңураак көлөмү дагы бир чоң кемчиликти алып келет: антпесе, окшош программалар 64 биттик процессордо көбүрөөк эстутумду талап кылат (бул чоңураак көрсөткүчтөр бир жерде сакталышы керек). Көрсөткүчтөр программалардын көп бөлүгү болгондуктан, бул айырма кэшти оорлотушу мүмкүн, бул өз кезегинде бүт системанын жайыраак иштешине алып келет. Ошентип, келечекте биз процессордун архитектурасын 64-битке өзгөртсөк, ал иш жүзүндө бүт системаны жайлатаарын көрө алабыз. Демек, бул фактор башка жерлерде көбүрөөк оптималдаштыруу менен тең салмактуу болушу керек.

ARM64

A7, жаңы iPhone 64sти иштеткен 5-бит процессору, жөн гана кеңири регистрлери бар кадимки ARM процессору эмес. ARM64 эски, 32 биттик версияга караганда негизги жакшыртууларды камтыйт.

Apple A7 процессору.

каттоо

ARM64 32 биттик ARMге караганда эки эсе көп бүтүн регистрлерди камтыйт (регистрлердин санын жана туурасын чаташтырбоо үчүн этият болуңуз – биз "64 бит" бөлүмүндө туурасы жөнүндө сөз кылганбыз. Ошентип, ARM64 эки эсе кенен жана эки эсе көп регистрлерге ээ. регистрлер). 32 биттик ARMде 16 бүтүн регистр бар: бир программалык эсептегич (PC - учурдагы нускаманын номерин камтыйт), стек көрсөткүчү (орындалып жаткан функцияга көрсөткүч), шилтеме регистр (функция аяктагандан кийин кайтарылуучу көрсөткүч аяктаган), ал эми калган 13 колдонмо колдонуу үчүн. Бирок, ARM64 32 бүтүн регистрге ээ, анын ичинде бир нөл регистр, шилтеме регистр, кадр көрсөткүчү (стек көрсөткүчүнө окшош) жана бири келечек үчүн сакталган. Бул бизге тиркемени колдонуу үчүн 28 регистрди калтырат, бул 32 биттик ARMден эки эсе көп. Ошол эле учурда, ARM64 калкыма чекиттүү номерлердин (FPU) санын 16дан 32 128 биттик регистрге чейин эки эсеге көбөйттү.

Бирок эмне үчүн реестрлердин саны мынчалык маанилүү? Эс тутум көбүнчө CPU эсептөөлөрүнө караганда жайыраак жана окуу/жазуу өтө көп убакытты талап кылышы мүмкүн. Бул тез процессорду эс тутумун күтүүгө мажбур кылат жана биз системанын табигый ылдамдык чегине жетебиз. Процессорлор бул кемчиликти буферлердин катмарлары менен жашырууга аракет кылышат, бирок эң ылдам (L1) дагы процессордун эсептөөсүнөн жайыраак. Бирок, регистрлер түздөн-түз процессордогу эс тутум клеткалары жана алардын окуу/жазылышы процессорду жайлатуу үчүн жетиштүү ылдам. Регистрлердин саны иш жүзүндө процессордук эсептөөлөр үчүн эң тез эс тутумдун көлөмүн билдирет, бул бүткүл системанын ылдамдыгына чоң таасирин тийгизет.

Ошол эле учурда бул ылдамдык компилятордун жакшы оптималдаштыруу колдоосун талап кылат, андыктан тил бул регистрлерди колдоно алат жана бардыгын жалпы колдонмонун (жай) эс тутумунда сактоонун кажети жок.

Көрсөтмө топтому

ARM64 ошондой эле нускама топтомуна негизги өзгөртүүлөрдү киргизет. Инструкциялар топтому - бул процессор аткара ала турган атомдук операциялардын жыйындысы (мисалы, 'ADD register1 register2' эки регистрдеги сандарды кошот). Жеке тилдер үчүн жеткиликтүү функциялар ушул нускамалардан турат. Татаал функциялар көбүрөөк нускамаларды аткарышы керек, ошондуктан алар жайыраак болушу мүмкүн.

ARM64 жаңы AES шифрлөө, SHA-1 жана SHA-256 хэш-функциялары боюнча нускамалар болуп саналат. Ошентип, татаал ишке ашыруунун ордуна, тил гана бул нускаманы чакырат - бул мындай функцияларды эсептөөдө чоң ылдамдыкты алып келет жана тиркемелерде коопсуздукту кошот деп үмүттөнөбүз. мис. жаңы Touch ID бул нускамаларды шифрлөөдө колдонот, бул реалдуу ылдамдыкты жана коопсуздукту камсыз кылат (теориялык жактан алганда, чабуулчу маалыматтарга жетүү үчүн процессордун өзүн өзгөртүүгө туура келет - анын миниатюралык өлчөмүн эске алганда, бул практикалык эмес).

32 бит менен шайкештик

Бул A7 эмуляцияга муктаж болбостон 32 биттик режимде толук иштей ала тургандыгын белгилей кетүү маанилүү. Бул жаңы iPhone 5s 32 биттик ARMде түзүлгөн тиркемелерди эч кандай жайлоосуз иштете алат дегенди билдирет. Бирок, анда ал жаңы ARM64 функцияларын колдоно албайт, андыктан A7 үчүн гана атайын түзүүнү жасоо пайдалуу, ал тезирээк иштеши керек.

Иштөө убактысы өзгөрөт

Runtime - бул программалоо тилине функцияларды кошкон код, ал тиркеме иштеп турганда котормодон кийин колдоно алат. Apple тиркемелердин шайкештигин сактоонун кереги жок болгондуктан (64 биттик бинардык 32 битте иштейт), алар Objective-C тилине дагы бир нече жакшыртууларды киргизе алышат.

Алардын бири деп аталган белгиленген көрсөткүч (белгиленген көрсөткүч). Адатта, объекттер жана ал объекттерге көрсөткүчтөр эстутумдун өзүнчө бөлүктөрүндө сакталат. Бирок көрсөткүчтүн жаңы түрлөрү аз маалыматы бар класстарга объекттерди көрсөткүчтө түз сактоого мүмкүндүк берет. Бул кадам объект үчүн түз эле эстутум бөлүү зарылдыгын жокко чыгарат, жөн гана көрсөткүчтү жана анын ичиндеги объектти түзүңүз. Белгиленген көрсөткүчтөр 64 биттик архитектурада гана колдоого алынат, ошондой эле 32 биттик көрсөткүчтө жетиштүү пайдалуу маалыматтарды сактоо үчүн орун жок болгондуктан. Ошондуктан, iOS, OS X айырмаланып, азырынча бул функцияны колдогон эмес. Бирок, ARM64тин келиши менен бул өзгөрүп жатат жана iOS бул жагынан да OS X менен кууп жетти.

Көрсөткүчтөрдүн узундугу 64 бит болсо да, ARM64те көрсөткүчтүн өз дареги үчүн 33 бит гана колдонулат. Жана эгер биз көрсөткүчтүн калган биттерин ишенимдүү ачып алсак, анда биз бул мейкиндикти кошумча маалыматтарды сактоо үчүн колдоно алабыз - айтылган тегтелген көрсөткүчтөрдөгүдөй. Концептуалдык жактан алганда, бул Objective-C тарыхындагы эң чоң өзгөрүүлөрдүн бири, бирок ал сатылуучу функция болбосо да, ошондуктан көпчүлүк колдонуучулар Apple Objective-Cти кантип алдыга жылдырып жатканын билишпейт.

Мындай белгиленген көрсөткүчтүн калган мейкиндигинде сактала турган пайдалуу маалыматтарга келсек, Objective-C, мисалы, азыр аны деп аталган нерсени сактоо үчүн колдонуп жатат. шилтеме саны (шилтемелердин саны). Мурда маалымдама саны эстутумдун башка жеринде, ал үчүн даярдалган хэш таблицада сакталып турган, бирок бул көп сандагы alloc/dealloc/retain/release чалуулары болгон учурда бүт системаны жайлатышы мүмкүн. Үстөл жиптин коопсуздугу үчүн кулпуланышы керек болчу, андыктан эки жиптеги эки объекттин маалымдама санын бир эле учурда өзгөртүү мүмкүн эмес. Бирок, бул маани калган деп аталган жаңы киргизилген Ыш көрсөткүчтөр. Бул дагы бир көзгө көрүнбөгөн, бирок келечектеги чоң артыкчылык жана ылдамдык. Бирок, бул 32 биттик архитектурада эч качан мүмкүн эмес.

Байланыштуу объекттер жөнүндө маалымат, объектке начар шилтеме берилгенби, объект үчүн деструкторду генерациялоо керекпи же жокпу, ж. Runtime ар бир тиркеменин ылдамдыгында чагылдырылган иштөө убактысын түп тамырынан бери тездетүүгө жөндөмдүү. Сыноого караганда, бул эстутумду башкаруунун бардык чалууларынын 40-50% ылдамдыгын билдирет. Жөн гана 64-бит көрсөткүчтөрүнө өтүү жана бул жаңы мейкиндикти колдонуу менен.

жыйынтыктоо

Атаандаштар 64 биттик архитектурага өтүү керексиз деген идеяны жайылтууга аракет кылышса да, бул жөн гана маалыматсыз пикир экенин билесиз. Тилиңизди же тиркемелерди адаптациялоосуз 64-битке өтүү чындыгында эч нерсени билдирбейт - ал тургай, бүт системаны жайлатат. Бирок жаңы A7 жаңы нускамалар топтому менен заманбап ARM64 колдонот жана Apple Objective-C тилин толугу менен модернизациялоо жана жаңы мүмкүнчүлүктөрдү пайдалануу үчүн кыйынчылыкка кабылды - демек, убада кылынган ылдамдык.

Бул жерде биз 64 биттик архитектура эмне үчүн алга карай туура кадам экенине байланыштуу көптөгөн себептерди айттык. Бул дагы бир революция, анын аркасында Apple дизайн, колдонуучу интерфейси жана бай экосистема менен гана эмес, негизинен рыноктогу эң заманбап технологиялар менен алдыңкы катарда калууга аракет кылат.

Маалымат булагы: mikeash.com
.