3 votes

Comment mesurer le temps d'exécution de chaque thread dans openmp ?

J'aimerais mesurer le temps que chaque thread passe à faire un morceau de code. J'aimerais voir si ma stratégie d'équilibrage de charge répartit équitablement les morceaux entre les travailleurs. Typiquement, mon code ressemble à ce qui suit :

#pragma omp parallel for schedule(dynamic,chunk) private(i)
for(i=0;i<n;i++){
//loop code here
}

UPDATE J'utilise openmp 3.1 avec gcc.

3voto

Gilles Points 6273

Vous pouvez simplement imprimer le temps par thread de cette façon (pas testé, pas même compilé) :

#pragma omp parallel
{
    double wtime = omp_get_wtime();
    #pragma omp for schedule( dynamic, 1 ) nowait
    for ( int i=0; i<n; i++ ) {
        // whatever
    }
    wtime = omp_get_wtime() - wtime;
    printf( "Time taken by thread %d is %f\n", omp_get_thread_num(), wtime );
}

NB le nowait que de supprimer le barrier à la fin de la for boucle, sinon cela n'aurait aucun intérêt.

Et bien sûr, l'utilisation d'un outil de profilage approprié est une bien meilleure approche...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X