тонкая гранулярность наноспит не энергоэффективна в программе c ++ на Linux

Я пытаюсь периодически вызывать функцию выборки в потоке C ++ на моем компьютере с Linux. Я хотел бы перезапустить свою функцию через очень короткий период, в идеале 1 мсек, но я обнаружил, что мощность (в ваттах), потребляемая в течение 1 мсек, непомерно высока: система работает с удвоенным уровнем мощности, как при период 5 мсек. Сохранение низкого энергопотребления — главная забота о функциональности, которую я хочу.

В частности,

void* loop_and_sample(void* arg) {
while(1) {
sample();
nanosleep((struct timespec[]){{0,1000000}}, NULL);
}
}

Принимает в 2 раза больше силы:

void* loop_and_sample(void* arg) {
while(1) {
sample();
nanosleep((struct timespec[]){{0,5000000}}, NULL);
}
}

Я определил, что разница в потребляемой мощности моего сэмплера на 2 частотах незначительна, и что дополнительное энергопотребление происходит из режима ожидания. То есть, даже если я закомментирую строку sample () в обоих фрагментах выше, вторая все равно отнимает половину мощности. Какие-нибудь идеи относительно того, как я мог бы уменьшить мощность, потребляемую в режиме ожидания?

К вашему сведению, я использую Ubuntu 3.2.0 на 24-ядерном Intel Xeon, и поиск частоты в моем / boot / config показывает следующее:

cat /boot/config-3.2.0-48-generic | egrep 'HZ'
CONFIG_RCU_FAST_NO_HZ=y
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_MACHZ_WDT=m

Однако, запустив этот скрипт: http://www.advenage.com/topics/linux-timer-interrupt-frequency.php, Я обнаружил, что мое прерывание по таймеру ядра составляет по крайней мере 4016 Гц (что в 4 раза больше частоты, на которой я хотел бы сэмплировать). Спасибо за вашу помощь!

4

Решение

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]