Reklamı bağlayın

Mike Ash bloqunda həsr etmişdir iPhone 64S-də 5-bit arxitekturaya keçidin praktiki nəticələri. Bu məqalə onun tapıntılarına əsaslanır.

Bu mətnin səbəbi, əsasən, 5 bitlik ARM prosessorlu yeni iPhone 64s-in əslində istifadəçilər və bazar üçün nə demək olduğu barədə yayılan böyük miqdarda yanlış məlumatlarla bağlıdır. Burada biz inkişaf etdiricilər üçün bu keçidin performansı, imkanları və nəticələri haqqında obyektiv məlumat verməyə çalışacağıq.

"64 bit"

"X-bit" etiketinin istinad edə biləcəyi prosessorun iki hissəsi var - tam registrlərin eni və göstəricilərin eni. Xoşbəxtlikdən, əksər müasir prosessorlarda bu genişliklər eynidir, ona görə də A7 vəziyyətində bu, 64 bitlik tam registrlər və 64 bitlik göstəricilər deməkdir.

Bununla belə, “64 bit”in nə demək olmadığını qeyd etmək eyni dərəcədə vacibdir: RAM fiziki ünvan ölçüsü. RAM ilə əlaqə qurmaq üçün bitlərin sayı (beləliklə, cihazın dəstəkləyə biləcəyi RAM miqdarı) CPU bitlərinin sayı ilə əlaqəli deyil. ARM prosessorları 26 və 40 bitlik ünvanlara malikdir və sistemin qalan hissəsindən asılı olmayaraq dəyişdirilə bilər.

  • Məlumat avtobusunun ölçüsü. RAM və ya bufer yaddaşdan alınan məlumatların miqdarı da bu amildən eyni dərəcədə müstəqildir. Fərdi prosessor təlimatları müxtəlif həcmdə məlumat tələb edə bilər, lakin onlar ya hissələrə bölünür, ya da yaddaşdan tələb olunandan çox alınır. Bu, məlumat kvantının ölçüsündən asılıdır. iPhone 5 artıq yaddaşdan məlumatları 64 bit kvantda qəbul edir (və 32 bit prosessoru var) və biz 192 bitə qədər ölçülərlə qarşılaşa bilərik.
  • Üzən nöqtə ilə əlaqəli hər şey. Belə registrlərin (FPU) ölçüsü yenə də prosessorun daxili işlərindən asılı deyildir. ARM, ARM64-dən (64-bit ARM prosessoru) əvvəldən bəri 64-bit FPU-dan istifadə edir.

Ümumi üstünlüklər və çatışmazlıqlar

Başqa cür eyni olan 32 bit və 64 bit arxitekturaları müqayisə etsək, onlar ümumiyyətlə o qədər də fərqli deyillər. Apple-ın mobil cihazlarda da 64 bitə keçməsinin səbəbini axtaran ictimaiyyətin ümumi çaşqınlığının səbəblərindən biri də budur. Bununla belə, hamısı A7 (ARM64) prosessorunun spesifik parametrlərindən və Apple-ın ondan necə istifadə etməsindən irəli gəlir, təkcə prosessorun 64 bitlik arxitekturaya malik olması faktından deyil.

Ancaq yenə də bu iki arxitektura arasındakı fərqlərə baxsaq, bir neçə fərq tapacağıq. Aşkar olan odur ki, 64 bitlik tam registrlər 64 bitlik tam ədədləri daha səmərəli idarə edə bilir. Əvvəllər də onlarla 32 bitlik prosessorlarda işləmək mümkün idi, lakin bu, adətən, onların 32 bitlik uzunluqlu parçalara bölünməsi demək idi ki, bu da hesablamaların ləngiməsinə səbəb olurdu. Beləliklə, 64 bitlik bir prosessor ümumiyyətlə 64 bitlik növlərlə 32 bitliklər kimi sürətli hesablaya bilər. Bu o deməkdir ki, ümumiyyətlə 64 bitlik növlərdən istifadə edən proqramlar 64 bitlik prosessorda daha sürətli işləyə bilər.

