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

Оценка использования энергии процесса на ПК (x86)

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Изменить. Развернуть немного, как указано выше, на самом деле не отвечает, как вы можете это сделать.

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

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

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

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

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

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

Ответ 2

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

  • Chunling Hu, Daniel A. Jiménez и Ulrich Kremer, характеристика поведения сильной управляющей мощности, материалы Международной конференции 2007 года по высокопроизводительным встроенным архитектурам и составителям (HiPEAC-2007), стр. 183-197, январь 2007. (pdf)

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

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

Ответ 3

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

Ответ 4

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

2) Инструмент графического применения энергии приложения

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

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