Reklamani yopish

Mayk Ash o'z blogida bag'ishlangan iPhone 64S-da 5-bitli arxitekturaga o'tishning amaliy oqibatlari. Ushbu maqola uning topilmalariga asoslanadi.

Ushbu matnning sababi, asosan, 5-bitli ARM protsessorli yangi iPhone 64s foydalanuvchilar va bozor uchun aslida nimani anglatishi haqida tarqalgan noto'g'ri ma'lumotlarning katta miqdori bilan bog'liq. Bu erda biz ishlab chiquvchilar uchun ushbu o'tishning ishlashi, imkoniyatlari va oqibatlari haqida ob'ektiv ma'lumot berishga harakat qilamiz.

"64 bit"

Protsessorning "X-bit" yorlig'i murojaat qilishi mumkin bo'lgan ikkita qismi mavjud - butun son registrlarining kengligi va ko'rsatkichlarning kengligi. Yaxshiyamki, ko'pgina zamonaviy protsessorlarda bu kengliklar bir xil, shuning uchun A7 holatida bu 64 bitli tamsayı registrlari va 64 bitli ko'rsatkichlarni anglatadi.

Biroq, "64 bit" nimani anglatishini ta'kidlash ham bir xil darajada muhimdir: RAM jismoniy manzil hajmi. RAM bilan bog'lanish uchun bitlar soni (shuning uchun qurilma qo'llab-quvvatlaydigan RAM miqdori) CPU bitlari soniga bog'liq emas. ARM protsessorlari 26 va 40 bitli manzillarga ega va tizimning qolgan qismidan mustaqil ravishda o'zgartirilishi mumkin.

  • Ma'lumotlar avtobusining o'lchami. RAM yoki bufer xotiradan olingan ma'lumotlar miqdori xuddi shu omilga bog'liq emas. Individual protsessor ko'rsatmalari turli hajmdagi ma'lumotlarni so'rashi mumkin, lekin ular bo'laklarga bo'linadi yoki xotiradan kerak bo'lganidan ko'proq qabul qilinadi. Bu ma'lumotlar kvantining hajmiga bog'liq. IPhone 5 allaqachon xotiradan ma'lumotlarni 64 bitli kvantlarda oladi (va 32 bitli protsessorga ega) va biz 192 bitgacha bo'lgan o'lchamlarga duch kelishimiz mumkin.
  • Suzuvchi nuqta bilan bog'liq har qanday narsa. Bunday registrlarning hajmi (FPU) yana protsessorning ichki ishlashiga bog'liq emas. ARM 64-bitli FPU-dan ARM64-dan (64-bitli ARM protsessoridan) beri foydalanmoqda.

Umumiy afzalliklari va kamchiliklari

Agar biz bir xil 32 va 64 bitli arxitekturalarni solishtirsak, ular odatda unchalik farq qilmaydi. Bu Apple mobil qurilmalarda ham 64 bitga o'tishi sababini izlayotgan jamoatchilikning umumiy chalkashligining sabablaridan biridir. Biroq, bularning barchasi A7 (ARM64) protsessorining o'ziga xos parametrlaridan va Apple uni qanday ishlatishidan kelib chiqadi, nafaqat protsessorning 64-bitli arxitekturaga ega ekanligidan.

Ammo, agar biz hali ham ushbu ikki arxitektura o'rtasidagi farqlarni ko'rib chiqsak, biz bir nechta farqlarni topamiz. Shubhasiz, 64 bitli butun sonli registrlar 64 bitli butun sonlarni samaraliroq boshqarishi mumkin. Ilgari ham ular bilan 32-bitli protsessorlarda ishlash mumkin edi, lekin bu odatda ularni 32-bitli uzun boʻlaklarga boʻlishni anglatardi, bu esa sekinroq hisob-kitoblarga sabab boʻldi. Shunday qilib, 64-bitli protsessor odatda 64-bitli turlar bilan 32-bitli kabi tez hisoblay oladi. Bu shuni anglatadiki, odatda 64-bitli turlardan foydalanadigan ilovalar 64-bitli protsessorda tezroq ishlashi mumkin.

64 bit protsessor foydalanishi mumkin bo'lgan operativ xotiraning umumiy miqdoriga ta'sir qilmasa ham, u bitta dasturda katta hajmdagi operativ xotira bilan ishlashni osonlashtirishi mumkin. 32-bitli protsessorda ishlaydigan har qanday dastur faqat taxminan 4 Gb manzil maydoniga ega. Operatsion tizim va standart kutubxonalar biror narsani egallashini hisobga olsak, bu dasturni ilovalardan foydalanish uchun 1-3 GB oralig'ida qoldiradi. Biroq, 32-bitli tizimda 4 Gb dan ortiq RAM bo'lsa, bu xotiradan foydalanish biroz murakkabroq. Biz operatsion tizimni dasturimiz uchun ushbu kattaroq xotira qismlarini xaritalashga majburlashimiz kerak (xotirani virtualizatsiya qilish) yoki biz dasturni bir nechta jarayonlarga bo'lishimiz mumkin (bu erda har bir jarayon yana nazariy jihatdan to'g'ridan-to'g'ri manzil uchun 4 Gb xotiraga ega).

Biroq, bu "buzg'unchilar" shunchalik qiyin va sekinki, ulardan minimal ilovalar foydalanadi. Amalda, 32-bitli protsessorda har bir dastur faqat 1-3 Gb xotiradan foydalanadi va ko'proq mavjud operativ xotira bir vaqtning o'zida bir nechta dasturlarni ishga tushirish yoki bu xotiradan bufer (keshlash) sifatida foydalanish uchun ishlatilishi mumkin. Bu foydalanish amaliydir, lekin biz har qanday dastur 4 Gb dan katta xotira qismlarini osongina ishlatishini xohlaymiz.

Endi biz 4 Gb dan ortiq xotirasiz 64 bitli arxitektura foydasiz degan tez-tez (aslida noto'g'ri) da'voga kelamiz. Kattaroq manzil maydoni hatto kamroq xotiraga ega tizimda ham foydalidir. Xotiraga o'rnatilgan fayllar qulay vosita bo'lib, fayl tarkibining bir qismi butun faylni xotiraga yuklamasdan jarayon xotirasi bilan mantiqiy bog'langan. Shunday qilib, tizim, masalan, RAM hajmidan ko'p marta katta bo'lgan katta fayllarni bosqichma-bosqich qayta ishlashi mumkin. 32-bitli tizimda bunday katta hajmdagi fayllarni ishonchli tarzda xotira xaritasiga solish mumkin emas, 64-bitli tizimda esa, manzil maydonining kattaligi tufayli bu juda oddiy.

Biroq, ko'rsatgichlarning kattaroq o'lchami ham bir katta kamchilikni keltirib chiqaradi: aks holda bir xil dasturlar 64 bitli protsessorda ko'proq xotiraga muhtoj (bu kattaroq ko'rsatkichlar biror joyda saqlanishi kerak). Ko'rsatkichlar dasturlarning tez-tez qismi bo'lganligi sababli, bu farq keshni yuklashi mumkin, bu esa o'z navbatida butun tizimning sekin ishlashiga olib keladi. Shunday qilib, agar biz protsessor arxitekturasini 64-bitga o'zgartirsak, bu butun tizimni sekinlashtirishini ko'rishimiz mumkin. Shunday qilib, bu omil boshqa joylarda ko'proq optimallashtirish bilan muvozanatli bo'lishi kerak.