64 bit prosessorun istifadə edə biləcəyi ümumi RAM miqdarına təsir etməsə də, bir proqramda böyük RAM parçaları ilə işləməyi asanlaşdıra bilər. 32 bitlik prosessorda işləyən hər hansı bir proqram yalnız təxminən 4 GB ünvan sahəsinə malikdir. Nəzərə alsaq ki, əməliyyat sistemi və standart kitabxanalar bir şey tutur, bu, proqramı tətbiqdən istifadə üçün 1-3 GB arasında bir yerdə buraxır. Bununla belə, 32 bitlik sistemdə 4 GB-dan çox RAM varsa, bu yaddaşdan istifadə etmək bir az daha mürəkkəbdir. Proqramımız üçün bu daha böyük yaddaş hissələrini (yaddaşın virtuallaşdırılması) xəritələşdirməyə əməliyyat sistemini məcbur etməyə müraciət etməliyik, yoxsa proqramı bir neçə prosesə ayıra bilərik (burada nəzəri olaraq hər bir prosesdə birbaşa ünvan üçün 4 GB yaddaş mövcuddur).

Bununla belə, bu "hacklər" o qədər çətin və yavaşdır ki, minimum proqramlar onlardan istifadə edir. Praktikada 32 bitlik prosessorda hər bir proqram yalnız 1-3 GB yaddaşdan istifadə edəcək və daha çox mövcud RAM eyni vaxtda birdən çox proqramı işə salmaq və ya bu yaddaşı bufer (keshinq) kimi istifadə etmək üçün istifadə edilə bilər. Bu istifadələr praktikdir, lakin biz istərdik ki, istənilən proqram 4 GB-dan böyük yaddaş hissələrini asanlıqla istifadə edə bilsin.

İndi biz tez-tez (əslində yanlış) iddiaya gəlirik ki, 4 GB-dan çox yaddaş olmadan 64 bitlik arxitektura faydasızdır. Daha böyük ünvan sahəsi daha az yaddaşa malik sistemdə belə faydalıdır. Yaddaşa uyğunlaşdırılmış fayllar, faylın məzmununun bir hissəsinin bütün faylın yaddaşa yüklənməsinə ehtiyac olmadan prosesin yaddaşına məntiqi olaraq bağlandığı lazımlı bir vasitədir. Sistem, məsələn, RAM tutumundan dəfələrlə böyük olan böyük faylları tədricən emal edə bilər. 32 bitlik sistemdə bu cür böyük fayllar etibarlı şəkildə yaddaşa uyğunlaşdırıla bilməz, 64 bitlik sistemdə isə daha böyük ünvan sahəsi sayəsində bu, bir parçadır.

Bununla belə, göstəricilərin daha böyük ölçüsü bir böyük çatışmazlıq da gətirir: əks halda eyni proqramlar 64 bitlik prosessorda daha çox yaddaşa ehtiyac duyur (bu daha böyük göstəricilər haradasa saxlanmalıdır). Göstəricilər proqramların tez-tez bir hissəsi olduğundan, bu fərq keşi yükləyə bilər və bu da öz növbəsində bütün sistemin daha yavaş işləməsinə səbəb olur. Beləliklə, perspektivdə görə bilərik ki, əgər prosessor arxitekturasını sadəcə olaraq 64 bitə dəyişsək, bu, əslində bütün sistemi yavaşladar. Beləliklə, bu amil başqa yerlərdə daha çox optimallaşdırma ilə balanslaşdırılmalıdır.

ARM64

Yeni iPhone 7s-i gücləndirən 64 bitlik prosessor olan A5 daha geniş registrlərə malik adi ARM prosessoru deyil. ARM64 köhnə, 32-bit versiyaya nisbətən əsas təkmilləşdirmələri ehtiva edir.

Apple A7 prosessoru.

Reyestr

ARM64 32 bitlik ARM ilə müqayisədə iki dəfə çox tam registr saxlayır (registrlərin sayını və enini qarışdırmamağa diqqət yetirin - biz "64 bit" bölməsində genişlik haqqında danışdıq. Beləliklə, ARM64 həm iki dəfə geniş, həm də iki dəfə çox registrlərə malikdir. registrlər). 32 bitlik ARM-də 16 tam registr var: bir proqram sayğacı (PC - cari təlimatın nömrəsini ehtiva edir), yığın göstəricisi (davam edən funksiyaya göstərici), keçid registri (sondan sonra qayıtmaq üçün göstərici). funksiyasının), qalan 13-ü isə proqram istifadəsi üçündür. Bununla belə, ARM64-də 32 tam registr, o cümlədən bir sıfır registr, keçid reyestri, çərçivə göstəricisi (stek göstəricisinə bənzər) və gələcək üçün qorunan bir registr var. Bu, bizə tətbiqdən istifadə üçün 28 registr buraxır ki, bu da 32 bitlik ARM-dən iki dəfə çoxdur. Eyni zamanda, ARM64 üzən nöqtəli nömrə (FPU) registrlərinin sayını 16-dan 32 128 bitlik registrə qədər iki dəfə artırdı.

