2017-08-18 5 views
0

J'essaie d'utiliser OpenMP pour un projet interne de base de données pour améliorer les performances. J'ai besoin du temps d'exécution (j'utilise omp_get_wtime()) pour être enregistré dans le dossier car il n'y a aucun moyen que je puisse imprimer n'importe quoi à la console de ce programme. S'il vous plaît suggérer s'il existe un meilleur moyen. J'ai essayé d'écrire dans un seul fichier à partir de tous les threads (voir le code ci-dessous), mais cela plante quand le nombre de threads est supérieur à un. S'il vous plaît aider. Merci d'avance.Comment enregistrer les différences wtime dans un fichier à partir de plusieurs threads dans OpenMP?

FILE *fp = NULL; 
    fp = fopen("/home/fopen.txt","a"); 
    ... 
    omp_set_num_threads(2); 
    fprintf(fp,"Num of threads: %d\n",omp_get_num_threads()); 


#pragma omp parallel default(shared) private(tid) 
    { 
     tid = omp_get_thread_num(); 

     #pragma omp critical 
     fprintf(fp,"ThreadID of this thread is %d\n",tid); 
     : 
     : 
    } 
    if (fp != NULL) 
    fclose(fp); 
+0

Configurer un tableau pour les temps d'enregistrement, chaque thread écrit dans un élément du tableau (indexé par numéro de thread). Une fois que la région parallèle a le thread actif restant, écrivez le tableau dans le fichier. Si vous parvenez à trier l'écriture parallèle dans un seul fichier, vous finirez seulement ici en vous plaignant que les écritures ne sont pas ordonnées comme vous le souhaitez ... –

+0

Merci. Il semble que cette approche fonctionne pour moi. – Phaniarnab

+0

Pourquoi n'écrivez-vous pas la réponse à votre question et ne l'acceptez pas. –

Répondre

0

nécessaires pour créer un tableau pour les temps d'enregistrement, chaque écriture avait du fil à un élément de la matrice (indexée par numéro de fil). Après que la région parallèle a eu le thread actif restant, écrivez le tableau dans le fichier. Merci à @High Performance Mark.