Если бы у меня был следующий код
clock_t t;
t = clock();
//algorithm
t = clock() - t;
t будет равно числу тактов для запуска программы. Это то же самое время процессора? Есть ли другие способы измерения времени процессора в C ++?
ОС — Debian GNU / Linux
Я открыт для всего, что будет работать. Я хочу сравнить процессорное время двух алгоритмов.
clock()
указано для измерения времени процессора, однако не все реализации делают это. В частности, реализация Microsoft в VS не учитывает дополнительное время, когда запущено несколько потоков, или меньше, когда потоки программы спят / ждут.
Также обратите внимание, что clock()
следует измерять время ЦП, используемое всей программой, поэтому время ЦП, используемое несколькими потоками в //algorithm
будут измерены другие темы, которые не являются частью //algorithm
также учитываются.
clock()
это единственный метод, определенный в стандарте для измерения времени процессора, однако существуют и другие, специфичные для платформы, методы измерения времени процессора.
std::chrono
не включает часы для измерения времени процессора. Он имеет только часы, синхронизированные с системным временем, часы с постоянной скоростью относительно реального времени и часы с «высоким разрешением», которые не обязательно измеряют время ЦП.
Как измерить время процессора?
#include <ctime>
std::clock_t c_start = std::clock();
// your_algorithm
std::clock_t c_end = std::clock();
long_double time_elapsed_ms = 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC;
std::cout << "CPU time used: " << time_elapsed_ms << " ms\n";
Конечно, если вы отображаете время в секундах:
std::cout << "CPU time used: " << time_elapsed_ms / 1000.0 << " s\n";
C ++ имеет хронографическую библиотеку. Увидеть http://en.cppreference.com/w/cpp/chrono. Существуют также часто зависящие от платформы способы получения таймеров с высоким разрешением (очевидно, зависит от платформы).