Зарыг хаах

Майк Эш блогтоо зориулав iPhone 64S дээр 5 битийн архитектурт шилжих практик үр дагавар. Энэ нийтлэл нь түүний олж мэдсэн зүйл дээр тулгуурладаг.

Энэхүү бичвэрийн шалтгаан нь 5 битийн ARM процессортой шинэ iPhone 64s нь хэрэглэгчид болон зах зээлд яг юу гэсэн үг вэ гэсэн их хэмжээний ташаа мэдээлэл тархсантай холбоотой юм. Энд бид хөгжүүлэгчдэд энэ шилжилтийн гүйцэтгэл, чадвар, үр дагаварын талаар бодитой мэдээлэл өгөхийг хичээх болно.

"64 бит"

Процессорын "X-bit" шошго нь бүхэл тооны бүртгэлийн өргөн ба заагчийн өргөн гэсэн хоёр хэсэгтэй. Аз болоход ихэнх орчин үеийн процессоруудад эдгээр өргөнүүд ижил байдаг тул A7-ийн хувьд энэ нь 64 битийн бүхэл тоон регистр ба 64 бит заагч гэсэн үг юм.

Гэсэн хэдий ч "64 бит" гэж юу гэсэн үг биш гэдгийг хэлэх нь адил чухал юм. RAM-ийн физик хаягийн хэмжээ. RAM-тай холбогдох битийн тоо (тиймээс төхөөрөмжийн дэмждэг RAM-ийн хэмжээ) нь CPU-ийн битийн тоотой хамааралгүй. ARM процессорууд нь 26-аас 40 битийн хооронд хаана ч байсан хаягтай бөгөөд системийн бусад хэсгээс үл хамааран өөрчлөх боломжтой.

  • Өгөгдлийн автобусны хэмжээ. RAM эсвэл буфер санах ойноос хүлээн авсан өгөгдлийн хэмжээ нь энэ хүчин зүйлээс хамааралтай байдаг. Процессорын бие даасан заавар нь өөр өөр хэмжээний өгөгдөл шаардаж болох боловч тэдгээрийг хэсэг хэсгээр нь илгээдэг эсвэл санах ойноос шаардлагатай хэмжээнээс илүү авдаг. Энэ нь өгөгдлийн квантын хэмжээнээс хамаарна. IPhone 5 нь санах ойноос өгөгдлийг 64 битийн квантаар хүлээн авдаг (мөн 32 битийн процессортой) бөгөөд бид 192 бит хүртэлх хэмжээтэй таарч болно.
  • Хөвөгч цэгтэй холбоотой бүх зүйл. Ийм регистрүүдийн хэмжээ (FPU) нь процессорын дотоод үйл ажиллагаанаас хамааралгүй байдаг. ARM нь 64 битийн FPU-г ARM64 (64 битийн ARM процессор) ашиглахаас өмнө ашиглаж ирсэн.

Ерөнхий давуу болон сул талууд

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

Гэсэн хэдий ч, хэрэв бид эдгээр хоёр архитектурын ялгааг харсаар байвал хэд хэдэн ялгааг олж харах болно. Хамгийн ойлгомжтой зүйл бол 64 битийн бүхэл тоон регистрүүд 64 битийн бүхэл тоог илүү үр дүнтэй зохицуулж чаддаг. Өмнө нь ч гэсэн тэдэнтэй 32 битийн процессор дээр ажиллах боломжтой байсан ч энэ нь ихэвчлэн 32 битийн урттай хэсгүүдэд хуваагддаг байсан тул тооцооллыг удаашруулдаг байв. Тиймээс 64 битийн процессор нь ерөнхийдөө 64 битийн төрлүүдийг 32 биттэй адил хурдан тооцоолох боломжтой. Энэ нь ерөнхийдөө 64 битийн төрлийг ашигладаг програмууд 64 битийн процессор дээр илүү хурдан ажиллах боломжтой гэсэн үг юм.

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

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

Одоо бид 4 ГБ-аас их санах ойгүй бол 64 битийн архитектур нь ашиггүй гэсэн байнгын (үнэндээ буруу) мэдэгдэлд хүрч байна. Илүү том хаягийн зай нь санах ой багатай системд ч ашигтай байдаг. Санах ойн зураглалтай файлууд нь файлын агуулгыг бүхэлд нь санах ойд ачаалах шаардлагагүйгээр процессын санах ойтой логик холбоотой байдаг тохиромжтой хэрэгсэл юм. Тиймээс систем нь жишээлбэл, RAM-ийн багтаамжаас хэд дахин том хэмжээтэй файлуудыг аажмаар боловсруулж чаддаг. 32 битийн системд ийм том файлуудыг санах ойд найдвартай буулгах боломжгүй байдаг бол 64 битийн системд энэ нь илүү том хаягийн орон зайн ачаар жижиг хэсэг юм.

