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.
  • Beschleunigte Befehlsbearbeitung mit GNU Parallel
    Durch den geschickten Einsatz des pfiffigen kleinen Programms GNU Parallel reizen Sie auch in Skripten die Multicore-CPU Ihres Rechners voll aus.
Kommentare

Infos zur Publikation

LU 10/2017: Daten retten & sichern

Digitale Ausgabe: Preis € 8,50
(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

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 2 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...