Software für Multi-Core-CPUs optimieren

Programmieren für Multi-Core-Prozessoren

Code-Optimierungen

Neben diesen Verfahren steht die Code-Optimierung, die durch ausgefeilte Compiler-Techniken erreicht wird. Im folgenden Beispiel etwa sind die ersten beiden Operationen parallel ausführbar, da diese keine Abhängigkeit (Data Dependency) zueinander aufweisen. Bei der Parallelisierung dieses Codes muss aber unbedingt sichergestellt werden, dass die dritte Anweisung - die Summenbildung - erst dann ausgeführt wird, wenn die beiden Teilsummen ermittelt sind.

C = A + B
Z = X * Y
Sum = C + Z

Das Ziel der Compiler- und der CPU-Optimierung ist es, möglichst viele dieser parallelisierbaren Code-Abschnitte ausfindig zu machen und parallel abzuarbeiten. Dies ist allerdings nicht einfach, denn die eigentliche Programmierung und nahezu alle heute verwendeten Programmiersprachen und begleitenden Entwicklungs-Tools sind an sequenziellen Abläufen ausgerichtet.

Die Umsetzung eines sequentiellen Programms in parallele Codestücke wird durch die Techniken des „Instruction Level Parallelism“ zwar gefördert, hat aber auch ihre besonderen Anforderungen. Moderne CPUs setzen sich meist aus mehreren Modulen zusammen. Dies sind der Registersatz zur Zwischenspeicherung der Daten, die Arithmetical and Logical Unit (ALU, Rechenwerk) zur Berechnung der Operationen, sowie eine Dekodierlogik für die Befehle.