Multiprocessing: Funktion & Besonderheiten

Performance-Fallen

Zwei Prozessoren bedeuten auch bei einer Mutithreaded-Applikation nicht, dass die Anwendung mit doppelter Geschwindigkeit läuft. Ein 1967 von Gene Amdahl aufgestelltes Gesetz beschreibt, wie der Performancegewinn einer Anwendung bei Verwendung mehrerer Prozessoren durch Threads eingeschränkt ist, die nicht parallelisiert werden können. Laut Amdahl skaliert eine Multithreaded-Anwendung nie linear mit der Anzahl der Prozessoren. Weitere Performance-Einbußen entstehen durch beschränkte Systemressourcen, wie der zur Verfügung stehenden Bandbreite des bei SMP-Systemen gemeinsam benutzen Arbeitsspeichers.

Programme, bei denen der Aufwand für die Synchronisierung von Threads und Daten höher ist als der Zeitgewinn durch parallele Abarbeitung, sind für Multithreading nicht geeignet. Sie würden in jedem Fall langsamer ablaufen als eine Singlethreaded-Variante - selbst bei mehreren CPUs. Besonders einfach und effektiv ist Multithreading hingegen, wenn sich große Datenmengen in unabhängige Segmente aufteilen lassen. Ein Beispiel ist die Bildbearbeitung mit aufwendigen Filtern: Das Bild wird in mehrere Regionen aufgeteilt, jeder Prozessor bearbeitet eine eigene Bildregion. Ähnlich verhält es sich bei zahlreichen wissenschaftlichen Anwendungen und Programmen für Ingenieure (Statik, Feldberechnungen, Strömungsmechanik etc.), die nach der Methode der finiten Elemente arbeiten. Dabei werden den Prozessoren jeweils bestimmte Bereiche eines zu berechnenden Netzes zugewiesen. Nach Abschluss der Einzelberechnungen werden die Teilergebnisse gemäß den festgelegten Randbedingen zusammengefasst.

In der Theorie müssten aber auch Singlethreaded-Anwendungen in einem Multiprozessorsystem schneller sein: Das Betriebssystem weist der Applikation eine CPU zu, während die zweite CPU den Betriebssystem-Overhead verarbeitet. Beobachtet man im Systemmonitor die Auslastung beider Prozessoren, so bestätigt sich diese Aufteilung.

Überprüft man aber die Performance einer Singlethreaded-Anwendung, so ist sie in einem Mulitprozessor-System meist niedriger als in einem Uniprozessor-PC. Gleiches gilt für Benchmark-Ergebnisse, wie sie beispielsweise die BAPCO-Suite mit ihren zahlreichen Singlethreaded-Anwendungen liefert. Die Erklärung: Beide Prozessoren stehen in ständiger Kommunikation und gleichen beispielsweise laufend ihre Cache-Inhalte ab. Dieser Overhead für die Synchronisierung bremst die jeweilige Anwendung.