J'ai un code séquentiel pour paralléliser via OpenMP. J'ai mis dans les pragmes correspondants et l'avez testé. Je mesure le gain de performance en vérifiant le temps passé dans la fonction principale.
La chose étrange est le temps écoulé calculé via Le temps écoulé selon avant le début du calcul: P> cpu_time () code> et
omp_get_wtime () code> est différent . Pourquoi? P>
cpu_time () code> est similaire à l'heure séquentielle. P>
7.009537 - 11.575277 seconds.
3 Réponses :
L'horloge code> La fonction Mesure la fonction de la CPU, l'heure que vous passez activement sur la CPU, la fonction OMM mesure le temps tel qu'il est passé pendant l'exécution, deux choses complètement différentes. P>
Votre processus semble être bloqué dans l'attente quelque part. P>
Sous Windows, horloge () code> mesure effectivement le temps de mur.
@ Mysticial, encore une fois, ils semblent suivre leur propre humeur, au lieu de la norme. La norme dit: la fonction d'horloge renvoie la meilleure approximation de la mise en œuvre au temps du processeur utilisé par le programme depuis le début d'une ère définie par la mise en œuvre uniquement liée à l'invocation du programme. I>
@Jensgustedt sonne comme ils suivent la norme. la meilleure approximation de la mise en œuvre i> semble juste être le temps mural Kek
L'horloge horloge () code> La fonction renvoie CPU em> heure, pas mur em> temps. Au lieu de cela, utilisez
GetTimeOdday () code>
. P>
Ce que vous observez est un résultat parfaitement valide pour toute application parallèle - le temps combiné CPU em> de tous les filets, comme retourné par horloge () code> est généralement plus que le Temps wallclock em> mesuré par
omp_get_wtime () code> sauf si votre application dort ou attend surtout. P>