Aus Erich Steiger
Inhaltsverzeichnis |
OpenMP
Management Summary
Auftraggeber
Die vorliegende Studie entstand im Rahmen der Diplomarbeit an der Hochschule für Technik und Architektur der Fachhochschule Zentralschweiz Luzern, Fachbereich Informatik, in Zusammenarbeit mit Herrn Amstutz als Betreuer und Herrn Diehl als Initiator.
Ausgangslage und Zielsetzung
Die Hyper-Threading Technologie brachte vor drei Jahren erstmals so etwas wie echte Parallelität auf den PC. Mit den neuen Prozessoren Pentium D von Intel und Athlon 64 X2 von AMD hält das parallele Zeitalter nun definitiv Einzug auf den Workstations. Die meisten Programme nutzen jedoch nur einen Prozessor, können also nichts mit den zusätzlichen Ressourcen anfangen. Diese Studie befasst sich mit OpenMP, einer Comiler-Erweiterung für C/C++ und Fortran, die den Entwickler bei der Parallelisierung von Funktionen und Prozessen massgebend unterstützt. Dabei treten verschiedene Probleme auf, wie beispielsweise beim Zugriff auf gemeinsam genutzte Ressourcen. Das Ziel dieser Studie war herauszufinden, inwiefern sich OpenMP für diese Art von Problemen eignet. Dazu wurden verschiedene Experimente durchgeführt, um die Vor- und Nachteile, sowie die Grenzen von OpenMP zu analysieren. In erster Linie soll die Studie die Fragen beantworten, ob OpenMP sinnvoll und brauchbar ist. Ausserdem soll die Studie Auskunft über allfällige Performance-Gewinne oder Verluste geben. Ebenso sollte untersucht werden, wie die Applikationen getestet werden können, beziehungsweise welche Werkzeuge dabei zur Verfügung stehen.
Umfang der Experimente
Für die Studie wurden verschiedene Experimente erdacht und durchgeführt. Als erstes Experiment wurde ein Primzahlentest Algorithmus mit OpenMP für den parallelen Betrieb modifiziert. Dabei galt es zu erforschen, wie gross die Performancesteigerung bei rechenintensiven Applikationen ausfällt. Ein zweites Experiment soll die Problematik von parallelen Algorithmen erläutern. Dazu wurden mehrere Sortier-Algorithmen untersucht, ob diese parallelisierbar sind. Bei Algorithmen treffen wir oft auch auf rekursive Implementationen, was zu verschachtelten parallelen Aufrufen führt. Das dritte Experiment zeigt die Performancesteigerung bei mehreren unterschiedlichen Aufgaben, die parallel abgearbeitet werden. Dabei wurden folgende drei Aufgabentypen untersucht: *rechenintensive Aufgabe(Primzahlentest) *Lesen von der Festplatte *Schreiben auf die Festplatte Ein viertes Experiment zeigt die Unterschiede von OpenMP gegenüber paralleler Programmierung mittels herkömmlicher Threads. Schliesslich wurde ein fünftes Experiment mit JOMP, einer OpenMP Implementation für Java, durchgeführt.
Resultate
Die Performancetests der ersten drei Experimente zeigten, dass Applikationen mit OpenMP recht gut skalieren. Beim Primzahlen-Test konnte auf einer vier CPU Maschine 182% Steigerung gemessen werden, bei zwei CPUs wurden 83% gemessen. Erstaunlich ist auch der gemessene Wert beim Pentium 4 mit Hyper-Threading, nämlich 52%. Auch beim zweiten Experiment wurden ähnliche Werte gemessen. Bei diesem Experiment ist ausserdem sehr interessant zu sehen, dass bei rekursiven Algorithmen ein Performance-Verlust von bis zu 79% resultiert. Beim dritten Experiment ist ersichtlich, dass sogar beim parallelen Lesen und Schreiben auf die Festplatte eine Steigerung von über 75% gemessen werden konnte. Beim vierten Experiment wurde deutlich, wie umständlich eine Implementation mit traditionellen Threads ist, respektive wie einfach dasselbe Problem mit OpenMP gelöst werden kann. Bei einem einfachen Beispiel musste für die Kernel-Thread Implementation mehr als doppelt soviel Code geschrieben werden. Dadurch wird der Programm-Code auch unübersichtlicher. Das JOMP Experiment, zeigt, dass auch mit Java OpenMP verwendet werden kann. Die Performance-Steigerung liegt allerdings mit 66% weit unter denjenigen mit C++. Zu erklären ist dieser Unterschied vor allem durch die enorme Anzahl Kontextwechsel.
Fazit
OpenMP ist einfacher und daher geeigneter als traditionelle Thread-Programmierung, zumindest in den meisten Fällen. Da aber auch Performanceverluste auftreten können ist der Einsatz stets zu hinterfragen.
Erich P. Steiger
Lausen im November 2005