Um eine Verarbeitungssteigerung zu erzielen, wich man sehr früh von dem von-Neumann-Rechner ab. Aus der Befehlsabarbeitung des Urrechners ist erkennbar, dass während die Operation von der ALU ausgeführt wird, das Speicherwerk und das Leitwerk nicht ausgelastet sind.
Beim Pipelining verarbeitet der Prozessor einen Befehl in mehreren Stufen. Das kann beispielsweise so aussehen:
Prinzip einer 4-stufige Pipeline
Lange bevor der Befehl restlos abgearbeitet ist, also durch die letzte Stufe hindurch ist, kann der Prozessor bereits mit der Bearbeitung des nächsten Befehls beginnen. Im Idealfall lässt sich so in jedem Takt ein neuer Befehl nachschieben. Bei einer fünfstufigen Pipeline, etwa der eines 486-Prozessors, hat man dann bis zu fünf Befehle in unterschiedlichen Stadien gleichzeitig in Bearbeitung. Obwohl die eigentliche Durchlaufzeit (Latenzzeit) eines Befehls fünf Takte beträgt, liegt der Performance-relevante Durchsatz (Throughput) bei einem Befehl pro Takt.
Die Idee des Pipelining ist, die einzelnen Ausführungsphasen des Prozessors zu überlappen, um jede Einheit möglichst gleichmäßig und ohne Unterbrechungen arbeiten zu lassen.
Die Aufteilung des Maschinenbefehls in mehrere Teilaufgaben ermöglicht es, dass pro Teilaufgabe weniger Arbeitsaufwand entsteht. Eine lange Pipeline hat aber auch wegen der unvorhersehbareren Sprünge Nachteile.
Beim Pentium 4 gibt es beispielsweise eine 20 stufige Integer-Pipeline (PIII 10, Athlon 11 Stufen).
Weiterentwicklungen bleiben nicht aus. Eines der wesentlichen Neuerungen des Pentium 4 ist es beispielsweise, den einmal in µOPs übersetzten Code in einem Cache (Trace Execution Cache; TEC) zwischenzuspeichern, sodass man sich das wiederholte Dekodieren sparen kann. Daher beginnt bei Intel die Pipeline erst hinter diesem Cache.
Was tut eine Pipeline, wenn eine bedingte Verzweigung stattfinden soll und es nicht klar ist, dass der nächste Befehl überhaupt ausgeführt werden soll?
Grundsätzlich gibt es zwei Typen von Pipelinekonflikten: