Software für Multi-Core-CPUs optimieren

Programmieren für Multi-Core-Prozessoren

Parallelverarbeitung auf Instruktions-Ebene

Um die Parallelverarbeitung voranzutreiben, wurden verschiedene Techniken eingeführt, die eine Parallelisierung eines sequentiellen Programms ermöglichen sollten. Als Parallelverarbeitung in diesem Kontext wird jegliche Form der parallelen Abarbeitung von Code verstanden.

Dazu zählt auch die vorbereitende Analyse der Instruktionen oder das Laden aus dem Arbeitsspeicher. Die ursprünglichen Ansätze der Parallelverarbeitung subsumieren sich in den Techniken des „Instruction Level Parallelism“ (ILP) mit „Instruction Pipelining“, „Speculative Execution“, “Out-of-order execution” oder „Branch Prediction“. Dabei wird versucht, durch die parallele Abarbeitung von Instruktionen einen Zeitvorteil zu erreichen.

Beim „Instruction Pipelining“ etwa wird der Code durch eine Pipeline geschleust und so schon vor der Ausführung untersucht. Passende Instruktionen, die sich parallel ausführen lassen, benötigen weniger Takte und Gesamtdurchlaufzeit.

In der „Out-of-order execution“ schließlich führt man Instruktionen immer dann parallel aus, wenn sie keine Datenabhängigkeit besitzen. Die Initiierung einer Variablen für eine Schleife könnte so, wenn es nicht bereits durch den Compiler oder Loader passiert, als „Out-of-order execution“ abgearbeitet werden.