Подтвердить что ты не робот

Кодирование мощного программного обеспечения

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

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

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

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

4b9b3361

Ответ 1

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

И прочитайте еще один guidelines.;)

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

Ответ 2

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

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

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

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

Не доверяйте фреймворкам графического интерфейса, которые вы не проверяли для типа "сон и вращение". Особенно для таймера событий вы можете искусить использовать для # 2.

Заблокируйте поток при чтении вместо опроса с помощью select()/epoll()/WaitForMultipleObjects(). Надевает стресс на скручиватель резьбы (и ваш мозг), но устройства, как правило, все в порядке. Это в конечном итоге немного изменило ваш дизайн на высоком уровне; он становится более аккуратным!. Основной цикл, который проверяет все то, что вам нужно, заканчивается медленным и расточительным по процессору, но гарантирует производительность. (Гарантированный быть медленным)

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

Чтобы избежать опроса, это хорошее предложение.

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

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

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

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

Ответ 13

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

Ответ 14

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

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

Ответ 15

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

Понимание размера кеша и функциональных блоков вашего процессора.

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

и др.

Ответ 16

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

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

Ответ 17

Не проводите опрос, сон

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

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