Zum Inhalt springen

Vektorprozessor

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 15. Juni 2005 um 14:48 Uhr durch Jemmp (Diskussion | Beiträge) (Vektorprozessor bei der Arbeit). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Vektorprozessoren führen eine Berechnung gleichzeitig auf vielen Daten (in einem Vektor bzw. Array) aus. Wenn viele gleichartige Daten auf gleiche Weise bearbeitet werden sollen (beispielsweise bei Matrizenoperationen), so sind Vektorprozessoren reinen General Purpose Prozessoren weit überlegen, die jedes Datum nacheinander bearbeiten.

Vektorprozessoren werden vor allem im High-Performance-Computing genutzt. Die legendären Cray-Supercomputer nutzten Vektorprozessoren und der über mehrere Jahre hinweg leistungsfähigste Computer der Welt, der Earth Simulator, arbeitet mit Vektorprozessoren von NEC. Gerade in HPC-Anwendungen fallen oft viele gleichartige Daten an, die auf ähnliche Weise verarbeitet werden sollen, so zum Beispiel bei Simulationen in der Meteorologie und Geologie, wo vielfach Vektorrechner verwendet werden.

Vektorrechner haben in den letzten Jahren große Konkurrenz durch massiv parallel aufgebaute Rechencluster bekommen, die aus vielen Tausend Standardprozessoren aufgebaut sind. Durch den Rückgriff auf Standardkomponenten, die über den HPC-Sektor hinaus verbreitet sind lassen sich Kosten sparen zumal solche Standardprozessoren durch die intensive technologische Entwicklung sehr leistungsfähig geworden sind.

Wegen der Vorteile die sich durch die gleichzeitige Ausführung einer Rechenoperation auf mehreren Daten ergeben (Single Instruction, Multiple Data, SIMD) haben auch Standardprozessoren seit den 1990er Jahren Erweiterungen der jeweiligen Architektur erfahren um diese Art von Berechnungen zu beschleunigen. Siehe dazu MMX, 3DNow!, AltiVec, SSE, SSE2.

Neben der oben genannten Anwendungen für Vektorprozessoren gehört auch die graphische Simulation zu einer Hauptanwendung. Gerade aufwendige 3D-Spiele verlangen enorm viele Berechnungen (Matrizenoperationen auf 3D-Koordinaten, Anti-Aliasing der Bildschirmausgabe) auf großen Datenmengen, weshalb heutige Grafikprozessoren große Ähnlichkeiten zu reinen Vektorprozessoren aufweisen.

Vektorprozessor bei der Arbeit

Anhand eines einfachen Beispiels soll der Unterschied zwischen Skalar- und Vektorprozessor ausgezeigt werden.

X und Y sind zwei Vektoren gleicher Länger und a ist eine skalar Grösse. Diese Problem wird auf Skalarprozessoren durch eine Schleiche gelöst. Die gleiche Schleife wird auch im Linpack Benchmark verwendet um die Leistung der getesteten Rechner zu bestimmen. In C-Syntax sieht das folgendermassen aus:

for (i=0; i <= 63; i++)
  Y[i] = a * X[i] + Y[i];

Hier wird angenommen dass die Vektoren eine Länge von 64 Zeilen haben.

In MIPS-Code sieht diese Programmfrakment folgendermassen aus:

       L.D     F0, a          ; skalar a laden
       DADDIU  R4, Rx, #512   ; letzte Adresse 512/8 = 64
Loop:  L.D     F2, 0(Rx)      ; X(i) laden
       MUL.D   F2, F2, F0     ; a * X(i)
       L.D     F4, 0(Ry)      ; Y(i) laden
       ADD.D   F4, F4, F2     ; a * X(i) + Y(i)
       S.D     0(Ry), F4      ; Y(i) speichern
       DADDIU  Rx, Rx, #8     ; Index (i) von X inkremntieren
       DADDIU  Rx, Rx, #8     ; Index (i) von Y inkremntieren
       DSUBU   R20, R4, Rx    ; Rand berechnen
       BNEZ    R20, Loop      ; wenn 0, dann fertig

In VMIPS-Code sieht das ganz jedoch so aus

L.D      F0, a       ; Skalar a laden
LV       V1, Rx      ; Vector X laden
MULVS.D  V2, V1, F0  ; Vector-Skalar Multiplikation
LV       V3, Ry      ; Vector Y laden
ADDV.D   V4, V2, V3  ; Vektor Addition
SV       Ry, V4      ; Resultat speichern

Diese Beispiel zeigt wie elegant der Vektorprozessor die Aufgabe löst. Bei VMIPS genügen 6 Befehle, während bei MIPS 64*9 + 2 = 578 Befehle ausgeführt wurden. Hauptsächlich entfällt die Schleife. Bei VMIPS muss also nur ein Bruchteil der Befehle aus dem Speicher geholt und dekodiert werden.

Bei der MIPS-Architektur werden Multiplikation und Additionen abwechseln ausgeführt, d.h. die Addition müss immer auf die längsamere Multiplikation warten. Beim Vektorrechner hingegen werden zuerst alle unabhängigen Multiplikationen ausgeführt und darauffolgend alle abhängigen Additionen. Dies ist ein weiterer bedeutender unterschied