Меню

ARM как будущая архитектура для настольных ПК

ARM как будущая архитектура для настольных ПК

Большинство привыкло к полярному рынку в мире процессоров — поле битвы делят Intel и AMD. Однако вполне вероятно, что ситуация изменится в ближайшем будущем, ведь компания Nvidia покупает фирму ARM — разработчика процессорных архитектур. Что же такое ARM и чем все это может обернуться для IT-индустрии?

Желудь из Кембриджа

Для начала стоит объяснить, что ARM обозначает одновременно и архитектуру процессоров (в данном случае Advanced RISC Machine) и название компании (ARM Limited). История берет свое начало с сотрудничества бывшего сотрудника крупной британской компании Sinclair Research Криса Карри и инвестора Германа Хаузера. В 1978 они основали компанию Cambridge Processor Unit (CPU), которая уже в 1979 была переименована в Acorn (Желудь). Такое названия было выбрано по одной простой причине — находиться в телефонном справочнике перед Apple.

Первым продуктом был карманный компьютер за 80 фунтов Acorn System 1, который стоил дешевле своего аналога ZX80, чем и запомнился многим пользователям.

Через два года Acorn получила крупный тендер от британской BBC (та самая радиовещательная компания) на создание компьютера для школ. Так появился BBC Micro, тираж которого превысил 1,5 миллионов устройств. Поступало даже предложение от Билла Гейтса с портированием MS-DOS на BBC Micro, но в Acorn от этого отказались.

Команда разработчиков увеличивалась и постепенно появилась идея перейти к более сложным технологиям, а именно работать с 16-разрядными процессорами. Сначала решили «прощупать» почву и отправились на экскурсию в компанию National Semiconductor. Ситуация крайне разочаровала разработчиков Acorn: над процессорами трудились сотни человек, но многочисленных ошибок и «проволочек» в разработке избегать не удавалось.

Совсем другая история была в Western Design Center, которую также посетили учредители. Там процессоры разрабатывали буквально несколько человек в «домашней» обстановке. Ведущий разработчик Acorn Роджер Уилсон был настолько впечатлен, что сам загорелся идеей разработки собственных процессоров, а не покупки как это предполагалось ранее.

В 1985 году появился первый процессор ARM на тогда популярной RISC-архитектуре. Вот только он был всего-лишь подключаемым дополнением для BBC Master (продвинутой версии ранее упомянутой BBC Micro).

Своеобразным прорывом стал ARM 2: до 64 Мб оперативной памяти, тактовая частота 8 МГц — для тех времен весьма впечатляющие показатели. Конкурентом был небезызвестный Intel 80368 с частотой 16 МГц. Разница в частоте была двукратная, но не в производительности. ARM 2 выполнял 4 миллиона операций против 5 миллионов у Intel 80368!

Перенасыщение рынка компьютеров в 1984 привело к сложному экономическому положению, и Acorn была куплена итальянским брендом Olivetti. Однако последующее заполнение рынка IBM PC и аналогами привело к тому, что вкладывать средства в архитектуру на базе RISC итальянцы не стали.

Новые союзники

Герман Хаузер искал способы сохранить процессорный бизнес и нашел союзника — Apple. Они же в 1990 проектировали инновационный карманный компьютер Newton, для которого энергоэффективные ARM подходили просто идеально. Третьим союзником стала компания VLSI Technologies, которая имела непосредственное отношение к производству интегральных схем.

В итоге появилась компания ARM, которая специализировалась исключительно на проектировании. Свою интеллектуальную собственность разработчики уже продавали по лицензиям другим компаниям.

Несмотря на то, что на рынке ПК главенствовала архитектура x86, ARM по-прежнему обеспечивала рабочие станции IBM и Sun Microsystems, а также огромный рынок микроэлектроники.

В чем главная особенность ARM

Во многом именно благодаря Apple после появления первого iPhone и iPad стала понятна значимость RISC-архитектуры. Потребление энергии процессоров было столь низким, что позволяло использовать их практически в любых портативных устройствах. Как не старалась Intel, добиться таких же показателей на х86 не получалось.

Итог — процессоры на ARM можно найти практически в любых портативных устройствах — смартфоны, GPS-навигаторы, игровые приставки, фото- и видеокамеры, телевизоры и не только. Как же так получилось, что принципиального в ARM? Ответом на этот вопрос является RISC-архитектура.

В существующей классификации можно выделить CISC (Complex Instruction Set Computing — комплексный набор инструкций) и RISC (Reduced Instruction Set Computing — сокращенный набор команд). Усовершенствование процессоров приводило к увеличению размера команды. В какой-то момент усложнения стали такими, что некоторые команды потребовали двух и больше тактов на исполнение.

Тогда в рамках проекта VSLI был предложен новый принцип — использовать команды заданной длины с заранее предопределенным расположением полей, а также дополнительно увеличить число общих регистров, благодаря которому процессору придется реже обращаться к ОЗУ. Проще говоря, сложные вычисления должны разбиваться на идентичные простые, обработка которых выполняется с большей эффективностью.

Так появилась RISC с сокращенным набором команд. С одной стороны, такой подход не позволял тягаться с устройствами на базе CISC, но уровень вычислительной мощности был достаточным для микроэлектроники, не говоря о мизерном тепловыделении.

