Майк Эш посвященный в его блоге практические последствия перехода на 64-битную архитектуру в iPhone 5S. Эта статья основана на его выводах.
Причина этого текста в основном связана с большим количеством дезинформации, распространяемой о том, что на самом деле означает новый iPhone 5s с 64-битным процессором ARM для пользователей и рынка. Здесь мы постараемся донести объективную информацию о производительности, возможностях и последствиях этого перехода для разработчиков.
«64 бит»
Метка «X-бит» может относиться к двум частям процессора: ширине целочисленных регистров и ширине указателей. К счастью, на большинстве современных процессоров эта ширина одинакова, поэтому в случае A7 это означает 64-битные целочисленные регистры и 64-битные указатели.
Однако не менее важно указать, что НЕ означает «64бит»: Размер физического адреса ОЗУ. Количество бит для связи с ОЗУ (следовательно, объем ОЗУ, которое может поддерживать устройство) не связано с количеством битов ЦП. Процессоры ARM имеют адреса от 26 до 40 бит и могут быть изменены независимо от остальной части системы.
- Размер шины данных. Объем данных, полученных из оперативной или буферной памяти, также не зависит от этого фактора. Отдельные инструкции процессора могут запрашивать разные объемы данных, но они либо отправляются порциями, либо получают из памяти больше, чем необходимо. Это зависит от размера кванта данных. 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-битная версия не влияет на общий объем оперативной памяти, которую может использовать процессор, она может облегчить работу с большими фрагментами оперативной памяти в одной программе. Любая отдельная программа, работающая на 32-битном процессоре, имеет всего около 4 ГБ адресного пространства. Учитывая, что операционная система и стандартные библиотеки что-то занимают, программе остается где-то 1-3 ГБ для использования приложениями. Однако если 32-битная система имеет более 4 ГБ оперативной памяти, использовать эту память немного сложнее. Нам придется прибегнуть к тому, чтобы заставить операционную систему отобразить эти большие куски памяти для нашей программы (виртуализация памяти), или мы можем разделить программу на несколько процессов (где каждый процесс теоретически снова имеет 4 ГБ памяти, доступной для прямой адресации).
Однако эти «хаки» настолько сложны и медленны, что ими пользуется минимум приложений. На практике на 32-битном процессоре каждая программа будет использовать только свои 1–3 ГБ памяти, а более доступную оперативную память можно использовать для одновременного запуска нескольких программ или использовать эту память в качестве буфера (кэширования). Такое использование практично, но нам бы хотелось, чтобы любая программа могла легко использовать фрагменты памяти размером более 4 ГБ.
Теперь мы подошли к частому (на самом деле неверному) утверждению, что без памяти более 4 ГБ 64-битная архитектура бесполезна. Увеличение адресного пространства полезно даже в системе с меньшим объемом памяти. Файлы, отображаемые в памяти, представляют собой удобный инструмент, в котором часть содержимого файла логически связана с памятью процесса без необходимости загрузки всего файла в память. Таким образом, система может, например, постепенно обрабатывать большие файлы, во много раз превышающие объем оперативной памяти. В 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 также вносит серьезные изменения в набор команд. Набор команд — это набор атомарных операций, которые может выполнять процессор (например, «ДОБАВИТЬ регистр1 регистр2» складывает числа в двух регистрах). Функции, доступные для отдельных языков, состоят из этих инструкций. Более сложные функции должны выполнять больше инструкций, поэтому они могут работать медленнее.
Новым в 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, например, теперь использует его для хранения так называемых счетчик ссылок (количество ссылок). Раньше счетчик ссылок хранился в другом месте памяти, в подготовленной для него хеш-таблице, но это могло замедлить работу всей системы в случае большого количества вызовов alloc/dealloc/retain/release. Таблицу пришлось заблокировать из соображений потокобезопасности, поэтому счетчик ссылок двух объектов в двух потоках не мог быть изменен одновременно. Однако это значение вновь вставляется в остальную часть так называемого иша индикаторы. Это еще одно незаметное, но огромное преимущество и ускорение в будущем. Однако этого невозможно достичь в 32-битной архитектуре.
В оставшееся место указателей на объекты также заново вставляется информация о связанных объектах, слабо ли на объект ссылается, нужно ли генерировать деструктор для объекта и т. д. Благодаря этой информации Objective-C runtime способен существенно ускорить время выполнения, что отражается на скорости каждого приложения. По результатам тестирования это означает ускорение всех вызовов управления памятью примерно на 40-50%. Просто переключившись на 64-битные указатели и используя это новое пространство.
Вывод
Хотя конкуренты и попытаются распространить мысль о необходимости перехода на 64-битную архитектуру, вы уже будете знать, что это всего лишь весьма неосведомленное мнение. Действительно, простой переход на 64бит без адаптации под него языка или приложений на самом деле ничего не значит — он даже тормозит всю систему. Но в новом A7 используется современный ARM64 с новым набором инструкций, а Apple потрудилась модернизировать весь язык Objective-C и воспользоваться новыми возможностями — отсюда и обещанное ускорение.
Здесь мы упомянули большое количество причин, по которым 64-битная архитектура является правильным шагом вперед. Это очередная революция «под капотом», благодаря которой Apple постарается оставаться в авангарде не только с дизайном, пользовательским интерфейсом и богатой экосистемой, но, главным образом, с самыми современными технологиями на рынке.
Многим неосведомленным пользователям Android/Samsung следует прочитать эту статью, а затем спрятаться в углу.
Что ж, нам придется их пожалеть. В течение многих лет они оправдывали трагический UX и UI Android, говоря, что у них самая технологичная операционная система с множеством функций, а теперь выяснилось, что они снова отстают на годы :)
Если человек не овца и слушает рекламу (и у него это хорошо получается), то на основе личного опыта он может составить собственное мнение :-).
Я пробую почти все конкурсы и формирую свое мнение.
Мне нужен новый сверхмощный мобильный телефон, потому что я не трачу на него много денег. То есть Мне нужно меньше производительности за меньшую цену ;-). Возможно, я бы предпочел более медленный вариант с большей батареей.
С другой стороны, новый процак был бы полезен для iPad, где много игр :-).
Я Android/HTC :) потому что для меня это довольно увлекательно, а рутирование и конвертация качественного HW в быстрый истребитель - мое хобби. И iOS не позволит мне этого сделать. (Это даже не обязательно. Более-менее iOS устроена так, что все работает как надо и ничего там делать не надо. Когда перестану получать удовольствие от игры, куплю яблоко и буду наслаждаться). Но я не знаю, почему вы продолжаете нападать друг на друга, как дети. Apple полностью похожа на Android. Это все равно, что сравнивать демократию с диктатурой и тому подобное... Я смотрел конференцию, когда был представлен iPhone 5S, и, несмотря на то, что у меня нет ничего от Apple, мне понравилась 64-битная версия и другие появившиеся улучшения. Но не потому, что я сложный хонимир тртко, который сидит за ПК и гоняется за Android или Apple, а потому, что я вижу ПРОГРЕСС, который не заставит меня долго ждать. Люди должны начать работать очень усердно, чтобы у них не было времени заниматься ерундой, выражаясь вежливо.
конструктивный вклад с другой стороны :) kiez это открыло бы глаза остальным 99% андроид-позитива
возможно, стоит сначала обсудить 99% фанатиков яблок, тогда можно будет конструктивно поговорить
очень сложные вещи объяснены просто... спасибо
Отличная статья! Да, я согласен, что пользователям Android/WP следует обязательно прочитать эту статью. Вместо троллинга и умных разговоров о том, «как 64b бесполезен в мобильных телефонах»…
у тебя, вероятно, никогда не было в руке WP, иначе у тебя не было бы этого
С момента своих первых успехов на мобильном рынке компания Samsung только и делала, что очерняла конкурентов, но, по сути, все это время шла по ее стопам. Apple всегда была образцом для подражания для технологических компаний, и если они сосредоточатся только на насмешках и постоянном дезинформировании клиентов, они вскоре оступятся. Apple всегда шла своим путем, и это всегда было вопросом очень удачного момента, которого не хватает многим конкурирующим компаниям в отрасли.
Можно сказать, что Samsung оседлала волну и пользуется ее возможностями. Он сделал ставку на Android, у него отличное HW, он много чего делает сам, у него достойная поддержка. И как любая хищная азиатская компания, она использует все возможности рекламы. И, конечно же, он ворует и копирует. В чем хороши «косоглазые», так это в копировании. Они очень хорошо подсчитали, что это гораздо дешевле, чем идти своим путем, шаг за шагом. И как сильная компания она просто может себе это позволить. Еще…
Я просто не понимаю, почему скорость телефона постоянно увеличивается, приведите примеры, для чего вы его используете, постепенно повышать производительность мобильника для меня нет смысла, но слово маркетинг я уберу .
Игры, плохо оптимизированные игры. Кроме того, Transport Tycoon на iPad 3 работает не так плавно и в том же разрешении, как на настольном компьютере. Пример.
Я просто не понимаю, почему скорость телефона продолжает расти, приведите примеры, для чего вы его используете, постепенно мне не имеет смысла повышать производительность мобильного телефона, если я уберу из него слово маркетинг .
Для обработки видео, аудио и изображений. И перейдем к играм.
Каждому, кто использует iPhone только для звонков, отправки текстовых сообщений, а также изредка для чтения или отправки электронной почты и изредка для серфинга в Интернете, понадобится iPhone 4. Я считаю, что таких пользователей много. Не всем нужен лучший телефон в мире :-)
овца
Разве физический компромисс между аппаратным и программным обеспечением ничего для вас не значит? Это мне немного напоминает конец 19 века, когда физики того времени говорили, что всё в физике уже открыто и продолжать не надо (десятилетие до теории относительности и три до квантовой теории) .
Стремление к лучшему никогда не заканчивается. Иногда программное обеспечение ведет, а иногда аппаратное обеспечение. Но если один застрянет, другой уже не отпустит. Не будем так эгоистичны по отношению к нашим потомкам :) Так что к вашему комментарию - более быстрый телефон позволит использовать более мощные приложения, которые смогут гораздо больше, чем диски. И однажды вещи, на которые не хватает даже нынешних компьютеров. Будущее захватывающее.
Точно :)
Хорошая статья, но я не понимаю, почему Apple не поставила в А7 2 ГБ ОЗУ. Да, многозадачность iOS не такова, что обязательно нужно 2Гб, но учитывая удвоенную длину указателя памяти, это было бы куда более подходящим.
А в остальном я согласен, что 64-битный процессор "ненужен" для мобильного телефона, как ненужен был retina-дисплей или оптическая мышь вместо шарика - все эти изобретения были помечены как "ненужные", но на мой взгляд Правильное слово — «вне времени», потому что когда-то должно прийти, и Apple не боится придумывать что-то новое.
Я поддерживаю это. К сожалению, даже «бесполезный» — не совсем точное выражение. Ненужное означает то, приоритет чего человек не знает. Это определенно неправда. Скорость может и не нуждается в такой скорости, но она ее обязательно распознает. И когда программное обеспечение догонит аппаратное обеспечение, снова появится возможность для совершенствования.
Конечно, я за, я имею в виду, что iP5 действительно довольно быстрый смартфон, поэтому 5S вообще не обязательно должен быть 64-битным. Но однажды кому-то снова пришлось столкнуться с этим, и это была Apple, и это произошло сейчас. Сколько я себя помню, эксперты также говорили о том, что 64-битные процессоры будут бесполезны даже в компьютерах.
Для меня, как айтишника, чуть не провалившего аттестацию, важен вывод. Вся статья (подкрепленная комментариями) мне кажется весьма познавательной, и хотя объяснить это я не смогу, А7 с 64-битной архитектурой — это шаг вперед. Спасибо за информацию.
Я бы отредактировал название статьи, так как это маркетинговый ход. Любая инновация – это, по сути, маркетинговый ход. :-)
Я не думаю. Например, Samsung использует маркетинговые ходы. Они появляются с оперативной памятью, которая iPhone вообще не нужна. Им сходит с рук функции, которые вообще невозможно использовать. Их намеренно повышают производительность процессора для тестов. И т. д. Это маркетинг, хотя да, он вводит в заблуждение, и это им не сойдет с рук ;)