OpenMP temps et de l'horloge() calcule deux résultats différents
J'ai du code séquentiel pour paralléliser via OpenMP. J'ai mis correspondant pragmas et de le tester. Lors du test j'interprète gain de performance en vérifiant de temps passé dans la fonction principale. La chose étrange est le temps écoulé, calculé par cpu_time()
et omp_get_wtime()
retourne deux résultats différents. Que pensez-vous de la raison?
Le temps écoulé, calculé par cpu_time()
fonction est similaire à séquentielle temps.
Avant le calcul commence
ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
Après le calcul se termine
ctime2_ = cpu_time();
#ifdef _OPENMP
ctime2 = omp_get_wtime();
#endif
cpu_time() définition de la fonction de
double cpu_time(void)
{
double value;
value = (double) clock () / (double) CLOCKS_PER_SEC;
return value;
}
Résultat de l'impression
printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);
Exemple de résultat
7.009537 - 11.575277 seconds.
OriginalL'auteur mert | 2012-05-20
Vous devez vous connecter pour publier un commentaire.
La
clock
des mesures de la fonction de temps cpu, le temps que vous passez activement sur le CPU, les OMP des mesures de la fonction du temps qu'il a passé lors de l'exécution, de deux choses complètement différentes.Votre processus semble être bloquée en attente quelque part.
clock()
mesure en réalité mur du temps.encore une fois, ils semblent suivre leur propre humeur, au lieu de la norme. La norme dit: L'horloge de la fonction retourne la mise en œuvre de la meilleure approximation du temps processeur utilisé par le programme depuis le début de la mise en œuvre définies par l'ère uniquement liées au programme d'invocation.
Sonne comme s'ils respectent la norme. La mise en œuvre de la meilleure approximation semble juste être le mur du temps kek
OriginalL'auteur Jens Gustedt
Ce que vous observez, c'est un bon résultat pour toute application parallèle - le combiné temps CPU de toutes les discussions comme retourné par
clock()
est généralement plus que le wallclock temps mesurée paromp_get_wtime()
sauf si votre application principalement dort ou attend.OriginalL'auteur Hristo Iliev
La
clock()
fonction renvoie CPU temps, pas mur temps. Au lieu de cela, utilisergettimeofday()
.OriginalL'auteur chrisaycock