ARM против x86/x64 — есть ли перспективы

Могут ли процессоры ARM тягаться с десктопными решениями от Intel или AMD. В одном из материалов был проведен крупный тест процессоров на архитектуре E2K (отечественные Эльбрусы), ARM (v6-v8) и x86 (i386) х86-64 (amd64). Использовались насколько тестов, в том числе LINPACK, который применяется для оценки производительности суперкомпьютеров.

Процессоры ARM были представлены следующими моделями: Amlogic S922X, Samsung Exynos 4412, Allwinner H5, Allwinner A64 и Broadcom BCM2837B0 (последний используется в миникомпьютере Raspberry PI 3).

Весь список результатов вы сможете изучить на этой странице, а мы приведем график для теста liNPACK:

Некоторые модели ARM-процессоров дотягиваются до уровня производительности Intel Atom. Аналогичную ситуацию можно видеть и на примере мобильного процессора Snapdragon 835. Исходя из тестов, он более чем в два раза проигрывает мобильным версиям Intel Core i5, не говоря уже про десктопные решения.

С другой стороны такие тесты нельзя назвать максимально объективными. Во-первых, большинство подборных программ ориентированы под x86/x64, поэтому для ARM часто приходится использовать эмуляторы, которые сказываются на результатах. Во-вторых, все рассматриваемые решения изначально ориентированы на мобильную электронику с минимальным тепловыделением и «жором» аккумулятора.

Однако можно ли использовать ARM для десктопных решений? Вполне вероятно, и первые звоночки уже есть. Каждые 6 месяцев выходит рейтинг ТОП-500 — список самых мощных суперкомпьютеров в мире. Ранее первые места занимали решения c Intel Xeon или Nvidia Volta, однако в рейтинге от сентября 2020 года самым мощным компьютером стал японский Fugaku. Беспрецедентный случай, ведь построен он именно на процессорах ARM (A64FX 48C). Замеры производительности показали 513,8 петафлопс. Много это или мало? Бывший лидер IBM Power Systems AC922 имеет всего 200,7 петафлопс — более чем в два раза меньше!

Конечно, в Fugaku целых 158 976 процессоров на 52 (48+4) ядра, но сам факт того, что на ARM можно строить столь производительные системы уже заслуживает внимания.

Второй звоночек — покупка ARM компанией Nvidia (подписание договора ожидается только к 2022 году), которая является крупнейшим игроком рынка с огромным опытом. Учитывая, что в сфере графических ускорителей они занимают главенствующие позиции, есть вероятность, что «зеленые» попробуют свои силы в сфере ЦП.

Возможно, Nvidia хочет выйти на мобильный игровой рынок. У компании уже существует платформа Tegra, которая объединяет в себе графическое ядро и ARM процессор. C новой покупкой Tegra вполне способна выйти за пределы смартфонов, смартбуков и КПК.

Также Apple объявила о переходе на процессоры ARM собственной разработки и отказ от продукции Intel. Это позволит сделать совместимыми приложения между MacOS и iOS. Как известно, линейка процессоров «A» всегда показывала выдающиеся результаты, благодаря чему iPhone находились в ТОПе самых производительных смартфонов. Однако достаточно ли таких наработок, чтобы заменить хотя бы Intel Core i5 — остается вопросом.

Сейчас у Apple есть только «демонстрационная технология» на базе процессора A12Z Bionic. Разработчики могут получить «девкит» за 779 долларов, но потом его придется вернуть (Apple во всей красе). Новинка A12Z будет установлена в iPad Pro 2020 и, судя по презентации, планшет прекрасно справляется с любыми пользовательскими задачами.

Более того, на процессоре получилось даже запустить Shadow of the Tomb Raider через эмулятор на средне-низких настройках, поэтому потенциал есть.

Если верить тестам за 2017–2018 гг., то iPad и iPhone уже практически дотягиваются до уровня i7 и даже i9, установленных в MacBook Pro.

Есть еще один игрок на рынке — фирма Ampere. Как заявляют представители, их 80-ядерный ARM-процесор превосходит AMD Epyc 7742 и Intel Xeon 8280, однако в тесте для AMD использовался понижающий коэффициент, который компенсировал недоработки пакета компиляторов.

Что ждет x86/x64

Стоит ли хоронить процессоры на x86/x64 — пока об этом рано говорить. Уже достаточно давно процессоры Intel и AMD разбивают входные инструкции на более мелкие микроинструкции (micro-ops), которые в дальнейшем, не удивляйтесь, исполняются RISC-ядром.

Те самые 4–8 ядер вашего процессора, это именно RISC-ядра. Проще говоря, ARM-технология является частью архитектуры x86/x64. Именно поэтому будущим может стать не тотальное вымирание, а именно более совершенная гибридная архитектура. С другой стороны, за счет уменьшения техпроцесса ARM может добиться производительности десктопных процессоров Intel и AMD, но с сохранением приемлемого энергопотребления.

Серверные решения на ARM уже реальность и даже весьма перспективная, а значит, не за горами и массовые процессоры для персональных компьютеров.

Источник



ARM анонсировала новую архитектуру v8-A с набором Scalable Vector Extensions

