Vorheriger Beitrag: PowerDirector 7 ist für Core i7-Prozessor optimiert
Programmiermethoden: Daten- und Aufgabenparallelität
Bei der parallelen Programmierung unterscheidet man grundsätzlich zwischen drei Formen, die letztlich darüber entscheiden, welche Programmiermethoden man anwenden sollte.
Die eine Form der parallelen Programmierung orientiert sich an den zu verarbeitenden Daten, die zur Laufzeit der Anwendung anfallen. Ein gutes Beispiel für die Datenparallelität ist das Rendern eines Bildes, das aus vielen tausend Bildpunkten besteht, die sich unabhängig voneinander berechnen, zeichnen oder mit einem Filter versehen lassen.
Darin steckt also eine Menge an Multicore-Potenzial, wofür sich der Einsatz von OpenMP oder Intel TBB empfiehlt. Ein weiteres gutes Beispiel ist die Rechtschreibprüfung eines Textverarbeitungsprogramms. Hier können sämtliche Wörter simultan überprüft werden, da sie zueinander in keiner Abhängigkeit stehen.
Auf der anderen Seite existiert der Aufgabenparallelismus, der voneinander getrennte Aufgaben betrachtet, die sich vortrefflich parallel ausführen lassen. Ein gutes Beispiel hierfür ist Outlook, das aus unterschiedlichen Modulen besteht (Adressen, Kalender, E-Mail etc.), die sich grundsätzlich unabhängig voneinander ausführen lassen und damit auf separaten Prozessorkernen laufen können.
Probleme treten hier vor allem dann auf, wenn die unterschiedlichen Programmteile auf denselben Datenbestand zugreifen, was zu ungewollten, falschen oder nicht vorhersagbaren Datenkonflikten führen kann. Gerade hier sind passende Tools wie die Intel Threading Building Blocks von großer Bedeutung, da diese zum einen Aufgaben in Threads verwandeln und sich zum anderen um die parallele Speicherverwaltung kümmern.
In der Praxis trifft man natürlich sehr häufig auf eine Mischform von Aufgaben- und Datenparallelismus, das so genannte Pipelining. Hierbei ist die Anwendung in viele unterschiedliche Aufgaben unterteilt, innerhalb derer Daten parallel verarbeitet werden können. Ein bekanntes Beispiel hierfür ist wieder die Bildbearbeitung: Ein Bild wird geöffnet, mit einem Filter versehen, in eine andere Auflösung skaliert und abschließend gespeichert.
In allen genannten Fällen werden jeweils viele tausend Pixel berechnet, und die Aufgaben können teilweise parallel, teilweise aber nur sequenziell ausgeführt werden. Außerdem ist die Gefahr von Datenkonflikten recht hoch. Gerade im Falle des Pipelining ist die Wahl der besten Programmiermethode von entscheidender Bedeutung. Denn in den allermeisten Fällen ist eine 100-Prozent-Parallelisierung von Software weder möglich noch sinnvoll.



Kommentare
Keine Kommentare vorhanden.