www.wikidata.de-de.nina.az
Die Informationen in diesem Artikel sind nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Die vorhandenen Weblinks sollten durch reputable Sekundarliteratur erganzt werden Mai 2016 Die Pipeline auch Befehls Pipeline oder Prozessor Pipeline bezeichnet bei Mikroprozessoren eine Art Fliessband mit dem die Abarbeitung der Maschinenbefehle in Teilaufgaben zerlegt wird die fur mehrere Befehle parallel durchgefuhrt werden Dieses Prinzip oft auch kurz Pipelining genannt stellt eine weit verbreitete Mikroarchitektur heutiger Prozessoren dar Statt eines gesamten Befehls wird wahrend eines Taktzyklus des Prozessors nur jeweils eine Teilaufgabe abgearbeitet allerdings werden die verschiedenen Teilaufgaben mehrerer Befehle dabei gleichzeitig bearbeitet Da diese Teilaufgaben einfacher und somit schneller sind als die Abarbeitung des gesamten Befehls am Stuck kann durch Pipelining die Effizienz der Taktfrequenz des Mikroprozessors gesteigert werden Insgesamt benotigt ein einzelner Befehl nun mehrere Takte zur Ausfuhrung da aber durch die quasi parallele Bearbeitung mehrerer Befehle in jedem Zyklus ein Befehl fertiggestellt wird wird der Gesamtdurchsatz durch dieses Verfahren erhoht Die einzelnen Teilaufgaben einer Pipeline nennt man Pipeline Stufen Pipeline Stages oder auch Pipeline Segmente Diese Stufen werden durch getaktete Pipeline Register getrennt Neben einer Befehls Pipeline kommen in modernen Systemen verschiedene weitere Pipelines zum Einsatz beispielsweise eine Arithmetik Pipeline in der Gleitkommaeinheit Inhaltsverzeichnis 1 Beispiel 2 Taktung 3 Leistungssteigerung 4 Konflikte 5 Vorteile und Nachteile 6 Ausnutzung durch Software 6 1 Einsatz von Flags anstatt konditionaler Sprunge 6 2 Springen im selteneren Fall 6 3 Abwechseln von verschiedenen Ressourcen 7 Siehe auch 8 Literatur 9 WeblinksBeispiel BearbeitenBeispiel einer vierstufigen Befehlspipeline nbsp A Befehlscode laden IF Instruction Fetch In der Befehlsbereitstellungsphase wird der Befehl der durch den Befehlszahler adressiert ist aus dem Arbeitsspeicher geladen Der Befehlszahler wird anschliessend hochgezahlt B Instruktion dekodieren und Laden der Daten ID Instruction Decoding In der Dekodier und Ladephase wird der geladene Befehl dekodiert 1 Takthalfte und die notwendigen Daten aus dem Arbeitsspeicher und dem Registersatz geladen 2 Takthalfte C Befehl ausfuhren EX Execution In der Ausfuhrungsphase wird der dekodierte Befehl ausgefuhrt Das Ergebnis wird durch den Pipeline latch gepuffert D Ergebnisse zuruckgeben WB Write Back In der Resultatspeicherphase wird das Ergebnis in den Arbeitsspeicher oder in den Registersatz zuruckgeschrieben Taktung BearbeitenJe einfacher eine einzelne Stufe aufgebaut ist desto hoher ist die Frequenz mit der sie betrieben werden kann In einer modernen CPU mit einem Kerntakt im Gigahertz Bereich 1 GHz 1 Milliarde Takte pro Sekunde kann die Befehlspipeline uber 30 Stufen lang sein vgl Intel NetBurst Mikroarchitektur Der Kerntakt ist die Zeit die ein Befehl braucht um eine Stufe der Pipeline zu durchwandern In einer k stufigen Pipeline wird ein Befehl also in k Takten von k Stufen bearbeitet Da in jedem Takt ein neuer Befehl geladen wird verlasst im Idealfall auch ein Befehl pro Takt die Pipeline Der Takt wird durch die Zykluszeit der Pipeline bestimmt und berechnet sich aus dem Maximum t m displaystyle tau m nbsp aller Stufenverzogerungen t i displaystyle tau i nbsp und einem Zusatzaufwand d displaystyle d nbsp welcher durch die Zwischenspeicherung der Ergebnisse in Pipeline Registern verursacht wird Zykluszeit t max i t i d t m d displaystyle tau underset i max tau i d tau m d nbsp Leistungssteigerung BearbeitenDurch das Pipelining wird der Gesamtdurchsatz gegenuber Befehlsabarbeitung ohne Pipelining erhoht Die Gesamtzeit fur die Pipeline Verarbeitung mit k displaystyle k nbsp Stufen und n displaystyle n nbsp Befehlen bei einer Zykluszeit t displaystyle tau nbsp ergibt sich aus Gesamtlaufzeit T k k n 1 t displaystyle T k k n 1 cdot tau nbsp Anfangs ist die Pipeline leer und wird in k t displaystyle k cdot tau nbsp Schritten gefullt Nach jeder Stufe wird ein neuer Befehl in die Pipeline geladen und ein anderer Befehl wird fertiggestellt Die restlichen Befehle werden daher in n 1 t displaystyle n 1 cdot tau nbsp Schritten fertiggestellt Bildet man nun den Quotienten aus der Gesamtlaufzeit fur Befehlsabarbeitung mit und ohne Pipelining so erhalt man den Speedup Dieser reprasentiert den Leistungsgewinn der durch das Pipelining Verfahren erreicht wird Speed Up S k n k t k n 1 t n k k n 1 displaystyle S k frac n cdot k cdot tau k n 1 tau frac n cdot k k n 1 nbsp Geht man davon aus dass immer genugend Befehle vorhanden sind welche die Pipeline fullen und dass die Zykluszeit ohne Pipeline um den Faktor k displaystyle k nbsp langer ist dann ergibt sich der Grenzwert des Speed Ups fur n gegen unendlich lim n S k lim n n k k n 1 k displaystyle lim n to infty S k lim n to infty frac n cdot k k n 1 k nbsp Das bedeutet dass mit zunehmender Stufenanzahl k displaystyle k nbsp die Leistung beliebig gesteigert werden kann Jedoch lasst sich die Befehlsabarbeitung nicht in beliebig viele Stufen unterteilen und die Zykluszeit t displaystyle tau nbsp kann auch nicht beliebig kleiner werden Eine Steigerung der Stufenanzahl hat ebenfalls schwerere Auswirkungen beim Auftreten von Daten oder Steuerungskonflikten zur Folge Ebenfalls steigt der Aufwand der Hardware mit steigender Stufenanzahl k displaystyle k nbsp Konflikte Bearbeiten Hauptartikel Pipeline Hazard Ist es fur die Bearbeitung eines Befehls in einer Stufe der Pipeline notwendig dass ein Befehl der sich weiter vorne in der Pipeline befindet zuerst abgearbeitet wird so spricht man von Abhangigkeiten Diese konnen zu Konflikten engl Hazards fuhren Es konnen drei Konfliktarten auftreten Ressourcenkonflikte wenn eine Stufe der Pipeline Zugriff auf eine Ressource benotigt die bereits von einer anderen Stufe belegt ist Datenkonflikte auf Befehlsebene Daten die in einem Befehl benutzt werden stehen nicht zur Verfugung auf Transferebene Registerinhalte die in einem Schritt benutzt werden stehen nicht zur Verfugung Kontrollflusskonflikte wenn die Pipeline abwarten muss ob ein bedingter Sprung ausgefuhrt wird oder nichtDiese Konflikte erfordern es dass entsprechende Befehle am Anfang der Pipeline warten stallen was Lucken auch Bubbles in der Pipeline erzeugt Dies fuhrt dazu dass die Pipeline nicht optimal ausgelastet ist und der Durchsatz sinkt Daher ist man bemuht diese Konflikte so weit wie moglich zu vermeiden Ressourcenkonflikte lassen sich durch Hinzufugen zusatzlicher Funktionseinheiten losen Viele Datenkonflikte lassen sich durch Forwarding losen wobei Ergebnisse aus weiter hinten liegenden Pipeline Stufen nach vorn transportiert werden sobald diese verfugbar sind und nicht erst am Ende der Pipeline Die Anzahl an Kontrollflusskonflikten lasst sich durch eine Sprungvorhersage engl branch prediction und eine verzweigungslosen Programmierung engl Branchless Programming reduzieren Bei ersterem wird spekulativ weitergerechnet bis feststeht ob sich die Vorhersage als richtig erwiesen hat Im Falle einer falschen Sprungvorhersage mussen in der Zwischenzeit ausgefuhrte Befehle verworfen werden pipeline flush was besonders bei Architekturen mit langer Pipeline wie etwa bei Intel Pentium 4 oder IBM Power5 viel Zeit kostet Deshalb besitzen diese Architekturen sehr ausgeklugelte Techniken zur Sprungvorhersage so dass die CPU nur in weniger als einem Prozent der stattfindenden Sprunge den Inhalt der Befehlspipeline verwerfen muss Bei der verzweigungslosen Programmierung Branchless Programming wird der Programmcode so geschrieben dass er moglichst ohne Bedingte Anweisungen auskommt Vorteile und Nachteile BearbeitenDer Vorteil langer Pipelines besteht in der starken Steigerung der Verarbeitungsgeschwindigkeit Der Nachteil besteht gerade darin dass sich sehr viele Befehle gleichzeitig in Bearbeitung befinden Im Falle eines Pipeline Flushes mussen alle Befehle in der Pipeline verworfen und die Pipeline anschliessend neu gefullt werden Dies bedarf des Nachladens von Befehlen aus dem Arbeitsspeicher oder dem Befehlscache der CPU so dass sich hohe Latenzzeiten ergeben in denen der Prozessor untatig ist Anders formuliert ist der Gewinn durch Pipelining umso grosser je hoher die Anzahl der Befehle zwischen Kontrollflussanderungen ist da die Pipeline dann erst nach langerer Benutzung unter Volllast wieder geflusht werden muss Ausnutzung durch Software BearbeitenDas Wissen uber das Vorhandensein der Pipelines kann vom Programmierer geschickt genutzt werden um den Prozessor optimal auszulasten Insbesondere die Kontrollflusskonflikte lassen sich vermeiden Einsatz von Flags anstatt konditionaler Sprunge Bearbeiten Wenn auf einer Architektur ein Ubertragsbit Carry Flag vorhanden ist und Befehle die es in Rechenbefehle einfliessen lassen so kann man es nutzen um Boolesche Variablen zu setzen ohne zu verzweigen Beispiel 8086 in Intel Syntax d h in der Form command destination source weniger effizient mov FLUSH FLAG 0 FLUSH FLAG false mov ax CACHE POINTER cmp ax CACHE ENDE jb MARKE jump on below lt 0 Verzweigung mov FLUSH FLAG 1 FLUSH FLAG true MARKE effizienter mov FLUSH FLAG 0 mov ax CACHE POINTER cmp ax CACHE ENDE cmc complement carry flag adc FLUSH FLAG 0 FLUSH FLAG FLUSH FLAG 0 carry flag keine Verzweigung Springen im selteneren Fall Bearbeiten Wenn bei einer Verzweigung bekannt ist welcher Fall wahrscheinlicher ist so sollte im unwahrscheinlicheren Fall verzweigt werden Wenn z B ein Block nur in seltenen Fallen ausgefuhrt wird so sollte er bei Nichtausfuhrung nicht ubersprungen werden wie es in der strukturierten Programmierung gemacht wurde sondern ganz woanders stehen per konditionalem Sprung angesprungen werden und per unkonditionalem Sprung zuruckkehren sodass im Normalfall nicht verzweigt wird Beispiel 8086 viele Verzweigungen PROZEDUR inc cx cmp cx 100 jb MARKE Verzweigung im Normalfall 99 von 100 xor cx cx MARKE wenige Verzweigungen MARKEA xor cx cx jmp MARKEB PROZEDUR inc cx cmp cx 100 jnb MARKEA Verzweigung nur im Ausnahmefall 1 von 100 MARKEB Abwechseln von verschiedenen Ressourcen Bearbeiten Da Speicherzugriffe sowie der Einsatz der Arithmetisch logischen Einheit relativ lange brauchen kann es helfen verschiedene Ressourcen moglichst abwechselnd zu benutzen Beispiel 8086 weniger effizient div CS DIVISOR Speicherzugriffe mov DS REST dx nahe hintereinander mov ES QUOTIENT ax mov cx 40 h cld MARKE loop MARKE effizienter div CS DIVISOR Speicherzugriffe mov cx 40 h mov DS REST dx mit anderen cld mov ES QUOTIENT ax Befehlen durchsetzt MARKE loop MARKE Siehe auch BearbeitenDLX Pipeline Hardwareseitiges Multithreading Hyper Threading SuperskalaritatLiteratur BearbeitenAndrew S Tanenbaum Computerarchitektur Strukturen Konzepte Grundlagen 5 Auflage Pearson Studium Munchen 2006 ISBN 3 8273 7151 1 insb Kapitel 2 1 5 Weblinks BearbeitenArtikel uber Pipelining Teil 1 Teil 2 arstechnica com englisch Ausarbeitung zu Grundlagen der Rechnerarchitektur insbesondere Kapitel 6 Pipelining Abgerufen von https de wikipedia org w index php title Pipeline Prozessor amp oldid 236288475