Мощность суперкомпьютеров по всему миру растёт, но растут и требования к питанию. Современный суперкомпьютер легко может потребовать только для своей работы небольшой электростанции, вот почему разработчики вычислительных средств постоянно ищут способы увеличить экономичность процессоров, входящих в состав систем для супервычислений. Перспективной в этой отрасли выглядит архитектура ARM, особенно после того, как компания анонсировала новую версию архитектуры v8 с поддержкой расширений Scalable Vector Extensions. ARM всерьёз нацелена на завоевание серверного рынка, а также рынка облачных систем и суперкомпьютеров.

Читайте также:  Как сварить пиво дома без специальных приспособлений проверенный рецепт и подробное руководство

В задачах, которые решают такие машины, часто встречаются векторные вычисления, так что набор векторных расширений в новой архитектуре ARM придётся как нельзя более к месту, когда соответствующие процессоры доберутся до серийного производства. ARM v8-A с векторными расширениями пока не является полноценной лицензируемой архитектурой, но предназначена для компаний, создающих собственные процессоры на базе наработок ARM. Одной из первых компаний на рынке HPC, ставшей владельцем лицензии на ARM v8-A with Scalable Vector Extensions стала Fujitsu. Она планирует использовать эту архитектуру в суперкомпьютере Post-K RIKEN, который должен войти в строй в 2020 году. Набор векторных инструкций SVE является гибким дополнением к существующему набору инструкций ARM v8 и поддерживает вычисления с разрядностью от 128 до 2048 бит.

В названии не зря имеется слово «scalable» (масштабируемый) — вне зависимости от длины вызова, будь то 128, 512 или даже 2048 бит, планировщик распределяет вычисления так, чтобы наиболее полно загрузить имеющееся аппаратное обеспечение. Иными словами, если имеется 128-битное ядро, то 2048-битные вычисления будут выполняться по кускам и наоборот, 128-битные вычисления на 2048-битном ядре будут распараллелены, причём аппаратно. Это отличает новый набор инструкций от уже имеющегося NEON, способного работать только с 64 или 128-битными векторами. ARM вскоре выпустит обновления для компиляторов GCC и LLVM с поддержкой автоматического использования VSE. По данным компании-разработчика, использование SVE уже позволяет добиться существенного улучшения производительности, а по мере оптимизации программного обеспечения выигрыш станет ещё более существенным.

Источник

Процессоры ARMv8: в чем преимущества 64-битной архитектуры?

Поделитесь в соцсетях:

  • Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
  • Нажмите здесь, чтобы поделиться контентом на Facebook. (Открывается в новом окне)
  • Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
  • Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
  • Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)

arm-64-bit

В 2011 году компания ARM Limited анонсировала новое семейство процессоров под названием ARMv8. А в 2013 году компания Apple выпустила первый ARMv8-процессор – однокристальную систему А7, которая применяется в iPhone 5S, iPad Air и iPad mini Retina. Архитектура ARMv8 получила 64-битный набор команд, но это далеко не единственное её преимущество над предшественницей ARMv7. Как устроены и какими бывают 64-битные процессоры ARMv8, читайте в статье.

Об истории архитектуры ARM, специфике деятельности компании ARM Limited и поколениях процессоров ARMv5, ARMv6 и ARMv7 вы можете прочитать в статье «Процессоры ARM: особенности архитектуры, отличия и перспективы». А про популярные модели ARMv7-чипов производства Qualcomm, NVIDIA, Samsung, Apple, MediaTek и др. подробно рассказано в статьях «Процессоры ARM: производители и модели» и «Процессоры ARM: обновление модельного ряда».

ARM_Licensees

Нововведения ARMv8

Обновленную архитектуру процессоров семейства ARMv8 окрестили именем AArch64. Она получила 64-битный набор инструкций и возможность работать с большим объемом оперативной памяти (4 Гбайт и больше). Само собой, предусмотрена совместимость с 32-битными приложениями (AArch32). Другими важными нововведениями ARMv8 стали:

— 31 регистр общего назначения, каждый длиной 64 бита, тогда как SP и PC не являются регистрами общего назначения. Чем выше разрядность регистров, тем больше числа можно в них хранить. А чем больше количество регистров, тем больше данних в них помещается одновременно. Как результат, за одну инструкцию можно обработать больший объем данних и весь алгоритм выполнится быстрее;
— трансляция виртуальных адресов из 48-битного формата работает с помощью механизмов LPAE, позаимствованных у ARMv7;
— новый набор инструкций с фиксированной длинной. Инструкции имеют размер 32 бита и многие совпадают с командами AArch32, хотя условных инструкций стало меньше;
— увеличено с 16 до 32 количество 128-битных регистров (совместимы с 64-битными регистрами), доступных сопроцессорам SIMD NEON и VFP, а также добавлены новые криптографические инструкции AES и SHA. Набор инструкций SIMD NEON ускоряет работу приложений, отвечающих за обработку медиаданных и сигналов. В свою очередь VFP отвечает за малоэнергозатратные вычисления над числами с плавающей запятой;
— поддержка вычислений над числами с плавающей запятой двойной точности и стандарта IEEE 754, который является общепринятым форматом представления чисел с плавающей запятой, используемый в программных реализациях арифметических действий.

ARMv8

Референсные ядра ARM Limited

