Aufmacher

Parallelprogrammierung mit OpenMP

Auf Trab gebracht

Dualcore-Prozessoren sind längst Standard, Quadcores im Kommen. Mit OpenMP geben Sie ihren Programmen Zugriff auf diese Rechenleistung.

Wer vor kurzem einen neuen Rechner gekauft hat oder wegen eines geplanten Neukaufs momentan die Werbeprospekte durchforstet, der kennt Begriffe wie "Dual Core" und "Quad Core". Fast alle aktuellen Rechner bringen CPUs mit zwei oder gar vier Prozessorkernen mit – früher ein exklusiver Luxus für teure Server oder Workstations.

Linux kann mit solchen Mehrprozessorsystemen seit langem umgehen, und die Distributoren installieren inzwischen als Standard mehrprozessorfähige SMP-Kernel. Diese schaffen die Grundvoraussetzungen, um die multiplen Cores auch tatsächlich zu nutzen. Aber schafft das auch die Software?

Das Programm top zeigt die Auslastung der CPUs an. Was es in Abbildung 1 zeigt, sieht ja schon ganz gut aus. Xaos, ein Programm zur Berechnung von Fraktalen, belegt 100 Prozent CPU-Leistung. Der Schein trügt jedoch: Der Rechner ist insgesamt nur zu knapp 60 Prozent ausgelastet. Ein Druck auf die Taste [ 1] führt jede CPU separat auf. In diesem Modus (Abbildung 2) erkennt man die Nutzlast der einzelnen Kerne schnell: Eine CPU rechnet brav (90 Prozent Last), die andere dreht Däumchen (0.3 Prozent Last).

Abbildung 1: In der Vorgabe zeigt top die Gesamtauslastung aller CPUs an …
Abbildung 2: … auf Wunsch aber auch die Auslastung jedes einzelnen Prozessorkerns.

Mehrspurig

Normalerweise arbeitet der Rechner in C/C++ oder sonstigen prozeduralen Programmiersprachen geschriebene Programme sequenziell ab, also einen Befehl nach dem anderen. Das lastet allerdings nur einen Prozessorkern aus. Um die Rechenleistung effizienter zu nutzen, kann man entweder mehrere Programme gleichzeitig ausführen oder ein Programm parallelisieren.

Die seit 1997 gemeinschaftlich von verschiedenen Hardware- und Compilerherstellern entwickelte Programmierschnittstelle OpenMP bietet eine sehr einfache und portable Möglichkeit, Programme in C/C++ und Fortran zu parallelisieren. Das kann die Performance eines Programms deutlich steigern – allerdings nur dann, wenn die CPU wirklich viel rechnen muss und sich die Aufgabe auch tatsächlich parallelisieren lässt. Bei rechenintensiven Problemen ist das jedoch häufig der Fall, denn solche Aufgaben sickern oft aus dem Dunstkreis von Clustern auf den PC, und Cluster-Abarbeitung setzt zwangsläufig Parallelisierung voraus.

Eins, zwei, viele

Mithilfe von OpenMP lassen sich existierende serielle Programme sehr einfach durch die Angabe einiger weniger zusätzlicher Compiler-Direktiven effektiv parallelisieren. Solche Compiler-Direktiven sehen folgendermaßen aus:

#pragma omp Direktivenname [Klauseln]

Compiler ohne OpenMP-Implementation, wie etwa ältere GCC-Versionen vor 4.2, ignorieren diese Compiler-Direktiven schlicht, sodass man den Quelltext weiterhin auch als seriellen Code kompilieren kann:

$ gcc -Wall test.c
test.c: In function 'main':
test.c:12: warning: ignoring #pragma omp parallel

OpenMP-spezifischer Code lässt sich mithilfe der Direktive #ifdef auch bedingt kompilieren, wozu OpenMP das Makro _OPENMP definiert.

Ein OpenMP-Programm startet ganz normal als serielles Programm mit einem Thread. Ein Befehl kommt nach dem nächsten. Das erste OpenMP-Statement, das Sie kennenlernen, dient der Erzeugung mehrerer Threads:

ein Thread
#pragma omp parallel
{ … viele Threads }
… ein Thread

Abbildung 3 veranschaulicht diese Aufteilung in mehrere Threads und das Wiedervereinigen zu einem einzelnen.

Abbildung 3: Das Fork-Join-Modell von OpenMP.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Leserbriefe
  • OpenCL-Workshop, Teil 2: Praxis
    OpenCL macht die Grafikkarte vom alltäglichen, aber langweiligen Begleiter zum Turbo für anspruchsvolle Rechenoperationen. Wie im richtigen Leben spielt der Lader seine Qualitäten aber erst auf der Autobahn aus – im Stadtverkehr rührt sich wenig.
  • Phenomenal
    AMD tritt mit seinen Quad-Core-Prozessoren gegen die starke Konkurrenz von Intel an. Wir testen einen Phenom X4 gegen die mobile CPU Turion X2 und einen Core-2-Duo-Prozessor von Intel.
  • Web-Server Apache 2
    Das Herzstück eines typischen Internet-Servers bildet ein Programm, das WWW-Seiten anbietet. Weltweit am häufigsten genutztes Exemplar dieser Gattung ist der Apache-Web-Server, dessen Entwickler kürzlich die Version 2 zur allgemeinen Verwendung freigaben.
  • News
Kommentare

Infos zur Publikation

LU 05/2018: GEODATEN

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

added to access control list
Ingrid Kroll, 27.03.2018 07:59, 10 Antworten
Hallo allerseits, bin einfache Nutzerin und absolut Linux-unwissend............ Beim ganz norm...
Passwortsicherheit
Joe Cole, 15.03.2018 15:15, 2 Antworten
Ich bin derzeit selbständig und meine Existenz hängt am meinem Unternehmen. Wahrscheinlich verfol...
Brother drucker einrichten.
Achim Zerrer, 13.03.2018 11:26, 1 Antworten
Da mein Rechner abgestürzt war, musste ich das Betriebssystem neu einrichten. Jetzt hänge ich wi...
Internet abschalten
Karl-Heinz Hauser, 20.02.2018 20:10, 2 Antworten
In der Symbolleiste kann man das Kabelnetzwerk ein und ausschalten. Wie sicher ist die Abschaltu...
JQuery-Script läuft nicht mit Linux-Browsern
Stefan Jahn, 16.02.2018 12:49, 2 Antworten
Hallo zusammen, ...folgender goldener Code (ein jQuery-Script als Ergebnis verschiedener Exper...