Возможно, вам удастся получить показатель энергопотребления вашего процесса, но он будет корректным только в отдельности.Например, если вы запустили два процесса параллельно, вам вряд ли удастся установить прямую линию с хорошей точностью.
Это достаточно сложно сделать на встроенных платформах с полным разрывом каждой шины напряжения,не говоря уже о ПК, где одна точка данных - это мощность от розетки.Вещи, которые вы должны измерить и иметь в виду:
- Базовая нагрузка не так уж низка.Системный бездействующий в течение многих секунд будет в состоянии более глубокого сна, чем тот, который не.Вы измеряете «глубокий» сон или просто бездействуете?Как узнать, что вы измеряете?
- Нагрузка не всегда линейна.Переменное напряжение: некоторые компоненты сдвигают напряжение вверх / вниз в зависимости от нагрузки и частоты.Температура: в наши дни она может пойти в любую сторону (не только из-за теплового разгона).
- Источники питания не одинаковы при всех нагрузках.Если вы измеряете мощность на выходе, вы должны иметь это в виду.Например, эффективность может быть на 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.
На встроенных платформах с текущим мониторингом на многих рельсах я проводил измерения вплоть до наноджоуля за инструкцию. По-прежнему сложно учитывать потребление энергии потоком / процессом, потому что существует большая нагрузка, которая распределяется между многими задачами, и она может увеличиваться / уменьшаться за пределами своего временного интервала. На ПК я не уверен, что вам удастся получить такие мелкие детали:)