2010-06-01 7 views
0

Je le code suivant:sections OpenMP en cours d'exécution séquentielle

#pragma omp parallel sections private(x,y,cpsrcptr) firstprivate(srcptr) lastprivate(srcptr) 
{ 
    #pragma omp section 
    { 
     //stuff 
    } 
    #pragma omp section 
    { 
     //stuff 
    } 
} 

Selon le Zoom profileur, deux fils sont créés, un thread exécute les deux sections, et l'autre thread bloque simplement!

Est-ce que quelqu'un a déjà rencontré quelque chose comme ça avant? (Et oui, j'ai une machine dual core).

Répondre

0

Non, je ne peux pas dire que j'ai déjà rencontré quelque chose comme ça avant. J'ai rencontré une variété de problèmes avec les codes OpenMP cependant.

Je ne vois rien de mal dans votre extrait de code. Lorsque vous utilisez le profileur Zoom, cela affecte l'exécution du programme. Avez-vous vérifié que, en dehors du profileur, le programme exécute les sections sur différents threads? Si vous avez plus de sections, est-ce qu'elles s'exécutent toutes sur le même thread ou s'exécutent-elles sur des threads différents? Si vous n'avez que deux sections, ajoutez-en quelques unes pendant que vous testez ceci.

2

Je suppose que je ne sais pas encore beaucoup sur les profileurs, mais un problème que j'ai rencontré est d'oublier d'utiliser l'indicateur OpenMP et activer le support.

Sinon, que se passe-t-il si vous venez de créer une application simple pour essayer de vérifier les threads?

#pragma omp parallel num_threads(2) 
{ 
#pragma omp critical 
    std::cout << "hello from thread: " << omp_get_thread_num() << "\n" << std::endl; 
} 

Peut-être verriez-vous si cela fonctionne?

+0

+1 pour utiliser num_threads (2) - vous devez parfois forcer OpenMP à utiliser plusieurs threads, car il décidera occasionnellement de sérialiser tout s'il n'y a pas de processeurs disponibles. Je pense que vous pouvez utiliser omp_get_max_threads() pour obtenir le nombre maximum qu'il utilisera, ou vous pouvez demander à votre système combien de procs il utilise et utiliser cette valeur dans num_threads(). Bonne chance! – Mike