Гэсэн хэдий ч заагчуудын том хэмжээ нь бас нэг том сул талыг авчирдаг: өөрөөр хэлбэл ижил програмууд нь 64 битийн процессор дээр илүү их санах ой шаарддаг (эдгээр том заагчийг хаа нэгтээ хадгалах шаардлагатай). Заагч нь програмын байнгын хэсэг учраас энэ ялгаа нь кэшийг ачаалж, улмаар бүхэл системийг удаашруулахад хүргэдэг. Тиймээс, хэрэв бид процессорын архитектурыг 64 бит болгон өөрчилсөн бол энэ нь бүхэл системийг удаашруулна гэдгийг бид харж болно. Тиймээс энэ хүчин зүйлийг бусад газруудад илүү оновчтой болгох замаар тэнцвэржүүлэх хэрэгтэй.

ARM64

Шинэ iPhone 7s-ийг тэжээдэг 64 битийн процессор болох A5 нь өргөн бүртгэлтэй энгийн ARM процессор биш юм. ARM64 нь хуучин, 32 битийн хувилбартай харьцуулахад томоохон сайжруулалтыг агуулсан.

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

Бүртгэл

ARM64 нь 32 битийн ARM-ээс хоёр дахин олон бүхэл тоон регистр агуулдаг (регистрүүдийн тоо болон өргөнийг андуурахаас болгоомжил - бид "64 бит" хэсэгт өргөний тухай ярьсан. Тиймээс ARM64 нь хоёр дахин өргөн, хоёр дахин их регистртэй. бүртгэлүүд). 32 битийн ARM нь 16 бүхэл тооны регистртэй: нэг програмын тоолуур (PC - одоо байгаа зааврын дугаарыг агуулна), стек заагч (гүйцэж байгаа функцийн заагч), холбоос бүртгэл (функц дууссаны дараа буцаах заагч). дууссан), үлдсэн 13 нь програмын хэрэглээнд зориулагдсан. Гэсэн хэдий ч ARM64 нь 32 бүхэл тооны регистртэй бөгөөд үүнд нэг тэг регистр, холбоосын бүртгэл, фреймийн заагч (стек заагчтай төстэй), нэг нь ирээдүйд зориулагдсан. Энэ нь бидэнд 28 битийн ARM-аас хоёр дахин их буюу 32 регистрийг програмын хэрэглээнд үлдээж байна. Үүний зэрэгцээ 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 битийн архитектурт үүнийг хэзээ ч хийж чадахгүй.

Холбогдох объектуудын талаарх мэдээлэл, тухайн объект сул иш татсан эсэх, тухайн объектод устгагч үүсгэх шаардлагатай эсэх гэх мэт мэдээллийг объектууд руу чиглүүлэх заагчийн үлдсэн хэсэгт шинээр оруулах болно.Энэ мэдээллийн ачаар Objective-C runtime нь ашиглалтын хугацааг үндсээр нь хурдасгах чадвартай бөгөөд энэ нь програм бүрийн хурдад тусгагдсан байдаг. Туршилтаас харахад энэ нь санах ойн удирдлагын бүх дуудлагыг 40-50% хурдасгадаг гэсэн үг юм. 64 битийн заагч руу шилжиж, энэ шинэ зайг ашиглахад л болно.

Дүгнэлт

Хэдийгээр өрсөлдөгчид 64 битийн архитектур руу шилжих шаардлагагүй гэсэн санааг түгээхийг хичээх боловч энэ нь зүгээр л мэдээлэлгүй үзэл бодол гэдгийг та аль хэдийн мэдэх болно. Хэл, програмаа өөрчлөхгүйгээр 64-бит рүү шилжих нь юу ч биш, тэр ч байтугай бүхэл системийг удаашруулдаг нь үнэн. Гэхдээ шинэ A7 нь шинэ заавар бүхий орчин үеийн ARM64-ийг ашигладаг бөгөөд Apple нь Objective-C хэлийг бүхэлд нь шинэчилж, шинэ боломжуудын давуу талыг ашиглахын тулд асуудалтай тулгарсан бөгөөд ингэснээр амласан хурдыг нэмэгдүүлнэ.

Энд бид 64 битийн архитектур нь урагшлах зөв алхам болох олон тооны шалтгааныг дурдлаа. Энэ бол "бүрээсний доорх" өөр нэг хувьсгал бөгөөд үүний ачаар Apple зөвхөн дизайн, хэрэглэгчийн интерфэйс, баялаг экосистемээрээ төдийгүй зах зээл дээрх хамгийн орчин үеийн технологиор тэргүүлэгч байхыг хичээх болно.

Эх сурвалж: mikeash.com
.