Я пытаюсь придумать эвристику, чтобы оценить, сколько энергии (например, в Джоуле) процесс или поток потребляли между двумя временными точками. Это на ПК (Linux/x86), а не на мобильных устройствах, поэтому статистика будет использоваться для сравнения относительной энергоэффективности вычислений, которые занимают аналогичные часы настенных часов.
Идея состоит в сборе или выборке аппаратной статистики, такой как счетчик циклов, состояния p/c или динамическая частота, доступ к шине и т.д., и выработать разумную формулу для использования энергии между измерениями. Я спрашиваю, возможно ли это, и какова будет эта формула.
Некоторые проблемы, которые приходят на ум: 1) Правильно учет контекста переключается на другие процессы (или потоки).
2) Правильно учитывайте энергию, используемую вне CPU. Если мы допустим незначительный ввод-вывод, это означает, в основном, ОЗУ. Как распределение и/или шаблон доступа влияют на использование энергии? (То есть, предполагая, что у меня есть способ для измерения распределения динамической памяти, начиная с, например, с помощью модифицированного распределителя.)
3) Использование времени процессора в качестве оценки ограничивается грубым зерном и неправильным учетом, только потреблением энергии ЦП и предполагает фиксированные тактовые частоты. Он включает в себя, но не очень хорошо учитывает время, ожидаемое в ОЗУ.