Измерение времени процессора в переполнении стека

Если бы у меня был следующий код

clock_t t;
t = clock();
//algorithm
t = clock() - t;

t будет равно числу тактов для запуска программы. Это то же самое время процессора? Есть ли другие способы измерения времени процессора в C ++?

ОС — Debian GNU / Linux
Я открыт для всего, что будет работать. Я хочу сравнить процессорное время двух алгоритмов.

5

Решение

clock() указано для измерения времени процессора, однако не все реализации делают это. В частности, реализация Microsoft в VS не учитывает дополнительное время, когда запущено несколько потоков, или меньше, когда потоки программы спят / ждут.

Также обратите внимание, что clock() следует измерять время ЦП, используемое всей программой, поэтому время ЦП, используемое несколькими потоками в //algorithm будут измерены другие темы, которые не являются частью //algorithm также учитываются.

clock() это единственный метод, определенный в стандарте для измерения времени процессора, однако существуют и другие, специфичные для платформы, методы измерения времени процессора.

std::chrono не включает часы для измерения времени процессора. Он имеет только часы, синхронизированные с системным временем, часы с постоянной скоростью относительно реального времени и часы с «высоким разрешением», которые не обязательно измеряют время ЦП.

10

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

Как измерить время процессора?

#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";

Источник : http://en.cppreference.com/w/cpp/chrono/c/clock

0

C ++ имеет хронографическую библиотеку. Увидеть http://en.cppreference.com/w/cpp/chrono. Существуют также часто зависящие от платформы способы получения таймеров с высоким разрешением (очевидно, зависит от платформы).

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