Затвори оглас

Мике Асх посвећен на свом блогу практичне импликације преласка на 64-битну архитектуру у иПхоне 5С. Овај чланак се ослања на његове налазе.

Разлог за овај текст је углавном због велике количине дезинформација које се шире о томе шта нови иПхоне 5с са 64-битним АРМ процесором заправо значи за кориснике и тржиште. Овде ћемо покушати да донесемо објективне информације о перформансама, могућностима и импликацијама ове транзиције за програмере.

"64 бит"

Постоје два дела процесора на која се ознака „Кс-бит“ може односити – ширина целобројних регистара и ширина показивача. На срећу, на већини модерних процесора ове ширине су исте, тако да у случају А7 то значи 64-битне целобројне регистре и 64-битне показиваче.

Међутим, подједнако је важно истаћи шта „64бит“ НЕ значи: Величина физичке адресе РАМ-а. Број битова за комуникацију са РАМ-ом (дакле, количина РАМ-а коју уређај може да подржи) није повезан са бројем ЦПУ битова. АРМ процесори имају било где између 26- и 40-битних адреса и могу се мењати независно од остатка система.

  • Величина магистрале података. Количина података примљених из РАМ-а или бафер меморије је на сличан начин независна од овог фактора. Појединачне инструкције процесора могу захтевати различите количине података, али се они или шаљу у деловима или добијају више него што је потребно из меморије. Зависи од величине кванта података. иПхоне 5 већ прима податке из меморије у 64-битним квантима (и има 32-битни процесор), а можемо наићи на величине до 192 бита.
  • Било шта у вези са покретним зарезом. Величина таквих регистара (ФПУ) је поново независна од унутрашњег рада процесора. АРМ користи 64-битни ФПУ од пре АРМ64 (64-битни АРМ процесор).

Опште предности и мане

Ако упоредимо иначе идентичне 32-битне и 64-битне архитектуре, оне углавном нису толико различите. Ово је један од разлога за општу конфузију јавности која тражи разлог зашто Аппле прелази на 64-бит и на мобилним уређајима. Међутим, све долази из специфичних параметара процесора А7 (АРМ64) и начина на који га Аппле користи, а не само из чињенице да процесор има 64-битну архитектуру.

Међутим, ако ипак погледамо разлике између ове две архитектуре, наћи ћемо неколико разлика. Очигледно је да 64-битни целобројни регистри могу ефикасније да рукују 64-битним целим бројевима. И раније је са њима било могуће радити на 32-битним процесорима, али то је обично значило да се они поделе на 32-битне дугачке делове, што је изазвало спорије прорачуне. Дакле, 64-битни процесор може генерално да рачуна са 64-битним типовима једнако брзо као и са 32-битним. То значи да апликације које углавном користе 64-битне типове могу радити много брже на 64-битном процесору.

Иако 64-бит не утиче на укупну количину РАМ-а који процесор може да користи, може олакшати рад са великим деловима РАМ-а у једном програму. Сваки појединачни програм који ради на 32-битном процесору има само око 4 ГБ адресног простора. Узимајући у обзир да оперативни систем и стандардне библиотеке заузимају нешто, ово оставља програму негде између 1-3 ГБ за коришћење апликације. Међутим, ако 32-битни систем има више од 4 ГБ РАМ-а, коришћење те меморије је мало компликованије. Морамо да прибегнемо присиљавању оперативног система да мапира ове веће делове меморије за наш програм (виртуелизација меморије), или можемо да поделимо програм на више процеса (где сваки процес опет теоретски има 4 ГБ меморије доступне за директно адресирање).

Међутим, ови "хакови" су толико тешки и спори да их користи минимум апликација. У пракси, на 32-битном процесору, сваки програм ће користити само својих 1-3 ГБ меморије, а више расположиве РАМ меморије може се користити за покретање више програма истовремено или коришћење ове меморије као бафера (кеширање). Ове употребе су практичне, али бисмо желели да било који програм може лако да користи делове меморије веће од 4 ГБ.

