Как мне рассчитать время для программы C?
Вопрос
Просмотрел старые темы, но не нашел ответа на свой вопрос:
Как я могу синхронизировать тело моей функции внутри программы на C?
Решение
Простой метод - использовать функцию 'clock':
#include <time.h>
clock_t start, end;
double cpu_time_used;
start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
Или, если вы работаете в linux, вы можете использовать команду time для определения времени выполнения вашего приложения; это не позволяет вам определить время для конкретного раздела кода и включает время, затрачиваемое на запуск процесса и т. д.
time ./myapp
Редактировать: это очень простой подход "взломай быстрый таймер". Для истинного профилирования производительности вы хотите взглянуть на правильный профилировщик, как предложил Ларри Ватанабе.
Другие советы
Это зависит от вашего компилятора и ОС. На рабочих станциях Sun я использовал " prof " или "gprof". Для вашего компилятора, ОС и компьютера наверняка найдется инструмент для профилирования - просто google " C профиль yourOS your compiler " (подставьте название вашей ОС и вашего компилятора)
Основной метод — использование функции clock(), с этого мы все и начали.
Бывший.:
clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
Однако когда вы начинаете изучать операционные системы, аппаратное обеспечение, планировщики, многопоточность и т. д.Вы поняли, что время выполнения — это что-то очень субъективное.Если вы хотите измерить производительность (что не обязательно означает время выполнения), вам нужны более надежные инструменты.
Гпроф — это действительно простой в использовании профилировщик C, который поможет вам лучше понять концепцию производительности.
time ./a.out
превысит единицу, и результат будет:
real 0m0.017s
user 0m0.017s
sys 0m0.000s
real
: общее время окончания программы / команды
user
: время, затрачиваемое в режиме пользователя.
sys
: время, необходимое в режиме ядра
Не уверен насчет конкретных имен функций в C, но обычной практикой является сохранение метки времени в микросекундах до начала тела, затем захватывание другой в конце и вычитание.