Domanda

Sto usando OpenMP a che fare con i miei multithreading cicli annidati. Dal momento che nuovi a questa roba, non sono sicuro se sto usando OpenMP in modo corretto in modo che cosa può realmente fare la programmazione parallela. Così mi piacerebbe sapere se posso misurare le prestazioni del mio programma C ++ che utilizza OpenMP quindi posso dire che effettivamente funziona e io sono sulla strada giusta? Come come molti thread sono in esecuzione in parallelo e quanto tempo ci vuole per ciascuno di loro alla fine. Grazie e saluti!

È stato utile?

Soluzione

#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();
}
...

Ovviamente è necessario ot fornire le due funzioni di timer, ma questo è il succo del discorso. Le funzioni OMP sono abbastanza auto-esplicativo. Assicurarsi inoltre che l'ambiente sia configurato correttamente e che si sta compilando con i meccanismi adeguati. opzione g ++ è -fopenmp. Su Visual Studio Vai al progetto impostazioni, C ++, la lingua, e attivare "Supporto OpenMP".

Altri suggerimenti

È possibile utilizzare le finestre taskmanager (CTRL-SHIFT-ESC) sulle finestre per monitorare l'utilizzo della CPU, o la parte superiore su scatole * nix.

Basta controllare se molti core vengono utilizzati o meno

È possibile utilizzare il debugger (Visual Studio se siete su Windows) per:

  • vedere come possono le discussioni sono in esecuzione
  • vedere quale codice di ciascuno di essi è in esecuzione
  • pausa alcuni di loro, mentre altri continuano lasciando
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top