Первыми процессорными ядрами ARMv8, разработанными непосредственно компанией ARM Limited, стали Cortex-A53 и A57. Ядро A53 является среднеуровневым решением с производительностью 2,3 DMIPS/МГц, что находится примерно по середине между нынешними Cortex-A7 (1,9 DMIPS/МГц) и A9 (2,5 DMIPS/МГц). Тогда как A57 занимает верхний сегмент, ведь его быстродействие (4,1 DMIPS/МГц) превосходит показатели обеих 32-битных флагманов: Cortex-A15 (3,5 DMIPS/МГц) и А17 (4 DMIPS/МГц).

Помимо лицензирования референсных процессорных ядер компания ARM Limited продает расширенные лицензии, позволяющие чипмейкерам по своему усмотрению модифицировать архитектуру ARM. Такие лицензии есть, к примеру, у Apple, Qualcomm и NVIDIA. Поэтому ничто не мешает производителям процессоров создавать собственные решения на базе ARMv8, существенно отличающиеся от референсных Cortex-A53 и A57.

11

Apple A7

Первым и пока единственным 64-битным ARM-процессором, который уже применяется в смартфонах и планшетах, является Apple A7. Построен он на фирменной архитектуре Apple Cyclone, совместимой с ARMv8. Это вторая разработанная внутри компании процессорная архитектура; первой же была Swift (чипы A6 и A6X, семейство ARMv7).

Процессорных ядер у однокристальной системы A7 только два (частота до 1,4 ГГц), но присутствует графический ускоритель PowerVR G6430 с четырьмя кластерами ядер. Быстродействие чипа A7 в процессорозависимых задачах выросло примерно в полтора раза по сравнению с А6, тогда как в различных графических тестах прирост составляет от двух до трех раз.

Apple_A7

А вот теоретическую возможность работать с большим объемом оперативной памяти благодаря 64-битной архитектуре процессора A7 устройства под управлением iOS пока не ощущают. У iPhone 5s, iPad Air и iPad mini Retina всего лишь 1 Гбайт оперативки; и вряд ли в новом поколении мобильных устройств Apple объем ОЗУ вырастит больше чем вдвое.

Qualcomm Snapdragon 410, 610, 615, 808 и 810

Вслед за Apple свои 64-битные ARM-процессоры поспешила анонсировать компания Qualcomm, причем сразу пять моделей. Правда, пока ни одна из них в коммерческих смартфонах или планшетах не применяется. Скорее всего, расцвет эпохи 64-битных Android-устройств состоится в начале 2015 года на выставках CES и MWC.

Однокристальная система Snapdragon 410 (MSM8916) – младшая из анонсированной 64-битной линейки Qualcomm. Она включает в себя четыре ядра Cortex-A53 с частотой от 1,2 ГГц, графический ускоритель Adreno 306 и, что интереснее всего, навигационный модуль с поддержкой спутниковых сетей GPS, ГЛОНАСС и даже китайской Beidou. Применять Snapdragon 410 планируют в недорогих смартфонах на базе Android, Windows Phone и Firefox OS.

Те же четыре ядра Cortex-A53, что у 410-того, содержит чип Snapdragon 610 (MSM8936), вот только графика у него улучшенная Adreno 405. Тогда как Snapdragon 615 (MSM8939) схож с 610-тым графикой, но процессорных ядер Cortex-A53 у него вдвое больше – восемь Cortex-A53.

Qualcomm_810

В отличие от 410, 610, 615 моделей, выполненных по 28-нм техпроцессу, чипы Snapdragon 808 (MSM8992) и 810 (MSM8994) будут производиться по передовым 20-нм технологическим нормам. Они оба строятся по схеме big.LITTLE: два (модель 808) или четыре (810) мощных ядра Cortex-A57 и четыре энергоэффективных Cortex-A53. Графика представлена Adreno 418 и Adreno 430 соответственно. Кроме того, старший Snapdragon 810 имеет встроенный контроллер оперативной памяти стандарта LPDDR4.

Но главный вопрос: когда именно компания Qualcomm представит собственную процессорную архитектуру на основе ARMv8, как это было со Scorpion и Krait (модифицированные ARMv7)?

MediaTek MT6732, MT6752, MT6795

Не могла долго оставаться в стороне 64-битной гонки и компания MediaTek, всего за несколько лет превратившаяся из мелкого производителя процессоров для китайских клонов iPhone в одного из крупнейших в мире чипмейкеров, пусть и безфабричного. Впрочем, Apple и Qualcomm собственных производственных линий по «штамповке» полупроводников тоже не имеют.

Однокристальные системы MediaTek MT6732 и MT6752 должны составить конкуренцию чипам Snapdragon 610 и 615. У них четыре и восемь процессорных ядер Cortex-A53 (частота 1,5 и 2 ГГц соответственно) и одинаковая графика Mali-T760 (разработка ARM Limited). Старший же чип MT6795 стал ответом Snapdragon 810: архитектура big.LITTLE, по четыре ядра Cortex-A57 и A53 с частотой 2,2 ГГц, а также графический ускоритель PowerVR G6200.

MediaTek

NVIDIA Tegra K1 (Project Denver)

