DE3685913T2 - Vektorenverarbeitung. - Google Patents

Vektorenverarbeitung.

Info

Publication number
DE3685913T2
DE3685913T2 DE8686105482T DE3685913T DE3685913T2 DE 3685913 T2 DE3685913 T2 DE 3685913T2 DE 8686105482 T DE8686105482 T DE 8686105482T DE 3685913 T DE3685913 T DE 3685913T DE 3685913 T2 DE3685913 T2 DE 3685913T2
Authority
DE
Germany
Prior art keywords
vector
register
instruction
elements
processed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE8686105482T
Other languages
English (en)
Other versions
DE3685913D1 (de
Inventor
Werner Buchholz
Ronald Morton Smith
David Siler Wehrly
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE3685913D1 publication Critical patent/DE3685913D1/de
Application granted granted Critical
Publication of DE3685913T2 publication Critical patent/DE3685913T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Description

  • Diese Erfindung bezieht sich auf die Verarbeitung von Vektoren, deren Längen die Länge von Vektorregistern übersteigen. Insbesondere bezieht sich diese Erfindung auf die Verarbeitung von Vektorabschnitten, wobei jeder Abschnitt so viele Vektorelemente wie ein Vektorregister besitzen kann, durch Vektorinstruktionen, von denen einige oder alle unterbrechbar sind.
  • Die US-Patentschrift 4 128 880, auf Cray Research, Inc., übertragen, beschreibt eine Vektorenverarbeitung in einem Computer, die durch eine Vielzahl von Vektorregistern bewirkt wird. Die Verarbeitung von Vektoren erfolgt von den Vektorregistern an eine Funktionseinheit und zurück zu den Vektorregistern. Während der Vektorenverarbeitung werden Elemente eines oder mehrerer Vektorregister nacheinander als Operanden an eine Funktionseinheit und die Resultate von einer Funktionseinheit an ein empfangendes Vektorregister übertragen. Jede Funktionseinheit verfügt über einen Eingang zum Empfang von Operanden und einen Ausgang zur Lieferung der durch die Funktionseinheit berechneten oder verarbeiteten Resultate. Sobald die Resultate vom Ergebnisvektorregister empfangen werden, stehen sie durch Verkettung als Operanden anderen Funktionseinheiten zur Verfügung. Die verarbeiteten Vektoren haben höchstens die gleiche Länge, d. h. die gleiche Anzahl von Elementen, wie die Vektorregister.
  • Die Europäische Patentanmeldung 8110 5750.4, auf Hitachi, Ltd., übertragen, beschreibt eine Vektorenverarbeitung, die eine Vektorelementenanzahl (H) beinhaltet, die größer als die Länge eines Vektorregisters (L) ist. Ein Vektorprozessor entdeckt die Notwendigkeit und ermöglicht die Wiederholung einer Vektorenverarbeitung, nachdem L Elemente durch eine Vektorinstruktionsfolge verarbeitet worden sind, wenn H größer ist als L. In dem in der Patentanmeldung beschriebenen Beispiel werden drei einzelne Vektoradreßregisterschaltungen zur Fortschreibung von Vektoradressen in drei einzelnen Vektoradreßregistern verwendet. Das heißt, daß es für jedes Vektoradreßregister eine entsprechende Vektoradreßschaltung gibt, die den Inhalt dieses Vektoradreßregisters fortgeschrieben. Da außerdem Vektoradressen ausschließlich in Vektoradreßregistern geladen, gespeichert und fortgeschrieben werden, steht der volle arithmetische und logische Instruktionssatz zur Verarbeitung von Vektoradressen in den Vektoradreßregistern nicht zur Verfügung. Die Instruktionen verarbeiten die im Speicher befindlichen Vektoren nicht. Alle Vektoren haben während der Ausführung eines Programms die gleichen Vektorlängen, d. h. die gleiche Anzahl von Vektorelementen, und die Vektorinstruktionen sind nicht unterbrechbar.
  • Die Vektorenverarbeitung wird in einem Buch von P. M. Kogge mit dem Titel "Architecture of Pipelined Computers", McGraw-Hill und Hemisphere Verlag, 1981, behandelt.
  • Im IBM Technical Disclosure Bulletin, Bd. 25, Nr. 12, Mai 1983, Seiten 6711-6712, mit dem Titel "Storage Access-Exception Detection for Pipelined Execution Units", von Garcia u. Mitarb., wird beschrieben, daß ein Speicherzugriffsfehler nur nach der vollendeten Verarbeitung aller vorhergehenden Vektorelemente möglich ist.
  • Es ist deshalb eine Aufgabe dieser Erfindung, mit demselben Vektorinstruktionssatz Vektoren beliebiger Länge zu verarbeiten, die größer oder kleiner ist als die Länge der Vektorenregister.
  • Es ist eine Aufgabe dieser Erfindung, arithmetische und logische Operationen an in Registern geladenen sowie im Speicher befindlichen Vektorabschnitten auszuführen.
  • Es ist eine weitere Aufgabe dieser Erfindung, im Speicher befindliche Vektoren direkt als Operanden zu benutzen.
  • Es ist eine weitere Aufgabe dieser Erfindung, Vektoradressen in allgemeine Register zu laden und zu speichern, wobei jede von einer Vektorinstruktion angesteuerte Vektoradresse automatisch durch die Vektorhardware fortgeschrieben werden kann, nachdem jede Vektorinstruktion eine Vektoradresse angesteuert hat.
  • Es ist eine weitere Aufgabe dieser Erfindung, Vektoradressen in allgemeine Register zu laden und zu speichern, wobei jede von einer Vektorinstruktion angesteuerte Vektoradresse durch arithmetische und logische Rechenoperationen verarbeitet werden kann.
  • Eine weitere Aufgabe dieser Erfindung ist die Verarbeitung von Vektoren durch unterbrechbare Vektorinstruktionen, die bei Unterbrechung wieder ab der Unterbrechungsstelle ausgeführt werden können, nachdem die Inhalte mehrerer Register auf ihre Werte vor der Unterbrechung wiederhergestellt worden sind.
  • Diese Aufgaben werden durch die in Anspruch 1 aufgeführten Merkmale erreicht.
  • Kurze Beschreibung der Zeichnungen
  • Fig. 1 ist ein Blockdiagramm eines Datenverarbeitungssystems, das die Vektorenverarbeitungseinheit nach dieser Erfindung beinhaltet;
  • Fig. 2 ist ein Blockdiagramm der Hardwarepfade, der Register und der Funktionseinheiten der Vektorenverarbeitungseinheit von Fig. 1;
  • Fig. 3a ist ein Blockdiagramm, das die Vektorregister in der Vektorenverarbeitungseinheit von Fig. 1 darstellt;
  • Fig 3b. ist ein Blockdiagramm, welches die Vektorregister von Fig. 3a als zur Überlappung in Vierergruppen angeordnete Chips darstellt;
  • Fig. 3c ist ein Blockdiagramm, das den Adressiervorgang der Vektorregister in der Vektorenverarbeitungseinheit von Fig. 1 darstellt;
  • Fig. 4 ist ein Flußdiagramm, das die Abarbeitung einer Vektoreinteilungsschleife während der Ausführung der Vektorinstruktionen in der Vektorenverarbeitungseinheit von Fig. 1 darstellt;
  • Fig 5a stellt einen Vektor C der Länge 20 und der Abschnittslänge 8 nach jeder Ausführung der Vektoreinteilungsschleife von Fig. 4 dar; und
  • Fig 5b. stellt eine Tabelle dar, die die Bedingungscodewerte und die Registerinhalte während der in Fig. 4 gezeigten Abarbeitung der Vektoreinteilungsschleife zusammenfaßt.
  • Fig. 1 ist ein Blockdiagramm des Datenverarbeitungssystems 10 mit einer Vektorenverarbeitungseinheit (VPU) 12. Mit Ausnahme von VPU 12 stellt der Rest von Fig. 1 ein "Datenverarbeitungsgrundsystem" mit Speicher 14, zentraler Verarbeitungseinheit (CPU) 16 (zum Beispiel im Betriebsmodus IBM System 370 XA), Bedienungskonsole 19 und Kanälen 18 dar. Die Bedienungskonsole wird vom Systemoperator zur Bedienung der verschiedenen Steuerprogramme, z. B. zur Initialisierung, verwendet.
  • Der Speicher 14 enthält den Prozessorspeicher 20 und die Prozessorspeichersteuer-Funktionseinheit (PSCF) 22. Der Speicher wird zur Speicherung von Programminstruktionen und Operanden, einschließlich Vektoroperanden, benutzt, die von der VPU 12 zu verarbeiten sind. Die PSCF holt Instruktionenfolgen vom Speicher 14 und leitet die Lieferung von Operanden an die CPU 16 ein. (Der Begriff "Operanden" schließt sowohl Daten als auch die Resultate von Datenoperationen ein.)
  • Die CPU 16 enthält die Instruktionsvorverarbeitungs-Funktionseinheit (IPPF) 24 zur Decodierung von Instruktionen sowie eine E-Funktionseinheit 26 zur Ausführung der von der IPPF erhaltenen Instruktionen. Diese Einheiten sowie das Datenverarbeitungsgrundsystem werden ausführlicher in der US-Patentschrift 4 200 927 beschrieben, die dem Inhaber der vorliegenden Erfindung übertragen worden und hier durch Zitat einbezogen ist. Die IPPF 24 ruft alle Instruktionen ab und decodiert sie, einschließlich derjenigen, die durch die E-Funktionseinheit 26 und die VPU 12 ausgeführt werden. Wie in der genannten Patentschrift beschrieben, ist die E-Funktionseinheit 26 über den Datenbus 28 mit dem Speicher 14 zur Ausführung von Instruktionen verbunden und enthält einen durch ein Mikroprogramm gesteuerten Speicher zur Erzeugung von Steuersignalen zur Instruktionsausführung. Die Resultate der Instruktionsausführungen in der E-Funktionseinheit 26 werden zurück an die IPPF 24 übertragen, die daraufhin den Ablauf der Instruktionsausführung steuert.
  • Die Verbindung der VPU 12 mit dem Datenverarbeitungsgrundsystem erfolgt mit der E-Funktionseinheit 26 über den Schnittstellenbus 30 und mit der IPPF 24 über den Schnittstellenbus 32.
  • Der Schnittstellenbus 32 übergibt Vektorinstruktions-Operationscodes von einer Warteschlange in der IPPF 24 an das Vektorinstruktionsregister 34 und an den in der VPU befindlichen Vektorinstruktionspuffer 36 (siehe Fig. 2). Der bidirektionale Schnittstellenbus 32 wird auch zur Übertragung von Adreßinformationen zwischen dem ALU-Ablageregister 58 und dem allgemeinen Schrittregister 40. Das Schrittregister 40 (siehe Fig. 1) enthält Informationen, die die Speicheradreßschrittweite zwischen den Elementen eines über geordnete Elemente verfügenden Vektors angeben. Das heißt, daß die Schrittweite die Anzahl der Elementstellen darstellt, durch die die Operation bei Übergang von einem Element zum nächsten inkrementiert wird. (Eine ausführlichere Beschreibung der Schrittweite wird nachfolgend gegeben.) Die Übertragung von Daten zwischen der VPU 12 und dem Speicher 14 erfolgt über einen Datenbus. Im einzelnen werden die Daten aus dem Speicher 14 über Datenbus 28 an die E-Funktionseinheit 26 und weiter über den bidirektionalen Schnittstellenbus 30 an das Datenregister 42 in der VPU 12 übertragen. Das Datenregister 42 (in Fig. 2 abgebildet) dient als Puffer für die von der E- Funktionseinheit 26 über den Schnittstellenbus 30 übertragenen Daten. Von der VPU 12 an den Speicher 14 bestimmte Daten werden vom A-Stufen-Register 44 (oder vom Lambda-Register 46) in der VPU 12 über den Schnittstellenbus 30 an ein Register in der E- Funktionseinheit 26 übertragen.
  • Fig. 2 stellt die Wege, die Register und die Funktionseinheiten der VPU 12 dar, von denen einige schon beschrieben wurden. Fig. 2 enthält auch ein Vektorregisterfeld (VRA) 48, das in den Fig. 3a und 3b ausführlicher abgebildet ist.
  • Insbesondere zeigt Fig. 3a sechszehn physische, mit 0 bis 15 bezeichnete Vektorregister mit je Z mit 0 bis Z-1 bezeichneten Elementstellen, wobei Z eine in einem bestimmten Datenverarbeitungssystem festgelegte Zahl, z. B. 128, darstellt. Im Gegensatz zu den allgemeinen und den Gleitkommaregistern sind die Vektorenregister insofern multivalent nutzbar, als die Vektoren sowohl von Binär- (arithmetisch oder logisch) als auch Gleitkommadaten darin gespeichert werden können. Die Vektorregister werden dazu verwendet, einen oder mehrere Operanden für Arithmetik-, Vergleichs-, Logik-, Lade- oder Speicheroperationen zu speichern. Je nach Operation kann ein Vektor ein einziges Vektorregister mit Z Elementen mit je 32 Bit Breite oder aber ein Gerade-/Ungeraderegisterpaar (Vektorregisterpaare) besetzen, wenn die physischen Register, in denen die entsprechenden Elemente kombiniert werden, Doppelwort- (64-Bit-) Operanden bilden. Vektorregister schließen Vektormaskenregister (nachfolgend beschrieben) sowie Vektoroperanden enthaltende Vektorregister, d. h. Vektordatenregister, ein.
  • Fig. 3b zeigt die sechszehn Vektorregister von Fig. 3a, wobei jedes Vektorregister (VR) aus 128 Elementen zu je vier Bytes besteht. Aus der Hardwaresicht wird das ganze Feld in 64 Speicherzellen-Chips untergebracht. Jeder Chip hat eine Breite von neun Bits, d. h. acht Bits und einem Paritätsbit. Da jeder Speicherzellen-Chip auf einen Lese- oder Schreibvorgang je Zyklus beschränkt ist, sind die Vektorregister mit Vierfachüberlappung angeordnet. Jede Spalte des Feldes stellt eine Überlappungseinheit dar, die aus 16 Chips in Vierergruppen besteht. Jede Zeile stellt vier Vektorregister dar. Die Vektorregister können zwei Elemente pro Zyklus für Vektoroperationen in der VPU 12 liefern und ein Element pro Zyklus entweder von einer Vektoroperation oder von der E-Funktionseinheit 26 empfangen.
  • Die Adressierung von Vektoren im Vektorregisterfeld (VRA) 48 beinhaltet Adreßregister 59 (siehe die nachfolgende Beschreibung der VEAR). Datenvektoren, die in die Vektoradressen im Vektorregisterfeld geschrieben werden, werden an das Vektorregisterfeld- Ablageregister 60 übermittelt. Der Eingang zu diesem Register erfolgt aus mehreren Quellen über die Leitung 64 vom Datenregister 42 und über den Ablagebus 62. Der Zugriff auf die Vektorelemente in den Vektoradressen im Speicher erfolgt häufig durch eine regelmäßige Adreßfolge. Die Instruktion (die auf die Vektorelemente zugreift) gibt ein allgemeines Register in der CPU 16, das die Anfangsadresse des Vektors im Speicher enthält, und wahlweise ein zweites allgemeines Register, das die Schrittweite (Schrittregister 40) enthält, an. Die im allgemeinen Register befindliche Anfangsadresse wird automatisch während des Zugriffs auf aufeinanderfolgende Elemente im Speicher fortgeschrieben. Bei Unterbrechung ist der Inhalt des allgemeinen Registers die Speicheradresse des nächsten nach der Unterbrechung zu verarbeitenden Vektorelements. (Dieses Element wäre verarbeitet worden, wenn es die Unterbrechung nicht gegeben hätte.) Solches automatische Fortschreiben von Vektoradressen wird zur abschnittsweisen Verarbeitung von Vektoren verwendet, wie nachfolgend beschrieben wird.
  • In Fig. 2 werden die aus dem Vektorregisterfeld gelesenen Vektoroperanden (Daten) an das A-Stufen-Register 44 und das B- Stufen-Register 50 übertragen. (Das A-Stufen-Register 44 empfängt auch Daten, die über die Leitung 52 von einem Vektormaskenregister (VMR) übertragen werden. Ein Vektormaskenregister (mit einer Länge von Z Bits) wird als Ziel der Vektorvergleichsoperationen, als Quelle und Ziel von logischen Operationen an Bitvektoren und als Quelle der Maske für maskengesteuerte Operationen benutzt.) Die Daten vom A-Stufen-Register werden über die Schnittstelle 30 an die E-Funktionseinheit 26 übertragen. Das Lambda-Register 46 empfängt die Daten im A-Stufen-Register und wird sowohl als Datenverzögerungsregister als auch als Sicherungsregister für Daten verwendet, die vom A-Stufen-Register 44 an die E-Funktionseinheit 26 übertragen werden. Die Datenverzögerung ist für den ordnungsgemäßen Zugriff auf das Vektorregisterfeld 48 erforderlich. Daraufhin werden die Daten, die (über ALU-Schieberegister 53A und 53B und ALU-Eingangsregister 55A und 55B) korrekt für Gleitkommaoperationen ausgerichtet sind, zur Verarbeitung an das Arithmetische/Logische-Einheit (ALU) 54 übertragen. Die ALU ist ein parallelarbeitender Binäraddierer, der die Addition und Subtraktion von Binäroperanden bzw. von Gleitkommavektoroperanden mit einfacher und erweiterter Genauigkeit ausführt. Die ALU kann auch logische UND-, ODER- und Exklusiv-ODER-Operationen ausführen und kann Operanden um 1, 2 oder 3 Bits logisch nach links verschieben. Das ALU-Register 56 speichert den Ausgang von der ALU 54. Das ALU-Ablageregister 58 dient als ein Verzögerungsregister für Daten, die über die Leitung 71 vom ALU-Register 56 an die ALU zurückgeführt werden sollen. Daten, die wieder in das VRA 48 geschrieben werden sollen, werden über den Datenbus 70 im VRA-Ablageregister 60 zwischengespeichert. (Das ALU-Ablageregister und das VRA-Ablageregister erhalten normalisierte logische Eingaben, die sich aus Gleitkommaoperationen ergeben.)
  • Der Vektorinstruktionspuffer 36 speichert den Vektorinstruktionsoperationscode und die über den Schnittstellenbus 32 empfangenen Vektorregisteradressen zur Weiterverwendung durch andere Decodierschaltungen in der VPU 12 während der Instruktionsausführung.
  • Wie in Fig. 2 gezeigt, werden die Vektoroperandendaten entweder von einem Vektorregisterfeld 48 oder von der CPU 16 über das Datenregister 42 erhalten. Werden zwei Operanden durch das Vektorregisterfeld bereitgestellt, dann wird das erste abgerufene Vektorelement an das A-Stufen-Register 44 geschickt, anschließend in der ALU 54 durch arithmetische und logische Operationen verarbeitet und daraufhin an das ALU-Ablageregister 58 und das VRA- Ablageregister 60 (A-Seiten-Datenweg) übertragen. Das zweite abgerufene Vektorelement wird an das B-Stufen-Register 50 geschickt, nachfolgend in der ALU 54 durch arithmetische und logische Operationen verarbeitet und daraufhin an das ALU-Ablageregister 58 und das VRA-Ablageregister 60 (B-Seiten-Datenweg) übermittelt. Im einzelnen wird das erste Element des Operanden auf dem A-Seiten-Datenweg aus dem Vektorregisterfeld 48 mit einem Vorsprung von einem Zyklus vor dem auf dem B-Seiten-Datenweg ausgelesenen ersten Element des Operanden. Daher befinden sich nach zwei Zyklen das erste Element des A-Seiten-Operanden im Lambda-Register 46, das erste Element des B-Seiten-Operanden im B-Stufen-Register 50 und das zweite Element der A-Seiten-Operanden im A-Stufen-Register 44. Diese Anfangsversetzung der Elemente auf den A- und B-Seiten-Datenwegen genügt den Anforderungen des Eingabe-/Ausgabe- (E/A-) Schnittstellenchips des Vektorregisterfeldes. Die Versetzung gewährleistet, daß nur "ein" Lesevorgang von einem Speicherzellenchip während eines vorgegebenen Zyklus erfolgt. Daher wird ein Vektor, d. h. das Resultat einer Vektoroperation, im VRA-Ablageregister 60 im Vektorregisterfeld (48) während jedes Maschinenzyklus gespeichert. (Die VPU 12 enthält auch eine Multiplizier-/Dividiereinheit und die zugehörigen Register (nicht abgebildet), die an den A- und B- Seiten-Datenwegen angeschlossen sind und die in den hierin genannten Quellen beschrieben sind.)
  • Ist eine Operation an einem Operanden aus dem Speicher 14 (Fig. 1) zusammen mit einem Vektoroperanden aus einem Vektorregister im Vektorregisterfeld 48 auszuführen, wird der Vektoroperand aus dem Feld über den A-Seiten-Datenweg übertragen. Der Vektoroperand aus dem Speicher 14 (über die E-Funktionseinheit 26) wird zuerst an das Datenregister 42 und daraufhin über den B-Seiten- Datenweg übertragen. Das Vektorresultat der Operation wird in ein Zielvektorregister im Vektorregisterfeld 48 geschrieben. (Der Begriff "Operation" schließt das Lesen von Daten aus dem Speicher sowie das Laden und Speichern von Daten und Resultaten im Speicher ein. Der Begriff "Resultate" schließt das Ergebnis arithmetischer und logischer Operationen an den Inhalten der Vektorregister und der Vektormaskenregister sowie das Laden der Vektorregister und Vektormaskenregister ein. Die Resultate können in Skalar- oder Vektorregistern gespeichert werden. In Vektorregister geladene Vektorelemente können zurück in den Speicher geschrieben werden.)
  • Soll eine Folge von Vektorelementen eines Vektoroperanden vom Speicher 14 an die VPU 12 übertragen werden, beginnt der Datenübertragungsweg einer Vektorladeinstruktion an einem Register in der CPU 16 und setzt sich über den Schnittstellenbus 30 bis zum Datenregister 42 fort. Die Elemente werden daraufhin in ein Vektorregister im Vektorregisterfeld 48 über Leitung 64 und das Vektorregisterfeld-Ablageregister geschrieben. Bei jedem Schreiben eines Elements in ein Vektorregister inkrementiert die Hardware die Vektorelementadresse in den Registern 59 um die Anzahl der Bytes in einem Element, d. h., 2, 4 oder 8. Gleichzeitig enthält ein nachfolgend beschriebener Vektorunterbrechungsindex (VIX) die Nummer des Elements in jedem Vektorregister, das Ziel einer Vektorinstruktion sein soll. Der VIX zeigt auch die Anzahl der bereits verarbeiteten Vektorelemente an. Die Vektorinstruktion kann unterbrechbar sein. Für eine Schrittweite verwendende Ladeinstruktionen wird die Vektoradresse durch einen Wert inkrementiert, der von der Anzahl der Bytes in einem Element, d. h. 2, 4 oder 8, abweicht. D. h., die CPU 16 berechnet die Speicheradresse jedes abgerufenen Vektorelements und übertragt die Daten an die Stelle des berechneten Elements mit einer Geschwindigkeit von höchstens einem Element pro Zyklus. Für indirekte Adressierung verwendende Ladeinstruktionen berechnet die ALU 54 die aktualisierte Adresse und überträgt sie über den Schnittstellenbus 32 an die CPU 16 (Fig. 1 und 2). Die CPU kann daraufhin eine weitere Abrufanforderung stellen und (neue) Daten an die VPU 12 übergeben, d. h. an Vektorregister im VRA 48, über den Schnittstellenbus 30.
  • Bei Vektorspeicherinstruktionen überträgt die VPU 12 Daten von einem Vektorregister in das Vektorregisterfeld 48 über das A- Stufen-Register 44 und über den bidirektionalen Schnittstellenbus 30 an die CPU 16.
  • Ein Register (hier auch das Vektorzählregister oder VCT genannt) liefert die Anzahl der in einem Vektor oder Vektorabschnitt zu verarbeitenden Vektorelemente. Das VCT wird während der Vektorinstruktionsausführung weder inkrementiert noch dekrementiert. Der Wert der Vektorelementanzahl reicht von Null bis einschließlich der Abschnittslänge. Wie vorher erwähnt, gibt der VIX das nächste zu verarbeitende Element an. Dieses Register wird auch bei Unterbrechungen verwendet, wenn es erforderlich wird, bei Wiederaufnahme der Ausführung einer bestimmten Vektorinstruktion auf das (nächste) zu verarbeitende Element in einem Vektorregister zu zeigen. Der VIX ist zu Beginn der Vektorinstruktionsausführung normalerweise gleich Null (und gibt dabei an, daß das erste Element in einem Vektorregister das Element Null ist) und wird nach der Ausführung der Vektorinstruktion auf Null zurückgesetzt. Der VIX liefert dann die Anfangsposition in dem Vektorregister bzw. den Vektorregistern für die anschließende Wiederaufnahme der Vektorenverarbeitungsoperation. Das VCT-Register legt zusammen mit dem VIX, d. h. VCT-VIX, die Nummer der während Vektoroperationen zu verarbeitenden Elemente in den Vektorregistern fest.
  • Mit Bezug auf die in Fig. 2 abgebildeten und vorher beschriebenen Funktionseinheiten können die Elemente eines Vektors im Speicher mit den Elementen eines weiteren Vektors in einem Vektorregister im wesentlichen wie folgt addiert werden:
  • 1. Das erste Element eines Vektoroperanden wird von einem (ersten) Quellvektorregister im Vektorregisterfeld 48 gelesen und, nach Zwischenspeicherung im A-Stufen-Register 44, im Lambda-Register 46 gespeichert.
  • 2. Das erste Element eines weiteren Vektoroperanden wird aus dem Speicher 14 ins B-Stufen-Register 50 gelesen.
  • 3. Beide Elemente werden parallel in die ALU-Schieberegister 53A und 53B torgesteuert geschrieben. Für Gleitkommadaten erfolgt die Normalisierung, und die Elemente werden in die ALU-Eingangsregister 55A und 55B torgesteuert geschrieben.
  • 4. Beide Vektorelemente werden daraufhin in der ALU addiert und das Resultat zuerst ins ALU-Register 56 und dann ins ALU-Ablageregister 58 sowie über Leitung 70 ins VRA-Ablageregister 60 torgesteuert geschrieben. Das VRA-Ablageregister schreibt die Summe in eine Summenstelle (in einem Zielvektorregister) im Vektorregisterfeld 48. (Das ALU-Register liefert das Resultat auch an das (A-Stufen-) Schieberegister in der ALU 54.)
  • Die beschriebene Operation wird wiederholt. Das Ergebnis der Addition besteht darin, daß die Summen der Elemente des Vektors im ersten Vektorregister berechnet werden, indem vorgegebene erste Vektorelemente mit vorgegebenen Elementen des zweiten Vektors im Speicher addiert werden. Ein allgemeines Register enthält die Adresse des zweiten Vektors im Speicher.
  • Die Vektorregister können zwei Elemente pro Zyklus für Vektoroperationen liefern und ein Element pro Zyklus als Ergebnis einer Vektoroperation oder von der CPU 16 empfangen.
  • Fig. 3c zeigt die Adressierung des Vektorregisterfeldes 48. Jede Spalte in Fig. 3b ist unabhängig adressierbar. Dieselbe Adresse wird allen sechzehn in einer Spalte befindlichen Array-Chips angeboten, so daß es möglich ist, in eine Spalte zu schreiben und aus einer der anderen drei Spalten zu lesen. Es gibt drei Vektorelementadreßregister (VEAR) VEAR 1, VEAR 2 und VEAR 3. Diese Register werden in Fig. 3c gemeinsam mit Bits 80 bezeichnet. VEAR 2 und VEAR 3 enthalten normalerweise die Element- (Stellen) nummern der Quellvektoren, die während eines bestimmten Zyklus gelesen werden. VEAR 1 enthält normalerweise die Element- (Stellen-)nummmer des Vektors (Resultats), das in ein Zielvektorregister geschrieben wird. VEAR 1 stellt auch den Vektorunterbrechungsindex (VIX) für die meisten Vektorinstruktionen dar, die die Resultate in die Vektorregister schreiben. Jedes VEAR wird durch seine eigene Hardwareinkrementierschaltung fortgeschrieben und wird aus den Daten in dem in Fig. 2 abgebildeten Datenregister 42 geladen. (VEAR 2 stellt den VIX für Speicherinstruktionen dar.) Der VIX wird nur dann inkrementiert, wenn ein mit dem VRA-Ablageregister 60 verbundenes Datengültigkeitsbit gesetzt wird, um eine Fortschreibung eines Vektorregisters zu ermöglichen. Daher wird, wenn bei einer Unterbrechung angezeigt wird, daß ein Vektorregister nicht fortgeschrieben werden soll, der VIX nicht inkrementiert und liefert eine aktuelle Anzeige des nächsten Vektorelements, das während der Ausführung einer bestimmten Instruktion vor der Unterbrechung verarbeitet worden wäre. Der Inhalt des VIX kann verwendet werden, wenn die unterbrochene Instruktion nach eventuellen Wiederherstellungsroutinen nochmals wiederausgegeben wird, da der VIX auf das nächste Element zeigt, das nach der Unterbrechung zunächst durch die wiederausgegebene Instruktion zu verarbeiten ist. (Der VIX stellt auch ein Feld eines Statusregisters (VSR) dar, das den aktuellen Status des Vektor- (und des Vektormasken-)registers beschreibt.)
  • Die Vektoradressierung im Vektorregisterfeld 48 beinhaltet auch drei Vektoradreßregister (VAR), die zusammen als Bits 80 in Fig. 3c dargestellt sind. Die VAR-Bits sind VAR 1, VAR 2 und VAR 3. VAR 2 und VAR 3 enthalten normalerweise die Nummern der Quellvektorregister, aus denen die Daten gerade gelesen werden. VAR 1 enthält normalerweise die Nummern der Zielvektorregister, in welche die Daten gerade schrieben werden. Die VAR werden durch die Instruktion selbst am Anfang ihres Ausführungszyklus initialisiert.
  • Die Bits fünf und sechs jedes VEAR dienen zur Auswahl einer Spalte (CS) auf Leitung 84, und die Bits zwei und drei jedes VAR dienen zur Auswahl einer Reihe auf Leitung 86. Die Siebenbit- Vektorregisterfeldadresse 88 adressiert ein bestimmtes der Z Positionen (Elemente) in einem der Vektorregister in dem Feld.
  • Die VPU 12 ermöglicht die Bearbeitung von Vektoren kurzer sowie genauer Gleitkommazahlen und von binären Ganzzahlen. Auch vorgesehen ist die Bearbeitung von Vektoren einzelner Bits, die normalerweise als Maskenbits verwendet werden. Operationen werden an Operanden im Speicher, in einem Vektorregister (oder einem Vektorregisterpaar), oder in einem Skalar- (allgemeinen oder Gleitkomma-) Register oder in einer ihrer Kombinationen ausgeführt. Das heißt, daß Operationen zwischen einem Vektor im Speicher und einem Vektoroperanden oder zwischen zwei Vektorregisteroperanden ausgeführt werden können. Ein Quelloperand kann ein Skalar und der andere Quelloperand ein Vektor sein. Der Skalar kann als Vektor behandelt werden, der dieselbe Anzahl von Elementen als der Vektoroperand hat, was zu einem Vektorresultat führt, oder ein Skalarresultat kann erhalten werden. Instruktionen, die Maskenbits verwenden, bezeichnen normalerweise einen angedeuteten Operanden im Vektormaskenregister. Sie können auch Operanden im Speicher sowie Vektorregisteroperanden bezeichnen.
  • Eine Beschreibung der VPU 12 im Datenverarbeitungssystem 10 befindet sich in der gleichzeitig anhängigen US-Patentanmeldung mit der Seriennummer 544 674, die dem Inhaber der vorliegenden Erfindung übertragen worden ist.
  • Vektorabschnittseinteilung
  • Die Vektorabschnittseinteilung ist eine Technik, mit der bereits beschriebenen Hardware Vektoren zu verarbeiten, deren Länge die Abschnittslänge, d. h. die Anzahl der Elementstellen in einem Vektorregister, überschreitet. Von den Vektorinstruktionen selbst abgesehen, ist nur eine neue Instruktion erforderlich, um die Vektorenverarbeitung durch Bildung einer Einteilungsschleife zu steuern, die mit einer Verzweigungsinstruktion endet. Die Registerinitialisierung wird durch bereits vorhandene Instruktionen ausgeführt, die die allgemeinen Register und (im Falle von skalaren Gleitkommaoperanden) die Gleitkommaregister laden.
  • Vektoren, die länger als die Vektorregister (Abschnittslänge) sein können, werden im allgemeinen wie folgt verarbeitet:
  • 1. Die Vektoren werden als in kleinere Abschnitte eingeteilt angesehen, deren Anzahl höchstens der Anzahl der Elemente in einem Vektorregister gleicht. (Ein Vektor wird nicht eingeteilt, wenn die Anzahl seiner Elemente weniger oder gleich groß ist wie die Anzahl der Elemente in einem Vektorregister.)
  • 2. Eine Schleife (Einteilungsschleife) ermöglicht die Wiederholung einer entsprechenden Folge von Vektorinstruktionen, um nacheinander alle Abschnitte der in Abschnitte eingeteilten Vektoren zu verarbeiten.
  • 3. Die in allgemeinen Registern enthaltenen Vektoradressen werden automatisch durch die Vektorhardware fortgeschrieben, während jede Vektorinstruktion ausgeführt wird, die eine Vektoradresse in einem allgemeinen Register ansteuert. (Um auf ein beliebiges die Adresse eines Vektors enthaltendes allgemeines Register zuzugreifen, zeigt eine Vektorinstruktion lediglich auf das allgemeine Register. Eine jedem allgemeinen Register entsprechende Schaltung ist nicht erforderlich, da die allgemeinen Register schon durch die CPU 16 zur Verfügung gestellt und unterstützt werden. Durch die derartige Verwendung von allgemeinen Registern steht der gesamte arithmetische und logische Instruktionssatz für die Bearbeitung der Vektoradressen in den allgemeinen Registern zur Verfügung.
  • Das die Vektorinstruktionen enthaltende Programm ist nicht von der Abschnittslänge abhängig. Das Programm kann Vektoren unterschiedlicher Längen bearbeiten, d. h., die Anzahl der Vektorelemente kann kleiner als, größer als oder gleich groß sein wie die Abschnittslänge.
  • Das folgende Beispiel erläutert eine Operation an vollen Vektoren mit Abschnittseinteilung, wobei Vektorelemente im Hauptspeicher dargestellt sind. Der Zugriff auf Vektoren im Speicher erfolgt durch sequentielle Adressierung.
  • Zwei jeweils zusammenhängende Vektoren A und B im Hauptspeicher sollen addiert und das Resultat im zusammenhängenden Vektor C gespeichert werden. Die Anzahl der Elementstellen jedes Vektors wird mit N bezeichnet. Alle Vektoren besitzen das lange (64- Bit-) Gleitkommaformat, was eine Kopplung von Vektorregisterpaaren erfordert, damit die langen Gleitkommazahlen verarbeitet werden können.
  • Die Instruktion L G0,N lädt die gesamte Länge (Anzahl der Elemente N) jedes Vektors im Hauptspeicher in das allgemeine Register Null (G0), das daher als Längenregister im Binärformat funktionert.
  • Die Instruktion LA G1,A lädt die Adresse des Vektors A ins allgemeine Register Eins (G1), das als eines der Adreßregister funktionert.
  • Die Instruktion LA G2,B lädt die Adresse des Vektors B ins allgemeine Register Zwei (G2).
  • Die Instruktion LA G3,C lädt die Adresse des Vektors C ins allgemeine (Adreß-) Register Drei (G3).
  • Die Instruktion VLVCU G0, der die Marke LP zugeordnet ist, stellt die neue Instruktion LOAD VCT AND UPDATE dar, die
  • 1. den kleineren Wert der Abschnittslänge Z (der Anzahl der Elementstellen in einem Vektorregister) oder des Inhalts des Längenregisters G0 in ein Register lädt, das hier als das Vektorzählregister (VCT) bezeichnet wird. (Dies geschieht nur, wenn der Operand in G0 positiv ist. Ist der Operand negativ oder gleich Null, wird das VCT-Register gleich Null gesetzt.) Das VCT wird dazu verwendet, das letzte Vektorelement festzustellen, das durch jede Vektorinstruktion während jedes Durchlaufs der Einteilungsschleife zu verarbeiten ist, die aus der VLVCU-Instruktion und einer bedingten Verzweigung (BC) besteht. Der Inhalt des Registers G0 wird als eine 32-Bit-Binärganzzahl mit Vorzeichen behandelt. Die Vektoranzahl und die Abschnittslänge werden als 16-Bit-Binärganzzahlen ohne Vorzeichen behandelt. (Das VCT stellt auch ein Feld im Vektorstatusregister (VSR) dar.)
  • 2. den Inhalt des VCT vom Inhalt des Längenregisters G0 subtrahiert und das Resultat im Längenregister G0 speichert. Auf diese Weise wird das Längenregister G0 so fortgeschrieben, daß es die verbleibende Vektorlänge enthält, d. h., die Anzahl der Vektorelemente, die noch zu verarbeiten sind. Die VLVCU-Instruktion setzt einen Bedingungscode (CC), um den Inhalt von G0 vor dessen Fortschreibung zu wiedergeben. Der CC zeigt an, ob ein Vektor am Ende der Schleife vollständig verarbeitet sein wird. (G0 enthält immer die gesamte Anzahl der noch zu verarbeitenden Elemente, während das VCT die Anzahl der Elemente enthält, die während des nächsten Durchlaufs der aus der VLVCU-Instruktion und einer folgenden Verzweigungsinstruktion bestehenden Schleife verarbeitet werden. Der VIX enthält die Nummer des nächsten Elements in einem Vektorregister, das durch eine Vektorinstruktion zu verarbeiten ist. Das VCT und der VIX legen die Anzahl der Elemente fest, die während der Vektoroperationen zu verarbeiten sind.)
  • Für die meisten Vektorinstruktionen wird das VSR (in ein Register in der VPU 12 zur späteren Bearbeitung) am Anfang der Instruktion gelesen und über den bidirektionalen Bus 30 an die Vektorhardware (VPU 12) übertragen. Immer, wenn das VCT fortgeschrieben wird, wird der "neue" VCT-Wert in das entsprechende Feld des VSR geschrieben. Der VSR-Wert wird dann durch eine Schiebevorrichtung (64 Bits) in der VPU 12 torgesteuert wieder in ein Feld innerhalb der CPU 16 geschrieben.
  • Wie nachfolgend beschrieben wird, wird der Inhalt jedes allgemeinen (Adreß-) Registers, das von jeder der nachfolgenden Vektorinstruktionen angesteuert wird und das einen Vektor im Hauptspeicher (während der Ausführung der Instruktion) adressiert, automatisch durch die Vektorhardware fortgeschrieben, damit das Register auf den nächsten Vektorelementabschnitt zeigt, der durch jede Vektorinstruktion während des nächsten Durchlaufs der Einteilungsschleife verarbeitet wird. (Die Fortschreibung schließt auch die Erkennung des nächsten Zielabschnitts, in den das Verarbeitungsresultat gespeichert wird.)
  • Das VSR befindet sich in einem Feld in der E-Funktionseinheit 26. Dieses Feld wird als reservierter Arbeitsspeicher bezeichnet. Einige Vektorinstruktionen verwenden das ganze VSR oder einen Teil davon als Operand. Da das VSR in der CPU 16 untergebracht ist, führt die CPU diese Instruktionen aus.
  • Die Instruktion VLD V0,G1 lädt einen durch die im Register G1 gespeicherte Adresse des Vektors A bezeichnenden Abschnitt des Vektors A in das Vektorregister V0. Die geladene Länge des Abschnitts des Vektors A wird durch die aktuelle Vektoranzahl VCT bestimmt.
  • Die Instruktion VAD V0,V0,G2 addiert einen Abschnitt des Vektors B, der durch die im Register G2 gespeicherte Adresse des Vektors B bestimmt wird, und den vorher in das Vektorregister V0 geladenen Abschnitt des Vektors A und speichert das Resultat im Vektorregister V0. Für jedes Element wird der Abschnitt des Vektors B zu dem Abschnitt des Vektors A (der sich im Vektorregister v0 befindet) addiert und das Resultat in das Vektorregister V0 gestellt. (Es ist anzumerken, daß die VAD-Instruktion ein Format verwendet, das ausdrücklich drei Operanden bezeichnet: zwei Quelloperanden (V0,G2) und einen Zieloperanden (V0).) In diesem Fall wird eine unterbrechbare arithmetische Operation mit den Vektoren in den Registern ausgeführt. Die Instruktion VSTD V0,G3 speichert das Resultat. Die Längen jedes Vektoroperandenabschnitts und jedes Resultatabschnitts werden durch das VCT und den VIX bestimmt. (Für andere Instruktionen, die VAD ähnlich sind, könnten sich die Operanden im Speicher befinden. In diesem Fall würde die unterbrechbaren arithmetischen und logischen Operationen an den Vektoren im Hauptspeicher ausgeführt.)
  • Die Instruktion BC 2,LP prüft den Bedingungscode (CC), um festzustellen, ob der Inhalt des Längenregisters G0 noch größer als Null ist. Ist G0 gleich Null, dann ist jeder Abschnitt jedes Vektors verarbeitet worden und die durch die VLVCU- und BC-Instruktionen gebildete Schleife abgeschlossen. Anderenfalls findet eine Verzweigung an die mit der Marke LP versehene VLVCU-Instruktion statt, damit die Verarbeitung der anderen Vektorabschnitte fortgesetzt wird. Die BC-Instruktion ist eine bedingte Verzweigungsinstruktion, die eine bedingte Verzweigung in der Schleife ausführt. In diesem Ausführungsbeispiel hat, wenn der Bedingungscode gleich 2 ist, die VLVCU-Instruktion das VCT-Register gleich der Abschnittslänge gesetzt. Dies bedeutet, daß ein voller Abschnitt der Vektorelemente in der Einteilungsschleife verarbeitet worden ist, und daß noch Abschnitte zu verarbeiten sind.
  • Ein Flußdiagramm, das die Operation der hierin beschriebenen Vektorabschnittseinteilung grafisch darstellt, zeigt Fig. 4. Im Flußdiagramm stellen G0 das Längenregister (Anzahl der Elemente N eines Vektors), VCT das Vektorzählregister, CC den Bedingungscode, Z die Abschnittslänge und G1-G3 Vektoradressen enthaltende allgemeine Register dar. Die Operation der durch die Hardware implementierten VLVCU-Instruktion wird innerhalb des von der gestrichelten Linie umrandeten Blocks 81 in Fig. 4 abgebildet. Die bedingte Verzweigungsinstruktion (BC) wird durch das Verzweigungssymbol 85 dargestellt. Angesichts der hierin vorliegenden Beschreibung ist das Flußdiagramm selbsterläuternd und wird nicht weiter beschrieben werden.
  • Um das vorhergehende Beispiel weiter zu erläutern, wird angenommen, daß die Abschnittslänge acht (8) Elemente und die Anzahl der Elemente jedes Vektors im Hauptspeicher 20 Elemente beträgt. Drei Durchläufe der durch die VLVCU- und die BC-Instruktion gebildeten Schleife wären erforderlich, um drei Abschnitte, d. h., zwei vollständige Abschnitte von je acht Elementen und einen Teilabschnitt von vier Elementen, in jedem Vektor durch die Vektorinstruktionen vor dem Ende der Schleife zu verarbeiten. Im einzelnen werden während des ersten Durchlaufs der erste acht Elemente enthaltende Abschnitt des Vektors A mit dem ersten acht Elemente enthaltenden Abschnitt des Vektors B im acht Elemente enthaltenden Vektorregister V0 addiert, wobei V0 über die zur Aufnahme von langen Vektorelementen gepaarten Vektorregister 0 und 1 verfügt, und das Resultat anschließend im ersten acht Elemente enthaltenden Abschnitt des Vektors C im Hauptspeicher gespeichert. Während des zweiten Durchlaufs wird der zweite acht Elemente enthaltende Abschnitt des Vektors A mit dem zweiten acht Elemente enthaltenden Abschnitt des Vektors B im Vektorregister V0 addiert und das Resultat anschließend im zweiten acht Element enthaltenden Abschnitt des Vektors C im Hauptspeicher gespeichert. Während des dritten Durchlaufs wird ein Teilabschnitt von vier Elementen des Vektors A mit einem Teilabschnitt von vier Elementen des Vektors B im Vektorregister V0 addiert und das Resultat in den verbleibenden vier Elementen des Vektors C im Hauptspeicher gespeichert. Die Schleife wird dann beendet.
  • Fig. 5a zeigt diesen Vektor C nach Beendigung der Schleife. Jedes Element enthält acht Bytes, so daß ein vollständiger, acht Elemente umfassender Abschnitt 64 Bytes im Speicher beansprucht. Der erste acht Elemente umfassende Abschnitt wird nach dem ersten Durchlauf 60 gespeichert, von der Anfangsadresse des Vektors C bis einschließlich Byte SA + 63. Der zweite, acht Elemente umfassende Abschnitt (mit Länge von vierundsechzig Bytes) wird nach dem zweiten Durchlauf 62 gespeichert, von Byte SA + 64 bis einschließlich Byte SA + 127. Der vier Elemente umfassende Teilabschnitt wird nach einem dritten Durchlauf 65 von Byte SA + 128 bis einschließlich Byte SA + 159 gespeichert.
  • Fig. 5b stellt eine Tabelle dar, die die Werte des Bedingungscodes, den Inhalt des VCT-Registers und die Inhalte der allgemeinen (Längen- und Adreß-) Register für das obige Beispiel vor der ersten Ausführung der VLVCU-Instruktion und am Ende jedes der drei Durchläufe der Schleife zusammenfaßt. Während der Ausführung der Schleife enthält das VCT-Register eine Zahl im Bereich von Null bis einschließlich der Abschnittslänge. In Fig. 5b sind vor der Ausführung der VLVCU-Instruktion der CC-Wert und der VCT-Inhalt nicht von Bedeutung. Das allgemeine Register G0 enthält eine 20, die die Anzahl der Elemente jedes Vektors im Hauptspeicher darstellt, das allgemeine Register G1 enthält die Anfangsadresse des Vektors A (SA A), das allgemeine Register G2 enthält die Anfangsadresse des Vektors B (SA B) und das allgemeine Register G3 enthält die Anfangsadresse der Speicherstellen des Vektors C (SA C). Am Anfang der ersten Ausführung der Instruktionsschleife (des ersten Durchlaufs) von VLVCU bis zur BC, ist der Inhalt des Längenregisters G0 positiv. Wie im Flußdiagramm in Fig. 4 deutlicher dargestellt, wird der kleinerer Wert der Abschnittslänge (8) oder des Inhalts (20) des Längenregisters G0 in das Vektorzählregister (VCT) gespeichert, so daß in der Tabelle von Fig. 5 das VCT-Register den Wert 8 enthält. Der Bedingungscode wird gleich 2 gesetzt. Das Längenregister G0 wird daraufhin dadurch fortgeschrieben, daß der Inhalt (8) des VCT- Registers vom Inhalt (20) des Längenregisters G0 subtrahiert und das Resultat (12) im Längenregister G0 gespeichert wird. Da jedes Element 8 Byte darstellt, aktualisiert die Hardware automatisch den Inhalt jedes allgemeinen (Adreß-) Registers G1, G2 und G3 auf seine entsprechende Anfangsadresse (SA) plus 64 (Bytes), da acht Vektorelemente in jedem Vektor während des ersten Durchlaufs der Schleife verarbeitet sein werden. Der Bedingungscode (CC) wird durch die BC-Instruktion geprüft, um festzustellen, ob das Längenregister noch größer als Null ist. (Der CC ist noch gleich 2, was anzeigt, daß die Schleife zu wiederholen ist.) Am Anfang der zweiten Ausführung der Instruktionsschleife (des zweiten Durchlaufs) wird der kleinerer Wert der Abschnittslänge (8) oder des aktuellen Inhalts (12) des Längenregisters (G0) im Vektorzählregister (VCT) gespeichert, so daß das VCT-Register 8 enthält. Der CC bleibt unverändert. Das Längenregister wird daraufhin gleich 4 aktualisiert (G0-VCT), und jedes allgemeine Register wird automatisch fortgeschrieben, indem 64 zum vorherigen Inhalt addiert wird, da acht zusätzliche Vektorelemente in jedem Vektor während des zweiten Durchlaufs der Schleife verarbeitet sein werden. Der Bedingungscode (CC) wird durch die BC- Instruktion geprüft. Der CC ist immer noch gleich 2, was anzeigt, das der Inhalt des Registers G0 noch größer als Null ist. Am Anfang der dritten (und in diesem Fall letzten) Ausführung der Instruktionsschleife (des dritten Durchlaufs) wird der kleinerer Wert der Abschnittslänge (8) oder des Inhalts (4) des Längenregisters G0 im Vektorzähl- (VCT-) Register gespeichert, so daß das VCT-Register nun 4 enthält. Der Bedingungscode wird gleich 3 und das Register G0 gleich Null gesetzt. Bei der Ausführung jeder allgemeine Register ansteuernden Instruktion wird jedes angesteuerte Register automatisch fortgeschrieben durch das Addieren von 8 mal 4 (vier Elemente zu je acht Bytes), oder 32, zum Inhalt am Ende des letzten Durchlaufs. Die bedingte Verzweigungsinstruktion (BC) verzweigt nicht (da die Verzweigung nur bei CC gleich 2 erfolgt), und die Schleife wird dadurch beendet. (Der CC wird im alten Programmstatuswort (PSW) aufbewahrt und automatisch nach erneutem Laden des alten PSW nach Beendigen einer Programmunterbrechung (nachfolgend beschrieben) wiederhergestellt.
  • Jede während eines Durchlaufs der Schleife auf einen im Speicher befindlichen Vektor bezugnehmende Vektorinstruktion verursacht die durch die Vektorhardware ausgeführte Fortschreibung eines allgemeinen (Adreß-) Registers, um auf den Anfang des nächsten Abschnitts zu verarbeitender Vektorelemente (siehe die nachfolgende Beschreibung der Schrittweite) während des nächsten Schleifendurchlaufs zu zeigen. Jedes durch eine Vektorinstruktion angesteuerte allgemeine Register wird durch nur eine Fortschreibungsschaltung in der CPU fortgeschrieben. Da eine Vektorinstruktion zu einem vorgegebenen Zeitpunkt nur einen Vektor im Speicher behandelt, können mehrere allgemeine Register dazu verwendet werden, mehrere Vektoren innerhalb einer Einteilungsschleife ohne den Verlust der Allgemeingültigkeit zu adressieren. Zum Beispiel zeigen SA A und SA B auf die Anfangsadressen der Vektoren A bzw. B, und, genauer gesagt, auf die Abschnitte, die im Vektorregister V0 während des ersten Durchlaufs der Schleife addiert und anschließend im ersten acht Elemente enthaltenden Abschnitt des Vektors C im Hauptspeicher gespeichert werden. Nach dem ersten Durchlauf zeigen SA A + 64 und SA B + 64 auf die Anfangsadressen des zweiten acht Elemente enthaltenden Abschnitts der Vektoren A bzw. B, die im Vektorregister V0 während des zweiten Durchlaufs der Schleife addiert und anschließend im zweiten acht Elemente enthaltenden Abschnitt des Vektors C gespeichert werden. Nach dem zweiten Durchlauf zeigen SA A + 128 und SA B + 128 auf die Anfangsadressen des dritten Abschnitts der Vektoren A bzw. B. In diesem Fall verfügen die verbleibenden Abschnitte im Vektor A und im Vektor B über jeweils vier Elemente, die im Vektorregister V0 während des dritten (und letzten) Durchlaufs addiert und anschließend im Vektor C im Hauptspeicher gespeichert werden. (Die Vektoradreßregister werden während des dritten Durchlaufs nochmals fortgeschrieben und zeigen auf die Anfangsadressen des zu erwartenden nächsten Abschnitts, wenn die Vektoroperation fortgesetzt werden sollte.) Wie vorher beschrieben, wird der Inhalt jedes Vektoradreßregisters nach der Ausführung einer sich einen vorhergehenden Abschnitt jenes Vektors beziehenden Instruktion fortgeschrieben (und zeigt dabei auf einen nächsten Abschnitt des Vektors). Wird eine Vektoradresse innerhalb der Schleife mehrmals benötigt, kann für jede Benutzung derselben Vektoradresse ein separates allgemeines Register zugewiesen werden. Wenn zum Beispiel Vektor B in einer Instruktionsfolge innerhalb der Schleife mehrmals verwendet werden sollte, könnte eine Instruktion LR G4,G2 nach der Instruktion LA G2,B programmiert werden. Im Ergebnis würden beide Register G2 und G4 die Anfangsadresse des Vektors B enthalten. Die Register G2 und G4 könnten dann in zwei Instruktionen verwendet werden, so daß die Adresse des Vektors B während eines Schleifendurchlaufs mehrmals verwendet werden könnte. Dies würde die Möglichkeit ausschließen, daß dasselbe Vektoradreßregister während eines Durchlaufs der Schleife unbeabsichtigt mehrmals fortgeschrieben wird, wenn es mehrmals verwendet wird.
  • Es ist anzumerken, daß die VLVCU-Instruktion den Bedingungscode (CC) setzt, um den aktuellen Inhalt des Längenregisters G0 und des Vektorzählregisters VCT anzuzeigen. Wenn aber in einem anderen Programm eine dazwischenkommende Instruktion den Bedingungscode ändern kann, sollte eine weitere Instruktion wie z. B. die Instruktion LOAD AND TEST - LTR G0,G0 - der BC-Instruktion vorausgehen, um den Inhalt des Längenregisters G0 zu prüfen und wirksam festzustellen, ob der Bedingungscode den Wert 2 besitzt oder nicht.
  • Operationen an Gleitkomma- oder Binärvektoren können als einen Quelloperanden den Inhalt eines Skalarregisters angeben, wobei der andere Operand ein Vektor ist. Der Skalaroperand wird so behandelt, als ob er ein Vektor mit der Länge VCT, d. h. derselben Länge wie der Vektoroperand aber mit identischen Elementen wäre. Deshalb kann ein Skalaroperand in ein Vektorregister geladen oder in einer arithmetischen Instruktion verwendet werden. Operanden an Skalar- und Vektoroperanden können entweder Skalaroder Vektorergebnisse liefern.
  • Wenn ein Vektor nicht zusammenhängend ist, d. h., aufeinanderfolgende Elemente nicht in aufeinanderfolgenden Speicherplätzen gespeichert sind, gibt eine Vektorenverarbeitungsinstruktion zwei allgemeine Register an, eines für die vorher beschriebene Anfangsadresse und eines für die Schrittweite. Die Schrittweite ist die Anzahl der Elementstellen, um die die Operation beim Fortschreiten der Instruktionsverarbeitung von einem Element zum nächsten vorrückt. Selbstverständlich wird die maximale Anzahl gleichzeitig - d. h. während einer Ausführung einer Vektorinstruktion - zu verarbeitender Vektorelemente, wie zuvor beschrieben, durch das Vektorzählregister (VCT) angegeben.
  • Im vorhergehenden Beispiel, in dem alle Vektoren zusammenhängend sind, ist die Schrittweite (im allgemeinen (Schritt-) Register 40 enthalten) bei den drei Vektorinstruktionen VLD, VAD und VSTD gleich Eins, was bedeutet, daß aufeinanderfolgende Vektorelemente in benachbarten Hauptspeicherplätzen gespeichert sind. Diese Schrittweite ist der bei Fehlen einer Angabe eines allgemeinen Registers für die Schrittweite verwendete Standardwert. Bei einer Schrittweite "T" und einer Elementlänge "W" (in Bytes) sind die Adressen aufeinanderfolgender Speicherplätze gleich SA A, SA A+WT, SA A+2WT,.... W hat den Wert 2, 4 oder 8, je nachdem, ob der Operationscode im Vektorinstruktionsformat die Länge der Elemente als Halbwort, Wort oder Doppelwort angibt.
  • Bei bestimmten Vektorinstruktionsformaten gibt ein Feld (RT) ein die Schrittweite enthaltendes allgemeines Register an. Ist das Feld RT gleich Null, wird eine Schrittweite von Eins angenommen. Bei denselben Vektorinstruktionsformaten gibt ein Feld (RS) ein allgemeines Register (GR) an, das die Anfangsadresse des ersten zu verarbeitenden Elements des Vektoroperanden im Speicher angibt. Dieses allgemeine Register wird daraufhin für jedes verarbeitete Element fortgeschrieben, so daß eine Vektoradresse (in GR) fortgeschrieben wird, wenn der Vektor in einer Vektorinstruktion angesteuert wird. Als Alternative kann die Vektoradresse in einem internen Register fortgeschrieben werden, und das GR wird die fortgeschriebene Vektoradresse erst nach Beendigung oder Unterbrechung der Vektorinstruktion vom internen Register erhalten.
  • Die allgemeine Unterbrechungsverarbeitung ist dem Fachmann bekannt und umfaßt das Speichern des Programmstatusworts (PSW) als ein altes PSW, das Speichern von Angaben über die Ursache der Unterbrechung und das Abrufen eines neuen PSW. Die weitere Verarbeitung wird durch die Instruktionen an der Adresse im neuen PSW festgelegt. Eine der von den Instruktionen an der Adresse im neuen PSW ausgeführten Funktionen ist das Speichern der für Vektorenverarbeitung verwendeten Register, einschließlich der Vektorregister VCT und VIX. Jede Unterbrechungsklasse wird durch die Speicherplätze gekennzeichnet, an denen das alte PSW gespeichert und von denen das neue PSW abgerufen wird. Die Ursache kann weiterhin durch einen Unterbrechungscode gekennzeichnet sein. Die die Unterbrechung verursachende Bedingung wird durch einen kodierten Wert in den rechtsliegenden sieben Bitpositionen des Unterbrechungscodes. Bei Programmunterbrechungen wird der Programmunterbrechungscode an den reellen Speicherplätzen mit den Adressen 142 bis 143 gespeichert.
  • Alle Vektorinstruktionen, die mehrere Elemente arithmetischer Vektoren im Speicher oder in Vektorregistern verarbeiten können, können zwischen den Elementen beim Auftreten von Ausnahmebedingungen unterbrochen werden, während die Vektorinstruktion eine beliebige Elementstelle bearbeitet. Die Ausnahmebedingungen können externe Ursachen, z. B. Ein-/Ausgabevorgänge, oder für das von der CPU ausgeführte Programm interne Ursachen haben. Interne Ursachen umfassen Speicherzugriffsausnahmebedingungen wie z. B. Fehlseitenbedingungen und arithmetische Ausnahmebedingungen wie z. B. nichtnormalisierter Operand, Exponentenüberlauf und -unterlauf und Division durch Null. Wird eine Instruktion vor der Beendigung der Verarbeitung aller Elemente in einem Abschnitt unterbrochen, wird die Adresse der Instruktion im alten PSW nicht auf die zunächst auszuführende Instruktion fortgeschrieben.
  • Bei einer Ausnahmebedingung, die eine Unterbrechung verursacht, zeigt der Vektorunterbrechungsindex (VIX) auf die entsprechende Vektorregisterstelle (in den Vektorregistern oder im Vektormaskenregister), die das Element (wenn vorhanden) enthält, das nach Beendigung der Unterbrechung verarbeitet werden soll. Die die Adresse eines Vektorelements im Speicher enthaltenden allgemeine Register werden fortgeschrieben und zeigen dann auf die Adresse des bei Wiederaufnahme der Instruktion zunächst zu verarbeitenden Vektorelements im Speicher. Daraus geht hervor, daß dieselbe Instruktion mehrmals unterbrochen werden kann, wobei die Instruktion jedesmal wiederausgegeben und die Verarbeitung der (verbleibenden) Elemente fortgesetzt wird.
  • Wenigstens entsteht der Eindruck, daß Vektorinstruktionen nacheinander ausgeführt, Elemente der Vektoroperanden einer einzelnen Vektorinstruktion nacheinander verarbeitet und etwaige Ausnahmebedingungen nacheinander erkannt werden. Erfolgt die Ausführung nicht nacheinander, und werden einige Operationen zur Steigerung der Leistung überlappt, behält die Hardware ausreichende Informationen, um alle Register an der genauen Unterbrechungsstelle wiederherzustellen, als ob die Operation rein nacheinander ausgeführt worden wäre. Eine Programmunterbrechung wird durch die erste erkannte und zugelassene Ausnahmebedingung verursacht. Änderungen an Speicherplätzen oder Registerinhalten, die durch eine unterbrochene Vektorinstruktion ausgeführt werden sollen, werden nicht zum Zeitpunkt der Unterbrechung durchgeführt sein.
  • Nach Beendigung der Unterbrechungsroutine des neuen Programms, womit das unterbrochene Programm wiederaufgenommen werden kann, müssen die vorher gespeicherten Register wiederhergestellt werden. Die unterbrochene Instruktion wird dann wiederausgegeben (da die Instruktionsadresse im alten PSW nicht auf die nächste Instruktion vorgerückt und das alte PSW als das aktuelle PSW gesetzt wurde) und die Vektorausführung wird wieder vom Unterbrechungspunkt an aufgenommen, d. h. vom nächsten zu verarbeitenden Element, wie vom VIX für Vektorregister (oder Vektormaskenregister) oder von einem allgemeinen (Adreß-) Register für den Speicher angezeigt wird. Wie in der Technik bekannt ist, gibt die Instruktionsadresse im aktuellen PSW die von der CPU 16 abzurufenen Wörter (Halbwörter) an. (Die Ausführung ab der Unterbrechung wird wiederaufgenommen, vorausgesetzt, daß der Inhalt aller Register einschließlich VIX und VCT wiederhergestellt wurde, da die unterbrochene Vektorinstruktion lediglich wiederausgegeben wird.) Da die Ergebnisse früherer Ausführungen gespeichert wurden, ändert die Wiederaufnahme der Ausführung der Instruktion die vorherigen Ergebnisse nicht. Tatsächlich kann es mehrere Unterbrechungen während der Ausführung einer einzelnen Vektorinstruktion an unterschiedlichen Elementstellen und aus unterschiedlichen Gründen geben, ohne daß ein Verlust der vorherigen Ergebnisse entsteht. Außerdem kann für jede Ausnahmebedingung - d. h. arithmetische Ausnahmebedingungen - eine Wiederherstellungsroutine vorprogrammiert werden, damit die vorherigen Ergebnisse ersetzt werden können, d. h., das Programm kann vor der Wiederaufnahme des Programms das Ergebnis wiederherstellen.
  • Z. B. kann das Programm das durch die Hardware erzeugte Ergebniselement durch einen anderen Wert ersetzen und dann die Verarbeitung des Vektors fortsetzen. (Der nachfolgend beschriebene Ausnahmeerweiterungscode hilft dem Wiederherstellungsprogramm, das Ergebniselement aufzufinden.) Diese Art Wiederherstellung kann auch dann erfolgen, wenn mehrere Ausnahmebedingungen während der Ausführung derselben Instruktion auftreten. Ist der Inhalt des VIX gleich dem Inhalt des Vektorzählregisters (VCT), wird die Vektorinstruktion abgeschlossen. Nachdem das letzte Vektorelement durch eine Vektorinstruktion verarbeitet worden ist, wird die Instruktionsadresse automatisch fortgeschrieben (vorgerückt) auf die nächste Vektorinstruktion und der VIX wird gleich Null gesetzt, wenn die Instruktion von dem Wert des VIX abhängig ist.
  • Da die Vektoren im virtuellen Speicher gespeichert werden, können sie eine oder mehrere Seitengrenzen überschreiten, so daß eine Fehlseitenbedingung bei jedem Element eines Vektors auftreten könnte. Tatsächlich wäre der schlimmste Fall bei einer großen Schrittweite eine Fehlseitenbedingung bei jedem Element. Für jede auftretende Fehlseitenbedingung lädt das Betriebssystem die fehlende Seite (weitgehend wie in der Technik bekannt ist), und die Ausführung setzt sich dann fort. Zu viele Fehlseitenbedingungen würden die Leistung des Systems verringern, da Zeit dazu aufgewendet würde, die fehlenden Seiten zu laden. Nichtsdestoweniger würde das Vektoren mit unterbrechbaren Vektorinstruktionen verarbeitende Programm korrekt ablaufen. Wären die Vektorinstruktionen nicht unterbrechbar, und könnte ihre Ausführung nicht ab dem Unterbrechungspunkt wiederaufgenommen werden, würden erhebliche Probleme entstehen. Z. B. müßten Instruktionen zum Laden bzw. Speichern vom Anfang des Vektorabschnitts an wiederaufgenommen werden, ohne daß der Erfolg gewährleistet wäre, da zusätzliche Fehlseitenbedingungen auftreten können, oder die Seiten als "fest" (nicht umlagerbar) gekennzeichnet werden müßten. Außerdem würde die Wiederaufnahme von arithmetischen Operationen an Vektoren ab dem Anfang nach einer Ausnahmebedingung sehr schwierig sein, da es sein kann, daß Teilergebnisse frühere Operandenelemente ersetzt haben.
  • Die Ausführung einer Vektorinstruktion beansprucht normalerweise verhältnismäßig viel Zeit. Wenn aber eine Vektorinstruktion unterbrechbar ist, kann das Betriebssystem schneller auf externe Ausnahmebedingungen (diejenigen mit hoher Priorität) reagieren, als wenn es auf das Ende der Ausführung der Vektorinstruktion warten müßte. Insbesondere kann das Betriebssystem eine schnelle Zwischenaktion ausführen, wenn die Aktion nicht die VPU benötigt, da Vektorregister nicht gespeichert werden müßten, damit sie einem anderen Programm zur Verfügung ständen.
  • In Anbetracht der vorigen Erörterung dienen Vektorinstruktionen mehreren Zwecken. Sie sehen folgendes vor:
  • 1. Wiederherstellungsroutinen für Ausnahmebedingungen
  • 2. Behandlung von Fehlseitenbedingungen
  • 3. Ansprechempfindlichkeit.
  • Wenn eine unterbrechbare Vektorinstruktion eine arithmetische Ausnahmebedingung verursacht, wird ein Ausnahmeerweiterungscode (EEC) ungleich Null in den Bits 0 bis 7 des Programmunterbrechungscodes (PIC) gesetzt. Der EEC gibt an, ob die Unterbrechung durch eine nicht unterbrechbare Skalarinstruktion oder eine unterbrechbare Vektorinstruktion erfolgte, ob das Ergebnis (wenn vorhanden) in ein Skalar- oder ein Vektorregister gespeichert wurde, die Länge des Ergebnisses und die Registernummer.
  • Bit Null des PIC gibt an, daß der EEC gespeichert worden ist. Insbesondere, wenn die arithmetische Ausnahmebedingung infolge einer unterbrechbaren Vektorinstruktion aufgetreten ist und eine Unterbrechung verursacht, die zu einer teilweisen Ausführung der Instruktion führt, wird Bit Null gleich 1 gesetzt und enthalten die Bits 1 bis 7 folgende Informationen:
  • Bit 1: Das arithmetische Ergebnis befindet sich in Vektorregistern, wenn das Bit gleich 1, oder in einem Skalarregister, wenn das Bit gleich Null ist.
  • Bits 2-3: enthalten die Länge (4 bzw. 8 Bytes) des arithmetischen Ergebnisses; und
  • Bits 4-7 enthalten die Registernummer des Ergebnisregisters.
  • Ist die arithmetische Ausnahmebedingung infolge einer Skalar(nicht Vektor-)instruktion aufgetreten, sind die Bits 0 bis 7 des PIC alle gleich Null.

Claims (3)

1. Datenverarbeitungssystem, welches die folgenden Einrichtungen aufweist:
Speicher, Register, die zumindest ein allgemeines Register (VSR) und zumindest ein Vektorregister (VRA), das in Vektorelementstellen unterteilt ist, aufweisen,
Vektorelemente von zumindest einem Vektor im genannten Speicher,
Mittel zum Laden und Speichern der genannten Vektorelemente im genannten Speicher und im genannten Speicherregister,
zumindest eine zentrale Verarbeitungseinheit zum Ausführen von Instruktionen, von denen zumindest eine eine Vektorinstruktion zum Bearbeiten der genannten Vektorelemente und zum Ansteuern eines allgemeinen Registers ist,
wobei das genannte System ein Register (G0) zum Speichern eines der Länge des genannten Vektors entsprechenden Wertes aufweist, wobei das genannte System durch Mittel gekennzeichnet ist zum Unterbrechen der genannten Vektorinstruktionen, und wobei das Verfahren zur Bearbeitung der genannten Elemente des genannten Vektors die folgenden Schritte aufweist:
a) Laden eines ersten Registers (G0) mit einer Zahl, welche die Gesamtanzahl der genannten Vektorelemente, die durch die genannte Vektorinstruktion bearbeitet werden sollen, darstellt,
b) Ausführen einer maschinensprachlichen Instruktion mit den folgenden Schritten:
i. Laden eines zweiten Registers (VCT) mit einer Zahl, die höchstens die Anzahl der genannten Vektorelementstellen im genannten Vektorregister darstellt, wobei die genannte Zahl im genannten zweiten Register die Anzahl von Elementen des genannten Vektors anzeigt, die während einer einzigen wiederholten Ausführung der genannten Vektorinstruktion verarbeitet werden sollen,
ii. Laden des genannten zweiten Registers (VCT) mit dem Inhalt des genannten ersten Registers (G0), wenn der Inhalt des genannten ersten Registers nicht größer ist als die Anzahl von Vektorelementstellen im genannten Vektor, und Setzen eines Bedingungscodes, der den Inhalt des genannten ersten Registers anzeigt, und
ii. Subtrahieren des Inhalts des genannten zweiten Registers (VCT) vom Inhalt des genannten ersten Registers (G0) und Speichern des Resultates im genannten ersten Register,
c) Ausführen der genannten Vektorinstruktion und Laden einer Gruppe der genannten Vektorelemente, die vom genannten allgemeinen Register (VSR), das von der genannten Vektorinstruktion angesteuert wird, vom genannten Vektor im Speicher in das genannte Vektorregister (VRA), das ebenfalls durch die genannte Vektorinstruktion angesteuert wird, wobei die Anzahl von Elementen in der genannten Gruppe von Elementen, die im genannten Vektorregister geladen ist, durch den Inhalt des genannten zweiten Registers bestimmt wird,
d) Setzen und Fortschreiben eines Zeigerregisters (VIX) zur fortdauernden Identifizierung jedes der genannten Vektorelemente, die durch die genannte Vektorinstruktion bearbeitet werden sollen,
e) Stoppen der Operation bevor ein folgendes der genannten Vektorelemente verarbeitet wird, wenn die genannte Vektorinstruktion unterbrochen wird, ohne das Resultat, das durch die Bearbeitung eines jeden der genannten Vektorelemente vor der Unterbrechung der genannten Vektorinstruktion erhalten wurde, zu verwerfen,
f) Wiederausgabe der genannten Vektorinstruktion nach der Unterbrechung der genannten Vektorinstruktion und Wiederaufnahme der Bearbeitung der restlichen Vektorelemente, die durch das genannte Zeigerregister (VIX) identifiziert werden, wobei die genannte wiederausgegebene Vektorinstruktion genau an der Stelle wieder gestartet wird, an der sie unterbrochen wurde, und Rückkehr zum Schritt e), wenn die genannte Vektorinstruktion wieder unterbrochen wird, und
g) Rückkehr zum Schritt b) (ii.) nach Vollendung der genannten einzelnen wiederholten Ausführung der genannten Vektorinstruktion und Wiederholung der Schritte, wenn der genannte Bedingungscode nicht auf einen vorher bestimmten Wert gesetzt ist, der anzeigt, daß alle der genannten Vektorelemente durch die genannte Vektorinstruktion basierend auf dem Inhalt des genannten ersten Registers verarbeitet wurden.
2. Datenverarbeitungsverfahren nach Anspruch 1 zum Bearbeiten der genannten Elemente des genannten Vektors, der größer ist als das genannte Vektorregister, mit den folgenden Schritten:
a) Laden eines ersten Registers (G0) mit einer Zahl, welche die Gesamtanzahl von Vektorelementen darstellt, die durch die genannte Vektorinstruktion während mehr als einer wiederholten Ausführung der genannten Vektorinstruktion bearbeitet werden sollen, wobei die genannte Gesamtanzahl der genannten Vektorelemente größer ist als die Anzahl der genannten Vektorelementstellen im genannten Vektorregister,
b) Ausführen einer Instruktion in Maschinensprache mit den folgenden Schritten:
i. Laden eines zweiten Registers (VCT) mit einer Zahl die höchstens die Anzahl der genannten Vektorelementstellen im genannten Vektorregister darstellt, wobei die genannte Zahl im genannten zweiten Register die Anzahl von Elementen des genannten Vektors, die während einer einzigen wiederholten Ausführung der genannten Vektorinstruktion bearbeitet werden sollen, darstellt,
ii. Laden des genannten zweiten Registers (VCT) mit dem Inhalt des genannten ersten Registers, wenn der Inhalt des genannten ersten Registers nicht größer ist als die Anzahl von Vektorelementstellen im genannten Vektorregister, und Setzen eines Bedingungscodes der den Inhalt des ersten Registers anzeigt, und
iii. Subtrahieren des Inhalts des genannten zweiten Registers (VCT) vom Inhalt des genannten ersten Registers (G0) und Speichern des Resultates im genannten ersten Register, wobei das genannte erste Register nun die Anzahl der restlichen Vektorelemente enthält, die während darauffolgenden wiederholten Ausführungen der genannten Vektorinstruktion verarbeitet werden sollen,
c) Ausführen der genannten Vektorinstruktion, welche das genannte allgemeine Register (VSR) ansteuert, wobei das Register automatisch fortgeschrieben wird, um das erste Element einer Gruppe der genannten Vektorelemente des genannten Vektors im Speicher zwecks Einschreiben in das genannte Vektorregister (VRA) zu identifizieren, das ebenfalls in der genannten Vektorinstruktion angesteuert wird, wobei die genannten Vektorelemente, welche darauffolgend in das genannte Vektorregister geladen werden während einer einzigen wiederholten Ausführung der genannten Vektorinstruktion verarbeitet werden, und wobei die Anzahl von Elementen in der genannten Gruppe von Elementen die im genannten Vektorregister geladen sind durch den Inhalt des genannten zweiten Registers bestimmt wird,
d) Setzen und Fortschreiben eines Zeigerregister (VIX) zur fortdauernden Identifizierung jedes der genannten Vektorelemente im genannten Vektorregister, die durch die genannte Vektorinstruktion bearbeitet werden sollen,
e) Stoppen der Operation bevor ein darauffolgendes der genannten Vektorelemente verarbeitet wird, wenn die genannte Vektorinstruktion unterbrochen wird, ohne die Resultate die durch die Bearbeitung eines jeden vorhergehenden Elementes der genannten Vektorelemente vor der Unterbrechung der genannten Vektorinstruktion erhalten wurden, zu verwerfen,
f) Wiederausgabe der genannten Vektorinstruktion nach der Unterbrechung der genannten Vektorinstruktion und Wiederaufnahme der Bearbeitung der restlichen der genannten Vektorelemente, die durch das genannte Zeigerregister (VIX) identifiziert werden, wobei das Starten der genannten wiederausgegebenen Vektorinstruktion genau an dem Punkt der Unterbrechung erfolgt, und Rückkehr zum Schritt e), wenn die genannte Vektorinstruktion wieder unterbrochen wird,
g) Rückkehr zum Schritt b) ii. nach Vollendung der genannten einzigen wiederholten Ausführung der genannten Vektorinstruktion und Wiederholung der Schritte bis der genannte Bedingungscode auf einen vorherbestimmten Wert gesetzt ist, der anzeigt, daß alle der genannten Vektorelemente durch die genannte Vektorinstruktion basierend auf dem Inhalt des genannten ersten Registers verarbeitet worden sind.
3. Datenverarbeitungsverfahren nach Anspruch 2, in dem die genannte Vektorinstruktion arithmetische Operationen in Bezug auf die genannten Vektorelemente, die im genannten Vektorregister gespeichert sind, und die Vektorelemente die im genannten Speicher gespeichert sind, ausführt, wodurch der Aufwand vermindert wird, der durch das Aufbewahren und der Wiederherstellung von Statusinformationen bei einem Aufgabenwechsel verursacht wird.
DE8686105482T 1985-06-17 1986-04-21 Vektorenverarbeitung. Expired - Fee Related DE3685913T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US06/745,040 US4745547A (en) 1985-06-17 1985-06-17 Vector processing