Bəs reyestrlərin sayı niyə bu qədər vacibdir? Yaddaş ümumiyyətlə CPU hesablamalarından daha yavaşdır və oxumaq/yazmaq çox uzun vaxt apara bilər. Bu, sürətli prosessorun yaddaşı gözləməyə davam etməsinə səbəb olacaq və biz sistemin təbii sürət həddinə çatacağıq. Prosessorlar bu əlilliyi bufer qatları ilə gizlətməyə çalışırlar, lakin hətta ən sürətli (L1) prosessorun hesablamasından daha yavaşdır. Bununla belə, registrlər birbaşa prosessorda olan yaddaş hüceyrələridir və onların oxunması/yazılması prosessoru yavaşlatmamaq üçün kifayət qədər sürətlidir. Registrlərin sayı praktiki olaraq prosessor hesablamaları üçün ən sürətli yaddaşın miqdarını ifadə edir ki, bu da bütün sistemin sürətinə böyük təsir göstərir.

Eyni zamanda, bu sürətin kompilyatordan yaxşı optimallaşdırma dəstəyinə ehtiyacı var ki, dil bu registrlərdən istifadə edə bilsin və hər şeyi ümumi proqram (yavaş) yaddaşda saxlamaq məcburiyyətində qalmasın.

Təlimat dəsti

ARM64 həmçinin təlimat dəstinə böyük dəyişikliklər gətirir. Təlimat dəsti prosessorun yerinə yetirə biləcəyi atom əməliyyatları toplusudur (məsələn, 'Əlavə registri1 registr2' iki registrdə nömrələri əlavə edir). Fərdi dillər üçün mövcud olan funksiyalar bu təlimatlardan ibarətdir. Daha mürəkkəb funksiyalar daha çox təlimat yerinə yetirməlidir, belə ki, onlar daha yavaş ola bilər.

ARM64-də yenilik AES şifrələməsi, SHA-1 və SHA-256 hash funksiyaları üçün təlimatlardır. Beləliklə, mürəkkəb bir tətbiq əvəzinə, yalnız dil bu təlimatı adlandıracaq - bu, bu cür funksiyaların hesablanmasına böyük bir sürət gətirəcək və ümid edirəm ki, tətbiqlərdə əlavə təhlükəsizlik. məs. yeni Touch ID də bu təlimatları şifrələmədə istifadə edərək, real sürət və təhlükəsizliyə imkan verir (nəzəri olaraq, təcavüzkar məlumatlara daxil olmaq üçün prosessorun özünü dəyişdirməli olacaq - onun miniatür ölçüsünü nəzərə alsaq, praktiki deyil).

32 bit ilə uyğunluq

Qeyd etmək lazımdır ki, A7 emulyasiyaya ehtiyac olmadan 32 bitlik rejimdə tam işləyə bilər. Bu o deməkdir ki, yeni iPhone 5s 32 bitlik ARM-də tərtib edilmiş proqramları heç bir yavaşlama olmadan işlədə bilər. Bununla belə, o, yeni ARM64 funksiyalarından istifadə edə bilməz, ona görə də yalnız A7 üçün daha sürətli işləməli olan xüsusi konstruksiya etmək həmişə məqsədəuyğundur.

İcra vaxtı dəyişir

Runtime proqramlaşdırma dilinə funksiyalar əlavə edən koddur və proqram işləyərkən tərcümədən sonra istifadə edə bilir. Apple-ın tətbiq uyğunluğunu qorumağa ehtiyac olmadığı üçün (64-bit ikili sistem 32-bitdə işləyir), onlar Objective-C dilində bir neçə təkmilləşdirmə apara bilər.

