Software Pipelining

Software Pipelining

Software Pipelining bezeichnet die Programmierung eines Prozessors mit mehreren Ausführungseinheiten, sodass möglichst viele von ihnen gleichzeitig beschäftigt sind. Das Verfahren dient also dazu, die Zeit für eine Berechnung zu verkürzen, indem mehrere parallele Ausführungseinheiten gleichzeitig rechnen.

Software Pipelining dient der Parallelverarbeitung von Befehlen eines einzelnen Threads (engl. Instruction Level Parallelism). Im Gegensatz zu der Parallelverarbeitung von Befehlen, die von modernen Prozessoren sowieso unterstützt wird, spricht man von Software Pipelining dann, wenn dieselbe Berechnung auf einen Vektor von Eingabedaten durchgeführt wird (also eine Form von SIMD) und besonderes Augenmerk auf die Anordnung der Befehle im Befehlsstrom (engl. Instruction stream) gelegt wurde.

Im Gegensatz zu einer Pipeline innerhalb eines Prozessors, die die einzelnen Verarbeitungsschritte eines 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.

Beispiel: Es soll y = (x + 3) * 2 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:


Takt i Speichereinheit A Ausführungseinheit A Ausführungseinheit B Speichereinheit B
1 0 r(0) = x(0)
2 1 r(1) = x(1) r(0) = r(0) + 3
3 2 r(2) = x(2) r(1) = r(1) + 3 r(0) = r(0) * 2
4 3 r(3) = x(3) r(2) = r(2) + 3 r(1) = r(1) * 2 y(0) = r(0)
...
j + 1 j r(j) = x(j) r(j - 1)) = r(j - 1) + 3 r(j - 2) = r(j - 2) y(j - 3) = r(j - 3)
...
n + 3 n + 2 y(n - 1) = r(n - 1)

Legende:

  • i ist der aktuelle Index
  • in der 2. Spalte sieht man die Berechnung, die von Ausführungseinheit A durchgeführt wird
  • r(i) ist dabei ein Register, das den Zwischenschritt der Berechnung speichert


Software Pipelining setzt voraus, dass der Prozessor mehr als einen Befehl gleichzeitig dekodieren und ausführen kann.

Der Begriff Pipelining kommt daher, dass die einzelnen Schritte einer Berechnung 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.

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.


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Software pipelining — In computer science, software pipelining is a technique used to optimize loops, in a manner that parallels hardware pipelining. Software pipelining is a type of out of order execution, except that the reordering is done by a compiler (or in the… …   Wikipedia

  • Cell software development — Software development for the cell microprocessor involve a mixture of conventional development practices for the POWER architecture compatible PPU core, and novel software development challenges with regards to the functionally reduced SPU… …   Wikipedia

  • HTTP pipelining — is a technique in which multiple HTTP requests are written out to a single socket without waiting for the corresponding responses. Pipelining is only supported in HTTP/1.1, not in 1.0.The pipelining of requests results in a dramatic improvement… …   Wikipedia

  • Программная конвейеризация — циклов (англ. software pipelining)  это техника, используемая компиляторами, для оптимизации циклов, по аналогии с вычислительным конвейером в микропроцессорах. Является формой внеочередного исполнения с той разницей, что… …   Википедия

  • Compiler optimization — is the process of tuning the output of a compiler to minimize or maximize some attributes of an executable computer program. The most common requirement is to minimize the time taken to execute a program; a less common one is to minimize the… …   Wikipedia

  • Pipeline (Begriffsklärung) — Eine Pipeline (Englisch „Rohrleitung“, von pipe „Rohr, Röhre“ und line „Linie, Leitung, Verbindung“) ist: ein Rohrleitungssystem zum Transport von Flüssigkeiten oder Gasen, siehe Pipeline, in der Massenproduktion eine „Bearbeitungsröhre“, siehe… …   Deutsch Wikipedia

  • Open64 — Developer(s) Silicon Graphics, Inc., Institute of Computing Technology, Chinese Academy of Sciences, Hewlett Packard, University of Delaware Initial release 2002 Stable release 5.0 / November 10, 2011; 9 days ago ( …   Wikipedia

  • Cydrome — was a computer company started in 1984 in San Jose, California whose mission was to develop a numeric processor. The founders were David Yen, Wei Yen, Ross Towle, Arun Kumar, and Bob Rau (the chief architect). In order to improve performance in a …   Wikipedia

  • Stream Processors, Inc — Infobox Company company name = Stream Processors Incorporated (SPI) company company type=Private foundation = 2004 location=455 DeGuigne Drive Sunnyvale, California flagicon|USA USA key people =Bill Dally, Co Founder and Chairman Chip Stearns,… …   Wikipedia

  • Codeplay — Software Limited is a compiler and software tools developer based in Edinburgh, Scotland. Codeplay develop C/C++ compilers for multi core and special purpose processor architectures, offering their Sieve C++ Multicore Programming System as a… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.