Майк Аш посветен в своя блог практическите последици от преминаването към 64-битова архитектура в iPhone 5S. Тази статия се основава на неговите открития.
Причината за този текст се дължи основно на голямото количество дезинформация, която се разпространява за това какво всъщност означава новият iPhone 5s с 64-битов ARM процесор за потребителите и пазара. Тук ще се опитаме да предоставим обективна информация за производителността, възможностите и последиците от този преход за разработчиците.
"64 бита"
Има две части на процесора, за които етикетът "X-bit" може да се отнася - ширината на целочислените регистри и ширината на указателите. За щастие при повечето съвременни процесори тези ширини са еднакви, така че в случая на A7 това означава 64-битови цели числа и 64-битови указатели.
Въпреки това е също толкова важно да се посочи какво НЕ означава "64bit": Размер на физически адрес на RAM. Броят на битовете за комуникация с RAM (по този начин количеството RAM, което устройството може да поддържа) не е свързано с броя на битовете на процесора. 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 GB адресно пространство. Като се има предвид, че операционната система и стандартните библиотеки заемат нещо, това оставя на програмата някъде между 1-3 GB за използване на приложения. Въпреки това, ако 32-битова система има повече от 4 GB RAM, използването на тази памет е малко по-сложно. Трябва да прибегнем до принуждаване на операционната система да картографира тези по-големи парчета памет за нашата програма (виртуализация на паметта) или можем да разделим програмата на множество процеси (където всеки процес отново теоретично има 4 GB налична памет за директно адресиране).
Тези "хакове" обаче са толкова трудни и бавни, че минимум приложения ги използват. На практика при 32-битов процесор всяка програма ще използва само своите 1-3 GB памет, а повече налична RAM може да се използва за стартиране на множество програми едновременно или да използва тази памет като буфер (кеширане). Тези употреби са практични, но бихме искали всяка програма да може лесно да използва парчета памет, по-големи от 4 GB.
Сега стигаме до честото (всъщност неправилно) твърдение, че без повече от 4GB памет 64-битовата архитектура е безполезна. По-голямото адресно пространство е полезно дори в система с по-малко памет. Файловете с карта на паметта са удобен инструмент, при който част от съдържанието на файла е логически свързано с паметта на процеса, без целият файл да се зарежда в паметта. Така системата може например постепенно да обработва големи файлове, многократно по-големи от капацитета на RAM паметта. В 32-битова система такива големи файлове не могат да бъдат надеждно картографирани в паметта, докато в 64-битова система това е парче торта, благодарение на много по-голямото адресно пространство.
По-големият размер на указателите обаче носи и един голям недостатък: в противен случай идентичните програми се нуждаят от повече памет на 64-битов процесор (тези по-големи указатели трябва да се съхраняват някъде). Тъй като указателите са честа част от програмите, тази разлика може да натовари кеша, което от своя страна води до по-бавна работа на цялата система. Така че в перспектива можем да видим, че ако просто променим архитектурата на процесора на 64-битова, това всъщност ще забави цялата система. Така че този фактор трябва да бъде балансиран с повече оптимизации на други места.
ARM64
A7, 64-битовият процесор, захранващ новия iPhone 5s, не е просто обикновен ARM процесор с по-широки регистри. ARM64 съдържа големи подобрения спрямо по-старата, 32-битова версия.
регистратура
ARM64 съдържа два пъти повече цели регистри от 32-битовия ARM (внимавайте да не объркате броя и ширината на регистрите - говорихме за ширината в раздела "64-битови". Така че ARM64 има два пъти по-широки регистри и два пъти повече регистри). 32-битовият ARM има 16 целочислени регистъра: един програмен брояч (PC - съдържа номера на текущата инструкция), указател на стека (указател към изпълняваща се функция), регистър за връзка (указател към връщане след края на функцията), а останалите 13 са за приложение. Въпреки това, ARM64 има 32 целочислени регистъра, включително един нулев регистър, регистър за връзка, указател на рамка (подобен на указател на стека) и един запазен за бъдещето. Това ни оставя с 28 регистъра за използване на приложения, повече от два пъти повече от 32-битовия ARM. В същото време ARM64 удвои броя на регистрите с числа с плаваща запетая (FPU) от 16 на 32 128-битови регистъра.
Но защо броят на регистрите е толкова важен? Паметта обикновено е по-бавна от изчисленията на процесора и четенето/записът може да отнеме много дълго време. Това би накарало бързия процесор да продължи да чака памет и бихме достигнали естественото ограничение на скоростта на системата. Процесорите се опитват да скрият този недостатък със слоеве буфери, но дори най-бързият (L1) все още е по-бавен от изчислението на процесора. Регистрите обаче са клетки от паметта директно в процесора и тяхното четене/запис е достатъчно бързо, за да не забавя процесора. Броят на регистрите на практика означава количеството на най-бързата памет за изчисления на процесора, което значително влияе върху скоростта на цялата система.
В същото време тази скорост се нуждае от добра поддръжка за оптимизиране от компилатора, така че езикът да може да използва тези регистри и да не се налага да съхранява всичко в паметта на общото приложение (бавната).
Комплект инструкции
ARM64 също носи големи промени в набора от инструкции. Наборът от инструкции е набор от атомарни операции, които процесорът може да изпълнява (напр. „ADD register1 register2“ събира числата в два регистъра). Функциите, достъпни за отделните езици, са съставени от тези инструкции. По-сложните функции трябва да изпълняват повече инструкции, така че могат да бъдат по-бавни.
Ново в ARM64 са инструкции за AES криптиране, SHA-1 и SHA-256 хеш функции. Така че вместо сложна реализация, само езикът ще извика тази инструкция - което ще доведе до огромно ускоряване на изчисляването на такива функции и, надяваме се, ще добави сигурност в приложенията. напр. новият Touch ID също използва тези инструкции при криптиране, позволявайки реална скорост и сигурност (на теория атакуващият би трябвало да модифицира самия процесор, за да получи достъп до данните - което е най-малкото непрактично предвид миниатюрния му размер).
Съвместимост с 32 бита
Важно е да споменем, че A7 може да работи изцяло в 32-битов режим без нужда от емулация. Това означава, че новият iPhone 5s може да изпълнява приложения, компилирани на 32-битов ARM, без никакво забавяне. Тогава обаче не може да използва новите функции на ARM64, така че винаги си струва да се направи специална компилация само за A7, която трябва да работи много по-бързо.
Промени във времето на изпълнение
Времето за изпълнение е кодът, който добавя функции към езика за програмиране, които той може да използва, докато приложението работи, до превода. Тъй като Apple не трябва да поддържа съвместимост на приложения (че 64-битов двоичен файл работи на 32-битов), те биха могли да си позволят да направят още няколко подобрения на езика Objective-C.
Един от тях е т.нар маркиран показалец (маркиран показалец). Обикновено обектите и указателите към тези обекти се съхраняват в отделни части на паметта. Новите типове указатели обаче позволяват на класове с малко данни да съхраняват обекти директно в указателя. Тази стъпка елиминира необходимостта от разпределяне на памет директно за обекта, просто създайте указател и обекта вътре в него. Маркираните указатели се поддържат само в 64-битова архитектура и поради факта, че вече няма достатъчно място в 32-битов указател за съхраняване на достатъчно полезни данни. Следователно iOS, за разлика от OS X, все още не поддържа тази функция. Въпреки това, с пристигането на ARM64, това се променя и iOS настигна OS X и в това отношение.
Въпреки че указателите са дълги 64 бита, на ARM64 само 33 бита се използват за собствения адрес на указателя. И ако сме в състояние надеждно да демаскираме останалите битове на указателя, можем да използваме това пространство за съхраняване на допълнителни данни – както в случая със споменатите маркирани указатели. Концептуално, това е една от най-големите промени в историята на Objective-C, въпреки че не е продаваема функция - така че повечето потребители няма да знаят как Apple движи Objective-C напред.
Що се отнася до полезните данни, които могат да се съхраняват в оставащото пространство на такъв тагирани указател, Objective-C, например, сега ги използва за съхраняване на т.нар. референтен брой (брой препратки). Преди това броят на препратките се съхраняваше на различно място в паметта, в подготвена за него хеш таблица, но това можеше да забави цялата система в случай на голям брой извиквания за разпределяне/деаллок/запазване/освобождаване. Таблицата трябваше да бъде заключена поради безопасността на нишката, така че броят на препратките на два обекта в две нишки не можеше да бъде променен едновременно. Тази стойност обаче е ново вмъкната в останалата част от т.нар Иса показатели. Това е още едно незабележимо, но огромно предимство и ускорение в бъдещето. Това обаче никога не може да бъде постигнато в 32-битова архитектура.
Информацията за свързаните обекти, дали обектът е слабо рефериран, дали е необходимо да се генерира деструктор за обекта и т.н., също се вмъква наново в оставащото място на указатели към обектите.Благодарение на тази информация, Objective-C runtime е в състояние фундаментално да ускори времето за изпълнение, което се отразява в скоростта на всяко приложение. От тестването това означава около 40-50% ускоряване на всички повиквания за управление на паметта. Просто като преминете към 64-битови указатели и използвате това ново пространство.
záver
Въпреки че конкурентите ще се опитат да разпространят идеята, че преминаването към 64-битова архитектура е ненужно, вие вече знаете, че това е просто много неинформирано мнение. Вярно е, че преминаването към 64-битова без адаптиране на вашия език или приложения всъщност не означава нищо - дори забавя цялата система. Но новият A7 използва модерен ARM64 с нов набор от инструкции и Apple са си направили труда да модернизират целия език Objective-C и да се възползват от новите възможности - оттук и обещаното ускоряване.
Тук споменахме голям брой причини, поради които 64-битовата архитектура е правилната стъпка напред. Това е поредната революция "под капака", благодарение на която Apple ще се опита да остане в челните редици не само с дизайн, потребителски интерфейс и богата екосистема, но най-вече с най-модерните технологии на пазара.
Много неинформирани Android/Samsung хора трябва да прочетат тази статия и след това да се скрият в ъгъла.
Е, трябва да ги съжаляваме. Години наред те оправдаваха трагичния UX и UI на Android, като казваха, че имат най-технологично напредналата операционна система с функции, а сега разбраха, че отново са с години назад :)
Ако човек не е овца и слуша реклами (и го бива), то след личен опит може да си изгради собствено мнение :-).
Опитвам почти всички конкуренции и си изграждам собствено мнение.
За мен имам нужда от нов супер високопроизводителен мобилен телефон, защото не харча много за него. Това е Имам нужда от по-малко производителност за по-ниска цена ;-). Може би бих предпочел по-бавен с по-голяма батерия.
От друга страна, новият procak би бил полезен за iPad, където има много игри :-).
Аз съм Android/HTC :), защото ми е доста забавно и руутването и конвертирането на висококачествен HW в бърз боец е моето хоби. И iOS не ми позволява да го направя. (Дори не е необходимо. Горе-долу iOS е проектирана така, че всичко да работи както трябва и не е нужно да правите нищо там. Когато спра да се наслаждавам на играта, ще си купя ябълка и ще й се наслаждавам). Но не знам защо продължавате да се нападате като деца. Apple е напълно като Android. Това е като да сравняваш демокрацията с диктатурата и други подобни... Гледах конференцията, когато беше представен iPhone 5S и въпреки факта, че не притежавам нищо от Apple, харесах 64-битовия и други подобрения, които дойдоха. Но не защото съм комплексиран honimír trtko, който седи зад компютър и гони Android или Apple, а защото виждам ПРОГРЕСА, който няма да ме накара да чакам дълго. Хората трябва да започнат да работят много здраво, за да нямат време да се занимават с глупости, казано учтиво.
конструктивен принос от другата страна :) това би отворило очите на останалите 99% android положителни
може би 99% от ябълковите фанатици трябва първо да бъдат обсъдени, тогава можем да водим конструктивен разговор
много сложни неща, обяснени просто... благодаря
Страхотна статия! Да, съгласен съм, че потребителите на Android/WP трябва да прочетат тази статия като задължителна. Вместо да тролите и да говорите умно за това „как 64b е безполезен в мобилните телефони“…
вероятно никога не сте имали wp в ръката си, иначе нямаше да имате това
От първите си успехи на мобилния пазар, Samsung не направи нищо друго, освен да очерни конкуренцията, но всъщност през цялото това време вървеше по нейните стъпки. Apple винаги е била модел за подражание за технологичните компании и ако се фокусират само върху подигравките и постоянното дезинформиране на клиентите, скоро ще се спънат. Apple винаги е вървяла по собствен път и винаги е било въпрос на много добър момент, който липсва на много конкурентни компании в индустрията.
Може да се каже, че Samsung яхва вълната и се възползва от нейните възможности. Заложил е на Android, има страхотен HW, прави много неща сам, има прилична поддръжка. И като всяка хищна азиатска компания използва всички възможности на рекламата. И разбира се краде и копира. Това, в което "косооките" го бива, е копирането. Много добре са пресметнали, че им излиза много по-евтино, отколкото да вървят по своя път, стъпка по стъпка. И като силна компания, тя просто може да си позволи това. Още…
Само не разбирам защо скоростта на телефона непрекъснато се увеличава, дайте ми примери за какво го използвате, лека полека няма смисъл да увеличавам производителността на мобилния телефон, но ще махна думата маркетинг .
Игри, лошо оптимизирани игри. Освен това Transport Tycoon на iPad 3 не работи толкова гладко и в същата разделителна способност, както на работния плот. Пример.
Просто не разбирам защо скоростта на телефона продължава да се увеличава, дайте ми няколко примера за какво го използвате, постепенно няма смисъл да увеличавам производителността на мобилния телефон, ако премахна думата маркетинг от него .
За обработка на видео, аудио и изображения. И към игрите.
Всеки, който използва iPhone само за обаждане, изпращане на текстови съобщения и от време на време за четене или изпращане на имейли и понякога сърфиране в интернет, ще се нуждае от iPhone 4. Вярвам, че има много такива потребители. Не всеки има нужда от най-добрия телефон в света :-)
овце
Физическият компромис между хардуер и софтуер не означава ли нищо за вас? Това ми напомня малко за края на 19-ти век, когато тогавашните физици казаха, че всичко във физиката е вече открито и няма нужда да се продължава (десетилетие преди теорията на относителността и три преди квантовата теория) .
Преследването на най-доброто никога не свършва. Понякога софтуерът води, а понякога хардуерът. Но ако единият се заклещи, няма да пусне другия. Няма да бъдем толкова егоисти към нашите потомци :) Така че към коментара ви - по-бърз телефон ще даде възможност за по-мощни приложения, които ще могат да правят много повече от дискове. И някога неща, за които и днешните компютри не стигат. Бъдещето е вълнуващо.
Точно :)
Хубава статия, но не разбирам защо Apple не сложи 7GB RAM в A2. Да, многозадачността на iOS не е такава, че да са необходими 2GB, но като се има предвид два пъти по-голямата дължина на указателя на паметта, би било много по-подходящо.
Но иначе съм съгласен, че 64-битовият процесор е "ненужен" за мобилен телефон, както беше ненужен ретина дисплей или оптична мишка вместо топка - всички тези изобретения бяха етикетирани като "ненужни", но според мен правилната дума е „вечен“, защото веднъж трябва да дойде и Apple не се страхува да измисли нещо ново.
Подкрепям това. За съжаление дори „безполезен“ не е точен израз. Ненужно означава нещо, чийто приоритет човек не знае. Това определено не е вярно. Скоростта може да не се нуждае от такава скорост, но определено ще я разпознае. И когато софтуерът настигне хардуера, отново ще има място за подобрение.
Разбира се, аз съм за, искам да кажа, че iP5 наистина е доста бърз смартфон, така че 5S изобщо не би трябвало да е 64-битов. Но един ден някой отново трябваше да се справи с това и това беше Apple и беше сега. Откакто се помня, експертите също говорят за това как 64-битовите процесори ще бъдат безполезни дори в компютрите.
За мен, като ИТ лаик, който за малко да се провали на матурата, изводът е важен. Цялата статия (подкрепена от коментарите) ми се струва доста проницателна и въпреки че няма да мога да я обясня, A7 с 64-битова архитектура е крачка напред. Благодаря за информацията.
Бих редактирал заглавието на статията, тъй като е маркетингов ход. Всяка иновация по същество е маркетингов ход. :-)
Не мисля. Например Samsung използва маркетингови ходове. Те се показват с RAM, която iPhone изобщо не се нуждае. Те се измъкват с функции, които изобщо не могат да се използват. Тяхното целенасочено увеличаване на производителността на процесора за тестове. и т.н. Това е маркетинг, въпреки че да, това е подвеждащо, което не трябва да се измъква просто ;)