Существуют ли какие-либо методы оптимизации кода для обеспечения меньшего энергопотребления. Архитектура - ARM. Язык - C
Можем ли мы оптимизировать код для снижения энергопотребления?
Ответы (9)
С справочного сайта ARM:
К особенностям процессора ARM11 MPCore, повышающим энергоэффективность, относятся:
- точное прогнозирование возврата ветвления и подпрограммы, уменьшая количество неправильных операций выборки и декодирования инструкций
- использование кэшей с физической адресацией, что снижает количество очисток и заправок кэша, экономя энергию в системе
- использование MicroTLB снижает мощность, потребляемую при переводе и поиске защиты в каждом цикле.
- кэши используют информацию о последовательном доступе, чтобы уменьшить количество обращений к ОЗУ тегов и к ОЗУ нежелательных данных.
В процессоре ARM11 MPCore также широко используются стробируемые часы и вентили для отключения входов в неиспользуемые функциональные блоки. Только логика, активно используемая для выполнения вычислений, потребляет какую-либо динамическую мощность.
Основываясь на этой информации, я бы сказал, что процессор выполняет большую часть работы по экономии энергии. Любая потеря мощности будет происходить из-за плохо написанного кода, который выполняет больше обработки, чем необходимо, чего вы в любом случае не хотели бы. Если вы хотите сэкономить электроэнергию, общий дизайн вашего приложения будет иметь больший эффект. Доступ к сети, рендеринг экрана и другие энергоемкие операции будут иметь большее значение для энергопотребления.
Оптимизация кода для использования меньшего количества энергии — это, по сути, просто оптимизация кода. Независимо от того, являются ли ваши мотивы денежными, социальными, политическими или подобными, меньше циклов процессора = меньше энергии. Я пытаюсь сказать, что вы, вероятно, можете заменить «энергопотребление» на «время выполнения», поскольку они, по сути, будут прямо пропорциональны, и поэтому вы можете добиться большего успеха, если не «отпугиваете» людей с помощью вопрос связанный с питанием. Впрочем, могу поправиться :)
Да. Используйте профилировщик и посмотрите, какие подпрограммы используют большую часть ЦП. В ARM вы можете использовать некоторые коннекторы JTAG, если они доступны (я использовал Lauterbach как для отладки, так и для профилирования). Основная проблема, как правило, заключается в том, чтобы перевести процессор в режиме ожидания в состояние низкого потребления (глубокий сон). Если вы не можете значительно уменьшить процент использования ЦП (например, с 80% до 50%), это не будет иметь большого значения. В зависимости от того, какие операционные системы вы используете, параметры могут различаться.
В выпуске Communications of the ACM за июль 2010 г. есть статья об энергоэффективных алгоритмах, которая может вас заинтересовать. Я еще не читал ее, поэтому не могу поделиться ее мудростью.
Старайтесь оставаться в оперативной памяти (кеше) для циклов бездействия, сведите к минимуму ввод-вывод, сведите к минимуму переключение битов на шинах. Память энергонезависимой памяти, такая как выпускные и флэш-память, потребляет больше энергии для хранения нулей, чем единиц (поэтому они стираются до единиц, на самом деле это ноль, но переходники инвертируют бит до того, как вы его увидите, нули сохраняются как единицы, единицы хранятся как нули, поэтому они деградируют до единиц, когда выходят из строя), я не знаю о энергозависимой памяти, dram использует вдвое меньше транзисторов, чем sram, но ее нужно обновлять.
Чтобы все это имело значение, вам нужно начать с системы с более низким энергопотреблением, поскольку вышеуказанное может быть незаметно. например, не используйте ничего от Intel.
Если вы не используете Windows XP+ или более новую версию Linux, вы можете запустить фоновый поток, который ничего не делает, кроме HLT.
Вот как такие программы, как CPUIdle, снижают энергопотребление/нагрев.
Если процессор настроен на использование меньшего количества энергии, когда ему требуется меньше циклов, то решением будет просто сделать ваш код более эффективным. В противном случае вы мало что можете сделать, если операционная система не предоставляет какие-либо функции управления питанием.
Сведите ввод-вывод к минимуму.
На некоторых процессорах ARM можно снизить энергопотребление, переведя регулятор напряжения в режим ожидания.
//
. :) - person SLaks   schedule 25.05.2010#include "gogreen.h"
. - person corsiKa   schedule 25.05.2010