Компания NVIDIA решила перевести на 64-битную процессорную архитектуру свой уже существующий чип Tegra K1. Графическая составляющая у него и раньше была едва ли не лучшей среди конкурентов – GK20A с 192 ядрами Kepler, производительностью 365 GFLOPS и поддержкой ПК-стандартов графики DirectX 11.2 и OpenGL 4.4 (а не их мобильных аналогов).

Вместо же четырех 32-битных ядер Cortex-A15 (плюс пятое энергоэффективное ядро) обновленная однокристальная система Tegra K1 получит два ARMv8-совместимых ядра фирменной архитектуры NVIDIA Project Denver. Тактовая частота процессора вырастет до 2,5 ГГц, увеличится и объем кеша. Интересный факт: графика Tegra K1 примерно в пятьдесят раз мощнее Tegra 2.

Читайте также:  Руководство пользователя к продукции Samsung

NVIDIA_K1_Denver

Выводы

За один такт процессоры архитектуры ARMv8 способны обработать значительно больше данных. Это повышает как общую производительность процессора, так и производительность на ватт. Учитывая ограничения технологических норм (максимально допустимую тактовую частоту), переход на ARMv8 – это единственный возможный способ нарастить быстродействие мобильных процессоров, не выходя за разумные рамки энергопотребления и нагрева.

Естественно, пользу от архитектуры ARMv8 получат только те приложения для iOS и Android, которые способны задействовать все ресурсы новых процессоров. Оптимизация программ под новую архитектуру может быть как ручной, так и автоматической, на уровне компилятора.
Первое же Android-устройство с 64-битным ARM-процессором и 4 Гбайт ОЗУ – фаблет Samsung Galaxy Note 4 (чип Exynos 5433: по четыре ядра Cortex-A57 и A53) – представят уже 3 сентября. А вторым, возможно, станет планшетный компьютер HTC серии Google Nexus c процессором Tegra K1 Denver.

Источник

Хитрости ARM-процессоров iOS-устройств

Сегодня мы представляем вашему вниманию пересказ статьи Пьера Лебопена (Pierre Lebeaupin) «Некоторые вещи, которые разработчикам под iOS следовало бы знать об архитектуре ARM» («A few things iOS developers ought to know about the ARM architecture») от 19 июля 2010 года (с дополнениями от 25 сентября 2011 года), опубликованной ресурсом Wandering Coder. Надеемся, что этот материал будет интересен и полезен не только разработчикам, но и всем тем, кто интересуется проблемами разработки приложений для мобильной операционной системы iOS и внутренним устройством популярных планшетов и смартфонов компании Apple.

Когда я работал над своей статьей «Introduction to NEON on iPhone», я полагал, что читатели обладают некоторой суммой знаний о процессорах iOS-устройств. В ходе сетевых дискуссий я понял, что часть этой информации, к сожалению, многим неизвестна. Кроме того, я полагаю, что эта информация будет полезным подспорьем для программирования под iPhone (не только в том случае, если вас интересует NEON), даже если вы программируете на языке высокого уровня Objective-C. Вы можете обойтись и без этих знаний, но обладание ими усовершенствует вашу квалификацию разработчика программ для iPhone.

Вводная информация

Все недавно представленные iOS-устройства базируются на процессорах с ARM-архитектурой. Как вы сможете убедиться в ходе прочтения данного материала, эта архитектура несколько отличается от того, к чему вы привыкли на платформах для настольных систем, к которым относятся и x86 и PowerPC. Конечно же, ARM-архитектуру нельзя назвать ни узкоспециализированной, ни нишевой. Почти все мобильные телефоны (и не только смартфоны) базируются на процессорах этого типа, практически все iPod базируются на них же, как и почти все MP3-плееры. Процессоры этой же архитектуры находятся внутри большинства КПК и Pocket PC. Приставки Nintendo тоже базируются на ARM со времен GBA. Сейчас даже некоторые модели калькуляторов от TI и HP базируются на ARM-процессорах. Если говорить о прошлом, то нужно напомнить, что и Newton обладал ARM-процессором (известно, что Apple давний инвестор ARM). И это только известные устройства, не считая огромного множества ARM-процессоров, играющих вспомогательные роли.

ARM-процессоры прославились своими малыми размерами, низким энергопотреблением и высокой производительностью (в рамках своей категории, разумеется). Эти процессоры характеризуются прямым порядком передачи байтов, как и x86. Существуют также процессоры RISC-архитектуры, к которым относятся MIPS, PowerPC и другие. Следует отметить, что симулятор не выполняет код, созданный для ARM. Для запуска на симуляторе приложение компилируется под архитектуру x86 и выполняется как родное для этой архитектуры. Поэтому приложение следует тестировать на том типе устройства, для которого оно предназначено.

Разновидности ARM-архитектуры (ARMv7, ARM11, Cortex A8 и A4)

