Время выполнения C программы - PullRequest
186 голосов
/ 09 марта 2011

У меня есть программа на C, которая предназначена для параллельной работы на нескольких процессорах. Мне нужно иметь возможность записывать время выполнения (которое может быть от 1 секунды до нескольких минут). Я искал ответы, но все они, кажется, предлагают использовать функцию clock(), которая затем включает в себя подсчет количества тактов, которые программа взяла, деленного на значение Clocks_per_second.

Я не уверен, как рассчитывается значение Clocks_per_second?

В Java я просто беру текущее время в миллисекундах до и после выполнения.

Есть ли подобное в C? Я посмотрел, но я не могу найти способ получить что-то лучше, чем второе разрешение.

Я также знаю, что в качестве опции можно использовать профилировщик, но я сам собираюсь реализовать таймер.

Спасибо

Ответы [ 14 ]

2 голосов
/ 03 сентября 2017
    #include<time.h>
    #include<stdio.h>
    int main(){
clock_t begin=clock();

    int i;
for(i=0;i<100000;i++){
printf("%d",i);

}
clock_t end=clock();
printf("Time taken:%lf",(double)(end-begin)/CLOCKS_PER_SEC);
}

Эта программа будет работать как шарм.

2 голосов
/ 23 января 2014

Каждое решение не работает в моей системе.

Я могу использовать

#include <time.h>

double difftime(time_t time1, time_t time0);
0 голосов
/ 05 апреля 2019

Некоторые могут найти полезными другие виды ввода: мне дали этот метод измерения времени в рамках университетского курса по программированию GPGPU с NVidia CUDA ( описание курса ).Он сочетает в себе методы, описанные в предыдущих публикациях, и я просто публикую его, потому что требования придают ему достоверность:

unsigned long int elapsed;
struct timeval t_start, t_end, t_diff;
gettimeofday(&t_start, NULL);

// perform computations ...

gettimeofday(&t_end, NULL);
timeval_subtract(&t_diff, &t_end, &t_start);
elapsed = (t_diff.tv_sec*1e6 + t_diff.tv_usec);
printf("GPU version runs in: %lu microsecs\n", elapsed);

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

0 голосов
/ 01 января 2015

Сравнение времени выполнения сортировки пузырьков и выбора сортировки У меня есть программа, которая сравнивает время выполнения сортировки пузырьков и выбора. Чтобы узнать время выполнения блока кода, рассчитайте время до и после блока по

 clock_t start=clock();
 …
 clock_t end=clock();
 CLOCKS_PER_SEC is constant in time.h library

Пример кода:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
   int a[10000],i,j,min,temp;
   for(i=0;i<10000;i++)
   {
      a[i]=rand()%10000;
   }
   //The bubble Sort
   clock_t start,end;
   start=clock();
   for(i=0;i<10000;i++)
   {
     for(j=i+1;j<10000;j++)
     {
       if(a[i]>a[j])
       {
         int temp=a[i];
         a[i]=a[j];
         a[j]=temp;
       }
     }
   }
   end=clock();
   double extime=(double) (end-start)/CLOCKS_PER_SEC;
   printf("\n\tExecution time for the bubble sort is %f seconds\n ",extime);

   for(i=0;i<10000;i++)
   {
     a[i]=rand()%10000;
   }
   clock_t start1,end1;
   start1=clock();
   // The Selection Sort
   for(i=0;i<10000;i++)
   {
     min=i;
     for(j=i+1;j<10000;j++)
     {
       if(a[min]>a[j])
       {
         min=j;
       }
     }
     temp=a[min];
     a[min]=a[i];
     a[i]=temp;
   }
   end1=clock();
   double extime1=(double) (end1-start1)/CLOCKS_PER_SEC;
   printf("\n");
   printf("\tExecution time for the selection sort is %f seconds\n\n", extime1);
   if(extime1<extime)
     printf("\tSelection sort is faster than Bubble sort by %f seconds\n\n", extime - extime1);
   else if(extime1>extime)
     printf("\tBubble sort is faster than Selection sort by %f seconds\n\n", extime1 - extime);
   else
     printf("\tBoth algorithms have the same execution time\n\n");
}
...