Питание эффективное кодирование программного обеспечения

42
задан Pascal Thivent 29 August 2010 в 08:30
поделиться

15 ответов

  • Как 1800 INFORMATION сказал, постарайтесь не опрашивать; подпишитесь на события и ожидайте их для случая
  • содержание окна Update только, когда необходимый - позволяют системе решить, когда перерисовать его
  • При обновлении содержания окна, удостовериться, что код воссоздает как можно меньше недопустимого региона
  • С быстрым кодом, ЦП возвращается к режиму глубокого сна быстрее и существует лучший шанс, что такой код остается в кэше L1
  • , Воздействуют на маленькие данные когда-то, таким образом, данные остаются в кэшах также
  • , Гарантируют, что приложение не делает никакого ненужного действия, когда в фоне
  • Делают программное обеспечение не, только эффективное питание, но также и знающее питание - обновляют графику менее часто, когда на батарее, отключите анимации, меньше жесткого диска, перегружающегося

, И считайте некоторый другой инструкции .;)

Недавно ряд сообщений, названных "Приложения оптимизации для Питания" , запущенный появиться на Блогах Intel Software. Может быть несколько полезным для x86 разработчиков.

22
ответ дан macbirdie 26 November 2019 в 23:57
поделиться

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

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

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

0
ответ дан Lorenzo Boccaccia 26 November 2019 в 23:57
поделиться

Ну, до такой степени, что Ваш код может выполниться полностью в кэше процессора, Вы будете иметь меньше действия шины и сэкономите электроэнергию. До такой степени, что Ваша программа является достаточно маленькой для установки code+data полностью в кэше, Вы извлекаете ту пользу "бесплатно". OTOH, если Ваша программа является слишком большой, и можно разделить программы на модули, которые более или менее независимы от другого, Вы могли бы получить некоторую экономию электроэнергии путем деления его на отдельные программы. (Я предполагаю, что также возможно сделать набор инструментальных средств, что веселье связало пакеты кода и данных в блоки размера кэша...)

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

Transmeta имел идею позволить машине сделать некоторую оптимизацию инструкции на лету для экономии электроэнергии... Но это, казалось, не помогло достаточно... И взгляд, где это получило их.

1
ответ дан Toybuilder 26 November 2019 в 23:57
поделиться

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

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

1
ответ дан itj 26 November 2019 в 23:57
поделиться

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

1
ответ дан Ned 26 November 2019 в 23:57
поделиться

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

1
ответ дан Omer van Kloeten 26 November 2019 в 23:57
поделиться

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

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

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

5
ответ дан Garry Shutler 26 November 2019 в 23:57
поделиться

Не опрашивать. Используйте события и другие примитивы ОС для ожидания подлежащих регистрации случаев. Опрос гарантирует, что ЦП будет оставаться активен и использовать больше ресурса аккумулятора.

5
ответ дан 1800 INFORMATION 26 November 2019 в 23:57
поделиться

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

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

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

, В-третьих, если необходимо опросить или выполнить пользовательские операции уверенности как обновление UI, спать, сделать это и возвратиться ко сну.

не доверяют платформам GUI, что Вы не проверили на "сон и вращение" вид кода. Особенно таймер события, который можно испытать желание использовать для № 2.

, Блокирует поток на чтении вместо того, чтобы опросить с выбором ()/epoll () / WaitForMultipleObjects (). Помещает напряжение на поток scheuler (и Ваш мозг), но устройства обычно делают хорошо. Это заканчивает тем, что изменило Ваш высокоуровневый дизайн немного; это становится более опрятным!. Основной цикл, который опрашивает все вещи, которые Вы Могли бы сделать, заканчивается медленный и расточительный на ЦП, но действительно гарантирует производительность. (Гарантируемый быть медленными)

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

для Попытки получить больше памяти, чем Вы нужно, тогда можно вставить больше чем в одну хеш-таблицу и сохранить когда-либо поиск. Это - прямой компромисс, если память является DRAM.

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

9
ответ дан Tim Williscroft 26 November 2019 в 23:57
поделиться

Проще говоря, сделайте как можно меньше.

1
ответ дан Brian Knoblauch 26 November 2019 в 23:57
поделиться

Хороший совет - избегать опроса.

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

3
ответ дан 26 November 2019 в 23:57
поделиться

Установите для неиспользуемой памяти или флэш-памяти значение 0xFF, а не 0x00. Это, безусловно, верно для флэш-памяти и eeprom, но не уверен в s или d ram. Для выпускных баллов есть инверсия, поэтому 0 сохраняется как 1 и требует больше энергии, 1 сохраняется как ноль и требует меньше. Вот почему вы читаете 0xFF после стирания блока.

1
ответ дан 26 November 2019 в 23:57
поделиться

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

0
ответ дан 26 November 2019 в 23:57
поделиться

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

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

0
ответ дан 26 November 2019 в 23:57
поделиться

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

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

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

и т. д.

0
ответ дан 26 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: