2009-08-19 15 views
5

Sto usando OpenMP per eseguire il multithreading con i miei cicli nidificati. Dal momento che sono nuovo in questa roba, non sono sicuro se sto usando OpenMP nel modo corretto in modo che possa effettivamente fare la programmazione parallela. Quindi mi piacerebbe sapere se posso misurare le prestazioni del mio programma C++ che usa OpenMP così posso dire che funziona davvero e sono sulla strada giusta? Come quanti thread sono in esecuzione in parallelo e quanto tempo ci vuole per terminare ciascuno di essi. Grazie e saluti!Come sapere se OpenMP funziona nel mio programma C++

+0

Le mie scuse per aver confuso OpenMP con OpenMPI! Grazie a Dirk Eddelbuettel per avermi cortesemente segnalato il mio errore! –

risposta

9
#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 fornire le due funzioni del timer, ma questo è l'essenza. Le funzioni OMP sono piuttosto auto-esplicative. Assicurati inoltre che il tuo ambiente sia impostato correttamente e che tu stia compilando i meccanismi appropriati. l'opzione g ++ è -fopenmp. Su Visual Studio, vai alle impostazioni del progetto, C++, lingua e abilita "Supporto OpenMP".

1

È possibile utilizzare Windows taskmanager (CTRL-SHIFT-ESC) su Windows per monitorare l'utilizzo della CPU o superiore su * nix box.

Basta controllare se vengono utilizzati molti core o no

1

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

  • vedere come possono le discussioni sono in esecuzione
  • vedere quale codice ciascuno di essi è in esecuzione
  • pausa alcuni di loro, mentre altri continuano lasciando
+0

Sai come fare questi con gdb/su Linux? – Tim

+0

Questo dovrebbe aiutare: http://www.delorie.com/gnu/docs/gdb/gdb_25.html Vedi anche i collegamenti in fondo a quella pagina. (Caveat: l'ho trovato con Google, non sono un utente GDB.) – RichieHindle

+0

Su linux puoi sempre usare 'top' per vedere tutti i tuoi core, e controllare cosa stanno facendo. – Anna

Problemi correlati