ARM big.LITTLE — это гетерогенная вычислительная архитектура , разработанная Arm Holdings , объединяющая относительно экономящие батарею и более медленные ядра процессора ( LITTLE ) с относительно более мощными и энергоемкими ( big ). Цель состоит в том, чтобы создать многоядерный процессор , который может лучше подстраиваться под динамические вычислительные потребности и потреблять меньше энергии, чем просто масштабирование тактовой частоты . Маркетинговые материалы ARM обещают экономию энергии до 75% для некоторых видов деятельности. [1] Чаще всего архитектуры ARM big.LITTLE используются для создания многопроцессорной системы на кристалле (MPSoC).
В октябре 2011 года был анонсирован big.LITTLE вместе с Cortex-A7 , который был разработан для архитектурной совместимости с Cortex-A15 . [2] В октябре 2012 года ARM анонсировала ядра Cortex-A53 и Cortex-A57 ( ARMv8-A ), которые также являются взаимосовместимыми, что позволяет использовать их в чипе big.LITTLE. [3] Позднее ARM анонсировала Cortex-A12 на Computex 2013, а затем Cortex-A17 в феврале 2014 года. И Cortex-A12, и Cortex-A17 также могут быть объединены в конфигурацию big.LITTLE с Cortex-A7. [4] [5]
Для заданной библиотеки логики CMOS активная мощность увеличивается по мере того, как логика переключается больше в секунду, в то время как утечка увеличивается с количеством транзисторов. Таким образом, ЦП, разработанные для быстрой работы, отличаются от ЦП, разработанных для экономии энергии. Когда очень быстрый ЦП с неупорядоченными операциями простаивает на очень низких скоростях, ЦП с гораздо меньшей утечкой (меньше транзисторов) может выполнять ту же работу. Например, он может использовать меньший (меньше транзисторов) кэш памяти или более простую микроархитектуру, такую как удаление неупорядоченного выполнения . big.LITTLE — это способ оптимизации для обоих случаев: мощности и скорости в одной системе.
На практике система big.LITTLE может быть на удивление негибкой. Одна из проблем — это количество и типы доменов питания и тактовой частоты, которые предоставляет ИС. Они могут не соответствовать стандартным функциям управления питанием, предлагаемым операционной системой. Другая проблема — это то, что ЦП больше не обладают эквивалентными возможностями, и сопоставление правильной программной задачи с правильным ЦП становится более сложным. Большинство этих проблем решается путем повышения гибкости электроники и программного обеспечения.
Существует три способа [6] размещения различных ядер процессора в конструкции big.LITTLE, в зависимости от планировщика , реализованного в ядре . [7]
Подход кластерной модели является первой и самой простой реализацией, объединяющей процессор в кластеры одинакового размера из «больших» или «маленьких» ядер. Планировщик операционной системы может видеть только один кластер за раз; когда нагрузка на весь процессор меняется с низкой на высокую, система переходит на другой кластер. Затем все соответствующие данные передаются через общий кэш L2 , активный кластер ядер отключается, а другой активируется. Используется Cache Coherent Interconnect (CCI). Эта модель была реализована в Samsung Exynos 5 Octa (5410). [8]
Миграция ЦП через внутриядерный коммутатор (IKS) включает в себя сопряжение «большого» ядра с «маленьким» ядром, возможно, с несколькими идентичными парами в одном чипе. Каждая пара работает как одно так называемое виртуальное ядро , и только одно реальное ядро (полностью) включено и работает в один момент времени. «Большое» ядро используется, когда спрос высок, а «маленькое» ядро используется, когда спрос низкий. Когда спрос на виртуальное ядро меняется (между высоким и низким), входящее ядро включается, состояние выполнения передается , исходящее отключается, и обработка продолжается на новом ядре. Переключение выполняется через фреймворк cpufreq . Полная реализация big.LITTLE IKS была добавлена в Linux 3.11. big.LITTLE IKS — это улучшение кластерной миграции (§ Кластерное переключение), основное отличие состоит в том, что каждая пара видна планировщику.
Более сложная компоновка включает несимметричную группировку «больших» и «маленьких» ядер. Один чип может иметь одно или два «больших» ядра и много больше «маленьких» ядер, или наоборот. Nvidia создала нечто похожее с маломощным «ядровым компаньоном» в своей системе на кристалле Tegra 3 .
Самая мощная модель использования архитектуры big.LITTLE — гетерогенная многопроцессорная обработка (HMP), которая позволяет использовать все физические ядра одновременно. Потоки с высоким приоритетом или вычислительной интенсивностью в этом случае могут быть выделены для «больших» ядер, в то время как потоки с меньшим приоритетом или меньшей вычислительной интенсивностью, такие как фоновые задачи, могут выполняться ядрами «LITTLE». [9]
Эта модель была реализована в процессорах Samsung Exynos , начиная с серии Exynos 5 Octa (5420, 5422, 5430), [10] [11] и процессорах серии Apple A, начиная с Apple A11 . [12]
Парное расположение позволяет выполнять переключение прозрачно для операционной системы с использованием существующего динамического масштабирования напряжения и частоты (DVFS). Существующая поддержка DVFS в ядре (например, в Linux) просто увидит список частот/напряжений и будет переключаться между ними по своему усмотрению, как это происходит на существующем оборудовании. Однако слоты нижнего уровня активируют ядро «Little», а слоты верхнего уровня активируют ядро «Big». Это раннее решение, предоставляемое планировщиком CPU «deadline» в Linux (не путать с планировщиком ввода-вывода с тем же названием) с 2012 года. [13]cpufreq
В качестве альтернативы все ядра могут быть представлены планировщику ядра , который будет решать, где выполняется каждый процесс/поток. Это потребуется для непарной компоновки, но, возможно, может также использоваться на парных ядрах. Это создает уникальные проблемы для планировщика ядра, который, по крайней мере, с современным товарным оборудованием, мог предполагать, что все ядра в системе SMP равны, а не разнородны. Дополнение 2019 года к Linux 5.0 под названием Energy Aware Scheduling является примером планировщика, который рассматривает ядра по-разному. [14] [15]
В мае 2017 года ARM объявила DynamIQ преемником big.LITTLE. [16] Ожидается, что DynamIQ обеспечит большую гибкость и масштабируемость при проектировании многоядерных процессоров. В отличие от big.LITTLE, он увеличивает максимальное количество ядер в кластере до 8 для процессоров Armv8.2, 12 для Armv9 и 14 для Armv9.2 [17] и позволяет изменять конструкции ядер в пределах одного кластера и до 32 кластеров в целом. Технология также предлагает более точное управление напряжением на ядро и более высокую скорость кэша L2. Однако DynamIQ несовместим с предыдущими разработками ARM и изначально поддерживается только ядрами процессоров Cortex-A75 и Cortex-A55 и их преемниками.