C OMP omp_get_wtime() retournant de temps 0.00
J'ai utilisé un omp_get_wtime() mais quand je veux imprimer la fois, j'ai toujours obtenez 0.00, où est le problème ?
#define SIZE 500
#define nthreads 10
(...)
void sumTab(int mX[][SIZE], int mY[][SIZE], int mZ[][SIZE]) {
int i,k;
double start = omp_get_wtime();
#pragma omp parallel for schedule(dynamic,3) private(i) num_threads(nthreads)
for(i=0 ; i<SIZE ; i++)
{
for(k=0 ; k<SIZE ; k++)
{
mZ[i][k]=mX[i][k]+mY[i][k];
printf("Thread no %d \t [%d] [%d] result: %d\n", omp_get_thread_num(),i,k, mZ[i][k]);
}
}
printf("Time: \t %f \n", omp_get_wtime()-start);
}
peut-être la précision de
Ce que les commandes que vous avez utilisé pour compiler et exécuter ce programme?
je suis à l'aide de la commande make avec OPT = -O3-fopenmp
omp_get_wtime
n'est pas assez haut?Ce que les commandes que vous avez utilisé pour compiler et exécuter ce programme?
je suis à l'aide de la commande make avec OPT = -O3-fopenmp
OriginalL'auteur kxyz | 2013-05-27
Vous devez vous connecter pour publier un commentaire.
Assurez-vous d'inclure les omp.h de la bibliothèque dans l'en-tête du fichier.
Cette bibliothèque va supprimer cet avertissement lors de la compilation:
Et l'heure s'affichent correctement.
OriginalL'auteur zhalk
Essayez d'imprimer avec "% g", qui laisse comme notation scientifique.
OriginalL'auteur rodolf
Déclarer au moment où le programme se termine, après quoi vous prenez la différence entre l'heure de début et l'heure de fin, la sortie de la différence. que doit résoudre comme je l'ai fait quelque chose de similaire il y a quelques mois
OriginalL'auteur Oyinlade Olumide
C'est à cause de la perte de précision due dans la conversion de la double float.
Essayez d'imprimer à l'heure avec le spécificateur de format "%ld" pour double place de "%f".
L'exécution du programme prend du temps en millisecondes ou peut-être moins que cela.
OriginalL'auteur Vilas Joshi
Déclarer au moment où le programme se termine, après quoi vous prenez la différence entre l'heure de début et l'heure de fin, la sortie de la différence. que doit résoudre comme je l'ai fait quelque chose de similaire il y a quelques mois
OriginalL'auteur Oyinlade Olumide
Votre routine peut être trop rapide pour la résolution de
omp_get_wtime
. Si vous voulez seulement de mesurer le temps, et ne se soucient pas le contenu final de mZ, vous pouvez répéter le test plusieurs fois et de diviser ce nombre par le nombre de répétitions:Vous pouvez également supprimer
printf's
à l'intérieur du bloc parallèle, car cela pourrait être une grave cause de ralentissement.OriginalL'auteur mcleod_ideafix
J'ai eu ce même problème et tout setprecision a fait le tour de c++,
vous pouvez utiliser le code suivant dans c. Afin de voir la différence que vous devez imprimer les résultats avec une grande précision.
OriginalL'auteur Sumith Yesudasan
@mcleod_ideafix a raison quand il écrit à propos de la suppression de printf.
Vous devez certainement supprimer l'appel à la fonction printf de l'intérieur de la boucle, ce qui peut fausser le résultat grandement. Gardez à l'esprit que l'appel à printf fera à un certain stade impliquer la transition vers le mode noyau et le présent lui-même est coûteuse en termes de cycles de PROCESSEUR.
OriginalL'auteur beniekg