Parallele Pipelinerechner
-
Die vorliegende Erfindung bezieht sich im allgemeinen auf
parallele Rechner und insbesondere auf einen verbesserten
Rechner mit einer parallelen und/oder Pipelinekonfiguration.
-
Computergrafik-Algorithmusverfahren stellen immer höhere
Anforderungen an Rechnersysteme, beispielsweise Algorithmen
für die komplexen Matrixmultiplikationen, die bei den
Umwandlungen von Grafikdatenelementen eine Rolle spielen. Diese
Anforderungen haben zu Überlegungen geführt, wie man
Prozessoren, üblicherweise Mikroprozessoren, besser konfiguriert
(parallel und/oder in Pipelinekonfiguration), so daß die
Rechenleistung schneller und effektiver erfolgen kann.
-
Ein Geometrierechner zur Grafikverarbeitung wird beschrieben
in "A VLSI Geometry Processor for Graphics", James Clark,
Computer, July 1980, Seiten 59-68. Der in diesem Dokument
beschriebene Rechner umfaßt eine ALU, drei Register und einen
Stapel und ist so ausgelegt, daß er parallele Additionen,
Subtraktionen und ähnliche Zweivariablenoperationen ausführt. Er
ist auf die parallele Anordnung für Matrixmultiplikationen
ausgerichtet. Die Programmierung und die Steuerung des im
Artikel von Clark beschriebenen Rechners ist jedoch sehr
komplex und erfordert eine externe Arbitrierungslogik.
-
EP-A-0201088 beschreibt einen parallelen Rechner, der eine
Mehrheit an Prozessoren umfaßt, die an Datenleitungen
angeschlossen sind, und der externe FIFO-Pufferspeicher verketten
kann, so daß die Eingabe jedes Rechners in den FIFO-Puffer-
speicher und die Ausgabe aus jedem FIFO-Pufferspeicher
unabhängig von den Betriebsbedingungen der anderen Rechner
ablaufen kann.
-
Eine Beschreibung der verdrahteten Logik ist beispielsweise in
E J McCluskey: "Logic Design Principles", Prentice Hall, 1986,
Seiten 142-144, enthalten. Es wird darauf hingewiesen, daß
eine der wichtigsten Anwendungen der verdrahteten Logik zur
Multiplexierung auf einen Bus dient.
-
Es ist ein Ziel der vorliegenden Erfindung, einen Rechner wie
beispielsweise einen Mikroprozessor bereitzustellen, der
parallel und/oder in Pipelineschaltung angeschlossen werden
kann und der in der Ausführung komplexer mathematischer
Operationen (beispielsweise Matrixmultiplikationen) im Vergleich zu
Rechnern der bisherigen Technologie relativ leicht zu
programmieren und zu steuern ist.
-
Gemäß der vorliegenden Erfindung wird ein Rechner
bereitgestellt, der eine Mehrzahl an parallel miteinander verknüpften
Prozessoren für den Empfang und die Verarbeitung eingegebener
Daten umfaßt, wobei jeder Rechner eine arithmetische logische
Einheit, einen FIFO-Ausgaberegisterstapel und ein Steuermittel
umfaßt, dadurch charakterisiert, daß: die Rechner
entsprechende Ausgabedatenleitungen besitzen, die so ausgerichtet und
miteinander verknüpft sind, daß das Ergebnis der Verarbeitung
der in einen einzelnen Rechner eingegebenen Daten am Ausgang
der miteinander verknüpften Mehrzahl an Rechnern vorhanden
ist, vorausgesetzt, die miteinander verbundenen Rechner (mit
Ausnahme des genannten einzelnen Rechners) weisen an ihren
Ausgabedatenleitungen einen vorbestimmten neutralen Wert auf;
und daß das Steuermittel so ausgerichtet ist, daß es die
eingegebenen Daten den einzelnen miteinander verknüpften Rechnern
zuordnet, das Schreiben der Ergebnisse seiner Verarbeitung der
eingegebenen Daten in seine dazugehörigen
FIFO-Ausgaberegisterstapel steuert und im Zusammenhang mit dem Schreiben der
Verarbeitungsergebnisse der einzelnen Rechner einen neutralen
Wert in die dazugehörigen FIFO-Ausgaberegisterstapel der
anderen Rechner schreibt, so daß der genannte vorbestimmte
neutrale Wert an den Ausgabedatenleitungen der genannten
anderen Rechner vorhanden ist, wenn auch die Ergebnisse der
genannten Verarbeitung an den Ausgabedatenleitungen des
Prozessors,
der die Verarbeitung ausführt, vorhanden sind,
wodurch die Ausgaben der miteinander verknüpften Rechner
sequenziert werden, so daß zu einem beliebigen Zeitpunkt nicht
mehr als ein Rechner an seinen Ausgabedatenleitungen die
Ergebnisse seiner Verarbeitung von eingegebenen Daten
aufweist.
-
Es wird bevorzugt, einen Rechner bereitzustellen, in dem die
Eingaben der Mehrzahl der Rechner parallel an einen Eingabebus
angeschlossen werden, und in dem die Ausgaben beispielsweise
an ein verdrahtetes AND angeschlossen werden, wobei zusätzlich
der Rechner Systemelemente zur Bereitstellung von Eingabedaten
und Steuerdaten für einen Teil der Berechnung besitzt, die in
einem Taktzyklus auf dem Eingabebus ausgeführt werden soll.
Die Steuerdaten steuern jeden der Rechner, um entsprechend
denjenigen Teil der Berechnung zu steuern, der dem jeweiligen
Rechner zugeteilt wurde, und um in jeden Ausgabe-FIFO-Stapel
das Ergebnis seiner Berechnung, oder aber einen neutralen
Wert, beispielsweise eine logische "1" zu setzen, je nach
seiner relativen Position in bezug auf die ausgeführte
Berechnung, so daß die Rechner mehrere Berechnungen ausführen, und
entweder ihren Teil der Berechnungsausgabe oder je nach dem
eine "1" als ihre Ausgabe für den richtigen logischen Fluß zur
Erzielung des endgültigen Ergebnisses setzen.
-
Die vorliegende Erfindung ermöglicht daher im Vergleich zu
Konfigurationen der bisherigen Technologie eine beträchtliche
Verbesserung des Kosten- und Geschwindigkeitsfaktors in
parallelen Pipelinerechnern. Sie macht durch eine externe
Arbitrierungslogik, die zu einer strikten Zeitteilungsmultiplexierung
führt, mit Hilfe eines Bus-Master/Slave-Protokolls eine
Steuerung mehrerer Rechner überflüssig.
-
Zur ausführlicheren Veranschaulichung der vorliegenden
Erfindung folgt nun eine beispielhafte Beschreibung der
vorliegenden Erfindung, wobei auf die folgenden begleitenden
Zeichnungen Bezug genommen wird:
-
Figur 1 zeigt ein Blockdiagramm eines Rechners gemäß einem
bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
-
Figur 2 zeigt ein Blockdiagramm eines einzelnen Rechners gemäß
einem bevorzugten Ausführungsbeispiel der vorliegenden
Erfindung.
-
Figuren 3A und 3B sind Darstellungen der Inhalte der Ausgabe-
FIFOs mehrerer Rechner gemäß der vorliegenden Erfindung, die
parallel miteinander verknüpft sind.
-
Figur 4 zeigt ein ausführlicheres Diagramm des Ausgabe-FIFOs
des in Figur 2 dargestellten Rechners.
-
Figur 5 zeigt ein ausführlicheres Diagramm der Inhalte der
Ausgabe-FIFO-Steuerungen des in Figur 4 dargestellten Ausgabe-
FIFOs.
-
Figur 6 zeigt das Statusdiagramm und die nächsten
Statusgleichungen für die in Figur 5 dargestellte Statusmaschine.
-
Figur 7 zeigt ein ausführlicheres Diagramm des Eingabe-FIFOs
des in Figur 2 dargestellten Rechners.
-
Figur 8 zeigt die Inhalte der Eingabe-FIFO-Steuerungen des in
Figur 7 dargestellten Eingabe-FIFOs.
-
Figur 8 ist ein auf Figur 1 basierendes Diagramm, das die
Verbindung von vier Rechnern gemäß dem bevorzugten
Ausführungsbeispiel der vorliegenden Erfindung zeigt.
-
Figuren 10A und 10B sind Diagramme, die den Diagrammen der
Figuren 3A und 3B ähneln.
-
Figuren 11A und 11B sind Diagramme, die den Diagrammen der
Figuren 10A und 10B ähneln.
-
Figur 1 stellt einen Rechner 10 dar, der eine parallele
Konfiguration sowie eine Pipelinekonfiguration der Rechner 12-28
umfaßt. Eine solche Rechnerkonfiguration ist beispielsweise
dann wünschenswert, wenn mehrere Multiplikationen wie
beispielsweise Matrixmultiplikationen ausgeführt werden
sollen. Die Pipelineverarbeitung und die parallele
Verarbeitung gestatten eine Multiplikation der Matrix in weniger
Zyklen, als dies unter Verwendung eines einzelnen Rechners
möglich ist.
-
Figur 2 ist ein Blockdiagramm eines Rechners gemäß einem
Ausführungsbeispiel der vorliegenden Erfindung, bestehend aus
einem Eingabe-FIFO 30, einem ALU 32, einem Ausgabe-FIFO 34 und
einer mikroprogrammierten Steuereinheit ("MCU") 36. Diese
Kombination bildet zusammen einen vollständigen einzelnen
Rechner wie beispielsweise einen der Rechner 12-28 (Figur 1).
Das wichtige an der vorliegenden Erfindung ist der Ausgabe-
FIFO 34 und seine Anschlüsse innerhalb und außerhalb des
Rechners, der dieses FIFO enthält.
-
Jeder dieser Rechner unterliegt der Steuerung seines MCU 36.
Diese Art von Steuereinheit ist bekannt. Sie ist so
konfiguriert, daß sie das Lesen der Daten von einem Eingabegerät aus,
die Funktionen des ALU 32 und das Schreiben in ein
Ausgabegerät steuern kann. Zusätzlich ist sie so konfiguriert, daß sie
den Status der EMPTY-Leitung 38 vom Eingabe-FIFO 30 und der
FULL-Leitung 40 vom Ausgabe-FIFO 34 testen und unter
geeigneten Bedingungen auf der Grundlage des Status dieser Leitungen
in Leerzyklen warten kann. Sie ist so konfiguriert, daß sie
Leerzyklen erzeugt, wenn das Mikroprogramm versucht, entweder
ein leeres Eingabe-FIFO 30 zu lesen oder ein volles Ausgabe-
FIFO 34 zu beschreiben. Sie führt kontinuierlich Leerzyklen
aus, bis ein anderer Rechner entweder Daten in seinen Eingabe-
FIFO 30 stellt oder aus seinem Ausgabe-FIFO 34 holt.
-
Die Funktionen des ALU 32 im bevorzugten Ausführungsbeispiel
umfaßt die Gleitkommamultiplikation und -addition, um eine
Hochgeschwindigkeitsberechnung der
Matrixmultiplikationsalgorithmen zu ermöglichen, da dies als eine wünschenswerte
Anwendung betrachtet wird. Das Eingabe-FIFO 30 ermöglicht eine
Pufferung, die einen reibungslosen Ablauf des Rechners
insbesondere in der Pipelineanordnung unterstützt. Im Aufbau ähnelt
es sehr dem Ausgabe-FIFO 34. Beide FIFOs werden nachfolgend
ausführlich beschrieben.
-
Die anderen in Figur 2 dargestellten Leitungen, nämlich die
DATA IN-Leitung 42, eine Schreibeingabe-FIFO-Leitung 44, die
INPUT FIFO POSITION AVAILABLE-Leitung 46, die ALU CONTROL-
Leitung 48, die CONDITION CODES-Leitung 50, die INPUT FIFO
READ-Leitung 52, die OUTPUT FIFO WRITE-Leitung 54, die ALU
BUS-Leitung 56, der INPUT FIFO BUS 58, die READ OUTPUT FIFO-
Leitung 60 und die DATA OUT-Leitung 62 sind allesamt
Standardleitungen mit implementierten Standardeigenschaften gemäß
bekannten Verfahren in der bisherigen Technologie. OUTPUT FIFO
DATA VALID 64 und HOLE-Leitung 66 werden nachfolgend aus
führlicher beschrieben.
-
Vor einer Beschreibung der Operation des in Figur 2 gezeigten
OUTPUT FIFO 34 wird eine kurze Beschreibung des Aufbaus eines
"Lochs" geliefert. Eine ausführlichere Beschreibung der
Operation eines "Lochs" folgt an späterer Stelle in diesem
Dokument.
-
Die Figuren 3A und 3B sind Darstellungen der Inhalte der
OUTPUT FIFOs 34A-D für die vier Rechner 12, 14, 16 bzw. 18. In
diesen Diagrammen stellt der Buchstabe "H" ein Daten-"Loch",
einen Platzhalter im FIFO-Register und keine Daten dar. Im
bevorzugten Ausführungsbeispiel wird ein Loch erzeugt, indem
alle "1" in diese Registerstelle geladen werden. Die
Registerinhalte sind beispielsweise das Ergebnis einer ausgeführten
Vektorberechnung, in der die Mengen X, Y, Z und W durch die
entsprechenden Rechner 12-18 parallel berechnet werden. Diese
Rechner sind so programmiert, daß ihre entsprechenden
Ergebnisse sequenziell an ihren Ausgängen erscheinen.
-
In Figur 3A erscheint das Ergebnis der Berechnung des Werts X
am Ausgang des FIFO 34A. An allen anderen OUTPUT FIFOs 34C-D
erscheinen Löcher. Wie oben bereits angeführt wurde, sind die
Ausgabetreiber der Ausgabe-FIFOs im bevorzugten
Ausführungsbeispiel offene Kollektoren. Da es sich bei den Löchern um
Daten-"1s" handelt, ist der Wert, der am Ausgabebus, an den
alle Ausgabe-FIFOs angeschlossen sind, erscheint, der Wert X;
die Inhalte der anderen Ausgabe-FIFOs spielen dabei keine
Rolle.
-
Figur 3B zeigt die Inhalte dieser Ausgabe-FIFOs einen Zyklus
später, wobei das Ergebnis der Y-Berechnung am Ausgang des
OUTPUT FIFO 34B geliefert wird. An allen anderen OUTPUT FIFOs
34A, C, D erscheinen Löcher. Es ist auf diese Weise
ersichtlich, wie durch das Laden der Löcher an geeigneten Stellen
parallele Berechnungen ausgeführt und die Ergebnisse dieser
Berechnungen sequenziell auf einen Ausgabebus, an den alle
parallelen Rechner angeschlossen sind, gesetzt werden können.
-
Wir kehren nun zu Figur 2 zurück. Das OUTPUT FIFO 34 ist ein
synchrones FIFO, weil es durch einen einzigen Systemtakt, der
an jedes Rechnerelement geleitet wird, getaktet wird. Die
Eingabeseite von OUTPUT FIFO 34 und die Ausgabeseite von
OUTPUT FIFO 34 werden mit derselben Taktgeschwindigkeit
betrieben. Figur 4 zeigt ausführlicher das OUTPUT FIFO 34 des
bevorzugten Ausführungsbeispiels der vorliegenden Erfindung.
Das OUTPUT FIFO 34 wurde auf der Grundlage eines 8 x 32
Doppelport-RAM 70 sowie der erforderlichen Logik OUTPUT FIFO
CONTROLS 72 zu dessen Steuerung aufgebaut. Dieser RAM 70
besitzt standardmäßig die READ ADDRESS-Eingabe 74, die WRITE
ADDRESS-Eingabe 76 und die WRITE ENABLE-Eingabe 78, die durch
die OUTPUT FIFO CONTROLS 72 bereitgestellt werden. Er ist in
der Lage, in jedem Zyklus eine Schreib- und eine Leseoperation
auszuführen. Der Eingabebus 80 ist die Ausgabe von 32 OR-
Gattern 82 mit doppeltem Eingang. Die Eingaben an die 32 OR-
Gatter 82 mit doppeltem Eingang sind die einzelnen Bits des
32bit-breiten ALU BUS 56, und allen 32 Gattern ist die HOLE-
Leitung 66 gemeinsam. Im aktiven Zustand bewirkt die HOLE-
Leitung 66, daß die Eingaben an den RAM 70 alle "1" sind. Der
MCU 36 (Figur 2) verwendet diese Leitung, um den oben
angeführten neutralen Wert zu erzeugen, der in das OUTPUT FIFO 34
geschrieben wird.
-
Die Leitungen des Ausgabebusses 84 von RAM 70 werden als
Eingaben an die nicht-invertierenden offenen Kollektortreiber
86 angeschlossen. Die Ausgaben der Treiber 86 werden aus dem
Rechner herausgenommen, um sie an die offenen Kollektortreiber
der Ausgabe-FIFOs in anderen Rechnern anzuschließen, an die
dieser Rechner parallel angeschlossen werden kann.
-
OUTPUT FIFO CONTROLS 72 erzeugt zusätzlich zur Schreibadresse,
zur Leseadresse und zu den Schreibaktivierungssignalen, die
bereits angeführt wurden, die Signale FULL und OUT_EMPTY. Die
Signalleitung OUT_EMPTY 88 ist eine Eingabe an den
invertierenden offenen Kollektortreiber 89, der aus diesem Rechner
herausgenommen und parallel mit den Ausgaben der anderen
invertierenden Treiber anderer Ausgabe-FIFOs in ähnlicher
Weise an den oben beschriebenen DATA OUT BUS 62 angeschlossen
wird.
-
OUTPUT FIFO CONTROLS 72 empfangen als Eingabe die READ OUTPUT
FIFO-Leitung 60, die OUTPUT FIFO WRITE-Leitung 54 und die
OUTPUT FIFO DATA VALID-Leitung 64. Die READ OUTPUT FIFO-
Leitung 60 stammt von den Eingabe-FIFO-Steuerungen des
Rechners in der nächsten Phase. Die OUTPUT FIFO WRITE-Leitung 54
wird im Innern dieses Rechners durch den MCU 36 (Figur 2)
erzeugt. Das OUTPUT FIFO DATA VALID-Signal wird durch die DOT
AND-Verbindung erzeugt, die an vorheriger Stelle beschrieben
wurde. Es wird darauf hingewiesen, daß der Wert auf der OUTPUT
FIFO DATA VALID-Leitung 64 nicht lediglich die Umkehr der
OUT_EMPTY-Leitung 88 ist. Die Behauptung wird rückgängig
gemacht, wenn EMPTY behauptet wird, die Behauptung gilt jedoch
nur, wenn alle OUTPUT FIFOs, an die es parallel angeschlossen
ist, versuchen, die Behauptung seiner entsprechenden internen
EMPTY-Leitung aufgrund der DOT AND-Funktion des offenen
Kollektortreibers rückgängig zu machen. Die OUTPUT FIFO DATA
VALID-Leitung 64 zeigt, daß alle parallel angeschlossenen
Ausgabe-FIFOs nicht leer sind.
-
Figur 5 zeigt die Inhalte der OUTPUT FIFO CONTROLS 72 (Figur
4). Diese enthalten die Schreibadreßlogik, die das Gatter 90,
den THREE BIT INCREMENTER 92 und das THREE BIT WRITE-Register
94 umfaßt. Sie enthalten außerdem die Leseadreßlogik, die das
Gatter 96, den THREE BIT INCREMENTER 98 und das READ-Register
100 enthält. Zusätzlich enthalten sie eine Statusmaschine, die
den Dreibit-Komparator 102, die Gatter 104, das
Einzelbit-Register 106 und das Einzelbit-Register 108 umfaßt. Figur 6
zeigt das Statusdiagramm und die nächsten Statusgleichungen
für die Statusmaschine.
-
Wir gehen zurück zu Figur 4. Die READ- und WRITE-Adressen
werden als Zeiger in den Doppelport-RAM 70 verwendet. Der
READ-Zeiger befindet sich im Stapel ganz oben, der WRITE-
Zeiger befindet sich im Stapel ganz unten. Die Zeiger werden
in umlaufender Richtung inkrementiert (Das heißt, sie wickeln
sich ab bis auf Null). Wenn die Zeiger jemals gleich sind, ist
das FIFO entweder leer oder voll.
-
Die Statusmaschine zeichnet auf, in welchem Status sich die
Zeiger befinden: 10 = leer, 00 = keines von beiden, 01 = voll.
Zu Beginn werden die Zeiger gleich, und der Status wird durch
einfache Logik (nicht dargestellt) auf den leeren Status
gesetzt. Der leere Status blockiert Leseoperationen. Sobald
ein WRITE auftritt, wird der WRITE-Zeiger inkrementiert. Dies
bewirkt, daß die Behauptung rückgängig gemacht wird und der
Status keines von beiden wird eingegeben.
-
Im Status keines von beiden sind Lese- und Schreiboperationen
gestattet. Der Status keines von beiden wird aufrechterhalten,
bis die Zeiger wieder gleich sind. Die INC-READ-Leitung 110,
die anzeigt, daß ein READ aufgetreten ist, wird verwendet, um
zu bestimmen, ob in den vollen Status gegangen oder in den
leeren Status zurückgekehrt wird. Wenn die INC-READ-Leitung
110 nicht aktiv ist, bewegt sich der WRITE-Zeiger auf die
Oberseite des Lesezeigers, was die voll-Bedingung bedeutet. In
der voll-Bedingung werden Schreiboperationen blockiert. Sobald
ein READ auftritt, wird erneut der Status keines von beiden
eingegeben.
-
Figur 7 zeigt das INPUT FIFO 30 (Figur 2) des bevorzugten
Ausführungsbeispiels der vorliegenden Erfindung. Wie
ersichtlich ist, ist das INPUT FIFO 30 mit dem OUTPUT FIFO 34 (Figur
4) nahezu identisch. Es befindet sich um einen Doppelport-RAM
270 und die geeignete Steuerlogik INPUT FIFO CONTROLS 272. Der
Eingabebus des RAM ist der DATA-IN-Bus 42 vom vorherigen
Pipelinerechner. Es gibt kein OR-Gatter wie beispielsweise das
OR-Gatter 82 in Figur 4 zur Erzeugung eines neutralen Werts.
Der OUTPUT-Bus 58 des RAM ist der Eingabebus des ALU 32 (siehe
Figur 2). Der MCU 36 (Figur 2) stellt die READ INPUT FIFO-
Leitung 52 bereit und besitzt eine IN_EMPTY-Leitung 38. Dies
steht im Gegensatz zum OUTPUT FIFO (siehe Figur 4), wo die
Verbindungen zur WRITE OUTPUT FIFO-Leitung 54 und zur
OUT_FULL-Leitung 40 gehen. Die IN_EMPTY-Leitung 38 wird an den
invertierenden offenen Kollektortreiber 284 angeschlossen. Die
Ausgabe des offenen Kollektortreibers 284 ist die INPUT FIFO
POSITION AVAIL-Leitung 46, die parallel an die anderen INPUT
FIFO POSITION AVAIL-Leitungen an den anderen Prozessoren, die
mit diesem parallel geschaltet sind, angeschlossen ist. Die
Steuerlogik empfängt außerdem die WRITE INPUT FIFO-Leitung 44
als eine Eingabe. Diese Leitung kommt vom vorherigen
Pipelineprozessor.
-
Figur 8 zeigt die Inhalte der INPUT FIFO CONTROLS 272 (Figur
7). Der einzige Unterschied zwischen den Steuerungen für das
INPUT FIFO 30 und das OUTPUT FIFO 34 sind die Verbindungen zu
den Gattern 90 und 96 des OUTPUT FIFO 34. Im INPUT FIFO 30 hat
das Gatter 290 als Eingaben WRITE INPUT FIFO 44 und INPUT FIFO
POSITION AVAIL 35. Gatter 296 hat READ INPUT FIFO-Leitung 52
und IN_EMPTY-Leitung 38 als Eingaben an die
nichtinvertierenden und invertierenden Eingaben. Die anderen Leitungen liegen
in Übereinstimmung mit der Darstellung. Der Rechner im
bevorzugten Ausführungsbeispiel gemäß obiger Beschreibung ist
insbesondere darauf ausgerichtet, vorzugsweise parallel mit
anderen ähnlichen Rechnern betrieben zu werden. Es ist nur ein
geringes Maß an Mikrocode erforderlich, um ihn zu
unterstützen. Die Durchführung einer Koordinatenumwandlung ist ein sehr
gutes Beispiel für den Vorteil von mehreren parallel
angeordneten Rechnern gemäß dem bevorzugten Ausführungsbeispiel der
vorliegenden Erfindung. In typischen
Grafikkoordinatenumwandlungen wird die Koordinate als eine 1 mal 4 Matrix der Daten
x, y, z, 1 dargestellt. Die Umwandlung wird durch
Multiplikation dieser 1 mal 4 Matrix mit einer 4 mal 4 Matrix, der
sogenannten Umwandlungsmatrix, ausgeführt. Hierfür sind 12
Multiplikationen und 9 Additionen erforderlich. Im bevorzugten
Ausführungsbeispiel ist es möglich, 4 Rechner parallel zu
verwenden, von denen jeder 4 Multiplikationen und 3 Additionen
ausführt. Es ist möglich, dies in einer vollständigen
Pipelineanordnung durchzuführen, so daß jeder Rechner ein neues
Datenelement einliest und in jedem Zyklus ein neues Ergebnis
erstellt. Jeder Rechner enthält eine einzelne Spalte der
Umwandlungsmatrix in Registern in seinem ALU. In
Parallelanordnung berechnet jeder Rechner das Ergebnis der eingehenden 1
mal 4 Matrix mal seiner 4 mal 1 Spaltenmatrix. Durch Sortieren
der Ergebnisse in der richtigen Reihenfolge wird die
umgewandelte Koordinate erstellt. In normalen Grafikanwendungen wird
anstelle einer einzelnen Koordinate eine Liste von
Eingabepunkten bereitgestellt. In die vier Rechner, die parallel
angeordnet sind, kann ein konsekutiver Koordinatendatenstrom
eingespeist werden, der aufrechterhalten werden kann, wenn in
jedem Zyklus eine eingehende und eine ausgehende
Datenübertragung stattfindet.
-
Die hierfür erforderliche Programmierunterstützung ist sehr
logisch aufgebaut. Die Verwendung der Eingabe- und Ausgabe-
FIFOs und ihrer transparenten Mikrocode-Leerzyklen vereinfacht
die Synchronisation der Chips. Die einzige andere
Unterstützung ist die Fähigkeit, im Ausgabe-FIFO ein "Loch" zu
erzeugen. Um Chips parallel miteinander zu verbinden, verknüpft der
Benutzer einfach einzeln die Eingabe- und Ausgabe-Pins
miteinander. Dies umfaßt die Datenbusse sowie die FIFO Handshaking-
Leitungen.
-
Figur 9 ist ein Diagramm, das auf Figur 1 basiert, das die
Verbindung der vier parallelen Rechner 12-18 darstellt, die
den Rechner 22 in einer Parallel-/Pipeline-Konfiguration
versorgen. Im Interesse der Verdeutlichung wurden die Rechner 24-
28 von Figur 1 ausgelassen. Es wird darauf hingewiesen, daß
ihre Eingaben und Ausgaben parallel in derselben Weise wie die
Eingaben und Ausgaben der Rechner 12-18 angeschlossen sind.
Die Ausgabetreiber besitzen eine 'dot ANDing'-Konstruktion.
Wenn ein Rechner seine Ausgabe insgesamt hoch treibt, hat dies
keine Auswirkung auf das Ergebnis der dot ANDs. Jeder andere
Rechner, der niedrig treibt, bewirkt, daß das Ergebnis niedrig
ist.
-
Es gibt einen Kontrollpunkt (Leitung 66, Figur 4), der den in
den RAM 70 (Figur 4) gehenden Bus 62 dazu zwingt, daß er nur
aus Einsen besteht. Hierbei handelt es sich um ein "Loch". Um
erneut auf die Figuren 3A und 3B zu kommen und diese und den
dazu gehörenden Text zu erweitern, zeigen die Figuren 10A und
10B die Inhalte der Ausgabe-FIFOs von vier Rechnern nach
Abschluß einer Punktumwandlung. In Figur 10A sehen wir die
vier FIFOs 34A-D mit den darin enthaltenen Daten. Der Rechner
A hat ein berechnetes Ergebnis am unteren Ende von FIFO 34A.
Die drei anderen Rechner B-D besitzen je ein Loch in ihren
FIFOs 34B-D. Werden die Daten wie in Figur 10B ausgelesen, ist
der zusammengesetzte Wert auf dem dot AND-Ausgabebus 620 das
gewünschte Ergebnis des Rechners 1. Auf dieselbe Weise ordnet
sich der Rest der Ergebnisse der verbleibenden Rechner 34B-D
mit einem Loch in jedem zweiten Rechner an.
-
Die vorangehende Beschreibung impliziert, daß alle Rechner in
Sperrschrittsynchronisation untereinander arbeiten müssen.
Dies ist jedoch nicht nötig. Wie oben bereits angeführt wurde,
werden die FIFO Handshake-Leitungen ebenfalls einer dot AND-
Operation unterzogen. Die Leitungen von den vier INPUT FIFOs
(30, Figur 2), die anzeigen, daß es mindestens eine offene
Position im INPUT FIFO (Leitung 46, Figur 2, Figur 9) gibt,
werden einer dot AND-Operation unterzogen. Auf der nächsten
Stufe in der Pipeline sieht man, daß das AND je eine Position
verfügbar hat. Das heißt: überall ist mindestens eine Position
verfügbar. Auf dieselbe Weise wird die Ausgabe-FIFO Handshake-
Leitung, die angibt, daß im OUTPUT FIFO (Leitung 64, Figur 2,
Figur 9) mindestens ein gültiges Datenelement vorhanden ist,
einer dot AND-Operation unterzogen. Von außen betrachtet sieht
man den zusammengesetzten Wert der AND-Operation, der darin
besteht, daß alle Rechner mindestens ein gültiges Datenelement
besitzen.
-
Die Figuren 11A und 11B zeigen eine Situation, in der genau
das ins Spiel kommt. Figur 11A zeigt zu einem sehr frühen
Zeitpunkt in einer Routine den Status der vier OUTPUT FIFOs
34A-34D. Alle vier Rechner lesen Punkte ein und berechnen ihr
Ergebnis, doch keiner ist noch damit fertig. Alle Rechner
außer Rechner A haben mindestens ein Loch in ihr OUTPUT FIFO
34B-D gesetzt. Figur 11A zeigt die Bedingung der Leitung, die
aus dem Ausgabe-FIFO kommt, das anzeigt, ob das FIFO
mindestens ein gültiges Datenelement, das heißt den OFV-Status,
besitzt. Die Rechner B-D versuchen, die Ausgabe-FIFO-Leitung
mit den gültigen Daten hoch zu treiben. Der Rechner A versucht
jedoch, sie niedrig zu treiben. Da es sich um eine dot AND-
Operation handelt, ist die zusammengesetzte Leitung niedrig,
weil eben eine der Leitungen niedrig ist. Dies verhindert, daß
die externe Welt Daten aus einem der Chips entfernt. Dies
gewährleistet, daß sich das erste Loch in den Rechnern B-D mit
dem ersten Ergebnis ausrichtet, wie dies gewünscht wird. Das
Eingabe-FIFO bleibt auf dieselbe Weise in Synchronisation.
-
Die Verwendung von Rechnern in Parallelanordnung ist nicht auf
Punktumwandlungsalgorithmen beschränkt. Jeder beliebige
Algorithmus, der in Bereiche aufgeteilt werden kann, die an einem
gemeinsamen Eingabestrom arbeiten und eine bekannte Anzahl an
Ergebnissen erzeugen, wäre anwendbar. Genau genommen ist es
nicht einmal erforderlich, daß die Bereiche an gemeinsamen
Daten arbeiten oder denselben Algorithmus auf die Daten
anwenden. Da jeder Rechner einen eigenen Mikrocode besitzt, könnte
der erste Rechner die ersten n Datenelemente lesen und den
Rest des Eingabestroms ignorieren. Der zweite Rechner könnte
die ersten n Datenelemente ignorieren, das nächste m einlesen
und dann den Rest ignorieren usw. Die Algorithmen können
unabhängig mit verschiedenen Pfadlängen laufen. Es ist lediglich
erforderlich, daß jeder Rechner die Reihenfolge und die Anzahl
der Ergebnisse von jedem zweiten Rechner, der parallel
angeordnet ist, kennt, so daß er die richtige Anzahl an
Löchern an die richtigen Positionen in seinem Ausgabe-FIFO
setzen kann.