OpenMP - Alternative für parallele Programme

Wenn es hautptsächlich darum geht Programmabschnitte parallel auszuführen, z.B. for-loops, dann bietet OpenMP eine interessante und vergleichsweise einfache Alternative zur expliziten Verwendung von Threads.

OpenMP ist weit verbreiteter Standard für Parallelisierung und unterstützt verschiedene Sprachen (C, C++, Fortran)

OpenMP wird gesteuert über C++ Pre-Prozessoranweisungen und speziellen Link-Optionen:


// compile: g++ -fopenmp -o helloOMP helloOMP.C
//
#include  <omp.h>
#include <iostream>
using namespace std;
int main()
{
    #pragma omp parallel   
    // Bereich in {} wird in multiple threads parallel ausgefuehrt
    {
        int ID = omp_get_thread_num();
          cout << " hello" <<   ID;
          cout << "  world  " <<   ID << endl;
    } // Ende paralleler Bereich
    
}

OpenMP macht ein sinnvolles Thread-Pool Management auf den Systemen/Umgebung im CIP, d.h. abhängig von Zahl der vorhandenen CPU-Cores wird eine entsprechende Zahl von Threads gestartet, die gleichzeitig laufen.


Intel Threading Building Blocks - TBB

sind ein weiterer weit-verbreiteter Standard für multi-threaded Programmieren. TBB erlaubt wie OpenMP einfache parallele for-loops, aber flexibler und moderner mit vielen weiteren Features (parallel-reduce, Thread-safe Container, ...).

Ein schöner Überblick ist in diesem Kurs zu Super Computing.


GDuckeck 2019-08-01