Вопрос

С clock() функция просто возвращает мне ноль.Я пробовал использовать разные типы, но без каких-либо улучшений...Хороший ли это способ измерить время с хорошей точностью?

#include <time.h>
#include <stdio.h>

int main()
{
    clock_t start, end;
    double cpu_time_used;

    char s[32];

    start = clock();

    printf("\nSleeping 3 seconds...\n\n");
    sleep(3);

    end = clock();

    cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);

    printf("start = %.20f\nend   = %.20f\n", start, end);
    printf("delta = %.20f\n", ((double) (end - start)));
    printf("cpu_time_used  = %.15f\n", cpu_time_used);
    printf("CLOCKS_PER_SEC = %i\n\n", CLOCKS_PER_SEC);

    return 0;
}
Sleeping 3 seconds...

start = 0.00000000000000000000
end   = 0.00000000000000000000
delta = 0.00000000000000000000
cpu_time_used  = 0.000000000000000
CLOCKS_PER_SEC = 1000000

Платформа:32-разрядный процессор Intel, RedHat Linux, gcc 3.4.6

Это было полезно?

Решение

clock() сообщает об использованном процессорном времени. sleep() не использует никакого процессорного времени.Так что ваш результат, вероятно, совершенно правильный, просто не тот, который вы хотите.

Другие советы

man clock.Это не возвращение того, что вы думаете, что это такое.Также man gettimeofday - скорее всего, это то, чего ты хочешь.

clock_t - это целочисленный тип.Вы не можете распечатать его с помощью %f .Видишь Ответ Фреда для того, почему разница равна 0.

 printf("start = %.20f\nend   = %.20f\n", start, end);

должно быть:

 printf("start = %d\nend   = %d\n", start, end);

Зовущий sleep() не собирается расходовать никакого процессорного времени.Вы должны увидеть маленький разница, однако.Я исправил вашу ошибку несоответствия типа printf в этой строке:

printf("start = %.20f\nend   = %.20f\n", start, end);

И это дало разумные результаты на моей машине:

start = 1419
end   = 1485
delta = 66
cpu_time_used  = 0.000066000000000
CLOCKS_PER_SEC = 1000000

Вы могли бы попробовать gettimeofday() чтобы получить реальное время, затраченное на запуск вашей программы.

Вам, вероятно, нужно

double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } и использовать что-то вроде

double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); for(long int i = 0; i<=10000000;i++){ func1(); } double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); cout << "Wall Time = " << wall1 - wall0 << endl; cout << "CPU Time = " << cpu1 - cpu0 << endl;

вместо того , чтобы clock()

только как часы и только подсчитывает время, проведенное в процессоре, только на основе счетчиков производительности.но вы можете получить результат, используя приведенную выше функцию.просто чтобы проверить ваше приложение, запустите его с помощью команды time

Нравится time ./a.out

вывод команды time (время) :

real 0m5.987s user 0m0.674s sys 0m0.134s

и вывод пользовательской функции Wall Time = 5.98505 CPU Time = 0.8

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