Могут ли приложения существенно влиять на энергопотребление?

16

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

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

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

Хуан Мануэль
источник
8
Заставьте это работать более эффективно.
Кристофер Берман
Я не говорю, что ваш вопрос совершенно не по теме, но я думаю, что книга будет более подходящей, чем ответ на сайте вопросов и ответов. Вы должны предоставить хотя бы некоторый контекст, например, встроенные системы, мобильную разработку или что-то еще целиком. Любой ответ должен сильно зависеть от этого.
К.Стефф
2
Вы говорите о встроенных системах с батарейным питанием? В общем, ключом к минимизации энергопотребления является определение времени, когда системе действительно не нужно будет делать много, и минимизация времени, в течение которого любая часть системы будет активна, когда на самом деле ничего для нее не нужно сделать. В большинстве случаев будет достаточно четкое ограничение того, сколько усилий стоит; если устройство будет использовать 1 мАч / день на необходимые функции, простая процедура, которая тратит 10 мАч / день, может быть предпочтительнее сложной, которая тратит всего 1 мАч / день (поскольку последняя экономит только 1% энергии).
суперкат
1
Я думал о чем-то общем, а не о конкретном контексте. Это был вопрос «просто ради любопытства». Но, например, есть ли какое-либо правило для энергосбережения на мобильных устройствах? или встраиваемые системы? или по разработке веб-приложений? Может быть задержка доступа к диску и сети или тому подобное.
Хуан Мануэль
1
Я подозреваю, что вы упускаете суть. Если вы измените приложение на использование радиоприемника вдвое меньше, вы увидите, что энергопотребление при его запуске отключится. Радио на телефоне не потребляет энергию с постоянной скоростью. Поток энергии напрямую зависит от того, что программа запрашивает.
Gort the Robot

Ответы:

7

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

Он слишком сложен, чтобы упростить его, сказав «Сделайте свои алгоритмы более эффективными» - это только первый шаг. Кривая производительности / мощности и, в частности, «воспринимаемая производительность» / кривая мощности являются нелинейными. Это зависит от того, есть ли у вас контроль и на каком уровне используется ОС.

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

mattnz
источник
это действительно правильный ответ, аппаратное обеспечение играет гораздо более эффективную роль в энергопотреблении, чем программное обеспечение. Пример более эффективного блока питания делает ВСЕ устройства и затмевает микрооптимизацию отдельных приложений, делая их незначительный вклад.
Да, но программа не использует все оборудование на устройстве одинаково. Например, программа, которая никогда не использует жесткий диск на ПК, будет потреблять значительно меньше энергии, чем программа, которая постоянно читает и записывает на жесткий диск.
Gort Робот
@ StevenBurnap, который не имеет значения в зависимости от HD, некоторые HD вращаются и тянут сок все время. Наиболее значительная оптимизация питания всегда будет исходить от аппаратного обеспечения (и микрокода в них). То же программное обеспечение с Green HD будет потреблять меньше энергии, поэтому аппаратное обеспечение по-прежнему играет большую роль.
2
Это неправда. Подключите Kill-a-watt к вашей системе и запустите два приложения: первое, которое просто добавляет числа в бесконечном цикле, и другое, которое повторно сканирует файл объемом 5 ГБ. Вы увидите разницу. Потребление энергии на компьютере определенно будет меняться, иногда резко, в зависимости от того, что от него требуется.
Gort the Robot
Вот пример, который показывает изменение энергопотребления ПК в зависимости от того, какое программное обеспечение работает: codinghorror.com/blog/2005/08/…
Gort the Robot
2

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

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

user827992
источник
Это правильный ответ. Оптимизация - это единственный способ.
СуперМ
1
Как это правильный ответ? В системе гораздо больше радиаторов, чем в процессоре.
Джеймс
1
@ Джеймс, ваше программное обеспечение использует только процессор? ничего больше?
user827992
3
@ user827992: Нет, в этом все дело. Такие вещи, как радио (GSM / 3G / Wifi) и экран потребляют гораздо больше энергии, чем процессор. Оптимизация ваших алгоритмов здесь вам не поможет. Я бы даже сказал, что в системе, где энергопотребление является проблемой, оптимизация вашего кода является преждевременной оптимизацией.
Джеймс
1
@ user827992: Да, но эта экономия незначительна по сравнению с другими источниками потребления батареи. Вы можете оптимизировать до -OInfinity так, как вам нравится, но если, например, ваш код опрашивает какой-то флаг, то вы мертвы.
Джеймс
2

Правильный ответ ....

"We should forget about small efficiencies, 
say about 97% of the time: premature 
optimization is the root of all evil"
Donald Knuth

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

Тогда, если вам нужно больше «мощности», вы можете профилировать свое приложение. С помощью профилирования вы сможете определить узкие места, которые при изменении принесут наибольшую выгоду и повысят эффективность.

Михал Франк
источник
4
Я бы сказал, что это не отвечает на этот вопрос, поскольку вы говорите: «Потребление энергии - это не ваша проблема; сосредоточьтесь на ценности для клиентов». И это звучит очень похоже на мантру управления. ОП может иметь серьезные основания для снижения энергопотребления.
К.Стефф
Ну, я неправильно понял "энергопотребление". Тем не менее, я думаю, что он должен установить уровень энергопотребления, который при достижении оптимизации должен выполняться путем анализа частей системы, которые потребляют слишком много энергии. Это может быть выполнено серией стресс-тестов.
Михал Франк
1

Хотя это правда, что с точки зрения ЦП ничего не нужно делать, часто есть особенности устройства, которые потребляют энергию при использовании. На ПК, в основном, это никого не волнует, но, безусловно, верно, что чтение с диска (при условии, что диски не SSD) приводят к вращению жесткого диска и движению головки, что потребляет немного энергии. На ПК это тривиально, но на мобильном устройстве это может быть очень реальной проблемой.

На телефоне наиболее очевидным примером этого является связь. Отправка беспроводного сигнала требует энергии. На ПК, подключенном к источнику питания на 500 Вт, это несущественно. На телефоне это не так. Приложение, которое постоянно опрашивает сервер на наличие больших объемов данных, потребляет значительно больше энергии, чем приложение, которое вообще не использует сеть.

Это очень реальная проблема, просто Google для "Android-приложения разряжена моя батарея". Вот одна из многих страниц, рассказывающих разработчикам, как минимизировать энергопотребление.

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

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

Горт Робот
источник