Существует несколько версий ARM-архитектуры, разработанных в разное время. В каждой из них добавлено несколько новых инструкций, а также внесены иные усовершенствования. Это затрудняет обратную совместимость. В первом iPhone применялся процессор ARMv6 (сокращенно от «ARM шестой версии»), в более новых моделях телефона применяется ARMv7 (ARM седьмой версии). Осуществляя компиляцию кода, вам следует уточнять версию архитектуры, для которой предназначено приложение, чтобы компилятор мог ограничиться только поддерживаемым данной версией набором инструкций. Это же касается и ассемблера, который будет отмечать те инструкции кода, которые поддерживаются данной версией архитектуры. Итогом становится конечная программа, ориентированная на конкретную версию архитектуры: ARMv6 или ARMv7 (или ARMv5 или ARMv4, но принимайте во внимание то, что ARMv6 является базовой при разработке приложений под iOS, весьма маловероятно, что вы это осознавали). Объектные и исполняемые файлы маркируются для соответствующей архитектуры запуском otool -vh foo.o на одном из ваших объектных или исполняемых файлов.

Дополнение от 25 сентября 2011 года:

Не перепутайте ARMv6 и ARMv7 с ARM6 и ARM7. Два последних являются старыми моделями процессоров (или скорее семействами моделей). В свою очередь ARMv6 и ARMv7 являются версиями архитектуры ARM.

Было бы неправильным сказать, что iPhone обладает «процессором ARMv6», подразумевая, что ARMv6 это название процессора, поскольку ARMv6 является не моделью процессора, а набором выполняемых процессором инструкций, а это ничего не говорит о конкретной реализации процессора. Конкретная модель применяемого в iPhone называется ARM11 (если быть более точным, то ARM1176JZF-S, но так говорят крайне редко, просто запомните, что он относится к семейству ARM11).

Как говорилось ранее, этот процессор способен выполнять набор инструкций ARMv6. Процессоры ARM11 применялись в iPhone до выхода iPhone 3GS, который базируется на ядре процессора Cortex A8, который стал использоваться с тех пор во всех iOS-устройствах. Cortex A8 способен выполнять набор инструкций ARMv7, если выражаться проще, то можно сказать, что он поддерживает ARMv7.

Дополнение от 25 сентября 2011 года:

Применяемый в iPad 2 (и, вероятно, в более поздних устройствах) процессор поддерживает тот же набор инструкций ARMv7, но уже не является Cortex A8. Технические подробности пока неизвестны, и я не видел ни одного подтверждения тому, но я уверен, что iPad 2 базируется на двух ядрах Cortex A9.

Вынужден посоветовать не ходить по кругу и не писать кода, позволяющего определить на каком устройстве код выполняется и не пытаться вычислить, какую архитектуру он поддерживает, базируясь на информации об уже выпущенных устройствах. Кроме того, что это самый бесполезный код, который вы только можете написать, он может вызвать сбой при запуске на устройстве, выпущенном после вашего приложения. Так что, пожалуйста, не делайте этого. На самом деле у вас есть информация о том, что устройства поддерживают набор инструкций ARMv7, а некоторые относительно старые ARMv6.

В ответ вы можете воскликнуть: «Я думал, что в iPad и iPhone 4 используется процессор A4, а не Cortex A8?!» На самом деле название A4 относится ко всей системе чипа, куда входит не только ядро Cortex A8, а также графическое аппаратное обеспечение, акселераторы видео- и аудиокодеков и иные цифровые блоки. Однокристальный процессор и ядро процессора это совсем разные вещи. Ядро процессора не занимает даже большей части пространства кремниевого кристалла.

Набор инструкций ARMv7 в новых устройствах будет совершенно бесполезен, если не использовать его преимущества. Вы можете использовать эти преимущества, но таким образом вы делаете свои приложения несовместимыми с более ранними устройствами, хотя, вероятно, не хотели таких последствий. Вы не знаете как выйти из этого тупика? Выход находится на поверхности. Компилируйте свой код дважды, для ARMv6 и для ARMv7. Соединяйте исполняемые модули в двоичный код в таблице распределения файлов, а устройство само выберет тот из файлов, который лучше им поддерживается.

Разумеется, таблица распределения файлов не подходит для группировки кода, ориентированного на совершенно различные архитектуры (например, PowerPC и Intel) или 32- и 64-битные версии одной и той же архитектуры, а только для двух вариантов одной архитектуры (в терминологии Mach-O «двух подтипов процессора»). С точки зрения программиста все решения принимаются во время компиляции: ориентированный на ARMv6 код неизменно будет запускаться на ARMv6-устройствах, а код под ARMv7 — только на ARMv7-устройствах (или устройствах с еще более расширенным набором команд).

Если вы читали мою статью о NEON, то, возможно, помните мои советы о том, как реализовать определение и выбор во время запуска. Если вы сейчас обратитесь к этой статье, то обнаружите, что я удалил эту часть и больше не рекомендую использовать этот метод. Сделано это было по той причине, что будет невозможно (или, как минимум, очень сложно и чревато ошибками) обеспечить работоспособность такого кода на грядущих процессорах с набором инструкций ARMv8. Вам следует принимать решение на стадии компиляции и воспользоваться таблицей распределения файлов, если вы хотите, чтобы ваше приложение запускалось на устройствах с набором инструкций ARMv6 и при этом ARMv7-устройствах могло использовать преимущества нового набора команд.

Дополнение от 25 сентября 2011 года:

Причина, по которой я не стал пояснять, почему вам следует хотеть использовать преимущества ARMv7, проста. Я посвятил этой теме новую статью.