Сада долазимо до честе (у ствари нетачне) тврдње да је без више од 4 ГБ меморије 64-битна архитектура бескорисна. Већи адресни простор је користан чак и на систему са мање меморије. Датотеке мапиране у меморију су згодан алат где је део садржаја датотеке логички повезан са меморијом процеса без потребе да се цела датотека учитава у меморију. Тако систем може, на пример, постепено да обрађује велике датотеке много пута веће од капацитета РАМ-а. На 32-битном систему, тако велике датотеке не могу се поуздано мапирати у меморију, док је на 64-битном систему то једноставно, захваљујући много већем адресном простору.

Међутим, већа величина показивача доноси и један велики недостатак: иначе идентичним програмима је потребно више меморије на 64-битном процесору (ови већи показивачи морају негде да се чувају). Пошто су показивачи чест део програма, ова разлика може да оптерети кеш меморију, што заузврат доводи до тога да цео систем ради спорије. Дакле, у перспективи, можемо видети да ако само променимо архитектуру процесора на 64-битну, то би заправо успорило цео систем. Дакле, овај фактор мора бити уравнотежен са више оптимизација на другим местима.

АРМКСНУМКС

А7, 64-битни процесор који покреће нови иПхоне 5с, није само обичан АРМ процесор са ширим регистрима. АРМ64 садржи велика побољшања у односу на старију, 32-битну верзију.

Аппле А7 процесор.

регистар

АРМ64 садржи дупло више целобројних регистара од 32-битног АРМ-а (пазите да не помешате број и ширину регистара – говорили смо о ширини у одељку „64-бит”. Дакле, АРМ64 има и дупло шире регистре и дупло више регистри). 32-битни АРМ има 16 целобројних регистара: један програмски бројач (ПЦ - садржи број тренутне инструкције), показивач стека (показивач на функцију у току), регистар везе (показивач на повратак након завршетка функције), а преосталих 13 су за употребу у апликацијама. Међутим, АРМ64 има 32 целобројна регистра, укључујући један нулти регистар, регистар везе, показивач оквира (слично показивачу стека) и један резервисан за будућност. Ово нам оставља 28 регистара за употребу у апликацијама, што је више него двоструко више од 32-битног АРМ-а. У исто време, АРМ64 је удвостручио број регистара бројева са покретним зарезом (ФПУ) са 16 на 32 128-битна регистра.

Али зашто је број регистара толико важан? Меморија је генерално спорија од ЦПУ прорачуна и читање/писање може потрајати веома дуго. Због тога би брзи процесор морао да чека на меморију, а ми бисмо достигли природно ограничење брзине система. Процесори покушавају да сакрију овај хендикеп слојевима бафера, али чак и најбржи (Л1) је и даље спорији од прорачуна процесора. Међутим, регистри су меморијске ћелије директно у процесору и њихово читање/писање је довољно брзо да не успори процесор. Број регистара практично значи количину најбрже меморије за процесорске прорачуне, што у великој мери утиче на брзину целог система.

Истовремено, овој брзини је потребна добра подршка за оптимизацију од компајлера, тако да језик може да користи ове регистре и да не мора све да складишти у општу (споро) меморију апликације.

Упутства

АРМ64 такође доноси велике промене у скупу инструкција. Скуп инструкција је скуп атомских операција које процесор може да изведе (нпр. 'АДД регистер1 регистер2' додаје бројеве у два регистра). Функције доступне појединачним језицима састоје се од ових упутстава. Сложеније функције морају извршити више инструкција, тако да могу бити спорије.

Ново у АРМ64 су упутства за АЕС енкрипцију, СХА-1 и СХА-256 хеш функције. Дакле, уместо сложене имплементације, само ће језик звати ову инструкцију – што ће донети огромно убрзање израчунавања таквих функција и, надамо се, додатну сигурност у апликацијама. На пример. нови Тоуцх ИД такође користи ова упутства у шифровању, омогућавајући стварну брзину и безбедност (у теорији, нападач би морао да модификује сам процесор да би приступио подацима – што је у најмању руку непрактично с обзиром на његову минијатурну величину).

