измерение производительности в режиме реального времени или времени процессора - PullRequest
3 голосов
/ 04 июня 2019

Я пытаюсь выполнить некоторые измерения производительности в c ++, измеряя реальное время в миллисекундах по сравнению с временем процессора в миллисекундах.Вот как выглядит мой код:

auto start = std::chrono::high_resolution_clock::now();
unsigned begin = clock();

// some computationally expensive task

auto finish = std::chrono::high_resolution_clock::now();
unsigned end = clock();

(finish - start).count();

int duration = std::chrono::duration_cast<std::chrono::milliseconds>(finish - start).count();
int cpu_duration = 1000*(end - begin)/(CLOCKS_PER_SEC);

Теперь я ожидаю, что значение времени процессора будет меньше системного времени, потому что поток может быть прерван.Однако время процессора в 2-3 раза больше, чем в реальном времени.Я делаю что-то не так или я неправильно понимаю концепцию времени процессора?

1 Ответ

4 голосов
/ 04 июня 2019

В двух словах:

  • в режиме реального времени: время, измеренное с помощью обычных часов на вашей стене
  • CPU-time: общее время, в течение которого центральный процессор (ы) был / былbusy

Если у вас более одного процессора, их время складывается, например, в 1 секунду в режиме реального времени вы можете использовать время процессора 4 секунды.

Документация cppreference наstd::clock явно различает настенные часы и время процессора:

[...] если ЦП используется другими процессами, время std :: clock может увеличиваться медленнее, чемнастенные часы.С другой стороны, если текущий процесс является многопоточным и доступно более одного исполнительного ядра, std :: clock time может продвигаться быстрее, чем настенные часы.

Дополнительные сведения см., Например, здесь.

...