Ядро процессора Cortex-A8

 

Характеристики ядра:

архитектура ARMv7;

двойной симметричный конвейер с упреждающей выборкой;

суперскалярное ядро;

13-ступенчатый конвейер;

кэш-память-память второго уровня, емкость кэш-памяти второго уровня - от 64К байт до 2М байт;

ряд фирменных подсистем (Jazelle, TrustZone и так далее);

ориентировано на задачи, требующие достаточно высокого быстродействия (на уровне 2000 MIPS Dhrystone) при невысоком энергопотреблении и тепловыделении.

ядро Cortex-A8 работало при частотах до 1 ГГц;

65-нм технологический процесс;

максимальное энергопотребление составляло 300 мВт.

Структура ядра Cortex-A8 приведена на рис. 32.3.

Рис. 32.3. Структура ядра Cortex-A8

 

 

В ядре реализована система команд Thumb 2 (обеспечивалась "упаковка" 32-разрядных команд в 16-разрядные, что уменьшало размер программ и важно при подготовке модулей, записываемых в постоянную память). Уменьшение размера программ при использовании режима Thumb 2 связано с внесением в систему команд ряда дополнительных команд (около 130 команд). Поскольку Thumb - 16-разрядная система команд, на которую отображается основное подмножество 32-разрядных команд ARM, но поскольку оставались "неэмулируемые" команды, приходилось писать дополнительные программы для реализации тех действий, которые решает единственная 32-разрядная команда.

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

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

Средства Jazelle RCT обеспечивали снижение размера Java-программ (до 70%) за счет динамического преобразования (JIT) байт-кода (что закономерно повышало скорость и снижало энергопотребление).

TrustZone - традиционная для ARM система реализации защиты. Фактически она позволяла динамически переключать процессор в "безопасный" режим и общий, причем в первом допускалось выполнение только "безопасных" программ (например, размещенных в заранее заданном блоке).

Улучшена подсистема вычислений с плавающей точкой (версия VFPv3). В частности, до 32 увеличено число регистров для вычислений с двойной точностью, реализованы команды для преобразования чисел с плавающей и фиксированной точкой.

С технической точки зрения одной из наиболее существенных особенностей была система "статического планирования" для суперскалярного конвейера.

Конвейер - 13-ступенчатый, на протяжении работы собиралась статистика, которая затем использовалась при предсказании ветвлений (размещалась в буфер меток перехода и глобальный буфер хронологии). Кроме ветвлений, прогнозировался и стек возвращения (для прогнозирования адресов возврата из подпрограмм).

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

Обработка команд сопроцессора NEON начиналась в конце главного конвейера (соответственно, все предсказания ветвлений, результаты операции и прочее уже отработаны), и, что важнее, все необходимые данные уже находятся в кэш-памяти первого уровня.

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

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