Parallelisierung - Transparenz und Saklierbarkeit
herbert.katzlinger.uni-linz, 11. Oktober 2011, 10:01
Multicomputer- und Multiprocessorsysteme sind gegenwärtig relativ aktuell und fanden mittlerweile auch den Einsatz in den Geräten der Benutzer (Desktoprechner, Notebooks, Tablets usw..).
Aus der Perspektive des Endbenutzers ergibt sich häufig die nachvollziehbare Erwartung, dass nun Anwendungsprogramme plötzlich auch entsprechend schneller ablaufen (Beispielsweise Erwartungshaltung: Quad-Core Architektur: Anwendungsprogramm sollte nun 4 fach schneller ablaufen) . Dem ist aber aus unterschiedlichen Gründen in der Vielzahl der Fälle nicht so.
Die wichtigsten Gründe dafür sind:
a) Die Prozessorarchitektur ist n i c h t alleine maßgeblich für Leistung, die letztendlich ein Anwendungsprogramm erfährt (im System sind daneben noch Bussyssteme, Speichersysteme, Topologien usw.. zu berücksichtigen). Eine zumindest 25% Leistungssteigerung des Gesamtsystems bewirkt auch eine subjektive merkbare Steigerung der Arbeitsgeschwindigkeit beim Endanwender.
b) Der sequentielle Anteil eines Programms limitiert die Möglichkeiten der Parallelisierung und damit auch setzt damit auch Schranken für Leistungssteigerungen. (siehe dazu auch: Amdahl's law).
c) Notwendigkeit eines Paradigmenwechsels in der Softwareentwicklung:
Die bisherigen Modelle bzw. Versuche der impliziten (siehe dazu auch Compilerpragmas u.ä.) und expliziten Parallelisierung (neue Programmkonstrukte, die von Softwarebibliothekten bereitgestellt werden) von Programmen sind allesamt wenig brauchbare Versuche, die Software an die Möglichkeiten der parallele Hardware effizient heranzuführen.
Die bislang praktizierten Ansätze beispielsweise auch mit Hilfe von Threads ("Ablauffade") zwingt zu notwendigen Synchronisationen (z.b.: Critical Sections, Semaphoren, Mutexes, Spinlocks usw...) . Damit wird letztendlich wieder serialisiert anstatt zu parallelisieren. Ausserdem werden zusätzlich eine nicht unbeträchtliche Menge an Ressourcen für die Verwaltung dieser Synchronisationmechanismen im Betriebssystem benötigt und so wieder die Möglichkeiten der parallelen Hardware unnotwendigerweise ein- bzw. beschränkt.
Daher müssen neue Modelle gefunden werden, die bereits beim E n t w u r f von Softwaresystemen auf Parallelität Rücksicht nehmen. Dazu dienen die sogenannten "Tasks".
Ein "Task" kann als eine relativ abgeschlossenes Teilgebiet einer zu implementierenden Aufgabe betrachtet werden. Der Task wird so entworfen, dass er möglichst eigenständig und ohne große Abhängigkeiten zu anderen Task ablaufen kann (siehe dazu auch vor allem: Datenparallelität !)
Diese Task lassen sich dann sehr efffizient auf die Prozessorknoten verteilen und können die ganze Verarbeitungskapazität ausnutzen anstatt einen häufig nicht unbeträchtlichen Teil der Kapazität für Datensynchronisation und Kommunikation innerhalb und zwischen Prozessen bzw. Threads zu verbrauchen.
Dieser Ansatz ist sehr umfassend, wie aus den bisherigen Schilderungen transparent wurde und benügt sich nicht mit Versuchen, ein mehr oder minder sequentielles Programm im nachhinein einen Hauch von Parallelität zu verleihen. Es bleibt noch zu erwähnen, dass im Zusammenhang mit paralleler Programmierung parallele Algorithmen und Datenstrukturen zur Verfügung stehen. Es bestehen Zusammenhänge und Abhängigkeiten von parallelen Systemen mit verteilten Systemen.
Es ist daher durchaus gerechtfertigt, von einem Paradigmenwechsel in der Softwareentwicklung in diesem Kontext zu sprechen, vergleichbar mit dem Übergang von der prozeduralen zur objektorientierten Softwareentwicklung.
Schliesslich muss berücksichtigt werden, dass eine derartiger Wechsel eine entsprechend lange Zeit benötigt, das es voerst gilt, Ausbildungsprogramme umzustellen und in den Lehrplänen dies zu verankern. Letztendlich ist danach erneut mit einer geraumen Zeitspanne zu rechnen, die verstreicht, bevor mit dem Einsatz in der Wirtschaft und Industrie zu rechnen ist.
Quellen(auch Populärwissenschaftliche):
http://www.bs.fb12.uni-siegen.de/web/wismueller/vl/ss11/bs2/v02_2.pdf
http://www.mpi-forum.org/docs/docs.html
http://de.wikipedia.org/wiki/Amdahlsches_Gesetz
http://www.cs.vu.nl/~ast/publications/
0 comments :: Kommentieren