ARM64

Yangi iPhone 7s-ni quvvatlaydigan 64-bitli protsessor A5 kengroq registrlarga ega oddiy ARM protsessor emas. ARM64 eski, 32-bitli versiyaga nisbatan katta yaxshilanishlarni o'z ichiga oladi.

Apple A7 protsessori.

Ro'yxatga olish

ARM64 32-bitli ARMga qaraganda ikki baravar koʻp butun son registrlarini oʻz ichiga oladi (registrlar soni va kengligini chalkashtirmaslik uchun ehtiyot boʻling – biz “64-bit” boʻlimida kenglik haqida gapirgan edik. Demak, ARM64 da ikki barobar keng registrlar ham, ikki barobar koʻp registrlar mavjud. registrlar). 32-bitli ARMda 16 ta butun son registrlari mavjud: bitta dastur hisoblagichi (kompyuter - joriy ko'rsatma raqamini o'z ichiga oladi), stek ko'rsatkichi (bajarilayotgan funktsiyaga ko'rsatgich), havola registri (tugatgandan keyin qaytish uchun ko'rsatgich). funktsiyaning), qolgan 13 tasi esa ilovadan foydalanish uchun. Biroq, ARM64-da 32 ta butun son registrlari mavjud, ular orasida bitta nol registr, bog'lanish registri, ramka ko'rsatkichi (stek ko'rsatkichiga o'xshash) va kelajak uchun ajratilgan. Bu bizga ilovalardan foydalanish uchun 28 ta registrni qoldiradi, bu 32-bitli ARMdan ikki baravar ko'p. Shu bilan birga, ARM64 suzuvchi nuqtali raqamlar (FPU) registrlari sonini 16 dan 32 ta 128 bitli registrlarga ikki baravar oshirdi.

Lekin nega registrlar soni shunchalik muhim? Xotira odatda CPU hisob-kitoblariga qaraganda sekinroq va o'qish/yozish juda uzoq vaqt talab qilishi mumkin. Bu tez protsessor xotirani kutishga majbur qiladi va biz tizimning tabiiy tezlik chegarasiga yetib boramiz. Protsessorlar bu kamchilikni bufer qatlamlari bilan yashirishga harakat qilishadi, lekin hatto eng tez (L1) ham protsessor hisobiga qaraganda sekinroq. Biroq, registrlar to'g'ridan-to'g'ri protsessorda xotira hujayralari bo'lib, ularni o'qish/yozish protsessorni sekinlashtirmaslik uchun etarlicha tezdir. Registrlar soni amalda protsessor hisob-kitoblari uchun eng tez xotira hajmini bildiradi, bu butun tizimning tezligiga katta ta'sir qiladi.

Shu bilan birga, ushbu tezlik kompilyator tomonidan yaxshi optimallashtirish yordamiga muhtoj, shuning uchun til ushbu registrlardan foydalanishi mumkin va hamma narsani umumiy dastur (sekin) xotirasida saqlashi shart emas.

Ko'rsatmalar to'plami

ARM64 shuningdek, ko'rsatmalar to'plamiga katta o'zgarishlar kiritadi. Ko'rsatmalar to'plami protsessor bajarishi mumkin bo'lgan atom operatsiyalari to'plamidir (masalan, 'Qo'shish registr1 registr2' ikkita registrdagi raqamlarni qo'shadi). Alohida tillar uchun mavjud bo'lgan funktsiyalar ushbu ko'rsatmalardan iborat. Keyinchalik murakkab funktsiyalar ko'proq ko'rsatmalarni bajarishi kerak, shuning uchun ular sekinroq bo'lishi mumkin.

ARM64-da yangi AES shifrlash, SHA-1 va SHA-256 xesh-funksiyalari bo'yicha ko'rsatmalar mavjud. Shunday qilib, murakkab amalga oshirish o'rniga, faqat til bu ko'rsatmani chaqiradi - bu bunday funktsiyalarni hisoblashda katta tezlikka olib keladi va umid qilamanki, ilovalarda xavfsizlikni oshiradi. Masalan, yangi Touch ID ushbu ko'rsatmalarni shifrlashda ham ishlatadi, bu esa haqiqiy tezlik va xavfsizlikni ta'minlaydi (nazariy jihatdan, tajovuzkor ma'lumotlarga kirish uchun protsessorni o'zgartirishi kerak bo'ladi - bu uning miniatyura hajmini hisobga olgan holda aytish mumkin emas).

32 bit bilan moslik

Shuni ta'kidlash kerakki, A7 32 bitli rejimda emulyatsiyaga muhtoj bo'lmasdan to'liq ishlashi mumkin. Bu shuni anglatadiki, yangi iPhone 5s 32-bitli ARM-da kompilyatsiya qilingan ilovalarni hech qanday sekinlashtirmasdan ishga tushirishi mumkin. Biroq, u yangi ARM64 funksiyalaridan foydalana olmaydi, shuning uchun har doim faqat A7 uchun maxsus konstruktsiya qilish maqsadga muvofiqdir, bu esa tezroq ishlashi kerak.

Ish vaqti o'zgarishi

Runtime - dasturlash tiliga funksiyalarni qo'shadigan kod bo'lib, u dastur ishlayotgan paytda, tarjimadan so'ng foydalanishi mumkin. Apple ilova muvofiqligini saqlab qolishi shart emasligi sababli (64-bitli ikkilik 32-bitda ishlaydi), ular Objective-C tilini yana bir qancha yaxshilashlari mumkin.

Ulardan biri deb ataladigan narsadir belgilangan ko'rsatgich (belgilangan ko'rsatkich). Odatda, ob'ektlar va bu ob'ektlarga ko'rsatgichlar xotiraning alohida qismlarida saqlanadi. Biroq, yangi ko'rsatkich turlari kichik ma'lumotlarga ega sinflarga ob'ektlarni to'g'ridan-to'g'ri ko'rsatgichda saqlashga imkon beradi. Bu qadam ob'ekt uchun to'g'ridan-to'g'ri xotira ajratish zaruratini yo'q qiladi, shunchaki ko'rsatgich va uning ichidagi ob'ektni yarating. Belgilangan ko'rsatgichlar faqat 64-bitli arxitekturada qo'llab-quvvatlanadi, shuningdek, 32-bitli ko'rsatgichda etarli darajada foydali ma'lumotlarni saqlash uchun etarli joy yo'qligi sababli. Shuning uchun iOS, OS X dan farqli o'laroq, bu xususiyatni hali qo'llab-quvvatlamadi. Biroq, ARM64 kelishi bilan bu o'zgarmoqda va iOS bu borada ham OS X bilan yetib oldi.

Ko'rsatkichlar uzunligi 64 bit bo'lsa-da, ARM64 da ko'rsatgichning o'z manzili uchun faqat 33 bit ishlatiladi. Va agar biz boshqa ko'rsatkich bitlarini ishonchli tarzda ochib bera olsak, biz ushbu bo'sh joydan qo'shimcha ma'lumotlarni saqlash uchun foydalanishimiz mumkin - yuqorida aytib o'tilgan tegli ko'rsatgichlarda bo'lgani kabi. Kontseptual jihatdan, bu Objective-C tarixidagi eng katta o'zgarishlardan biridir, garchi u sotiladigan xususiyat bo'lmasa ham - shuning uchun ko'pchilik foydalanuvchilar Apple Objective-C ni qanday oldinga siljitayotganini bilishmaydi.

Bunday yorliqli ko'rsatgichning qolgan maydonida saqlanishi mumkin bo'lgan foydali ma'lumotlarga kelsak, masalan, Objective-C endi undan so'zlarni saqlash uchun foydalanmoqda. mos yozuvlar soni (Adabiyotlar soni). Ilgari, mos yozuvlar soni xotiraning boshqa joyida, u uchun tayyorlangan xesh-jadvalda saqlangan, ammo bu ko'p miqdordagi alloc/dealloc/retain/release qo'ng'iroqlari bo'lsa, butun tizimni sekinlashtirishi mumkin. Jadvalni ip xavfsizligi tufayli qulflash kerak edi, shuning uchun ikkita ipdagi ikkita ob'ektning mos yozuvlar sonini bir vaqtning o'zida o'zgartirib bo'lmaydi. Biroq, bu qiymat yangi deb atalmish qolgan qismiga kiritilgan biri ko'rsatkichlar. Bu kelajakdagi yana bir ko'zga tashlanmaydigan, ammo katta afzallik va tezlashtirish. Biroq, 32-bitli arxitekturada bunga hech qachon erishib bo'lmaydi.

Bog'langan ob'ektlar to'g'risidagi ma'lumotlar, ob'ektga zaif havola qilinganmi, ob'ekt uchun destruktor yaratish kerakmi yoki yo'qmi va hokazolar ob'ektlarga ko'rsatgichlarning qolgan joyiga yangidan kiritiladi.Ushbu ma'lumotlar tufayli Objective-C. ish vaqti ish vaqtini tubdan tezlashtirishga qodir, bu har bir ilovaning tezligida aks etadi. Sinovdan boshlab, bu xotirani boshqarish bo'yicha barcha qo'ng'iroqlarning taxminan 40-50% tezlashishini anglatadi. Faqat 64-bitli ko'rsatkichlarga o'tish va ushbu yangi joydan foydalanish orqali.

Xulosa

Raqobatchilar 64-bitli arxitekturaga o'tish kerak emas degan fikrni tarqatishga harakat qilsalar ham, bu juda ma'lumotga ega bo'lmagan fikr ekanligini allaqachon bilib olasiz. To‘g‘ri, til yoki ilovalarni moslashtirmasdan 64-bitga o‘tish hech narsani anglatmaydi – hatto butun tizimni sekinlashtiradi. Ammo yangi A7 yangi ko'rsatmalar to'plamiga ega zamonaviy ARM64 dan foydalanadi va Apple butun Objective-C tilini modernizatsiya qilish va yangi imkoniyatlardan foydalanish muammosini o'z zimmasiga oldi - shuning uchun va'da qilingan tezlik.

Bu erda biz 64-bitli arxitektura oldinga to'g'ri qadam bo'lishining ko'plab sabablarini aytib o'tdik. Bu "qopqoq ostidagi" navbatdagi inqilob, buning natijasida Apple nafaqat dizayn, foydalanuvchi interfeysi va boy ekotizim bilan, balki bozordagi eng zamonaviy texnologiyalar bilan ham birinchi o'rinda qolishga harakat qiladi.

Manba: mikeash.com
.