Question

J'utilise OpenMP pour faire multithreading avec mes boucles imbriquées. Depuis de nouveau à ce genre de choses, je ne suis pas sûr si j'utilise OpenMP de manière correcte afin qu'il puisse réellement faire la programmation parallèle. Donc, je voudrais savoir si je peux mesurer la performance de mon programme C ++ qui utilise OpenMP donc je peux dire qu'il fonctionne réellement et je suis sur la bonne voie? Comme nombre de threads fonctionnent en parallèle et combien de temps il faut pour chacun d'eux à la fin. Merci et salutations!

Était-ce utile?

La solution

#include <omp.h>

...
int target_thread_num = 4;
omp_set_num_threads(target_thread_num);
unsigned long times[target_thread_num];

// Initialize all the times
#pragma omp parallel
{
   int thread_id = omp_get_thread_num();
   times[thread_id] = start_time();

   std::cout << "Thread number: " << omp_get_thread_num() << endl;

   times[thread_id] = end_time();
}
...

Il est évident que vous avez besoin ot fournir les deux fonctions de minuterie, mais c'est l'essentiel. Les fonctions OMP sont assez explicites. Assurez-vous également que votre environnement est correctement configuré et que vous compilez avec les mécanismes appropriés. g ++ option est -fopenmp. Sur Visual Studio aller aux paramètres du projet, C ++, la langue et activer "Support OpenMP".

Autres conseils

Vous pouvez utiliser les fenêtres taskmanager (CTRL-SHIFT-ESC) sur les fenêtres pour surveiller l'utilisation du processeur, ou sur le dessus * boîtes nix.

suffit de vérifier si de nombreux noyaux sont utilisés ou non

Vous pouvez utiliser votre débogueur (Visual Studio si vous êtes sous Windows) à:

  • voir comment les discussions peuvent sont en cours d'exécution
  • voir quel code chacun d'eux est en cours d'exécution
  • pause certains d'entre eux tandis que d'autres continuent de laisser
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top