Энергоэффективное программное кодирование - PullRequest
42 голосов
/ 15 сентября 2008

В типичном портативном / переносном встраиваемом системном устройстве срок службы батареи является основной проблемой при проектировании H / W, S / W и функций, которые может поддерживать устройство. С точки зрения программирования, известно о коде, оптимизированном для MIPS, памяти (данных и программ). Я знаю о режиме глубокого сна H / W, режиме ожидания, который используется для синхронизации оборудования на более низких циклах или поворота часов до неиспользуемых циркулирующих каналов для экономии энергии, но я ищу некоторые идеи с этой точки зрения :

Где мой код работает, и он должен продолжать выполняться, учитывая, как я могу эффективно написать код "power", чтобы потреблять минимум ватт?

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

Существуют ли какие-либо программные соображения по проектированию высокого уровня, которые следует учитывать при проектировании структуры кода или при проектировании низкого уровня, чтобы сделать код максимально энергоэффективным (наименее энергоемким), насколько это возможно?

Ответы [ 17 ]

1 голос
/ 15 сентября 2008

Посмотрите, что генерирует ваш компилятор, особенно для горячих областей кода.

0 голосов
/ 29 августа 2010

Выберите эффективные алгоритмы, которые являются быстрыми и имеют небольшие базовые блоки и минимальный доступ к памяти.

Понять размер кэша и функциональные единицы вашего процессора.

Не обращайтесь к памяти. Не используйте объекты или сборку мусора или любые другие высокоуровневые конструкции, если они расширяют ваш рабочий код или набор данных вне доступного кэша. Если вы знаете размер кеша и ассоциативность, выложите весь рабочий набор данных, который вам понадобится в режиме низкого энергопотребления, и поместите все это в dcache (забудьте некоторые «правильные» методы кодирования, которые разбрасывают данные по отдельным объектам или данным структуры, если это приводит к разрушению кэша). То же самое со всеми подпрограммами. Поместите весь ваш рабочий код в один модуль, если это необходимо, чтобы поместить его в icache. Если процессор имеет несколько уровней кэш-памяти, попробуйте установить минимально возможный уровень кэша команд или данных. Не используйте блок с плавающей запятой или любые другие инструкции, которые могут включать любые другие дополнительные функциональные блоки, если вы не можете убедительно доказать, что использование этих инструкций значительно сокращает время, когда ЦП находится в спящем режиме.

и т.д.

0 голосов
/ 10 декабря 2009

В Linux установите powertop, чтобы увидеть, как часто какая часть программного обеспечения пробуждает процессор. И следуйте различным советам, на которые ссылается сайт powertop, некоторые из которых, вероятно, применимы и к не Linux.

http://www.lesswatts.org/projects/powertop/

0 голосов
/ 23 сентября 2009

Выполняйте свою работу как можно быстрее, а затем переходите в состояние ожидания, ожидая прерывания (или события). Постарайтесь, чтобы код выполнялся из кеша с минимальным объемом трафика внешней памяти.

0 голосов
/ 14 июня 2012

Достаточно своевременно, статья на сегодняшнем Hackaday об измерении потребления энергии различными командами: Hackaday: эффект кода при потреблении энергии

Помимо этого:
- Прерывания - твои друзья
- Опрос / ожидание () не ваши друзья
- Делай как можно меньше
- сделайте ваш код максимально маленьким / эффективным
- Отключите как можно больше модулей, выводов, периферийных устройств в микро
- бежать как можно медленнее
- Если в микроустройстве есть настройки прочности привода, скорости нарастания и т. Д., Проверьте их и настройте их, значениями по умолчанию часто являются полная мощность / максимальная скорость.
- возвращаясь к статье выше, вернитесь назад и измерьте мощность и посмотрите, сможете ли вы ее отбросить, изменив вещи.

0 голосов
/ 15 июня 2012

Не опрашивай, спи

Старайтесь не использовать энергоемкие области чипа, когда это возможно. Например, множители потребляют много энергии, если вы можете сдвинуть и сложить, вы можете сэкономить несколько джоулей (если вы не слишком много сдвигаете и добавляете, что на самом деле множитель выигрыш!)

Если вы действительно серьезны, я получу отладчик с поддержкой энергопотребления, который может соотносить энергопотребление с вашим исходным кодом. Как это

0 голосов
/ 30 сентября 2008

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

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

также потратил некоторое время на проверку всех API встроенных устройств - например, большинство телефонов symbian могут кодировать аудио с помощью специального оборудования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...