12
votes

OpenMP Time and Clock () Donnez deux résultats différents

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 cpu_time () code> et omp_get_wtime () code> est différent . Pourquoi? P>

Le temps écoulé selon cpu_time () code> est similaire à l'heure séquentielle. P>

avant le début du calcul: P>

7.009537 - 11.575277 seconds.


0 commentaires

3 Réponses :


18
votes

L'horloge 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.

Votre processus semble être bloqué dans l'attente quelque part.


3 commentaires

Sous Windows, horloge () 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.


@Jensgustedt sonne comme ils suivent la norme. la meilleure approximation de la mise en œuvre semble juste être le temps mural Kek



6
votes

L'horloge horloge () La fonction renvoie CPU heure, pas mur temps. Au lieu de cela, utilisez GetTimeOdday () .


0 commentaires

12
votes

Ce que vous observez est un résultat parfaitement valide pour toute application parallèle - le temps combiné CPU de tous les filets, comme retourné par horloge () est généralement plus que le Temps wallclock mesuré par omp_get_wtime () sauf si votre application dort ou attend surtout.


0 commentaires