Оценка энергопотребления процесса на ПК (x86) - PullRequest
19 голосов
/ 20 декабря 2010

Я пытаюсь придумать эвристику, чтобы оценить, сколько энергии (скажем, в джоулях) процесс или поток потребили между двумя временными точками. Это на ПК (Linux / x86), а не на мобильном, поэтому статистика будет использоваться для сравнения относительной энергоэффективности вычислений, которые занимают одинаковое время в настенные часы.

Идея состоит в том, чтобы собирать или отбирать статистику оборудования, такую ​​как счетчик циклов, состояния P / C или динамическая частота, доступ к шине и т. Д., И придумать разумную формулу использования энергии между измерениями. Я спрашиваю, возможно ли это, и как может выглядеть эта формула.

Некоторые проблемы, которые приходят на ум: 1) Правильный учет переключения контекста на другие процессы (или потоки).

2) Правильный учет энергии, используемой вне ЦП. Если предположить, что ввод / вывод незначителен, это означает, что в основном это ОЗУ. Как объем распределения и / или схема доступа влияют на потребление энергии? (То есть, предполагая, что у меня есть способ измерить динамическое выделение памяти для начала, например, с помощью модифицированного распределителя.)

3) Использование времени ЦП в качестве оценки ограничивается грубым и часто неправильным учетом, использованием энергии ЦП только и предполагает фиксированные тактовые частоты. Включает в себя, но не учитывает время ожидания в ОЗУ.

Ответы [ 5 ]

14 голосов
/ 09 апреля 2011

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

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

  • Базовая нагрузка не так уж низка.Системный бездействующий в течение многих секунд будет в состоянии более глубокого сна, чем тот, который не.Вы измеряете «глубокий» сон или просто бездействуете?Как узнать, что вы измеряете?
  • Нагрузка не всегда линейна.Переменное напряжение: некоторые компоненты сдвигают напряжение вверх / вниз в зависимости от нагрузки и частоты.Температура: в наши дни она может пойти в любую сторону (не только из-за теплового разгона).
  • Источники питания не одинаковы при всех нагрузках.Если вы измеряете мощность на выходе, вы должны иметь это в виду.Например, эффективность может быть на 50% ниже 100 Вт, на 90% - от 100 до 300 Вт и до 80% - на 300 Вт +.
  • Дополнительные процессы не обязательно будут линейно добавлять.Например, когда DDR выходит из режима ожидания, его базовая нагрузка увеличивается, но дополнительные процессы не ухудшат ситуацию.Это еще более непредсказуемо с несколькими ядрами и переменными частотами.

Основной способ измерения - это очевидный способ: записать количество ватт в режиме ожидания, записать количество используемых ватт, вычесть.Вы можете попробовать запустить с рабочим циклом 50%, 25%, 75% и т. Д., Чтобы нарисовать симпатичный график (линейный или другой).Это покажет любую нелинейность.К сожалению, эффективность преобразования в зависимости от нагрузки для регулятора ЦП и блока питания будет основной причиной.Вы ничего не можете сделать, чтобы устранить это, не имея развивающей версии материнской платы, с которой вы играете (маловероятно), или если вам повезло иметь блок питания с графиком эффективности в зависимости от нагрузки.

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

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

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

Вы получите ощутимые различия в мощности для тяжелых пользователей CPU, DDR и GPU. Вы могли бы заметить разницу между алгоритмами с ограничением L1 по сравнению с L2 по сравнению с DDR (DDR использует гораздо больше мощности), если вы заметили, что алгоритмы с ограничением по L1 / L2 работают быстрее - вам необходимо энергия, используемая на «задание», не непрерывная мощность. Вы, вероятно, не заметите доступа к жесткому диску (на самом деле это всего лишь один или два ватта и потеряны в шуме на ПК), кроме снижения производительности. Одна дополнительная точка данных, которую стоит записать, - насколько увеличивается «базовая» нагрузка, если у вас есть задача, которая просыпается каждые 100 мс или около того, используя 1% ЦП. Вот в основном то, на что похож не-глубокий сон. (Это взлом, а 100 мс - предположение)

Помните, что 1% может отличаться от 1% в другое время, если у вас есть процессор с включенными политиками изменения частоты.

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

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

7 голосов
/ 08 апреля 2011

Это тема текущих исследований.Так что не ожидайте никаких определенных ответов.Некоторые публикации, которые могут вас заинтересовать, например:

  • Чанлинг Ху, Даниэль А. Хименес и Ульрих Кремер, Характеристика поведения эффективной программы * , Труды Международного 2007 годаКонференция по высокопроизводительным встроенным архитектурам и компиляторам (HiPEAC-2007), с. 183-197, январь 2007 г. ( pdf )

  • Адам Льюис, Соумик Гоши Н.-Ф.Ценг, Оценка потребления энергии во время выполнения на основе рабочей нагрузки в серверных системах , USENIX 2008, Семинар по энергоэффективным вычислениям и системам ( html pdf )

Но вы можете легко найти гораздо больше, используя Google Scholar и Citeseer .

4 голосов
/ 20 декабря 2010

В Linux попробуйте утилиту PowerTOP . Однако вместо вычисления абсолютных значений в джоулях основное внимание уделяется относительному энергопотреблению между различными компонентами системы.

2 голосов
/ 20 декабря 2010

Intel Рекомендации по энергоэффективному программному обеспечению содержит множество полезной информации, включая ссылку на собственный Application Energy Toolkit. , который включает ...

2) Инструмент для отображения энергии приложений

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

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

1 голос
/ 24 февраля 2018

AMD uProf - обеспечивает для каждой ОС процесс с абсолютной энергией (мДж) для каждого процесса.

Инструмент оценки мощности платформы Intel (IPPET) - прототип с абсолютнойединиц энергии (мВт / ч) на процесс.

Intel SocWatch (входит в состав Intel System Studio) - имеет множество низкоуровневых показателей, но без единиц абсолютной энергии (мВтч / мДж) на процесс.

...