Компатибилност са 32бит

Важно је напоменути да А7 може у потпуности да ради у 32-битном режиму без потребе за емулацијом. То значи да нови иПхоне 5с може да покреће апликације компајлиране на 32-битном АРМ-у без икаквог успоравања. Међутим, тада не може да користи нове функције АРМ64, тако да увек вреди направити посебну верзију само за А7, који би требало да ради много брже.

Промене времена извођења

Рунтиме је код који додаје функције програмском језику, које може да користи док је апликација покренута, све до превођења. Пошто Аппле не мора да одржава компатибилност апликација (да 64-битни бинарни систем ради на 32-битном), могли би себи приуштити још неколико побољшања језика Објецтиве-Ц.

Један од њих је тзв означени показивач (означен индикатор). Обично се објекти и показивачи на те објекте чувају у одвојеним деловима меморије. Међутим, нови типови показивача дозвољавају класама са мало података да складиште објекте директно у показивачу. Овај корак елиминише потребу да се меморија додели директно за објекат, само креирајте показивач и објекат унутар њега. Означени показивачи су подржани само у 64-битној архитектури и због чињенице да више нема довољно простора у 32-битном показивачу за складиштење довољно корисних података. Стога, иОС, за разлику од ОС Кс, још увек није подржавао ову функцију. Међутим, доласком АРМ64, ово се мења, а иОС је сустигао ОС Кс и по овом питању.

Иако су показивачи дугачки 64 бита, на АРМ64 се само 33 бита користе за сопствену адресу показивача. А ако смо у могућности да поуздано демаскирамо остатак битова показивача, можемо користити овај простор за складиштење додатних података – као у случају поменутих означених показивача. Концептуално, ово је једна од највећих промена у историји Објецтиве-Ц, иако није тржишна карактеристика - тако да већина корисника неће знати како Аппле напредује са Објецтиве-Ц.

Што се тиче корисних података који се могу ускладиштити у преосталом простору овако означеног показивача, Објецтиве-Ц га, на пример, сада користи за складиштење тзв. број референци (број референци). Раније је референтни број био ускладиштен на другом месту у меморији, у хеш табели припремљеној за то, али би то могло да успори цео систем у случају великог броја позива аллоц/деаллоц/ретаин/релеасе. Табела је морала да буде закључана због безбедности нити, тако да број референци два објекта у две нити није могао да се мења истовремено. Међутим, ова вредност се ново убацује у остатак тзв иса индикатори. Ово је још једна неупадљива, али огромна предност и убрзање у будућности. Међутим, ово се никада не би могло постићи у 32-битној архитектури.

Информације о придруженим објектима, да ли је објекат слабо референциран, да ли је потребно генерисати деструктор за објекат итд., такође се ново убацују на преостало место показивача на објекте. Захваљујући овим информацијама, Објецтиве-Ц рунтиме је у стању да суштински убрза време извршавања, што се огледа у брзини сваке апликације. Из тестирања, то значи око 40-50% убрзања свих позива за управљање меморијом. Само преласком на 64-битне показиваче и коришћењем овог новог простора.

Закључак

Иако ће конкуренти покушати да шире идеју да је прелазак на 64-битну архитектуру непотребан, већ ћете знати да је ово само врло необавештено мишљење. Истина је да једноставно прелазак на 64-битни без прилагођавања језика или апликација томе заправо не значи ништа – чак успорава цео систем. Али нови А7 користи модеран АРМ64 са новим скупом инструкција, а Аппле се потрудио да модернизује цео Објецтиве-Ц језик и искористи предности нових могућности – отуда обећано убрзање.

Овде смо поменули велики број разлога зашто је 64-битна архитектура прави корак напред. То је још једна револуција „испод хаубе“, захваљујући којој ће Епл покушати да остане на челу не само дизајном, корисничким интерфејсом и богатим екосистемом, већ углавном најсавременијим технологијама на тржишту.

Извор: микеасх.цом
.