Апаратне забезпечення - Оцінка використання енергії процесу на ПК (x86) - Переповнення стека
Я намагаюся придумати евристику, щоб оцінити, скільки енергії (скажімо, в джоулях) процес або нитка витратили між двома часовими точками. Це на ПК (Linux/x86), а не на мобільному, тому статистика буде використана для порівняння відносної енергоефективності обчислень, які займають подібний час настінного годинника.

Ідея полягає в тому, щоб зібрати або взяти вибірку апаратних статистичних даних, таких як лічильник циклів, стани п/с або динамічна частота, доступ до шини тощо, і запропонувати розумну формулу для використання енергії між вимірами. Я запитую, чи можливо це і як може виглядати ця формула.
Деякі проблеми, які приходять на розум: 1) Правильний облік перемикання контексту на інші процеси (або потоки).
2) Правильний облік енергії, що використовується поза процесором. Якщо ми припускаємо незначне введення-виведення, це означає переважно оперативну пам'ять. Як сума розподілу та/або схема доступу впливає на споживання енергії? (Тобто, якщо припустити, що у мене є спосіб виміряти динамічне розподіл пам’яті для початку, наприклад, із модифікованим розподільником.)
3) Використання процесорного часу як оцінки обмежується грубим і часто неправильним обліком, лише використанням енергії центрального процесора, і передбачає фіксовані тактові частоти. Він включає, але погано враховує час, витрачений на очікування в оперативній пам'яті.
5 відповідей 5
Можливо, ви зможете отримати показник енергоспоживання вашого процесу, але він буде правильним лише окремо. Наприклад, якщо ви виконували два процеси паралельно, навряд чи ви зможете підібрати пряму лінію з хорошою точністю.
Це досить важко зробити на вбудованих платформах із повним проривом кожної напруги, не кажучи вже про ПК, де вашою єдиною точкою даних є потужність від розетки. Що потрібно буде виміряти та врахувати:
- Базове навантаження не таке вже й базове. Простій системи протягом багатьох секунд перебуває у стані глибшого сну, ніж той, що не працює. Ви вимірюєте "глибокий" сон або просто без діла? Як ви знаєте, що ви вимірюєте?
- Навантаження не завжди є лінійною. Змінна напруга: деякі компоненти зміщують напругу вгору/вниз залежно від навантаження та частоти. Температура: в ці дні може йти в будь-який бік (не тільки тепловий втеча).
- Блоки живлення не однаково ефективні при всіх навантаженнях. Якщо ви вимірюєте вихідну потужність, вам слід це пам’ятати. Наприклад, це може бути на 50% ефективніше нижче 100 Вт, 90% від 100-300 Вт і до 80% 300 Вт+.
- Додаткові процеси не обов'язково додаватимуть лінійно. Наприклад, коли DDR не працює, його базове навантаження збільшується, але додаткові процеси не погіршать цього. Це ще більш непередбачувано з кількома ядрами та змінними частотами.