Я использовал clock()
, чтобы получить процессорное время моих алгоритмов. Тем не менее, это, кажется, не работает больше. У меня есть виртуальная машина Windows 10 с 8 процессорами, что также видно на мониторе ресурсов.
Теперь я измеряю время следующим образом:
auto startTime = std::chrono::high_resolution_clock::now();
auto startClocks = std::clock();
// some code with TBB that uses multiple threads
auto endTime = std::chrono::high_resolution_clock::now();
auto endClocks = std::clock();
auto duration = endTime - startTime;
auto clockDuration = endClocks - startClocks;
auto durationSeconds = static_cast<double>(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count()) / 1000.;
auto durationCpuSeconds = 1. * clockDuration / CLOCKS_PER_SEC;
Часть TBB, безусловно, работает, как я вижу в мониторе ресурсов Windows, что все процессоры работают со 100%. Если я начну бесконечный цикл без распараллеливания, загрузка процессора составит всего 12,5%, как и ожидалось.
Однако durationSeconds
и durationCpuSeconds
абсолютно одинаковы ...
Я измерил время своими часами, и в результате получилось время на стене. Таким образом, clock()
явно не показывает процессорного времени, которое должно быть существенно выше, если 8 процессоров работают на 100% параллельно. clock()
ненадежен или я что-то здесь упускаю?