<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Software_Pipelining</id>
	<title>Software Pipelining - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Software_Pipelining"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Software_Pipelining&amp;action=history"/>
	<updated>2026-05-19T21:15:00Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Software_Pipelining&amp;diff=600625&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Software_Pipelining&amp;diff=600625&amp;oldid=prev"/>
		<updated>2025-11-07T02:19:19Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Software Pipelining&amp;#039;&amp;#039;&amp;#039; ist ein [[Entwurfsmuster]] zur [[Programmierung]] eines [[Prozessor (Software)|Prozessors]] mit mehreren Ausführungseinheiten, sodass möglichst viele von ihnen gleichzeitig beschäftigt sind. Das Verfahren dient dazu, die Zeit für eine Berechnung zu verkürzen, indem die Intraprozessorparallelität zur Berechnung genutzt werden kann. Diese sogenannten Befehlsfließbänder werden englisch als „Pipelines“ bezeichnet.&amp;lt;ref name=&amp;quot;Pister&amp;quot;&amp;gt;Markus Pister: &amp;#039;&amp;#039;Generisches Softwarepipelining auf Assemblerebene. – Kapitel 5: Softwarepipelining.&amp;#039;&amp;#039; S. 48.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hintergrund ==&lt;br /&gt;
Software Pipelining dient der Parallelverarbeitung von Befehlen eines einzelnen [[Thread (Informatik)|Thread]]s (engl. {{lang|en|&amp;#039;&amp;#039;Instruction Level Parallelism&amp;#039;&amp;#039;}}). Im Gegensatz zu der Parallelverarbeitung von Befehlen wird von Software Pipelining gesprochen, wenn dieselbe Berechnung auf einen Vektor von Eingabedaten durchgeführt wird (also eine Form von [[Flynnsche Klassifikation#SIMD (Single Instruction, Multiple Data)|SIMD]]) und besonderes Augenmerk auf die Anordnung der Befehle im Befehlsstrom (engl. {{lang|en|&amp;#039;&amp;#039;Instruction stream&amp;#039;&amp;#039;}}) gelegt wurde.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu einer [[Pipeline (Prozessor)|Pipeline]] innerhalb eines Prozessors, die die einzelnen Verarbeitungsschritte eines [[Maschinensprache|Maschinenbefehls]] aufteilt, sodass mehrere Befehle (in verschiedenen Stadien der Komplettierung) gleichzeitig bearbeitet werden können, sind an einer Software Pipeline mehrere Maschinenbefehle beteiligt, um eine Berechnung an einer Menge von Eingangsdaten auszuführen. Das bedeutet auch, dass das Software Pipelining explizit vom Programmierer beeinflusst wird und keine Eigenschaft oder Funktionalität des Prozessors ist, vielmehr werden die Eigenschaften Superskalarität und Pipelinearchitektur genutzt, die zusammen die parallele Ausführung von Befehlen ermöglichen. Im Gegensatz dazu kann die Prozessorpipeline vom Programmierer nicht manipuliert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Es soll &amp;lt;code&amp;gt;y = (x + 3) * 2&amp;lt;/code&amp;gt; durchgeführt werden, das heißt, ein Vektor von Werten x(i) soll elementweise um 3 erhöht und anschließend verdoppelt werden. Wenn der Prozessor zwei Ausführungseinheiten für Arithmetikbefehle hat, dann können diese wie folgt belegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Tabelle ist noch nicht fertig --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Takt||i||Speichereinheit A||Ausführungseinheit A||Ausführungseinheit B||Speichereinheit B&lt;br /&gt;
|-&lt;br /&gt;
|1||0||r(0) = x(0)||||||&lt;br /&gt;
|-&lt;br /&gt;
|2||1||r(1) = x(1)||r(0) = r(0) + 3||||&lt;br /&gt;
|-&lt;br /&gt;
|3||2||r(2) = x(2)||r(1) = r(1) + 3||r(0) = r(0) * 2||&lt;br /&gt;
|-&lt;br /&gt;
|4||3||r(3) = x(3)||r(2) = r(2) + 3||r(1) = r(1) * 2||y(0) = r(0)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | …&lt;br /&gt;
|-&lt;br /&gt;
|j + 1||j||r(j) = x(j)||r(j - 1)) = r(j - 1) + 3||r(j - 2) = r(j - 2) * 2||y(j - 3) = r(j - 3)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | …&lt;br /&gt;
|-&lt;br /&gt;
|n + 3||n + 2||||||||y(n - 1) = r(n - 1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Legende:&lt;br /&gt;
* i ist der aktuelle Index&lt;br /&gt;
* in der 2. Spalte sieht man die Berechnung, die von Ausführungseinheit A durchgeführt wird&lt;br /&gt;
* r(i) ist dabei ein Register, das den Zwischenschritt der Berechnung speichert&lt;br /&gt;
&lt;br /&gt;
Software Pipelining setzt voraus, dass der Prozessor mehr als einen Befehl gleichzeitig dekodieren und ausführen kann.&lt;br /&gt;
&lt;br /&gt;
Der Begriff Pipelining kommt von der Unterteilung einer auszuführenden [[Operation (Informatik)|Operation]] in einzelne Arbeitsschritte oder Stufen, die wie bei einem Fließband nacheinander ausgeführt werden. Da die Berechnung eines Wertes in einem Takt jeweils nur einen Schritt der Pipeline in Anspruch nimmt, können mehrere Datensätze (in verschiedenen Stadien der Komplettierung) gleichzeitig verarbeitet werden. Wenn sich eine Operation bereits im zweiten Arbeitsschritt befindet, kann in der vorherigen Stufe bereits mit der nächsten Operation begonnen werden.&amp;lt;ref name=&amp;quot;Pister&amp;quot; /&amp;gt; Allgemein wird Software Pipelining von allen superskalaren Prozessoren unterstützt, häufig mit Hilfe von [[Loop unrolling]] und [[Registerumbenennung]] im [[Compiler]]. Die [[IA-64]] unterstützt Software Pipelining besonders, loop unrolling ist nicht nötig, register renaming wird vom Prozessor während der Ausführung von der [[Register Stack Engine]] übernommen.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* M. Lam: &amp;#039;&amp;#039;Software Pipelining. An Effective Scheduling Technique for VLIW Machines.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;SIGPLAN notices.&amp;#039;&amp;#039; ACM, New York 1966, {{ISSN|0362-1340}}.&lt;br /&gt;
* Hongbo Rong, Alban Douillet, R. Govindarajan, Guang Gao: &amp;#039;&amp;#039;Code Generation for Single-Dimension Software Pipelining of Multi-Dimensional Loops.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;Code Generation and Optimization, 2004. CGO 2004. International Symposium on.&amp;#039;&amp;#039; ISBN 0-7695-2102-9, {{DOI|10.1109/CGO.2004.1281673}}.&lt;br /&gt;
* Markus Pister: &amp;#039;&amp;#039;[http://rw4.cs.uni-saarland.de/~pister/papers/GenSoftpipe.pdf Generisches Softwarepipelining auf Assemblerebene.]&amp;#039;&amp;#039; (Diplomarbeit) Universität des Saarlandes, Saarbrücken 2005.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* Beispiel für [https://homepage.cs.uiowa.edu/~ghosh/3-28-06.pdf &amp;#039;&amp;#039;Software Pipelining&amp;#039;&amp;#039;] auf homepage.cs.uiowa.edu (PDF; 279&amp;amp;nbsp;kB)&lt;br /&gt;
* Chris Aycock [http://insidehpc.com/2006/09/02/what-is-software-pipelining/ &amp;#039;&amp;#039;What is software pipelining?&amp;#039;&amp;#039;] in: &amp;#039;&amp;#039;Inside HPC.&amp;#039;&amp;#039; vom 2. September 2006.&lt;br /&gt;
* {{Cite web |last=Post |first=Daniel |title=Parallelität in der Intel IA – 64 Architektur |language=de |date=Januar 2002 |url=http://berrendorf.inf.fh-bonn-rhein-sieg.de/lehre/ws0102/vps2/Seminar_IA64_Post.pdf |archive-url=https://web.archive.org/web/20160304071122/http://berrendorf.inf.fh-bonn-rhein-sieg.de/lehre/ws0102/vps2/Seminar_IA64_Post.pdf |archive-date=2016-03-04 |url-status=dead |access-date=2025-07-28}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Technische Informatik]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>