Vorheriger Beitrag: Intel Cilk Plus nun als Open Source-Version verfügbar
Wie man sich die parallele Datenverarbeitung/ Programmierung vorstellen kann
Oft werde ich gefragt, was es eigentlich mit der parallelen Datenverarbeitung resp. Programmierung auf sich hat. Wem nutzt es? Was passiert da im Einzelnen? Ich habe dazu schon schon zahlreiche Beiträge gelesen und auch ein paar geschrieben, aber noch nie versucht, das Thema so verständlich darzulegen, dass auch technische Laien die Prinizipien sofort verstehen.
Eines der einfachste Beispiele stammt aus der Autowelt, in der es einspurige Fahrbahnen gibt, die immer nur von einem einzigen Auto passiert werden können, was ja in der klassischen Programmierung ebenfalls stattfindet: so kann eine Funktion wie eine einfache Addition lediglich schrittweise ausgeführt werden, da es nur eine ausführende Einheit, nämlich den Prozessor gibt, der mit einer Ausführung eines Befehls beschäftigt werden kann.
Zwar gibt es schon seit vielen Jahren das Pipelining-Prinzip, bei dem Befehle zeitversetzt ausführt werden können, allerdings nur auf Micro-Ops-Ebene, und auch nur mit einem einzigen Datum. Und darin unterscheidet sich ja die parallele Ausführung von Programmen ganz erheblich. Will man also mehrere Autos pro Zeiteinheit fahren lassen, muss man aus der einspurigen Straße eine Autobahn machen, die mehr Autos pro Zeittakt aufnimmt. Im IT-Leben nennt man das das Multicore-Prinzip.
Das Beispiel mit dem Autoverkehr ist schon ganz gut, aber nicht unbedingt ausreichend, denn im realen Leben finden auch Prozesse statt, die sowohl sequentiell als auch parallel ausgeführt werden können, aber nicht immer zur Zufriedenheit aller führen können. Man nehme zum Beispiel einen Supermarkt, der nur eine Kasse aufweist, was sich als echter Flaschenhals entpuppt. Denn sobald mehrere Leute gleichzeitig bezahlen wollen, kommt es zwangsläufig zum Stau an der Kasse und die Leute sind unzufrieden.
Da hilft natürlich die Anschaffung einer zweiten oder dritten Kasse, die das ganze beschleunigen würde. Wenn allerdings die Angestellten des Ladens nicht richtig geschult werden und damit die Kassen nicht richtig bedienen können, hat sich die Anschaffung nicht wirklich rentiert. Denn zum Ärger der Kunden kommt noch der Frust der Angestellten. Und so verhält es sich auch mit der Parallelprogrammierung: wenn Programmierer nicht die richtigen Tools und das richtige Know-how an die Hand geliefert bekommen, entwickelt sich die Parallelprogrammierung ganz schnell zum Ärgernis – und zwar für alle.
Damit komme ich schon zum dritten Praxisbeispiel, wie man sich gute Parallelprogrammierung und parallele Datenverarbeitung vorstellen kann. Stellen Sie sich ein Restaurant vor, bei dem es einen professionell arbeitenden “Dispatcher” gibt, bei dem alle Bestellungen einlaufen. Er hat also Kenntnis über sämtliche Getränke- und Speisenbestellungen der Gäste, und verteilt diese (Bestellungen) auf die jeweiligen “Abteilungen” innerhalb des Restaurants, also die Getränke an die Bar, den Salat an die Kalte Küche, das Steak an die Grillstation, etc.
Sobald sämtliche Jobs, die für die Bestellung eines Gastes erforderlich sind, erledigt wurden, informiert der Dispatcher die zuständige Service-Kraft darüber, dass das Getränk, der Salat und das Steak fertig sind, damit die Bestellung möglichst schnell und ohne Verzögerung beim Gast ankommt.
Genauso so arbeiten parallel ausführende Compiler, die über einen eigenen Dispatcher verfügen, der die zu berechnenden Aufgaben (Tasks) an Threads verteilt, die dann auf die vorhandenen Prozessorkerne verteilt werden. Sobald ein Job erledigt wurde, wird das Ergebnis an die entsprechende Ressource weitergeleitet, was im realen Beispiel der Gast ist. Dabei muss man – wie im realen Leben – zwischen zwei möglichen Szenarien unterscheiden: Jobs, die unabhängig voneinander ausgeführt werden können und solche, die das Ergebnis eines gleichzeitig ablaufenden Tasks erfordern.
Im Falle des Restaurants ist das vergleichbar mit der Gertränkebestellung, die unabhängig von der Speisenbestellung an den Tisch des Gastes gebracht werden kann. Sollen aber Salat und Steak gleichzeitig beim Gast landen, so muss der Dispatcher tunlichst darauf achten, dass beide Speisen möglichst gleichzeitig fertig sind, damit das eine nicht kalt und das andere nicht welk wird.
Falls Ihnen weitere praktische Beispiele in den Sinn kommen, freuen wir uns natürlich auf einen entsprechenden Kommentar.
Keine ähnlichen Artikel.

Kommentare
Keine Kommentare vorhanden.