Посмотрите на свой смартфон — что он делает? Он не проявляет никаких признаков жизни, его экран не горит. Лежит спокойно и никого не трогает. Всё внутри. Сейчас он занимается миллионом вещей: опрашивает датчики, сенсоры и мобильную сеть, обновляет приложения, отправляет в интернет и получает обратно мегабайты информации.
Это все небольшие операции, но у них есть особенность — их очень много!
Прежде, чем приступить к объяснению архитектуры big.LITTLE, освежим наши знания: как современный процессор распараллеливает задачи на 1 ядре?
Вся работа ядра квантуется по времени. Квант — временной промежуток, на протяжении которого ядро выполняет однородную работу. Благодаря этому существуют многопоточные приложения: каждый из потоков делится на кванты и выполняется по очереди — сначала 1-й квант первого потока, потом 1-й квант второго потока, и так далее.
Проблема увеличения производительности
Из-за обилия процессов система создает очень много потоков. Тут и возникает первая проблема: задержки. Кому нравится тормозной смартфон?
Пример: отклик должен занимать максимум 300 единиц времени, а наш квант равен 10 единицам. Значит, мы не можем создать более 30 потоков на ядро. А если учесть еще то, что минимальная работа может занимать более 1 кванта процессора… Незавидная участь.
Пути решения проблемы
Есть 3 пути решения проблемы: уменьшение кванта времени, увеличение частоты ядра процессора, увеличение количества ядер.
Рассмотрим их по очереди.
Уменьшение кванта времени
К сожалению, примитивные операции занимают определенное фиксированное время, и делать квант времени меньше длительности этой операции — нет смысла. В любом случае мы упрёмся в предел.
Увеличение частоты ядра
Увеличение частоты ядра позволяет выполнять больше операций за меньшее время. Но оно требует больше энергии, нежели низкочастотные ядра.
Мощность процессора можно описать следующим законом: P ≈ C×V²×f
, где C — динамическая емкость, V — напряжение, f — частота процессора. Совершенно не важно, что такое динамическая ёмкость — ужас в том, что напряжение в квадрате!
Напряжение нужно для работы транзисторов. Что такое транзистор? Это переключатель, который для работы накапливает заряд. Время накопления заряда пропорционально силе тока — чем сила тока больше, тем быстрее накапливается заряд.
По закону Ома сила тока пропорциональна напряжению — в итоге мы получаем P ≈ C×V³
А тактовая частота ядра зависит от скорости срабатывания процессора — при увеличении частоты в 2 раза энергопотребление вырастет в 8 раз! Значит, и отвод тепла должен быть эффективнее в 8 раз. Иначе процессор расплавится.
Поэтому тактовую частоту лучше не увеличивать.
Увеличение количества ядер
Такая схема позволяет генерировать большее количество потоков. Затраты энергии же увеличиваются приблизительно в 2 раза.
Осталось учесть одну вещь — ядро не может работать вполсилы. Если мы не уместим наши задачи в 1 ядро, то придётся задействовать для их решения еще одно. Оно будет тратить столько же энергии, сколько и полностью загруженное первое — его полезный потенциал падает.
Преимущества архитектуры big.LITTLE
Мы выяснили: ядро не может работать только частично, а с ростом частоты космическими темпами увеличиваются энергопотребление и тепловыделение.
Решение — архитектура big.LITTLE: нескольких слабых ядер (для фоновых задач) и нескольких мощных ядер (запуск и выполнение приложений).
Благодаря «слабым» ядрам смартфон тратит меньше энергии на обеспечение своих базовых потребностей — тех самых многочисленных фоновых активностей, о которых вы даже не подозреваете. Благодаря «мощным» — выполняет все остальное.
Такая вот архитектура. Все-таки можно и рыбку съесть, и на стул сесть. Спасибо, что прочли этот текст.