Publications (2)

Publication Number Publication Date
DE3685913D1 DE3685913D1 (de) 1992-08-13
DE3685913T2 true DE3685913T2 (de) 1993-02-25

Family

ID=24995001

Family Applications (1)

Application Number Title Priority Date Filing Date
DE8686105482T Expired - Fee Related DE3685913T2 (de) 1985-06-17 1986-04-21 Vektorenverarbeitung.

Country Status (5)

Country Link
US (1) US4745547A (de)
EP (1) EP0205809B1 (de)
JP (1) JPS61290570A (de)
CA (1) CA1242281A (de)
DE (1) DE3685913T2 (de)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6314275A (ja) * 1986-07-04 1988-01-21 Nec Corp ベクトル演算プロセツサのスカラデ−タ演算方式
JPS63251835A (ja) * 1987-04-08 1988-10-19 Hitachi Ltd ベクトル処理装置
US5063497A (en) * 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
US5247628A (en) * 1987-11-30 1993-09-21 International Business Machines Corporation Parallel processor instruction dispatch apparatus with interrupt handler
US5027272A (en) * 1988-01-28 1991-06-25 Weitek Corporation Method and apparatus for performing double precision vector operations on a coprocessor
US4949247A (en) * 1988-02-23 1990-08-14 Stellar Computer, Inc. System for transferring multiple vector data elements to and from vector memory in a single operation
US5210834A (en) * 1988-06-01 1993-05-11 Digital Equipment Corporation High speed transfer of instructions from a master to a slave processor
DE68926183T2 (de) * 1988-06-23 1996-10-10 Ibm Ergebnisverfügbarkeit einer Rechensequenz
EP0365322A3 (de) * 1988-10-19 1991-11-27 Hewlett-Packard Company Verfahren und Vorrichtung zur Ausnahmenbehandlung in Fliessbandprozessoren mit unterschiedlicher Befehlspipelinetiefe
JPH02190930A (ja) * 1988-12-29 1990-07-26 Internatl Business Mach Corp <Ibm> ソフトウエア命令実行装置
US5974522A (en) * 1990-01-24 1999-10-26 Cornell Research Foundation, Inc. Machine for processing interrupted out-of-order instructions
JP2718254B2 (ja) * 1990-10-02 1998-02-25 日本電気株式会社 ベクトル処理装置
JPH0546407A (ja) * 1991-08-12 1993-02-26 Toshiba Corp スタツク管理システム
US5669013A (en) * 1993-10-05 1997-09-16 Fujitsu Limited System for transferring M elements X times and transferring N elements one time for an array that is X*M+N long responsive to vector type instructions
US5623685A (en) * 1994-12-01 1997-04-22 Cray Research, Inc. Vector register validity indication to handle out-of-order element arrival for a vector computer with variable memory latency
US5537606A (en) * 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
EP0834114A2 (de) * 1996-03-28 1998-04-08 Koninklijke Philips Electronics N.V. Verfahren und rechnersystem zur verarbeitung eines satzes von datenelementen auf einen sequentiell arbeitenden prozessor
US6681315B1 (en) * 1997-11-26 2004-01-20 International Business Machines Corporation Method and apparatus for bit vector array
US6289435B1 (en) * 1999-05-17 2001-09-11 Creative Technology Ltd. Re-use of special purposed registers as general purpose registers
US7308559B2 (en) * 2000-02-29 2007-12-11 International Business Machines Corporation Digital signal processor with cascaded SIMD organization
US20040193837A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney CPU datapaths and local memory that executes either vector or superscalar instructions
US20050226337A1 (en) * 2004-03-31 2005-10-13 Mikhail Dorojevets 2D block processing architecture
US8239659B2 (en) * 2006-09-29 2012-08-07 Intel Corporation Vector completion mask handling
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US10175990B2 (en) 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
WO2013095580A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
EP3125108A1 (de) * 2015-07-31 2017-02-01 ARM Limited Datenverarbeitung
EP3125109B1 (de) * 2015-07-31 2019-02-20 ARM Limited Vektorlängenabfrageanweisung
GB2548601B (en) * 2016-03-23 2019-02-13 Advanced Risc Mach Ltd Processing vector instructions
US10599428B2 (en) 2016-03-23 2020-03-24 Arm Limited Relaxed execution of overlapping mixed-scalar-vector instructions
JP6222859B2 (ja) * 2016-04-25 2017-11-01 インテル・コーポレーション ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック
GB2616601B (en) * 2022-03-11 2024-05-08 Advanced Risc Mach Ltd Sub-vector-supporting instruction for scalable vector instruction set architecture

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5148937A (en) * 1974-10-25 1976-04-27 Fujitsu Ltd Kiokusochi niokeru junjoseigyohoshiki
US4128880A (en) * 1976-06-30 1978-12-05 Cray Research, Inc. Computer vector register processing
JPS5852265B2 (ja) * 1977-01-12 1983-11-21 株式会社日立製作所 デ−タ処理装置
JPS6024985B2 (ja) * 1978-08-31 1985-06-15 富士通株式会社 デ−タ処理方式
JPS6055864B2 (ja) * 1980-07-21 1985-12-06 株式会社日立製作所 ベクトルプロセツサ
JPS58189739A (ja) * 1982-04-30 1983-11-05 Hitachi Ltd デ−タ処理システム
JPS60103482A (ja) * 1983-10-24 1985-06-07 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション ベクトル処理能力を有するデ−タ処理装置