По этому вопросу хотелось бы сделать еще одно пояснение. ARM-архетиктура процессоров для iOS-устройств не в полной мере соответствует понятию об ARM-процессорах в целом. Здесь следует привести пример. Набор команд ARMv6 для iOS предполагает поддержку инструкций для работы с плавающей точкой (если быть точным, речь идет о наборе VFPv2). Этот набор инструкций является необязательной частью набора ARMv6, тем не менее в iOS-устройствах присутствует с тех самых пор, когда был представлен первый iPhone. Таким образом, наличие поддержки инструкций для работы с плавающей точкой на аппаратном уровне при работе над приложениями для iOS-устройств предполагается по умолчанию.

Читайте также:  Вакуумная помпа для увеличения полового члена как выбрать и где купить Обзор марок

Другим примером являются ARMv7 и NEON. NEON это необязательная часть профиля ARMv7-A, тем не менее NEON присутствует во всех iOS-устройствах, поддерживающих набор инструкций ARMv7. Следовательно, работая над приложениями для iOS, следует исходить из того, что NEON поддерживается (при условии поддержки процессором устройства набора инструкций ARMv7).

Настала пора кратко прорезюмировать вышесказанное:
1. Первые iOS-устройства базировались на процессорах ARM11, поддерживающих набор инструкций ARMv6.
2. Начиная с iPhone 3GS, iOS-устройства базируются на процессорах Cortex A8, поддерживающих набор инструкций ARMv7.
3. Ядро процессора (в данном случае, Cortex A8) является только частью однокристальной системы, чаще именуемой «процессором A4».
4. iPad 2 базируется не на Cortex A8, а скорее всего, на двух ядрах Cortex A9, которые поддерживают тот же набор инструкций ARMv7.

Выполнение инструкций с условием

Интересной функцией архитектуры ARM является то, что большинство инструкций могут исполняться при выполнении условия. Задается определенное условие, в случае, если оно не выполняется («false»), не исполняется и инструкция. Это позволяет более эффективно использовать короткие блоки с условным оператором «if». Традиционный метод состоит в том, что в случае невыполнения условия («false») начинает выполняться часть программы, находящаяся за блоком. Вместо этого, инструкции в блоке упорядочены таким образом, что не требуется перехода по лишним ветвям.

Но сейчас я говорю об этом не потому, что оператор «if» делает код более эффективным. Я говорю об этом, поскольку на этапе отладки возможны неожиданности. Временами вы можете увидеть, как отладчик в «if»-блоке, по условиям которого, как вам известно, выдается результат «false», например, выдает ошибку или обходит этот условный цикл «if-else». Это происходит потому, что процессор успешно проходит этот код, но некоторые его части не выполняются в реальности, поскольку их выполнение обусловлено. Кроме того, если вы поместите в блок «if» точку прерывания, она может сработать даже в том случае, если по условию возвращается результат «false».

Это говорит нам о том (как представляется мне по итогам моего весьма ограниченного теста), что компилятор (во время отладки) избегает генерации инструкций, исполнение которых обусловлено. Таким образом, это может происходить во время отладочной оптимизации кода. К сожалению, временами у вас просто не будет никакой альтернативы.

Набор инструкций Thumb архитектуры ARM

Инструкции набора Thumb, входящего в общий набор инструкций архитектуры ARM, сжаты и занимают всего по 16 бит (все инструкции ARM характеризуются 32-битным размером. Thumb является 32-битной архитектурой, просто таким образом инструкции занимают меньше места). Thumb не является другой архитектурой, скорее их следует рассматривать в качестве сокращенной записи наиболее распространенных инструкций и функций все той же архитектуры ARM.

Преимущества подобного подхода к записи очевидны и состоят в том, что таким образом сокращается размер кода, экономится память и кэш, код становится менее емким. Это наиболее важно для приложений для микроконтроллеров, но не теряет своей актуальности и в iOS-устройствах. Поэтому этот набор по умолчанию включен в проектах Xcode iOS. Сокращение размера кода это, конечно, прекрасно, но вдвое его сократить все равно не получится, поскольку порой две инструкции Thumb являются эквивалентом одной инструкции ARM.

Инструкции ARM и Thumb не могут смешиваться в свободном порядке, поскольку процессору при переходе от инструкций одного типа к другому переключаться между режимами. Это может случиться только тогда, когда происходит обращение к функции или возврат результата из нее. В данном случае функция в целом может быть как Thumb, так и ARM. На практике вы не можете управлять процессом компиляции того или иного кода в инструкции Thumb или ARM на уровне функции, только на уровне исходного файла.

Если приложение компилируется для набора инструкций ARMv6, компиляция в виде Thumb является очень компромиссным решением. Код Thumb для ARMv6 имеет доступ к немногим регистрам, не может работать с условными инструкциями и, в частности, не может работать с плавающей точкой на аппаратном уровне. Код Thumb с плавающей точкой вызывает соответствующую системную инструкцию для обработки. Да, вот так медленно. По этой причине я бы рекомендовал отключать режим Thumb в случаях, когда код ориентирован на набор функций ARMv6. Если же вы хотите оставить его включенным, проверьте ваш код и, если некоторые его части работают медленно, прежде всего следует отключить Thumb по крайней мере для этих фрагментов (это просто сделать с помощью специального указателя для компилятора Xcode, используйте -mno-thumb). Помните, что вычисления с плавающей точкой довольно часто встречаются при разработке для платформы iOS с тех пор, как в Quartz и Core Animation используется система координат с плавающей точкой.

Если код компилируется для ARMv7, эти препятствия, конечно же, устраняются, поскольку набор инструкций ARMv7 содержит Thumb-2, расширение набора инструкций Thumb, добавляющее поддержку обусловленных инструкций и 32-битных инструкций Thumb. Таким образом обеспечивается доступ ко всем регистрам ARM, а также поддержка плавающей точки и NEON. Для набора инструкций ARMv7 Thumb обеспечивает сокращение размера кода, поэтому его следует оставить включенным (или включить заново, если вы уже успели отключить его). Используйте набор условных настроек Xcode таким образом, чтобы Thumb был включен для ARMv7, но отключен для ARMv6.

Дополнение от 25 сентября 2011 года:

Чтобы добавить набор условных настроек для Xcode 3, следуйте инструкциям Джеффа Ламарша (Jeff Lamarche), данным им в последнем абзаце его заметки «Thumb» от 9 июля 2010 года, опубликованной в блоге iPhone Development. Для Xcode 4 необходимо следовать инструкциям компании Apple, принимая во внимание то, что вы можете добавить условные настройки только при выборе настроек специальной конфигурации (в ином случае пункт меню будет затемнен).

В документации по ARM и обсуждениях в Интернете вы можете встретиться с упоминанием того, что при использовании Thumb код должен проверяться на «взаимодействие». Если только вы не пишете код на ассемблере, вам не надо переживать на сей счет. Весь код на iOS-платформе «взаимодействует» («Взаимодействие» адресует к набору правил, позволяющих скомпилированным в виде ARM-инструкций функциям непосредственно обращаться к функциям, скомпилированным в виде Thumb-инструкций, соответственно обращение реализуется и в обратном порядке безо всяких проблем и настолько же прозрачно, как к этому привыкли программисты, пишущие на языке C). Shark или же инструмент Time Profile могут испытывать трудности в попытке определить, относится ли та или иная функция к ARM или Thumb. Если вы видите неработоспособную или бессмысленную инструкцию, следует попробовать переключиться между ARM и Thumb.

Выравнивание доступов

Платформа iOS поддерживает невыровненные доступы к памяти. Они, конечно же, осуществляются медленнее выровненных, поэтому старайтесь их избегать. В некоторых отдельных случаях (куда входят загрузка и сохранения множественных инструкций, если вам это интересно) невыровненные доступы могут работать в сотни раз медленнее выровненных. Это происходит потому, что процессор не может с ними справиться и обращается за помощью к операционной системе. В статье Джонатана Ренча «Data alignment: Straighten up and fly right», опубликованной сайтом компании IBM, описывается подобный феномен, наблюдавшийся на платформе PowerPC, на которой невыровненные доступы осуществлялись вдвое медленнее выровненных. Поэтому, будьте внимательнее, выравнивание данных все еще актуально.

Действие деления в iOS-устройствах осуществляется только на уровне операционной системы

Эта тема не перестает удивлять каждого. Откройте инструкцию к архитектуре ARM. Если у вас ее до сих пор нет, то посмотрите в разделе «Architecture Overview» статьи «Introduction to NEON on iPhone» и найдите инструкцию целочисленного деления. Только не удивляйтесь, но архитектура ARM не поддерживает целочисленное деление на аппаратном уровне. Эта проблема решается на уровне программного обеспечения. Если вы скомпилируете следующий код:

int ThousandDividedBy(int divisor)
<
return 1000/divisor;
>

в код ассемблера, то увидите, что компилятор добавит обращение к функции под названием «___divsi3». Эта системная функция осуществляет действие деления на программном уровне (отметим, что делитель не является постоянным, в ином случае, по всей вероятности деление осуществляется через умножение). Это означает, что в iOS деление осуществляется на уровне операционной системы.

Однако, прочтя наконец инструкцию к архитектуре ARM, вы можете воскликнуть: «Вы же неправы! ARM-инструкция деления существует, их даже две! Смотрите сюда, вот они, sdiv и udiv!». Вынужден вас огорчить, эти инструкции имеются только в профилях ARMv7-R и ARMv7-M (для процессоров реального времени и встроенных систем, то есть для микроконтроллеров двигателей и наручных часов). В наборе инструкций ARMv7-A, на котором базируются iOS-устройства, инструкции деления отсутствуют.

Не секрет, что ARM-код, созданный посредством GCC, никуда не годится. Для создания приложений под другие платформы на базе ARM, профессиональные разработчики используют RVDS, инструментарий, предоставляемый непосредственно ARM, но на платформе iOS это невозможно, поскольку RVDS не поддерживает загрузку файлов формата Mach-O, используемых в системах OS X. RVDS поддерживает только загрузку ELF. Пока что я не посвящал много времени тестированию всего этого. Мне, по крайней мере, довелось увидеть обнадеживающие усовершенствования в 64-битном целочисленном коде (а это особо выделяющееся слабое место GCC on ARM) при использовании LLVM. Будем надеяться, что LLVM проявит свое превосходство над GCC во всех отношениях.

Источник