Comment puis-je calculer le temps d'exécution dans le code suivant:Comment calculer le temps d'exécution en C?
#include <stdio.h> /* Core input/output operations */
#include <stdlib.h> /* Conversions, random numbers, memory allocation, etc. */
#include <math.h> /* Common mathematical functions */
#include <time.h> /* Converting between various date/time formats */
#include <sys/time.h>
#define PI 3.1415926535 /* Known vaue of PI */
#define NDARTS 128 /* Number of darts thrown */
double pseudo_random(double a, double b) {
double r; /* Random number */
r = ((b - a) * ((double) rand()/(double) RAND_MAX)) + a;
return r;
}
int main (int argc, char *argv[]) {
int n_procs, /* Number of processors */
llimit, /* Lower limit for random numbers */
ulimit, /* Upper limit for random numbers */
n_circle, /* Number of darts that hit the circle */
i; /* Dummy/Running index */
double pi_sum, /* Sum of PI values from each WORKER */
x, /* x coordinate, betwen -1 & +1 */
y, /* y coordinate, betwen -1 & +1 */
z, /* Sum of x^2 and y^2 */
error; /* Error in calculation of PI */
clock_t start_time, /* Wall clock - start time */
end_time; /* Wall clock - end time */
struct timeval stime, starttime1, endtime1;
struct timeval tv1, tv2, diff;
llimit = -1;
ulimit = 1;
n_circle = 0;
printf("\n Monte Carlo method of finding PI\n\n");
printf(" Number of processors : %d\n", n_procs);
printf(" Number of darts : %d\n\n", NDARTS);
gettimeofday(&tv1, NULL);
gettimeofday(&stime, NULL);
srand(stime.tv_usec * stime.tv_usec * stime.tv_usec * stime.tv_usec);
for (i = 1; i <= NDARTS; i++) {
x = pseudo_random(llimit, ulimit);
y = pseudo_random(llimit, ulimit);
z = pow(x, 2) + pow(y, 2);
if (z <= 1.0) {
n_circle++;
}
}
pi_sum = 4.0 * (double)n_circle/(double)NDARTS;
pi_sum = pi_sum/n_procs;
error = fabs((pi_sum - PI)/PI) * 100;
gettimeofday(&tv2, NULL);
double timeval_subtract (result, x, y)
{
result = ((double) x - (double) y)/(double)CLOCKS_PER_SEC;
}
double result1 = timeval_subtract(&diff, &tv1, &tv2);
printf(" Known value of PI : %11.10f\n", PI);
printf(" Average value of PI : %11.10f\n", pi_sum);
printf(" Percentage Error : %10.8f\n", error);
printf(" Time : \n", clock());
printf(" Start Time : \n",&tv1);
printf(" End Time :\n", &tv2);
printf(" Time elapsed (sec) : \n", result1);
return 0;
}
je fonction timeval_subtract et quand j'exécute le code, je suis arrivé:
Monte Carlo method of finding PI
Number of processors : 16372
Number of darts : 128
Known value of PI : 3.1415926535
Average value of PI : 0.0002004184
Percentage Error : 99.99362048
Time :
Start Time :
End Time :
Time elapsed (sec) :
D'abord, je ne pouvais pas trouver le erreur dans la recherche du nombre de processeurs (je dois obtenir 1 processeur).
Deuxième "qui est le point le plus important", Pourquoi l'heure, l'heure de début, l'heure de fin et le temps écoulés sont-ils vides?
Je pense que vous voudrez peut-être envisager d'utiliser un profileur. – stdcall
Veuillez activer les avertissements de votre compilateur. Il vous dira quel est le problème avec les impressions et la chose 'n_procs'. – Mat
clock() ne mesure pas le temps que votre programme a utilisé pour exécuter, mais essaye de retourner les cycles d'horloge du CPU utilisé (normalement mesuré dans les tics ou les jiffies). Mais même si vous convertissez cette valeur en secondes (en la divisant par CLOCKS_PER_SEC, le résultat peut différer significativement du temps que le programme a réellement utilisé pour terminer.) Combien cela diffère dépend de ce que fait le programme. – alk