Как мне рассчитать время для программы C?

StackOverflow https://stackoverflow.com/questions/1210255

  •  06-07-2019
  •  | 
  •  

Вопрос

Просмотрел старые темы, но не нашел ответа на свой вопрос:

Как я могу синхронизировать тело моей функции внутри программы на 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, но обычной практикой является сохранение метки времени в микросекундах до начала тела, затем захватывание другой в конце и вычитание.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top