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 08/2017: VIRTUALISIERUNG

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!

Aktuelle Fragen

Bash - verschachtelte Variablenersetzung, das geht doch eleganter als meine Lösung?
Josef Federl, 18.07.2017 20:24, 1 Antworten
#!/bin/bash #Ziel des Skriptes wird sein die ID zu extrahieren hier nur als Consolentest: root@...
Speicherplatzfreigabe mit "sudo apt-get clean" scheitert
Siegfried Böttcher, 16.07.2017 21:16, 1 Antworten
Speicherplatzfreigabe mit "sudo apt-get clean" scheitert, weil aus mir unerfindlichen Gründen im...
Möchte Zattoo vom PC am Fernsehgerät sehen können
Ilona Nikoui, 15.07.2017 18:25, 3 Antworten
Hallo, ich habe mein Fernsehgerät, ein LG 26LE3300 mit dem PC verbunden per HDMI Kabel, wie empfo...
TUXEDO und Hardwareauswahl , fragwürdig / Kritik
Josef Federl, 11.07.2017 12:44, 6 Antworten
Auf tuxedocomputers.com steht: "....Aber wir können auch Linux und das so, dass "einfach" alles...
HP PHOTOSMART 5525 nimmt die schwarze original patrone nicht
Erich Mecl, 28.06.2017 18:10, 1 Antworten
Hallo Leute! Mein HP Photosmart 5525 Drucker erkennt die original schwarze Patrone 364, nimmt s...