Можем ли мы оптимизировать код для снижения энергопотребления?

Существуют ли какие-либо методы оптимизации кода для обеспечения меньшего энергопотребления. Архитектура - ARM. Язык - C


person Manik Mahajan    schedule 25.05.2010    source источник
comment
Используйте оператор оптимизации //. :)   -  person SLaks    schedule 25.05.2010
comment
Циклы, не используемые вашей программой, по-прежнему будут использоваться как неактивные процессы. Я полагаю, что если ваш процессор настроен на меньшую мощность, когда ему требуется меньше циклов, вам просто нужно сделать свой код быстрее. В противном случае ваш единственный вариант — #include "gogreen.h".   -  person corsiKa    schedule 25.05.2010
comment
@Slaks, что оптимизация доступна только для C ++ (и новее, чем варианты ANSI C), поэтому лучше использовать оператор /**/ :-p   -  person fortran    schedule 25.05.2010
comment
Зачастую проще оптимизировать аппаратное обеспечение, чтобы оно потребляло меньше энергии, чем оптимизировать программное обеспечение, чтобы оно потребляло меньше энергии.   -  person Brian    schedule 25.05.2010
comment
@ Брайан, мы программисты, а не химики для оптимизации батарей и не инженеры для оптимизации схемы ЦП. Мы решаем эту проблему как раз другим способом - исправляя наше программное обеспечение.   -  person P Shved    schedule 25.05.2010
comment
@Pavel, купи оборудование меньшего размера. И на самом деле, некоторые из нас инженеры.   -  person Nathan Ernst    schedule 25.05.2010
comment
Лучшая техника — это всегда хороший дизайн программы. Если у вас есть это, то вам не нужно беспокоиться, вы 90% там. Остальные 10% приходятся на знание дополнительных функций ЦП, таких как автоматическое отключение при простое (или вы можете запустить это самостоятельно, но я не уверен).   -  person Dark Star1    schedule 25.05.2010
comment
@Pavel: На самом деле, я имел в виду купить другой чип, а не делать новый. Хотя я признаю, что это не ответ.   -  person Brian    schedule 25.05.2010


Ответы (9)


С справочного сайта ARM:

К особенностям процессора ARM11 MPCore, повышающим энергоэффективность, относятся:

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

В процессоре ARM11 MPCore также широко используются стробируемые часы и вентили для отключения входов в неиспользуемые функциональные блоки. Только логика, активно используемая для выполнения вычислений, потребляет какую-либо динамическую мощность.

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

person Dave Swersky    schedule 25.05.2010

Оптимизация кода для использования меньшего количества энергии — это, по сути, просто оптимизация кода. Независимо от того, являются ли ваши мотивы денежными, социальными, политическими или подобными, меньше циклов процессора = меньше энергии. Я пытаюсь сказать, что вы, вероятно, можете заменить «энергопотребление» на «время выполнения», поскольку они, по сути, будут прямо пропорциональны, и поэтому вы можете добиться большего успеха, если не «отпугиваете» людей с помощью вопрос связанный с питанием. Впрочем, могу поправиться :)

person Jeriko    schedule 25.05.2010
comment
Я не минусовал вас, но мой ноутбук потребляет меньше энергии, если процессор работает медленнее, поэтому время выполнения обратно пропорционально энергопотреблению. - person Pete Kirkham; 25.05.2010
comment
Вы не можете утверждать, что время выполнения обратно пропорционально потребляемой мощности. Это означает, что я мог бы написать сценарий на 10 лет и ожидать, что он будет потреблять один джоуль энергии. Я признаю предыдущую двусмысленность: как насчет энергопотребления, пропорционального количеству операций ЦП, имея в виду, что мощность, необходимая для каждой операции, обратно пропорциональна последовательной скорости, с которой выполняются указанные операции (наряду с миллионом других факторов, которые остаться не упомянутым, потому что я пытался написать общее эмпирическое правило, а не тавтологию, необходимую для защиты в суде)? :П - person Jeriko; 25.05.2010
comment
++ Я думаю, что вы и другие ответившие правы. Предположим, что большая часть кода запускается на периодической основе, поэтому цель состоит в том, чтобы провести как можно больше времени в состоянии простоя. - person Mike Dunlavey; 26.05.2010

Да. Используйте профилировщик и посмотрите, какие подпрограммы используют большую часть ЦП. В ARM вы можете использовать некоторые коннекторы JTAG, если они доступны (я использовал Lauterbach как для отладки, так и для профилирования). Основная проблема, как правило, заключается в том, чтобы перевести процессор в режиме ожидания в состояние низкого потребления (глубокий сон). Если вы не можете значительно уменьшить процент использования ЦП (например, с 80% до 50%), это не будет иметь большого значения. В зависимости от того, какие операционные системы вы используете, параметры могут различаться.

person INS    schedule 25.05.2010
comment
и я мог бы добавить: не держите периферийные устройства в открытом состоянии, если вы действительно их не используете (например, открытие Bluetooth/Wi-Fi сокращает намного время автономной работы в случае мобильных устройств. - person INS; 25.05.2010

В выпуске Communications of the ACM за июль 2010 г. есть статья об энергоэффективных алгоритмах, которая может вас заинтересовать. Я еще не читал ее, поэтому не могу поделиться ее мудростью.

person High Performance Mark    schedule 25.05.2010
comment
В целом, я был очень разочарован в указанной статье, к сожалению. - person Stephen Canon; 27.05.2010

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

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

person old_timer    schedule 26.05.2010

Если вы не используете Windows XP+ или более новую версию Linux, вы можете запустить фоновый поток, который ничего не делает, кроме HLT.

Вот как такие программы, как CPUIdle, снижают энергопотребление/нагрев.

person BlueRaja - Danny Pflughoeft    schedule 25.05.2010
comment
Это не должно быть необходимо для более новых операционных систем. - person Axel Gneiting; 25.05.2010

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

person Puppy    schedule 25.05.2010

Сведите ввод-вывод к минимуму.

person fortran    schedule 25.05.2010

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

person Junior Mayhé    schedule 25.05.2010