Arm64 какие процессоры пк
Несколько запоздалый перевод заинтересовавшего меня блогпоста о том, что в действительности дает 64-битность процессора в iPhone без маркетинговой шелухи. Если текст покажется вам слишком очевидным, пропустите часть «Базовые преимущества и недостатки».
Как только был анонсирован iPhone 5S, технические медия были переполнены недостоверными статьями. К сожалению, написание хороших статей занимает время, а мир технической журналистики больше ценит скорость, чем достоверность. Сегодня, по просьбе нескольких своих читателей, я кратко изложу, что дает 64-bit ARM в iPhone 5S в плане производительности, возможностей и разработки.
Давайте для начала рассмотрим что, собственно, 64-битность означает. С этим термином связанно много путаницы, в основном из-за того, что нет единого устоявшегося определения. Однако, существует общее понимание этого термина. «Битность» обычно означает либо размер числового регистра, или размер указателя. К счастью, для большинства современных процессоров, их размер совпадает. Таким образом, 64-битность означает что процессор обладает 64-битными числовыми регистрами и 64-битными указателями.
- Размер адресуемой памяти. Количество бит, реально задействованных в указателе не связано с битностью процессора. Процессоры ARM использует от 26 до 40 бит, и это число может изменяться в отрыве от битности процессора.
- Ширину шины данных. Объем данных, запрашиваемых из RAM или кэша также не связано с битностью. Отдельные процессорные инструкции могут запрашивать произвольные объемы данных, но объем реально единовременно запрашиваемых данных может отличаться, либо разбивая запросы на части, или запрашивая больше чем необходимо. Уже в iPhone 5 размер запрашиваемого блока данных составляет 64 бита, а у PC доходит до 192 бит.
- Все что связано с вычислениями с плавающей запятой. Регистры FPU не связаны с архитектурой и процессоры ARM использовали 64-битные регистры задолго до ARM64.
Если вы будете сравнивать идентичные процессоры 32 и 64 битные CPU, вы не найдете больших различий, так что значительность перехода Apple на 64-битные ARM несколько преувеличена. Это важный шаг, но важный, в основном, из-за особенностей ARM и особенностью использования процессора компанией Apple. Тем не менее, некоторые различия имеются. Самым очевидным является 64-битные числовые регистры более эффективно работают с 64-битными числами. Вы можете работать с 64-битными числами и на 32-битном процессоре, но это обычно приводит к работе с двумя 32-битными частями, что работает ощутимо медленнее. 64-битные процессоры, обычно, выполняют операции над 64-битными числами также быстро как и над 32-битными, так что код активно использующий вычисления с 64-битными числами будет работать значительно быстрее.
Не смотря на то, что 64-битность не связана напрямую с объемом адресуемой памяти, она значительно облегчает использование большого объема RAM в рамках одной программы. Программа, запущенная на 32-битном процессоре может адресовать не больше 4GB адресного пространства. Часть памяти выделена под операционную систему и стандартные библиотеки, что оставляет 1-3GB на саму программу. Если у 32-битной системы больше 4GB RAM, то использование всего этого адресного пространства для программы значительно усложняется. Вам придется заняться махинациями вроде последовательного отображение разных частей RAM на часть виртуального адресного пространства или разбивание одной программы на несколько процессов.
Подобные трюки крайне трудозатраны и могут сильно замедлить систему, так что мало кто из программистов реально их использует. На практике, на 32-битных процессорах каждая программа используют до 1-3GB RAM, а вся ценность в обладании большего объема физической оперативной памяти заключается в возможности больше запускать программ одновременно и возможность кеширования больше данных с диска.
Увеличение объема адресного пространства полезно и для систем с небольшим объемом оперативной памяти — memory-mapped файлы, размеры которых могут быть и больше доступной оперативной памяти, т.к. операционная система реально загружает только те части файла, к которым производились обращения и, кроме того, умеет «вытеснять» загруженные данные обратно в файл, освобождая оперативную память. На 32-битных системах нельзя отобразить файлы размером больше 1-3GB. На 64-битных системах, адресное пространство значительно больше, так что такой проблемы нет.
Увеличение размера указателя может быть и ощутимым минусом: таже программа будет использовать больше памяти (возможно, сильно больше) будучи запущенной на 64 битном процессоре. Увеличение используемой памяти также «забивает» кэш, что снижает производительность.
В двух словах: 64-битность может увеличить производительность некоторых частей кода и упрощает некоторые техники, вроде memory-mapped файлов. Однако, производительность может и пострадать из-за увеличения используемой памяти.
64-битный процессор в iPhone 5S не просто ARM с увеличенным размером регистров, есть и существенные изменения.
Во-первых, отмечу название: официального название от ARM — «AArch64», однако это — глупое название, печатать которое меня раздражает. Apple называет архитектуру ARM64 и я буду называть также.
ARM64 увеличил вдвое число целочисленных регистров. 32-битный ARM предоставляет 16 целочисленных регистров, из которых один — счетчик команд (program counter), еще два используются для указателя на стэк и регистра связи (link register) и 13 регистров общего назначения. В ARM64 32 целочисленных регистра, с выделенным нулевым регистром, регистром связи и регистром указателя кадра (frame pointer register). Еще один регистр зарезервирован платформой, что оставляет 28 регистров общего назначения.
ARM64 также привнес существенные изменения помимо увеличения числа регистров.
Большинство 32-битных инструкций ARM могут выполняться/не выполняться в зависимости от состояние регистра-условия. Это позволяет транслировать условные выражения (if-statements) без использования ветвления. Предполагалось, что это увеличит производительность, однако, судя по тому, что в ARM64 от этой возможности отказались, она порождала больше проблем, чем давала пользы.
В ARM64 набор SIMD (одна-инструкция-много-данных) NEON полностью поддерживает стандарт IEEE754 для чисел с плавающей запятой с двойной точностью, в то время как 32-битная версия NEON поддерживала только одинарную точность и не в точности следовала стандарту для некоторых битов.
В ARM64 добавили специализированные инструкции для AES шифрования и SHA-1 & SHA-256 хешей. Не слишком полезное в общем, однако существенный бонус если вы занимаетесь именно этими вопросами.
В целом, самым важным отличаем является увеличение числа регистров общего назначения и полная поддержка IEEE754-совметимой арифметики на числах с двойной точностью в NEON. Это может дать ощутимый прирост в производительности в большом числе мест.
Важно отметить, что A7 включает в себя 32-битный режим совместимости, который позволяет запускать 32-битные приложения без каких либо изменений. Это означает, что iPhone 5S может исполнять любые старые приложения без какого-то влияния на производительность.
Apple использует преимущества новой архитектуры в своих библиотеках. Так как им нет надобности беспокоиться о бинарной обратной совместимости при таких изменениях, это отличное время чтобы внести изменения которые в противном случае «поломали» уже существующие приложения.
В Max OS X 10.7 Apple ввела меченные указатели (tagged pointers). Меченные указатели позволяют хранить некоторые классы с небольшим количеством данных в экземпляре напрямую в указателе. Это позволяет избежать выделений памяти в некоторых случаях, например NSNumber и может дать существенный прирост производительности. Меченные указатели поддерживаются только на 64-битной платформе, частично из-за вопроса производительности, а частично из-за того что в 32-битном указателе не так много остается места под «метки». Видимо по-этому, у iOS не было поддержки меченных указателей. Таким образом, в ARM64 в рантайме Objective-C включена поддержка меченных указателей, что дает те же преимущества, что в Mac.
Не смотря на то, что размер указателя составляет 64 бита, не все эти биты на самом деле используются. В Mac OS X на x86-64 используется только 47 битов. В iOS на ARM64 используется еще меньше — только 33 бита. Если маскировать эти биты каждый раз перед использованием то можно использовать остальные биты чтобы хранить дополнительные данные. Это позволило внести одно из самых значительных изменений в рантайм Objective-C за всю его историю.
Большая часть информации в этой секции почерпана из статьи Грега Паркера. Во первых, для освежения памяти: объекты в Objective-C представляют выделенные блоки памяти. Первый часть, размером с указатель, это isa. Обычно, isa это указатель на класс объекта. Чтобы узнать больше о том, как объекты хранятся в памяти, читайте мою другую статью.
Использовать весь размер указателя на указатель isa несколько расточительно, особенно на 64-битной платформе, которая не использует все 64-бита. ARM64 на iOS реально использует 33 бита, оставляя 31 бит для других вещей. Классы в памяти выровнены по границе 8 байт, так что последние 3 бита можно отбросить, что дает 34 бита из isa доступные для хранения дополнительной информации. И Apple-овский рантайм в ARM64 использует это для повышения производительности.
Наверно, самой важной оптимизацией стало встраивание (inline) счетчика ссылок. Практически все объекты в Objective-C обладают счетчиком ссылок (за исключение неизменяемых объектов, таких как литералы NSString) и операции retain/release, которые меняют этот счетчик случаются очень часто. Это особенно критично для ARC, который вставляет вызовы retain/release чаще, чем бы это делал программист. Таким образом, высокая производительность retain/release методов крайне важна.
- Получить глобальную хеш-таблицу счетчиков указателей
- Заблокировать хеш-таблицу, чтобы операция была потокобезопасной
- Найти в хеш-таблице счетчик для заданного объекта
- Увеличить счетчик на один и сохранить его обратно в таблицу
- Отпустить блокировку хеш-таблицы
- Произвести атомарное увеличение части isa-поля
- Последний бит в isa говорит, используются ли дополнительные биты в isa для хранения счетчика ссылок. Если нет, используется старый алгоритм с хеш-таблицами.
- Если объект уже удаляется, ничего не выполняется
- Если счетчик переполняется (что случается редко, но вполне возможно при 19 битах), используется старый алгоритм с хеш-таблицей
- Произвести атомарное изменение isa на новое значение
- Если у объекта не было ассоциированных объектов, установленных используя objc_setAssociatedObject, их не надо удалять.
- Если объект не обладает C++-деструктором (который вызывается при dealloc), его тоже не нужно вызывать.
- Если на объект ни разу не ссылались слабым (__weak) указателем, то эти указатели не надо обнулять.
Суммарно, это существенный выигрыш. Мои бенчмарки показали, что создание и удаление простого объекта занимает 380нс на 5S в 32-битном режиме, в то время как в 64-битном только 200нс. Если хоть один экземпляр когда-либо имел слабую ссылку на себя, то в 32-битном режим время удаления для всех увеличивалось до 480нс, в то время как в 64-битном режиме время осталось в районе 200нс для всех экземпляров, на которых слабых ссылок не было.
Короче говоря, улучшения в рантайме таковы, что в 64-битном режиме время аллокации занимают 40-50% от времени аллокации в 32-битном режиме. Если ваше приложение создает и удаляет много объектов, это может оказаться существенным.
64-битность A7 не просто маркетинговая уловка, но это и не поражающий воображение прорыв который позволит создавать новый класс приложений. Истина, как всегда, лежит посередине.
Один только факт перехода на 64 бита дает немного. Это в некоторых случая ускоряет приложения, несколько увеличивает объем используемой памяти большинство программ. В общем, большой разницы нет.
Архитектура ARM изменилась не только в 64-битности. Увеличенное число регистров и пересмотренный, модернизированный набор инструкций дает неплохой прирост производительности по сравнению с 32-битным ARM.
Apple использовала переход на новую архитектуру для улучшения в рантайме. Основное изменение — встраиваемый (inlined) счетчик ссылок, который позволяет избежать дорогого поиска по хеш-таблице. Так операции retain/release очень часты в Objective-C, это существенный выигрыш. Удаление ресурсов в зависимости от флагов делает удаление объектов почти вдвое быстрее. Меченные (tagged) указатели также добавляют производительность и уменьшают потребление памяти.
ARM64 — приятное добавление от Apple. Мы все знали, что это рано или поздно случится, но мало кто ожидал что так скоро. Но оно есть, и это отлично.
Будь в курсе последних новостей из мира гаджетов и технологий
Чем различаются архитектуры ARM и x86
Еще совсем недавно (всего 10 лет назад) на рынке пользовательских процессоров было три архитектуры, и все они были более-менее неплохо разделены: ARM-процессоры ставились в мобильные устройства, где важно было время автономной работы, x86-процессоры ставились в устройства под управлением Windows, ну и в пику Intel Apple использовала в своих устройствах процессоры на архитектуре PowerPC (хотя мы знаем, что она все же «переползла» на x86). Но на сегодняшний момент на рынке пользовательских процессоров осталось всего две архитектуры — PowerPC выбыл из гонки, причем совсем недавно: последнее устройство на этой архитектуре, PlayStation 3, перестали производить всего пару недель назад. Более того — все больше утечек о том, что на ARM-процессорах можно будет запускать полноценную Windows, и с другой стороны — тот же Android отлично работает с х86-процессорами начиная с версии 4.0. То есть, как мы видим, разница между этими архитектурами все больше размывается в глазах пользователей, и в этой статье мы и выясним, почему так происходит.
Архитектура х86
Для начала определимся с тем, что же такое архитектура. Говоря простым языком, с точки зрения программиста архитектура процессора — это его совместимость с определенным набором команд, которые могут использоваться при написании программ и реализуются на аппаратном уровне с помощью различных сочетаний транзисторов процессора.
Процессоры х86 построены на архитектуре CISC (Complex Instruction Set Computing, процессоры с полным набором инструкций) — это означает, что в процессоре реализовано максимальное число инструкций, что, с одной стороны, упрощает написание программ и уменьшает их вес, и другной стороны — процессор практически невозможно нагрузить на 100%.
Первым процессором на архитектуре х86 был Intel 8086 — это первый 16-битный процессор от Intel, работающий на частоте до 10 МГц и выпущенный в 1978 году. Процессор оказался крайне популярным и производился до 1990 года, а все последующие процессоры стали с делать с ним совместимые. Сначала эта совместимость показывалась в виде окончания названия процессора на 86, ну а в дальнейшем, с выходом Pentium, архитектуру решили назвать х86.
В 1985 году вышел процессор i386, который стал первым 32-битный процессором от Intel, а к 1989 году Intel выпустила первый скалярный процессор i486 — этот процессор умел выполнять одну операцию за такт. В дальнейшем, с выходом Pentium в 1993 году, процессоры от Intel стали суперскалярными, то есть научились делать несколько операций за один такт, и суперконвейерными — то есть имели два вычислительных конвейера. Но это было еще не все — по сути все процессоры Intel, начиная с i486DX, являются CISC-процессорами с RISC-ядром (Reduced Instruction Set Computer, процессоры с сокращённым набором инструкций): в микропроцессор встраивается аппаратный транслятор, который непосредственно перед исполнением преобразуют CISC-инструкции процессоров x86 в более простой набор внутренних инструкций RISC, при этом одна команда x86 может порождать несколько RISC-команд.
С тех пор особо ничего не поменялось — да, росло число конвейеров, росло число операций за такт, процессоры стали многоядерными и 64-битными, но до сих пор все решения от Intel и AMD являются суперконвейерными суперскалярными микропроцессорами, построенными на основе CISC-архитектуры с RISC-ядром.
Архитектура ARM
Архитектура ARM появилась позже x86, в 1986 году с выходом процессора ARM2. Цель ее разработки была в максимальной оптимизации и уменьшения числа транзисторов — к примеру, под нагрузкой x86-процессор тогда использовал едва ли 30% от числа всех транзисторов, все другие банально простаивали. Поэтому ARM разработали собственный чип на RISC-архитектуре, который назвали ARM2 — он имел всего 30000 транзисторов (сравните с 275 тысячами транзисторов в актуальном тогда i386), и не имел как кэша (что в общем-то тогда было нормой для процессоров — кэш можно было докупить и поставить отдельно), но и микропрограммы как таковой — микрокод исполнялся как и любой другой машинный код, путём преобразования в простые инструкции:
В итоге из-за того, что число транзисторов в ARM-процессорах ощутимо меньше, чем в х86, мы и получаем, что их тепловыделение тоже ощутимо ниже. Но, с другой стороны, из-за упрощенной архитектуры и производительность у ARM тоже ощутимо ниже, чем у x86.
В дальнейшем к ARM так же прикрутили поддержку и суперскалярности, и суперконвеерности, процессоры стали многоядерными и несколько лет назад стали 64-битными. В итоге современные решения от ARM являются суперконвейерными суперскалярными микропроцессорами, построенными на основе RISC-архитектуры.
Итоги
В результате мы видим две крайности: x86 являются мощными решениями, обвешанными инструкциями, которые могут выполнять абсолютно любые задачи с хорошей скоростью. Но за это приходится платить увеличенным тепловыделением. ARM же — простые процессоры, у которых набор инструкций ощутимо меньше, поэтому выполнение многих серьезных задач на них не имеет особого смысла из-за медлительности процесса. Но при этом и тепловыделение низкое. Однако самое основное — обе архитектуры поддерживают RISC-инструкции, а значит что на обеих архитектурах можно запускать одинаковые ОС, что мы и видим в случае с Android, Linux и Windows, и это означает, что в будущем разница между х86 и ARM будет размываться все больше.
Будь в курсе последних новостей из мира гаджетов и технологий
ARM64 Процессоры
Хотя ноутбуки требуют низкого энергопотребления, они существовали задолго до того, как ARM стал жизнеспособным вариантом. Настольные операционные системы и приложения, такие как Windows 10 и настольная версия Chrome, требуют гораздо большей мощности для бесперебойной работы. В то время процессоры ARM не могли обеспечить такую вычислительную мощность, но все меняется. ARM64 - это просто расширение или развитие архитектуры ARM, которая поддерживает 64-битную обработку.
64-разрядная обработка намного превосходит 32-разрядную, и, следовательно, процессоры ARM64, как правило, работают лучше, чем процессоры ARM. Microsoft работает с ARM, чтобы сделать возможной Windows 10 на процессорах, основанных на ARM, они даже выпустили несколько устройств под Windows 10 на программе ARM. Windows всегда была настольной ОС и, следовательно, всегда поддерживала только архитектуры x86 (x64). Хотя, с более длительным временем автономной работы, ARM-процессоры дают возможность устройствам постоянно оставаться на связи (или, по крайней мере, оставаться включенными). Microsoft ясно дала понять, что видит в будущем устройства 2-в-1, которые могут выступать в качестве ноутбука и планшета. Таким образом, толчок для Windows 10 на ARM.
ARM Процессоры
ARM - это обычно архитектура, используемая для построения процессора для мобильного устройства. Процессоры на основе ARM (32-разрядные) следуютархитектуре RISC (компьютер с сокращенным набором команд). Фактически, ARM сам по себе означает Advanced RISC Machine. Все сводится к тому, что процессоры ARM проще в изготовлении и, следовательно, дешевле. Большинство инструкций просты и выполняются за один такт. Есть много технических деталей, в которые мы можем вникнуть, но все они в большинстве случаев пролетят над головой большинству людей, если вы не профессионал в этой области.
Если у вас есть смартфон или любое другое мобильное устройство, которое в основном зависит от времени автономной работы, возможно, он использует процессор на базе ARM. Эти процессоры, как правило, намного лучше по сравнению с x86, когда дело доходит до энергопотребления. Хотя производительность процессора также зависит от многих других факторов, таких как кэш-память, ширина шины и т. д., Процессоры ARM также обычно менее мощные по сравнению с ними.
Почему перевод компьютеров на ARM-процессоры — неудачная идея
В последнее время появляется все больше информации о том, что крупные игроки на рынке компьютеров снова начинают смотреть в сторону ARM-процессоров: к примеру, Microsoft смогли заставить на них работать полноценную (почти) Windows 10, более того — планшеты с ними скоро поступят в продажу. Есть слухи, что Apple начнет переводить Mac на свои процессоры к 2020 году — а ведь они тоже основаны на архитектуре ARM. Но, как говорится в Библии, «нет ничего нового под солнцем» — попытки отказаться от архитектуры x86 были и до этого, и что из этого вышло, и почему шанс того, что сейчас все пойдет по тому же сценарию, велик — мы и поговорим в этой статье.
История попыток отказаться от х86
Перенесемся мысленно в 1996 год. Тогда на рынке уже четко определились два конкурента — Microsoft с Windows 95 и Apple с Mac OS 7 (или же System 7). И, дабы завоевать большую долю рынка, каждый из них пытался придумать что-то оригинальное. У Apple это был планшет Newton — и, хотя он и провалился из-за отвратительно работающего рукописного ввода, продукт был достаточно инновационным в то время (и работал, кстати, под управлением ARM-процессора). Microsoft идея планшетом понравилась, но пойти они решили по своему собственному пути — «железом» пусть занимаются сторонние разработчики, компания же займется софтом — так и появилась Windows CE (прожившая аж до 2013 года — то есть 17 лет).
Суть системы была проста: она должна выглядеть как Windows, работать максимально похоже на Windows, запускать программы, написанные на Win32 API, но при этом иметь поддержку процессоров на архитектурах, отличных от x86. Идея была классная, но реализация подкачала: и хотя CE 1.0 и 2.0 действительно были похожи на Windows 95, функционально они здорово проигрывали последней: были проблемы по обмену данными с другими устройствами, не было поддержки мультимедийных функций, и, что самое главное — эту ОС не оценили разработчики, поэтому количество сторонних приложений было мизерное. И с учетом того, что на рынке была такая система, как Palm OS, работающая и быстрее, и интуитивно понятнее, с большим количеством софта и лучшим функционалом — продажи устройств на CE были неважными. В 2000 году Microsoft пытается улучшить ситуацию, выпустив версию CE 3.0, где добавлена возможность выхода в Интернет и проигрывания MP3 и видеороликов, но момент был уже упущен.
Окончательно «похоронила» Windows CE для планшетов сама же Microsoft, представив в 2002 году Windows XP Tablet Edition — по сути обычную XP, но с наэкранной клавиатурой и другими оптимизациями для работы пальцем или стилусом. Понятное дело, что планшеты на ней были по сути обычными компьютерами с x86-процессорами, которые поддерживали весь софт для XP. Так что этот момент можно считать первой победой x86-процессоров.
Переместимся еще на 4 года вперед — в 2006. Уже было очевидно, что эра одноядерных процессоров подходит к концу: у AMD уже есть двухядерные процессоры, Intel тоже готовит к выпуску двухядерные Core 2 Duo. А что же в этом время происходит на Mac? Увы — все плохо: компания в 90-ых сделала ставку не на x86, а на процессоры архитектуры PowerPC, разработанной IBM. Тогда они были если не лучше, то, как минимум, конкурировали на равных с решениями от Intel. Но тут в игру вмешалась AMD, и в стане x86 началась гонка за частотой — она росла вдвое чуть ли не раз в два года, и в итоге к 2004 году частоты процессоров доросли до вполне современных 3 ГГц. А вот с PowerPC так не получилось сразу по двум причинам: более «толстый» техпроцесс и нежелание отказаться от старых наработок привели к тому, что к тому же году частоты топового PowerPC G5 были лишь на уровне 2 ГГц, а производительность Pentium 4 с 3 ГГц была местами вдвое выше.
К счастью, в Apple быстро поняли, что «лодка» IBM тонет, и вовремя перешли на решения от Intel. Но у читателя наверное возникнет вопрос — а что с программами? Ведь эти две архитектуры сильно различаются, так что люди, купившие новые Mac с процессорами от Intel, должны были остаться без софта. Ответ прост — был написан эмулятор, который позволял на процессорах от Intel запускать софт для PowerPC. С учетом того, что Core 2 Duo были местами в 3-4 раза быстрее, даже с учетом эмуляции программы зачастую работали даже быстрее, чем на «родной» архитектуре, так что конечные потребители или не заметили разницы, или были даже довольны приростом производительности. Ну а через год большинство разработчиков программ оптимизировало их под x86, а еще через год Apple убрала из системы эмулятор PowerPC за ненадобностью. Так что это можно считать второй победой x86.
Переместимся в совсем уж недалекое прошлое — 2012 год: Microsoft представляет две системы, Windows 8 и Windows RT. Про первую думаю рассказывать нет смысла: обычная Windows, работающая только на x86-64, с несколько видоизмененным интерфейсом. А вот вторая ОС была несколько интереснее: с виду она выглядела как Windows 8, и даже имела бесплатный предустановленный Office 2013. Но работало первое устройство на этой ОС — планшет Surface — на ARM-процессоре Tegra 3. Ничего не напоминает? Да, история с Windows CE повторяется. Достаточно большому количеству пользователей захотелось попробовать и новую ОС, и сам планшет Surface от ее создателя.
Увы — всех быстро постигло разочарование: и хотя система даже работала на ядре от Windows 8, возможность установки ПО была жестко ограничена Магазином Windows, где 90% программ до сих выглядят так, как будто написаны школьниками на переменке. И даже это не было бы большой проблемой, если бы Microsoft продавали свой планшет по цене популярных нетбуков — тогда бы его хотя бы брали как печатную машинку с выходом в интернет. Но, увы, ценник на Surface был на уровне планшетов на Windows 8 с процессорами Intel Atom. Да, производительность Atom была на уровне Tegra 3 в Surface, но вот полноценная ОС позволяла ставить любой нужный софт, так что в итоге продажи Surface на Windows RT были крайне низкими. Microsoft через год обновила ее до Windows 8.1 RT и даже выпустала неплохой планшет Lumia 2520, но, увы, ситуацию это не спасло, и до Windows 10 эта версия ОС не обновилась — так что планшеты на x86 опять победили.
Что же в итоге? За 20 лет было сделано две попытки уйти с x86 на другие архитектуры, и одна попытка уйти с других архитектур на x86. Первые две с треском провалились, а вот последняя — вполне удалась. И теперь Microsoft предпринимают еще одну попытку подружить Windows и ARM — посмотрим, что же в итоге получилось.
Полноценная Windows 10 на ARM — наконец-то успех?
И вот в 2017 года пошли слухи, что Microsoft готовит полноценную Windows 10 для ARM. В самом конце 2017 появились готовые образы такой системы, а в начале 2018 на выставке были представлены несколько планшетов на ней. Со стороны все смотрится здорово: Snapdragon 835, 4 ГБ ОЗУ или больше, SSD на 128 ГБ или больше — вполне адекватное «железо» для хорошего планшета, но что же на деле?
К слову — несколько удивляет выбор процессора: Microsoft с 2012 года умела запускать Windows на решениях от Nvidia — процессорах Tegra. Последняя версия процессора, Tegra X1, отлично показала себя в приставке Nintendo Switch, а с учетом того, что графика у этого процессора по сути является обычной видеокартой Nvidia 900-ой серии, только со сниженными частотами и небольшим количеством CUDA, выбор такого процессора решил бы проблему с драйверами на графику — не пришлось бы их писать под видеокарту Adreno, которыми оснащены процессоры Snapdragon. С другой стороны — последние имеют встроенный модем, а с учетом того, что планшеты — все же мобильные устройства и эксплуатироваться будут вне дома — возможно именно это и перевесило чашу весов в сторону Snapdragon.
Но мы несколько отвлеклись. Конфигурация, указанная выше, будет стоить от 1000 долларов (планшет HP Envy x2) — и тут возникает вопрос: а стоит ли он своих денег? Ведь за 900 долларов можно взять планшет Surface Pro 4 с процессором Intel Core m3, охлаждаемым также пассивно. Давайте посмотрим на тесты производительности, и начнем с PCMark 8 — он эмулирует реальные пользовательские задачи:
И тут мы видим оглушительный провал — даже простенький Celeron оказывается на 60% быстрее, решения же с Core m3 быстрее в 2.5 раза. Чтобы была понятна производительность мобильного Celeron: при открытии вкладки с 1080р видео с Youtube система уже становится задумчивой. А если в фоне будет еще какая-нибудь закачка или обновление системы — работать и вовсе станет некомфортно. Теперь представьте, что мы имеем процессор на треть слабее — проблемы с производительностью будут возникать постоянно. И будут они в большинстве задач: к примеру, обработка фото на Celeron проходит в 4 раза быстрее:
Единственные тесты, где Snapdragon оказывается хотя бы на уровне Celeron или даже лучше — в так называемых нативных приложениях, которые уже умеют работать на ARM. Но даже в них превосходство Core m3 неоспоримо:
С производительностью видеокарты дела обстоят все же несколько лучше:
Как видите, в популярном тесте Futuremark Cloud Gate Adreno 540 все же смог обогнать интегрированную графику в Celeron на 10%. Но, в любом случае, отставание от Core m3 близко к двукратному.
Ну ладно, с производительностью все достаточно печально — а что же со временем автономной работы? На презентации нам обещали аж 20 часов работы — и если это так, то производительность для достаточного количества людей отходит на второй план. Но, увы, чуда не произошло — при серфинге в Chrome (надеюсь, никто Edge всерьез не воспринимает?) время автономной работы составило 10 часов — на 1.5 часа больше, чем у Dell с полноценным процессором:
Стоит ли огромная переплата за слабое железо лишних 1.5 часов автономной работы? На мой взгляд — нет.
И тут возникает вопрос — почему все так плохо с производительностью и временем автономной работы, ведь под Android Snapdragon 835 зачастую работает вдвое быстрее, оставляя Celeron далеко позади? Ответ прост — эмуляция: это единственный способ заставить х86-программы работать на ARM-процессоре. А она, как мы знаем, очень требовательная, и в лучшем случае падение производительности оказывается двукратным, в худшем — предела нет (отличным примером является эмулятор Playstation 3 для ПК, где i7 вместе с GTX 1080 Ti выдают в играх 5-7 fps, хотя ни для кого не вызывает сомнении то, что такая связка реально мощнее консоли больше чем на порядок). В случае с переходом с PowerPC на x86 проблема падения производительности из-за эмуляции не стояла, ибо x86-процессоры были существенно мощнее. Но вот ARM-процессоры реально не дотягивают даже до 2-ядерных Intel Core, поэтому эмуляция только усугубляет проблему не самой высокой производительности.
Вторая проблема — ARM-процессоры не поддерживают множество нужных для некоторых программ инструкций: к примеру, нет поддержки AVX, FMA, последних версий SSE. Это опять же или ограничивает круг запускаемых программ, или снижает производительность в программах, где эти инструкции используются.
Третья проблема не столь глобальна — процессоры ARM умеют пока что эмулировать только x86 программы. С учетом того, что до полноценного перехода на x64 еще далеко, и большинство программ имеют инсталляторы и для 32-битных систем, особых проблем это не вызовет.
А вот последняя проблема уже достаточно глобальна — Windows 10 на ARM поддерживает драйвера, совместимые только с ARM64. Иными словами — если Microsoft не включила в систему поддержку нужного вам устройства, а его производитель не удосужился написать новый драйвер для ARM — вы его не подключите. В итоге какие-нибудь флешки или жесткие диски работать будут нормально, а вот с модемами, принтерами, камерами, картридерами и прочими устройствами будут проблемы.
Можно ли решить эти проблемы? Конечно — нужно «всего лишь» начать писать софт нативно на ARM. И это опять же знакомо — это же говорили нам Microsoft на презентации Windows RT в 2012 году. Что сделало большинство разработчиков? Правильно, посмеялось и забыло про такую ОС. Почему? Да потому что это банально невыгодно — нужно «перелопатить» кучу кода, бывает даже писать с нуля — и ради чего, пары-тройки девайсов, на которых вашу программу может вообще никто запускать не будет? Поэтому возможно что самый популярный софт, типа того же браузера Chrome, и перепишут нативно на ARM, но что-то более редкое, типа того же Photoshop, так и будет запускаться в режиме эмуляции с низкой производительностью.
Как решить эту проблему? Apple сделала просто — взяла да и перевела сразу все свои устройства с PowerPC на x86, так что у разработчиков просто не оставалось выхода как начать писать софт под новую архитектуру. Но Microsoft, очевидно, от поддержки x86 отказываться явно не будет — хотя бы из-за низкой производительности текущих ARM-процессоров. Так что проблемы, как видите, в реальности нерешаемые, и поэтому шанс, что планшеты на Windows с ARM «взлетят» — достаточно низок.
Удастся ли Apple выпустить ультрабук с ARM-процессором к 2020 году?
Итог — для каждой архитектуры свои устройства
В итоге я еще раз процитирую фразу из Библии: «нет ничего нового под солнцем». Компании очередной раз пытаются отказаться от x86, и, судя по всему, это очередной раз не получится. Возможно, в будущем, когда производительность ARM-процессоров станет существенно выше, чем у решений от AMD и Intel, переход и будет совершен, но пока что для каждой архитектуры есть свои типы устройств: для смартфонов и тонких планшетов это ARM, для ноутбуков и ПК — x86-64.
Вы наверняка знаете, что мир процессоров разбит на два лагеря. Если вы смотрите это видео со смартфона, то для вас работает процессор на архитектуре ARM, а если с ноутбука, для вас трудится чип на архитектуре x86.
А теперь еще и Apple объявила, что переводит свои Mac на собственные процессоры Apple Silicon на архитектуре ARM. Мы уже рассказывали, почему так происходит. А сегодня давайте подробно разберемся, в чем принципиальные отличия x86 и ARM. И зачем Apple в это все вписалась?
Итак, большинство мобильных устройств, iPhone и Android'ы работают на ARM'е. Qualcomm, HUAWEI Kirin, Samsung Exynos и Apple A13/A14 Bionic — это все ARM-процессоры.
А вот на компьютере не так — там доминирует x86 под крылом Intel и AMD. Именно поэтому на телефоне мы не можем запустить Word с компьютера.
x86 — так называется по последним цифрам семейства классических процессоров Intel 70-80х годов.
Чем же они отличаются?
Есть два ключевых отличия.
Первое — это набор инструкций, то есть язык который понимает процессор
x86 процессоры используют сложный набор инструкций, который называется CISC - Complex Instruction Set Computing.
ARM процессоры наоборот используют упрощенный набор инструкций — RISC - Reduced Instruction Set Computing.
Кстати ARM расшифровывается как Продвинутые RISC машины - Advanced RISC Machines.
Наборы инструкций ещё принято назвать архитектурой или ISA - Instruction Set Architecture.
Второе отличие — это микроархитектура. Что это такое?
От того на каком языке говорят процессоры, зависит и то, как они проектируются. Потому как для выполнения каждой инструкции на процессоре нужно расположить свой логический блок. Соответственно, разные инструкции — разный дизайн процессора. А дизайн — это и есть микроархитектура.
Но как так произошло, что процессоры стали говорить на разных языках?
История CISC
Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22».
Всё началось в 1960-х. Поначалу программисты работали с машинным кодом, то есть реально писали нолики и единички. Это быстро всех достало и появился Assembler. Низкоуровневый язык программирования, который позволял писать простые команды типа сложить, скопировать и прочее. Но программировать на Assembler'е тоже было несладко. Потому как приходилось буквально “за ручку” поэтапно описывать процессору каждое его действие.
Поэтому, если бы вы ужинали с процессором, и попросили передать его вам соль, это выглядело бы так:
- Эй процессор, посмотри в центр стола.
- Видишь соль? Возьми её.
- Теперь посмотри на меня.
- Отдай мне соль. — Ага, спасибо!
- А теперь снова возьми у меня соль.
- Поставь её откуда взял
- Спасибо большое! Продолжай свои дела.
- Кхм… Процессор, видишь перец?
- И так далее.
Этот подход стал настоящим спасением как для разработчиков, так и для бизнеса. Захотел клиент новую инструкцию — не проблема, были бы деньги — мы сделаем. А деньги у клиентов были.
Недостатки CISC
Но был ли такой подход оптимальным. С точки зрения разработчиков — да. Но вот микроархитектура страдала.
Представьте, вы купили квартиру и теперь вам нужно обставить её мебелью. Площади мало, каждый квадратный метр на счету. И вот представьте, если бы CISC-процессор обставил мебелью вам гостиную, он бы с одной стороны позаботился о комфорте каждого потенциального гостя и выделил бы для него своё персональное место.
С другой стороны, он бы не щадил бюджет. Диван для одного человека, пуф для другого, кушетка для третьего, трон из Игры Престолов для вашей Дейенерис. В этом случае площадь комнаты бы очень быстро закончилась. Чтобы разместить всех вам бы пришлось увеличивать бюджет и расширять зал. Это не рационально. Но самое главное, CISC-архитектура существует очень давно и те инструкции, которые были написаны в 60-х годах сейчас уже вообще не актуальны. Поэтому часть мебели, а точнее исполнительных блоков, просто не будут использоваться. Но многие из них там остаются. Поэтому появился RISC…
Преимущества RISC
С одной стороны писать на Assembler'е под RISC процессоры не очень-то удобно. Если в лоб сравнивать код, написанный под CISC и RISC процессоры, очевидно преимущество первого.
Так выглядит код одной и той же операции для x86 и ARM.
x86
Представьте, что вы проектируете процессор. Расположение блоков на х86 выглядело бы так.
Каждый цветной квадрат — это отдельные команды. Их много и они разные. Как вы поняли, здесь мы уже говорим про микроархитектуру, которая вытекает из набора команд. А вот ARM-процессор скорее выглядит так.
Ему не нужны блоки, созданные для функций, написанных 50 лет назад.
По сути, тут блоки только для самых востребованных команд. Зато таких блоков много. А это значит, что можно одновременно выполнять больше базовых команд. А раритетные не занимают место.
Еще один бонус сокращенного набора RISC: меньше места на чипе занимает блок по декодированию команд. Да, для этого тоже нужно место. Архитектура RISC проще и удобнее, загибайте пальцы:
- проще работа с памятью,
- более богатая регистровая архитектура,
- легче делать 32/64/128 разряды,
- легче оптимизировать,
- меньше энергопотребление,
- проще масштабировать и делать отладку.
Поэтому наши смартфоны, которые работают на ARM процессорах с архитектурой RISC, долго живут, не требуют активного охлаждения и такие быстрые.
Лицензирование
Но это все отличия технические. Есть отличия и организационные. Вы не задумывались почему для смартфонов так много производителей процессоров, а в мире ПК на x86 только AMD и Intel? Все просто — ARM это компания которая занимается лицензированием, а не производством.
Даже Apple приложила руку к развитию ARM. Вместе с Acorn Computers и VLSI Technology. Apple присоединился к альянсу из-за их грядущего устройства — Newton. Устройства, главной функцией которого было распознавание текста.
Даже вы можете начать производить свои процессоры, купив лицензию. А вот производить процессоры на x86 не может никто кроме синей и красной компании. А это значит что? Правильно, меньше конкуренции, медленнее развитие. Как же так произошло?
Ну окей. Допустим ARM прекрасно справляется со смартфонами и планшетами, но как насчет компьютеров и серверов, где вся поляна исторически поделена? И зачем Apple вообще ломанулась туда со своим Apple Silicon.
Что сейчас?
Допустим мы решили, что архитектура ARM более эффективная и универсальная. Что теперь? x86 похоронен?
На самом деле, в Intel и AMD не дураки сидят. И сейчас под капотом современные CISC-процессоры очень похожи на RISC. Постепенно разработчики CISC-процессоров все-таки пришли к этому и начали делать гибридные процессоры, но старый хвост так просто нельзя сбросить.
Но уже достаточно давно процессоры Intel и AMD разбивают входные инструкции на более мелкие микро инструкции (micro-ops), которые в дальнейшем — сейчас вы удивитесь — исполняются RISC ядром.
Да-да, ребята! Те самые 4-8 ядер в вашем ПК — это тоже RISC-ядра!
Надеюсь, тут вы окончательно запутались. Но суть в том, что разница между RISC и CISC-дизайнами уже сейчас минимальна.
А что остается важным — так это микроархитектура. То есть то, насколько эффективно все организовано на самом камне.
Ну вы уже наверное знаете, что Современные iPad практически не уступают 15-дюймовым MacBook Pro с процессорами Core i7 и Core i9.
А что с компьютерами?
Недавно компания Ampere представила свой 80-ядерный ARM процессор. По заявлению производителя в тестах процессор Ampere показывает результат на 4% лучше, чем самый быстрый процессор EPYC от AMD и потребляет на 14% меньше энергии.
Компания Ampere лезет в сегменты Cloud и Workstation, и показывает там отличные цифры. Самый быстрый суперкомпьютер в мире сегодня работает на ARM ISA. С обратной стороны, Intel пытается все таки влезть в сегмент low power и для этого выпускает новый интересный процессор на микроархитектуре lakefield.
Пока у ноутбуков и процессоров от Intel есть одно неоспоримое достоинство - (охлаждение и) единство архитектуры. Пока на рынке ARM-процессоров существуют Qualcomm, Samsung, MediaTek, в мире x86 творится монополия и разработчикам сильно легче делать софт и игры под “взрослые” процессоры.
И Apple та компания, которая способна мотивировать достаточное количество разработчиков пилить под свой ARM. Но суть этого перехода скорее не в противостоянии CISC и RISC. Поскольку оба подхода сближаются, акцент смещается на микроархитектуру, которую делает Apple для своих мобильных устройств. И судя по всему микроархитектура у них крута. И они хотели бы ее использовать в своих компьютерах.
И если бы Intel лицензировал x86 за деньги другим людям, то вероятно Apple просто адаптировали свою текущую микроархитектуру под x86. Но так как они не могут этого сделать, они решили просто перейти на ARM. Проблема для нас с микроархитектурой в том, что она коммерческая тайна. И мы про нее ничего не знаем.
Итоги
Спрос на ARM в итоге вырастет. Для индустрии это не просто важный шаг, а архиважный. Линус Торвальдс говорил, что пока рабочие станции не станут работать на ARM — на рынке серверов будут использовать x86.
И вот это случилось — в перспективе это миллионы долларов, вложенных в серверные решения. Что, конечно, хорошо и для потребителей. Нас ждет светлое будущее и Apple, действительно, совершила революцию!
Редактор материала: Антон Евстратенко. Этот материал помогли подготовить наши зрители Никита Куликов и Григорий Чирков. Спасибо ребята!
Вы, наверное, слышали о процессорах ARM, ARM64 и x86, которые используются в большинстве современных смартфонов. Какой из этих процессоров у вашего Android, какой из них лучше, и в чем разница между ARM, ARM64 и x86? Мы постараемся ответить на все эти вопросы!
Начиная с Android 5.0 Lollipop, Google добавила поддержку 64-битных процессоров на Android. Именно тогда знание вашего процессора стало для многих чем-то очень важным. Независимо от того, используете ли вы 32-разрядный или 64-разрядный процессор, вы можете выбрать, какие пользовательские ПЗУ или GApps можно установить. Он также решает, какую версию APK вы выберете для загрузки приложения, версию Xposed Framework и многое другое. Кроме того, существуют различия между процессорами на основе архитектуры ARM и процессорами на архитектуре x86. Так в чем же разница между процессорами ARM и x86?
В чем разница между ARM, ARM64 и x86?
Процессоры x86
x86 - это совершенно другая архитектура, популярная у Intel. Процессоры, выполненные с использованием архитектуры x86, обычно используются на настольных компьютерах и ноутбуках. Даже AMD, конкурент Intel в процессорах для настольных ПК и ноутбуков, использует архитектуры Intel x86 и x64 (64-битная версия архитектуры x86) для создания своих процессоров. Процессоры на базе x86 соответствуют архитектуре CISC (сложный набор команд). Инструкции по процессорам x86 в основном сложные. Таким образом, они выполняют несколько циклов ЦП для выполнения каждой инструкции.
Корпорация Intel усердно работала над тем, чтобы сделать эти процессоры как можно более энергоэффективными, но x86 по своей конструкции не так уж и экономичен, как ARM. Хотя некоторые устройства Android работают на процессорах Intel Atom, основанных на архитектуре x86. Примерами могут служить Asus Zenfone, Zenfone 2, Lenovo K80 и т. д. Хотя процессоры ARM стали достаточно мощными для запуска полноценных настольных операционных систем, таких как Windows 10, они все еще сильно отстают.
Эти архитектуры существуют с 90-х годов в параллельных мирах. ARM всегда был для мобильных устройств с низким энергопотреблением, таких как телефоны и небольшие КПК. x86, с другой стороны, всегда была архитектурой процессора, которая обеспечивала большую мощность, используя больше электричества, подходящего для настольных компьютеров. Даже если в ближайшие 5 лет ARM станет архитектурой для процессоров ноутбуков, она, вероятно, никогда не сможет конкурировать с x86 на настольном компьютере, который всегда будет более мощным и, следовательно, более подходящим.
Это все, что мы можем сказать о разнице между ARM, ARM64 и x86 на данный момент. Мы надеемся, что эта статья поможет вам понять какой процессор используется на вашем устройстве Android.
Читайте также: