Wie erkennt man den Hauptthread in einem OpenMP-Programm?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie erkennt man den Hauptthread in einem OpenMP-Programm?

Post by Anonymous »

OpenMP verwendet ein eigenes Schema zur Nummerierung von Threads, beginnend mit 0 für den Master-Thread. Ein Master-Thread ist der Thread, der einen parallelen Bereich initiiert hat, der im folgenden Beispiel der Hauptprogramm-Thread ist.

Code: Select all

int main()
{
// only the main program thread exists here

#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 0)
{
// this block is guaranteed to be executed by the main program thread
}
}
}
In diesem Fall ist es einfach, den Hauptprogramm-Thread in einem parallelen Abschnitt zu erkennen. Betrachten Sie jedoch ein anderes Beispiel mit verschachtelter Parallelität:

Code: Select all

int main()
{
// only the main program thread exists here

#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 1)
{
#pragma omp parallel num_theads(2)
{
if (omp_get_thread_num() == 0)
{
// this block is NOT executed by the program main thread
}
}
}
}
}
Nun ist der Master-Thread innerhalb der verschachtelten Parallelregion nicht der Hauptprogramm-Thread, daher funktioniert die Erkennung durch Vergleich der OpenMP-Thread-ID mit 0 hier nicht.
Live-Demo: https://godbolt.org/z/5K3ja8fY1
Meine Frage ist, ob es eine Möglichkeit gibt, den Hauptprogramm-Thread innerhalb einer OpenMP-Parallelregion immer zu erkennen funktioniert.
(Ich könnte für diesen Zweck möglicherweise std::this_thread::get_id() verwenden, wie in der Demo gezeigt; ich bin mir jedoch nicht sicher, ob die Portabilität zusammen mit OpenMP gewährleistet ist.)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post