О том, как проблемы энергопотребления решаются на этапе проектирования микропроцессоров, рассказывалось в серии постов «Жизнь в эпоху «тёмного» кремния». Были освещены четыре основных подхода, однако существует ещё один подход, речь о котором пойдет в этот раз. Это оптимизация на системном уровне.
Первый же вопрос, который закономерно возникает — почему system-level? Ответ на него крайне прост – значение имеет конечный продукт, а не «винтики» из которых он состоит. Необходим системный взгляд на связку программный стек + аппаратная платформа + полупроводниковые компоненты, для того, чтобы оценить характеристики конечного продукта и управлять ими.
Это верно и в случае с энергопотреблением: комплексный подход открывает новые возможности для оптимизации и позволяет решать иначе неразрешимые задачи. В этом посте я приведу несколько примеров, чтобы показать, что это действительно так.
big.LITTLE
Данная идея заключается в том, чтобы объединить в рамках одной системы два процессора. Один — для решения высокопроизводительных задач, а другой – для меньшего расхода энергии там, где не требуется большая производительность. Соответственно, если переносить вычисления с одного процессора на другой при изменении нагрузки, можно добиться экономии энергии.
Разработчики из ARM объединили таким образом процессоры Cortex-A7 и Cortex-A15. Эти процессоры практически идентичны с точки зрения архитектуры системы команд, модели памяти и программной модели. Соответственно все инструкции будут выполняться единообразно, хотя и с разной производительностью.
Различия становятся заметны на уровне микроахитектуры. Cortex-A7 это in-order процессор, с длинной конвейера 8-10 ступеней. А Cortex-A15 это out-of order процессор, конвейер которого насчитывает от 15 до 24 ступеней (в зависимости от инструкции).
big.LITTLE система
Энергопотребление такой системы изображено на следующем графике. Как видно, в области низкопроизводительных вычислений использование A7 дает примерно двухкратный выигрыш в энергопотреблении по сравнению с A15.
Производительность big.LITTLE системы
А при чем тут system-level? Дело в том, что действуя на каком-то одном уровне ничего подобного создать бы не вышло. Необходимо уделить внимание сразу трем уровням:
— Используемые процессоры должны обеспечивать соответствующий выбор между производительностью и энергоэффективностью, а также идентичность программной модели.
— Аппаратная платформа должна обеспечивать должное взаимодействие этих двух процессоров
— Системное программное обеспечение должно обеспечивать миграцию вычислений с одного процессора на другой, решая все сопутствующие задачи. Кроме того, A7 и A15 хоть и практически идентичны с точки зрения программной модели, но не на 100%. Эти отличия необходимо скрывать от верхних уровней операционной системы и выполняемых программ.
Использование процессоров, которые не обладают столь сильной идентичностью, как A7 и A15 могло бы быть гораздо более привлекательным с точки зрения экономии энергии. Например, если один процессор реализует какие-то расширения системы команд, а другой нет, или если процессоры вообще имеют разные системы команд и модели памяти. Но это ставит перед программным уровнем еще больше задач, связанных с миграцией вычислений, некоторые из которых на данный момент не имеют хорошего решения.
Android Power Management Stack
Сабж представлен на следующем рисунке. В самом низу находятся реализованные в железе аппаратные средства управления энергопотреблением и firmware, выполняемое PCU (Package Control Unit). Далее следует программная часть, относящаяся к ядру Linux и окружению Android и, собственно, пользовательские приложения. Чего удалось бы достичь с точки зрения экономии энергии, если бы каждый разработчик не смотрел за пределы своего уровня стека? Например, если бы Intel уделял внимание только той части управления энергопотреблением, которая относится к кремнию и firmware, игнорируя остальное? Процессор точно не вышел бы из строя от перегрева :), но чего-то большего я бы не стал гарантировать. Даже если на аппаратном уровне менеджмент реализован безупречно, но программная часть довольно посредственная, то о хороших показателях можно забыть. Именно поэтому тратится масса усилий на совершенствование всего стека как единого целого.
System-level power delivery
Здесь наше внимание привлекает тот факт, что система обеспечения питания в мобильных платформах (например, смартфоны) сама по себе потребляет немало энергии (20-40%). Более того, энергопотребление процессора не является доминирующим в системе. В таких условиях оптимизация энергопотребления должна выполняться на системном уровне. Например, выбор оптимальной частоты для процессора необходимо проводить с оглядкой на энергопотребление остальных компонентов системы.
Рассмотрим такой пример. Предположим, текущая нагрузка процессора существенно ниже максимальной. В такой ситуации есть два варианта поведения. Первый – быстро (на большой частоте и с большей потребляемой процессором мощностью) выполнить вычисления и перейти на длительное время в спящий режим. Второй – медленно (затрачивая процессором меньше энергии в единицу времени) выполнять расчеты и перейти в спящий режим на гораздо меньшее время. Какой вариант выбрать? Это совсем не просто, и для этого нужно знать сколько потребляют остальные компоненты системы в различных режимах.
Themperature estimation and management
Для мобильных устройств, таких как планшеты или смартфоны есть ряд специфических требований с точки зрения температурного режима. А именно температура корпуса и экрана не должна вызывать неприятных ощущений при прикосновении. Однако эта проблема совсем не так проста, как кажется, из-за сложного характера распределения тепла во времени и пространстве корпуса, а также ограничений температурных сенсоров — поместить температурный датчик прямо на поверхность корпуса или экрана не удастся. В итоге разработчики вынуждены заниматься построением моделей описывающих температуру в различных точках на поверхности корпуса и заниматься их калибровкой/обучением/и т.д. А уже на основании этих моделей затем реализовывать алгоритмы управления энергопотреблением. Разумеется, это можно сделать, только имея уже готовый смартфон/планшет, т.е. на системном уровне.
В заключение хочу сказать, что оптимизация на системном уровне стала по-настоящему необходимой вещью. Её польза очевидна и ряд задач иначе решены быть не могут. А т.к. в вопросах энергопотребления на нее обратили внимание сравнительно недавно, то есть основания полагать, что в этом направлении еще будет множество интересных достижений.