Onlardan biri sözdə olandır işarələnmiş göstərici (işarələnmiş göstərici). Normalda obyektlər və həmin obyektlərə işarə edənlər yaddaşın ayrı-ayrı hissələrində saxlanılır. Bununla belə, yeni göstərici növləri az verilənlərə malik siniflərə obyektləri birbaşa göstəricidə saxlamağa imkan verir. Bu addım yaddaşın birbaşa obyekt üçün ayrılması ehtiyacını aradan qaldırır, sadəcə olaraq onun içərisində bir göstərici və obyekt yaradın. Tagged göstəricilər yalnız 64 bitlik arxitekturada dəstəklənir, çünki 32 bitlik göstəricidə kifayət qədər faydalı məlumat saxlamaq üçün kifayət qədər yer yoxdur. Buna görə də iOS, OS X-dən fərqli olaraq, bu funksiyanı hələ dəstəkləmirdi. Bununla belə, ARM64-ün gəlişi ilə bu, dəyişir və iOS bu baxımdan da OS X-i tutdu.

Göstəricilərin uzunluğu 64 bit olsa da, ARM64-də göstəricinin öz ünvanı üçün yalnız 33 bit istifadə olunur. Göstərici bitlərinin qalan hissəsini etibarlı şəkildə gizlədə bilsək, qeyd olunan işarələnmiş göstəricilərdə olduğu kimi, əlavə məlumatları saxlamaq üçün bu boşluqdan istifadə edə bilərik. Konseptual olaraq, bu, Objective-C tarixindəki ən böyük dəyişikliklərdən biridir, baxmayaraq ki, bu, satıla bilən bir xüsusiyyət deyil - buna görə də əksər istifadəçilər Apple-ın Objective-C-ni necə irəli apardığını bilməyəcəklər.

Belə bir işarələnmiş göstəricinin qalan boşluğunda saxlanıla bilən faydalı məlumatlara gəldikdə, məsələn, Objective-C indi ondan sözdə məlumatları saxlamaq üçün istifadə edir. istinad sayı (istinadların sayı). Əvvəllər istinad sayı yaddaşın başqa yerində, onun üçün hazırlanmış hash cədvəlində saxlanılırdı, lakin bu, çoxlu sayda alloc/dealloc/retain/release zəngləri zamanı bütün sistemi ləngidə bilər. Cədvəl iplik təhlükəsizliyi səbəbindən kilidlənməli idi, buna görə də iki iplikdəki iki obyektin istinad sayını eyni anda dəyişdirmək mümkün deyildi. Ancaq bu dəyər yeni sözdə qalanlara daxil edilir isa göstəricilər. Bu, daha bir gözə çarpmayan, lakin gələcəkdə böyük üstünlük və sürətlənmədir. Ancaq 32 bitlik bir arxitekturada bu heç vaxt əldə edilə bilməz.

Əlaqədar obyektlər haqqında məlumatlar, obyektin zəif istinad edilib-edilməməsi, obyekt üçün dağıdıcı yaratmaq lazım olub-olmaması və s., həmçinin obyektlərin göstəricilərinin qalan yerinə yeni daxil edilir.Bu məlumat sayəsində Objective-C icra müddəti hər bir tətbiqin sürətində əks olunan icra müddətini əsaslı surətdə sürətləndirməyə qadirdir. Testdən bu, bütün yaddaş idarəetmə zənglərinin təxminən 40-50% sürətləndirilməsi deməkdir. Sadəcə 64-bit göstəricilərə keçərək və bu yeni məkandan istifadə etməklə.

Nəticə

Rəqiblər 64 bitlik arxitekturaya keçidin lazımsız olduğu fikrini yaymağa çalışsalar da, bunun sadəcə çox məlumatsız bir fikir olduğunu artıq biləcəksiniz. Düzdür, dilinizi və ya proqramlarınızı uyğunlaşdırmadan 64 bitə keçid əslində heç nə demək deyil - hətta bütün sistemi yavaşlatır. Lakin yeni A7, yeni təlimat dəsti ilə müasir ARM64 istifadə edir və Apple bütün Objective-C dilini modernləşdirmək və yeni imkanlardan yararlanmaq üçün çətinlik çəkdi - buna görə də vəd edilən sürət.

Burada 64 bitlik arxitekturanın irəliyə doğru düzgün addım olmasının bir çox səbəbini qeyd etdik. Bu, "başlıq altında" başqa bir inqilabdır, bunun sayəsində Apple təkcə dizaynı, istifadəçi interfeysi və zəngin ekosistemi ilə deyil, əsasən bazardakı ən müasir texnologiyalarla ön planda qalmağa çalışacaq.

Mənbə: mikeash.com
.