Multithreading in der Praxis

Teil 2: Programmieren für den Multi-Core-Prozessor

Parallelisierung in der Softwareentwicklung

Durch die Parallelisierung der Cores in einer Multi-Core-CPU ändert sich die Verantwortung für schnelleren Code. Bei Single-Core-CPUs, ob mit oder ohne ILP und Hyper-Threading, wurde der Leistungsgewinn allein durch eine Änderung in der CPU bzw. die Optimierungen der Compiler bewirkt. Nun aber sind die Software-Entwickler gefordert.

Optimalfall: Im besten Fall erreicht man ein lineares Verhältnis zwischen Anzahl Cores/CPUs und Performance der Anwendung.
Optimalfall: Im besten Fall erreicht man ein lineares Verhältnis zwischen Anzahl Cores/CPUs und Performance der Anwendung.

Denn nur dann, wenn die Programme auch „multithreaded“ entwickelt werden, erzielen sie den Leistungszuwachs. Dafür allerdings erhalten der Benutzer und die Applikation weitaus mehr an Rechenkraft. Richtig genutzt, kann die Applikation auf einem Dual-Core auch doppelt so schnell abgearbeitet werden, verglichen mit heutigen CPUs.

Die Herausforderungen für den Entwickler sind umso größer, je abstrakter die Technik der Software-Entwicklung war, die man bis dato anwandte. Entwickler die überwiegend auf so genannten „managed Runtime Environments“ (MRTEs) aufsetzen, sind dabei am meisten betroffen. Der Nutzen eines MRTE, wie Java oder .Net, besteht ja gerade darin, die technischen Details und Grundlagen des Betriebssystems, der Prozessverwaltung und ähnlicher Systemaufgaben vor dem Entwickler zu verbergen und ihm damit die Applikationsentwicklung einfacher zu machen. Durch die integrierten Funktionen der Laufzeitumgebung wandert die Programmierung einer Applikation näher an der Geschäftslogik und damit gleichzeitig weg von den internen Verwaltungstechniken und der CPU mit Speicher- und Prozessverwaltung.