Multithreading
Multithreading
Als Multithreading oder Multithreaded werden Anwendungen bezeichnet, deren Berechnungen in einzelne Teilprozesse aufgeteilt werden können. Sehr geeignet dafür sind Berechnungen, die sehr oft durchgeführt werden müssen und die unabhängig von den übrigen Berechnungen sind. Ein Beispiel ist die Aufhellung eines Bildes. Bei dieser werden die Helligkeitswerter der einzelnen Bildpunkte mit einem weiteren Wert addiert. Anstatt von einem Prozessor einen Bildpunkt nach dem anderen berechnen zu lassen (Single Thread), kann jedem verfügbaren Prozessorkern eine Bildzeile zugewiesen werden, deren Bildpunkte bearbeitet werden (Multithreading). Dadurch würde sich die Geschwindigkeit der Bildaufhellung im optimalen Fall vervielfachen.
Auch die Videobearbeitung eignet sich prinzipiell relativ gut um im Multihread-Verfahren bearbeitet zu werden, da den einzelnen Prozessoren bzw. Rechenkernen einzelne Bildzeilen oder Bilder zur verteilten, gleichzeitigen Bearbeitung zugewiesen werden können.
Einschränkungen bestehen, wenn Berechnungen auf Werte anderer Threads angewiesen sind. Das kann auch bei der Bild- und Videobearbeitung auftreten, wenn etwa zur Kantenglättung Werte aus Bildzeilen erforderlich sind, die von anderen Kernen bearbeitet werden.
Voraussetzungen für Multithreading
Damit die Vorteile von Multithreading genutzt werden können, müssen einige Voraussetzungen erfüllt sein. Zunächst muss sich die Software dazu eignen, also für Multithreading programmiert worden sein. Außerdem muss das Betriebssystem Multithreading unterstützen. Das ist bei allen modernen Betriebssystemen der Fall. Zuletzt muss auch die Hardware geeignet sein. Mehrkern-Prozessoren sind von Haus aus für Multithreading ausgelegt. Ein Sonderfall sind Prozessoren von Intel, die Hyperthreading unterstützen. Sie simulieren die doppelte Anzahl von physikalisch vorhandenen Prozessoren und unterstützen Multithreading auch, wenn nur ein physikalischer Prozessorkern vorhanden ist. Allerdings wird Hyperthreading wirkungsloser je besser die Software Hyperthreading ausnutzt, während echte Multikernprozessoren davon profitieren.