Also Published As

Publication number Publication date
EP0205809A3 (en) 1989-02-08
CA1242281A (en) 1988-09-20
JPH0517588B2 (de) 1993-03-09
DE3685913D1 (de) 1992-08-13
US4745547A (en) 1988-05-17
JPS61290570A (ja) 1986-12-20
EP0205809A2 (de) 1986-12-30
EP0205809B1 (de) 1992-07-08

Similar Documents

Publication Publication Date Title
DE3685913T2 (de) Vektorenverarbeitung.
DE69833008T2 (de) Prozessor mit instruktionskodierung mittels eines schablonenfeldes
DE2714805C2 (de)
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE3210816C2 (de)
DE68929483T2 (de) Datenprozessor mit einer Befehlseinheit, die einen Cachespeicher und einen ROM aufweist.
DE69627807T2 (de) Datenprozessor zum gleichzeitigen Dataladen und Durchführung einer multiplizier-addier Operation
DE3586603T2 (de) Datenprozessor fuer interpretierende und kompilierte sprache.
DE69724771T2 (de) Zentralprozessoreinheit mit x86 und dsp kern und einem dsp funktions-dekoder zum abbilden von x 86-befehlen auf dsp-befehle
DE3687298T2 (de) Verfahren zur verarbeitung von adressenuebersetzungsausnahmen in einer virtuellen speicheranordnung.
DE1931966C3 (de) Datenverarbeitungsanlage mit Assoziativspeichern
DE60224774T2 (de) Datenverarbeitungssystem mit Lese-, Änderungs- und Schreibeinheit
DE60115976T2 (de) Rechnersystem und Interruptvorgang
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE2411963B2 (de) Datenverarbeitungsanlage
DE10297581T5 (de) Lade/Übertrage- und Duplizier-Anweisungen für einen Prozessor
DE3306084A1 (de) Rechnerarchitektur zur gleitkomma -addition
DE19983098B4 (de) Mehrfach-Bitanzeige zur Behandlung von Schreib-nach-Schreib-Fehlern und zur Eliminierung von Bypass-Komparatoren
DE2533737C2 (de) Mikroprozessor mit aufteilbarer Adressenschiene
DE3802025C1 (de)
DE69732793T2 (de) Acht-bit-mikrokontroller mit risc-architektur
DE60009496T2 (de) Mikroprozessor mit reduziertem kontextumschaltungsaufwand und verfahren
DE4216905A1 (de) Superskalarprozessor
DE3900246C2 (de)

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee