2009-08-19 3 views
5

Ich verwende OpenMP, um Multithreading mit meinen verschachtelten Schleifen durchzuführen. Da ich neu in diesem Bereich bin, bin ich nicht sicher, ob ich OpenMP in der richtigen Art und Weise verwende, damit es die parallele Programmierung tatsächlich ausführen kann. Ich möchte also wissen, ob ich die Leistung meines C++ - Programms messen kann, das OpenMP verwendet, damit ich weiß, dass es funktioniert und ich auf dem richtigen Weg bin? So wie viele Threads parallel laufen und wie lange es dauert, bis alle fertig sind. Danke und Grüße!Wie kann ich feststellen, ob OpenMP in meinem C++ - Programm funktioniert?

+0

Ich entschuldige mich, OpenMP mit OpenMPI zu verwechseln! Danke an Dirk Eddelbüttel für den Hinweis auf meinen Fehler! –

Antwort

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

Offensichtlich müssen Sie die zwei Timerfunktionen zur Verfügung stellen, aber das ist der Kern. Die OMP-Funktionen sind ziemlich selbsterklärend. Stellen Sie außerdem sicher, dass Ihre Umgebung ordnungsgemäß eingerichtet ist und Sie mit den richtigen Mechanismen kompilieren. Die g ++ -Option ist -fopenmp. In Visual Studio gehen Sie zu den Projekteinstellungen, C++, Sprache und aktivieren Sie "OpenMP Support".

1

Sie können Windows-Taskmanager (STRG-SHIFT-ESC) in Windows verwenden, um die CPU-Auslastung zu überwachen, oder oben auf * nix-Boxen.

einfach überprüfen, ob viele Kerne verwendet werden oder nicht

1

Sie Ihre Debugger (Visual Studio, wenn Sie unter Windows sind) verwenden können, um:

  • sehen, wie können Threads laufen
  • sehen welcher Code jeder von ihnen läuft
  • Pause einige von ihnen, während andere lassen
+0

Wissen Sie, wie man dies mit gdb/unter Linux macht? – Tim

+0

Dies sollte helfen: http://www.delorie.com/gnu/docs/gdb/gdb_25.html Siehe auch die Links am Ende dieser Seite. (Achtung: Ich habe das mit Google gefunden; ich bin kein GDB-Benutzer.) – RichieHindle

+0

Unter Linux können Sie immer 'top' verwenden, um alle Ihre Kerne zu sehen und zu überprüfen, was sie tun. – Anna

Verwandte Themen