DE68911398T2 - Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem. - Google Patents
Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem.Info
- Publication number
- DE68911398T2 DE68911398T2 DE68911398T DE68911398T DE68911398T2 DE 68911398 T2 DE68911398 T2 DE 68911398T2 DE 68911398 T DE68911398 T DE 68911398T DE 68911398 T DE68911398 T DE 68911398T DE 68911398 T2 DE68911398 T2 DE 68911398T2
- Authority
- DE
- Germany
- Prior art keywords
- vector
- data
- cache
- address
- block
- 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
Links
- 239000013598 vector Substances 0.000 title claims description 288
- 238000000034 method Methods 0.000 title claims description 36
- 238000012545 processing Methods 0.000 title description 54
- 230000015654 memory Effects 0.000 claims description 159
- 238000012360 testing method Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 claims 2
- 230000005540 biological transmission Effects 0.000 claims 1
- 230000003139 buffering effect Effects 0.000 claims 1
- 230000002401 inhibitory effect Effects 0.000 claims 1
- 230000004044 response Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010561 standard procedure Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8061—Details on data memory access
- G06F15/8069—Details on data memory access using a cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Complex Calculations (AREA)
Description
- Verfahren zum Vorauslesen von Vektordaten aus einem Speicher in einem Speichersystem, das für eine Skalarverarbeitung ausgelegt ist.
- Die vorliegende Erfindung betrifft allgemein das Gebiet von Speichern für Digitalcomputer, und insbesondere das Lesen von Vektordaten aus dem Speicher. Insbesondere betrifft die vorliegende Erfindung die Verwendung eines Cache-Speichers in Verbindung mit einem Vektorprozessor.
- Während der gesamten Entwicklung des Digitalcomputers waren die Speicherkosten ein Hauptfaktor im Gesamtsystem-Preis. Obwohl Speicher relativ billig geworden sind, gibt es verfügbare Speicher mit variierenden Speicherkapazitäten und Leistungsfähigkeitscharakteristiken, die mit unterschiedlichen Kosten verfügbar sind. Es ist wünschenswert, den schnellsten, erhältlichen Speicher zu verwenden, um die Ausführungsgeschwindigkeit des Datenprozessors nicht zu begrenzen. Der schnellste, erhältliche Speicher ist jedoch der teuerste und die meisten Anwendungen rechtfertigen nicht die Kosten eines Hochgeschwindigkeitsspeichers mit ausreichender Kapazität, um ein vollständiges Programm und seine zugeordneten Daten aufrechtzuerhalten. Deshalb enthält der Speicher eines typischen Digitalcomputers einen relativ kleinen Abschnitt eines Hochgeschwindigkeitsspeichers für häufigen Zugriff durch den Datenprozessor und eine relativ großen Abschnitt von Speichern mit niedriger Geschwindigkeit für einen weniger häufigen Zugriff. Der Speicher mit niedriger Geschwindigkeit dient als "Hauptspeicher"- des Computers.
- Bei dem typischen Computer, wie er oben beschrieben wurde, kann dem Benutzer gestattet werden, den Hochgeschwindigkeitsspeicher mit Code und Daten, auf die am häufigsten zugegriffen wird, zu laden und, wenn nötig, Code und Daten zwischen dem Hochgeschwindigkeitsspeicher und dem Hauptspeicher während der Ausführung zu übertragen, um die optimale Ausführungsgeschwindigkeit für das jeweilige Programm zu erhalten. Ein wesentlicher Fortschritt trat jedoch auf, als entdeckt wurde, daß eine nahezu optimale Leistungsfähigkeit für gewöhnlich resultiert, wenn ein in gewisser Weise bemessener Block von Daten oder Code automatisch vom Hauptspeicher zu dem Hochgeschwindigkeitsspeicher immer dann übertragen wird, wenn die Verarbeitungseinheit ein Datenstück oder ein Codestück mit einem Verweis versehen hat, das nicht gegenwärtig in dem Hochgeschwindigkeitsspeicher gespeichert ist. Die nahezu optimale Leistungsfähigkeit beruht auf dem Prinzip der Lokalität von Speicherverweisen in Zeit und Raum. Es gibt eine relativ hohe Wahrscheinlichkeit dafür, daß nachfolgende Programm- oder Datenverweise an einer Speicheradresse innerhalb des gleichen Blocks von Adressen wie bei dem vorherigen Programm- oder Datenverweis auftreten. Für eine automatische Übertragung von Daten- und Programmblöcken ist der Hochgeschwindigkeitspeicher als ein Assoziativspeicher organisiert, der als "Cache" bezeichnet wird. Die Konfiguration und der Betrieb des Cache wird weiter im Kapitel 11 von Levy und Eckhouse, Jr., Computer Programming and Architecture - The VAX 11 (Computerprogrammierung und Architektur - Die VAX 11), Digital Equipment Corporation (1980), Seiten 351 bis 368 beschrieben.
- Eine Vektorverarbeitung ist eine Anwendung, bei der die Verwendung eines Cache nur unwesentliche Vorteile bereitstellt. In einem Vektorprozessor sind eine Arithmetikeinheit und zugehörige Register zum Beschleunigen von sich wiederholenden Operationen mit sequentiellen Datenelementen vorgesehen. Die Vektorverarbeitung ist z.B. in Cray, Jr., U.S. Patent Nr. 4,128,880, Chen et al., U.S. Patent 4,636,942 und Chen et al., U.S. Patent 4,661,900 beschrieben. Die Vektordatenelemente sind in relativ großen Datenstrukturen im Hauptspeicher gespeichert. Diese Strukturen überschreiten oft die Größe des Cache. Bei der Vektorverarbeitung wird für gewöhnlich auf eine lineare Art, und nicht auf eine gruppenzusammengefaßte (clustered) Art auf die Strukturen zugegriffen, und die allgemeinen Cache-Verarbeitungs- Algorithmen arbeiten nicht gut. Aufgrund auf dieser Überlegungen enthalten viele Vektorprozessoren entweder keinen Cache oder sie führen keine Cache-Verarbeitung von Vektordaten durch. Ein Beispiel für den ersten Fall ist der CRAY-1 Computer, bei dem das gesamte Speichersystem aus dem schnellsten verfügbaren Speicher aufgebaut ist. Beim zweiten Fall wird ein Hochgeschwindigkeitsspeicher zum Speichern von Vektordaten bereitgestellt und ein getrennter Speicher und ein zugehöriger Cache werden zum Speichern des Programmes bereitgestellt.
- Ein Vektorprozessor, der einen Cache hat, wird in der europäischen Patentanmeldung Nr. 0 114 304, veröffentlicht am 1. August 1984, beschrieben. Ein Cache ist zwischen einer zentralen Verarbeitungseinheit und einem Hauptspeicher angeordnet und wird dazu verwendet, Vektoren in einem Cache-Vektorraum zu speichern. Drei Vektoroperandenregister werden zum Lesen von Vektoroperandenelementen aus dem Cache-Speicher und zum Schreiben von Ergebnissen der Vektoroperationen zurück in den Cache- Speicher verwendet. Ein Datenweg vom Cache-Speicher erlaubt Vektoroperandenelementen, daß sie in die ausgewählten Lokalspeicherregister der zentralen Verarbeitungseinheit eingeschrieben werden, und ein Weg von den Lokalspeicherregistern zu dem Cache-Speicher enthält einen Puffer. Der Puffer erlaubt ein überlappendes Lesen und Schreiben der Vektorelemente, um die Zeit, die für die Vektorverarbeitung erforderlich ist, zu minimieren.
- Es ist deshalb erwünscht, einen typischen Cache und Hauptspeicher in Verbindung mit einem Vektorprozessor zu verwenden. Dann werden der Cache- und der Hauptspeicher für sowohl die Vektorverarbeitung auch die Skalarverarbeitung verwendet. Der Vektorprozessor und der Skalarprozessor benutzen den gleichen Cache und den gleichen Hauptspeicher. Ein typischer Cache ist jedoch für eine Skalarverarbeitung ausgelegt. Er hat deshalb eine relativ große Block-Größe und verwaltet keine mehrfachen, unabhängigen oder zueinander versetzten Speicher-Anforderungen. Aber es ist schwierig, für Vektoren eine Block-Größe auszuwählen, die für die verschiedenen Arten geeignet ist, mit denen die Vektorelemente in dem Speicherraum verteilt werden. Obwohl eine große Block-Größe öfter die meisten der Vektorelemente enthalten würde, so daß die Häufigkeit des Auslesens von Blöcken aus dem Hauptspeicher reduziert ist, nimmt die Zeit, die für jedes Auslesen erforderlich ist, mit der zunehmenden Block-Größe zu. Zudem können die Vektoren in nur zusammenhängenden Stellen derart gespeichert sein, daß der Vektor in vielen Blöcken gespeichert sein kann, und es kann nur ein Vektorelement pro ausgelesenen Block geben. Deshalb kann der Cache nicht dafür ausgelegt werden, für Vektoren gut zu arbeiten, indem nur versucht wird, eine optimale Block-Größe auszuwählen.
- Vorauslesen ist eine Technik zum Laden eines Datenblocks von einem Hauptspeicher in einen Cache vor dem Zeitpunkt, bei dem die zentrale Verarbeitungseinheit auf Daten in dem Block zugreift. Das Vorauslesen von vorgegebenen Cache-Blöcken wird in der Europäischen Patentanmeldung Nr. 0 097 790, die am 11. Januar 1984 veröffentlicht wurde, beschrieben. Eine Lade-Steuerungs- Block-Adreß-Einheit implementiert einen Lade-Steuerungs-Block- Adreß-Befehl, der das Vorauslesen von Daten aus dem Hauptspeicher in den Cache hinein simultan mit der Ausführung einer Sequenz von Befehlen in einer verbundenen Liste gestattet. Informationen, die die Anfangsadresse eines nächsten Blocks in der verbundenen Liste bestimmen, werden in einer Stelle in den gegenwärtigen Block mit einem festgelegten Versatz vom Blockanfang aus gespeichert. Der Lade-Steuerungs-Block-Adreß-Befehl ist dafür vorgesehen, dafür verwendet zu werden, Verweise auf eine Sequenz aus Zeigern in der verbundenen Liste zu erzeugen. Die verbundene Liste besteht aus einer Serie von zugeordneten Steuerblöcken. Diese Blöcke sind nicht notwendigerweise räumlich nebeneinander im Speicher, vielmehr wird die Adresse des nächsten Blocks in der Liste in dem gegenwärtigen Block gefunden. Die Adresse des nächsten Blocks ist an einem festgelegten Versatz vom Blockanfang aus vorhanden.
- Ein Vektorbefehl spezifiziert einen Vektoroperanden durch eine Vektoradresse und einen Vektorschritt, und nicht durch eine Liste der Vektorelement-Speicheradressen. In einem herkömmlichen Befehlsformat beginnen die Vektorelemente an der Vektoradresse, und der Vektorschritt spezifiziert die Differenz in den Speicheradressen von benachbarten Vektorelementen. Die Vektorelementadressen entsprechen nicht allgemein jeweiligen Cache-Blöcken, da jeder Cache-Block eine Vielzahl von Vektorelementen enthalten kann und da ein Vektor eine große Anzahl von unterschiedlichen Cache-Blöcken überspannen kann. Des weiteren kann die Vektoradresse nicht vor der Ausführung des Programms, das den Vektorbefehl enthält, bestimmt werden. Deshalb ist es nicht praktisch, die Cache-Blöcke vorauszulesen, die die Vektorelemente enthalten, indem ein Vorauslese-Befehl und eine vorgegebene Liste von Cache-Block-Adressen verwendet werden. Dementsprechend besteht die Hauptaufgabe der vorliegenden Erfindung darin, einen Cache und einen Hauptspeicher bereitzustellen, die für sowohl Vektorverarbeitung als auch Skalarverarbeitung geeignet sind.
- Eine weitere Aufgabe der Erfindung besteht darin, einen Hauptspeicher und einen Cache, die für Skalarverarbeitung optimiert sind, zu verwenden und sie auch für Vektorverarbeitung geeignet auszulegen.
- Eine noch weitere Aufgabe der Erfindung besteht darin, ein Verfahren bereitzustellen, durch das ein Vektorprozessor und ein Skalarprozessor gemeinsam effizient den gleichen Hauptspeicher und Cache benutzen können.
- Kurz gesagt werden in Übereinstimmung mit der Erfindung ein Hauptspeicher und ein Cache, die für Skalarverarbeitung geeignet sind, in Verbindung mit einem Vektorprozessor verwendet, indem Vorauslese-Anforderungen in Antwort auf die Erkennung eines Vektorladebefehls ausgegeben werden. Eine jeweilige Vorauslese- Anforderung wird z.B. für jeden Block ausgegeben, der ein Element des Vektors enthält, der vom Speicher aus geladen werden soll. Die Blöcke, die die Vektorelemente enthalten, werden vorausgelesen durch: Empfangen eines Befehls, um einen Vektor aus Datenelementen, der durch eine Vektoradresse und einen Vektorschritt spezifiziert ist, zu erhalten und in den Vektorprozessor zu laden, wobei einige der Datenblöcke jeweils eine Vielzahl der Datenelemente in dem Vektor enthalten; Berechnen einer Serie von Adressen aus der Vektoradresse und dem Vektorschritt, die die Datenblöcke spezifizieren, welche zumindest ein Datenelement des Vektors enthalten, wobei jede Adresse der Serie einen unterschiedlichen der Datenblöcke spezifiziert, der zumindest ein Datenelement des Vektors enthält; und Übertragen von Anforderungen, die die Adressen der Serie enthalten, zu dem Cache, um an den Datenblöcken Verweise anzubringen, die zumindest ein Datenelement des Vektors enthalten.
- In Antwort auf eine Vorauslese-Anforderung wird der Cache überprüft, um zu bestimmen, ob er den angeforderten Block enthält, und wenn der Cache den angeforderten Block nicht enthält, wird eine Auffüllanforderung zum Hauptspeicher übertragen. Der Hauptspeicher ist in eine Vielzahl von Banken konfiguriert und hat die Fähigkeit der Verarbeitung mehrfacher Verweise. Deshalb können die unterschiedlichen Bänke gleichzeitig mit Verweisen versehen werden, um vielfache Blöcke von Vektordaten vorauszulesen. Bevorzugterweise haben die Speicher- Bänke entsprechende Adressen, die bezüglich Block-Grenzen versetzt sind, um den Blöcken zu erlauben, daß sie sequentiell in linearer Weise mit Bezug auf die Blockadressen vorausgelesen werden können.
- Wenn die Vektordaten von dem Hauptspeicher zurückkehren, werden die Daten in dem Cache für einen möglichen Zugriff in Antwort auf ein nachfolgendes Vektorlade-Kommando gespeichert. In Übereinstimmung mit einem zusätzlichen Merkmal der Erfindung wird ein Cache-Bypass bereitgestellt, um Daten direkt zum Vektorprozessor zu übertragen, wenn die Daten vom Hauptspeicher im Cache gespeichert werden. Der Bypass spart die Zeit ein, die ansonsten für das Lesen der Vektordaten aus dem Cache erforderlich sein würde.
- In einer bevorzugten Ausführungsform ist ein Vektorprozessor einem digitalen Computersystem hinzugefügt, das einen Skalarprozessor, einen Umsetzpuffer für virtuelle Adresse, einen Hauptspeicher und einen Cache enthält. Der Skalarprozessor enthält einen Mikrocode-Interpreter, der Speicherzugriffsanforderungen an den Cache interpretiert. Die Speicherzugriffsanforderungen enthalten virtuelle Adressen. Die virtuellen Adressen werden von dem Umsetzpuffer für virtuelle Adressen umgesetzt und die entsprechenden physikalischen Adressen werden zum Cache übertragen.
- In Antwort auf einen Vektorladebefehl führt der Skalarprozessor einen Mikrocode zum Übertragen eines Vektorladekommandos zum Vektorprozessor und auch zum Übertragen der Vektorvorausleseanforderungen zu dem Cache aus. Die Vektorvorausleseanforderungen enthalten die virtuellen Adressen der Blöcke, auf die durch den Vektorprozessor zugegriffen werden soll. Diese virtuellen Adressen werden auf der Basis der Vektoradresse, der Länge des Vektors und des "Schritts (stride)" oder des Abstands zwischen den Adressen der benachbarten Vektorelemente berechnet.
- Auf den Empfang des Vektorladekommandos hin sendet der Vektorprozessor Anforderungen an den Cache nach den einzelnen Vektorelementen. Die Anforderungen nach den einzelnen Vektorelementen werden unabhängig von den Vektor-Vorauslese- Anforderungen verarbeitet. Da der Skalarprozessor während eines Vektorlade-Zyklus nach der Ausgabe seiner Vorauslese-Kommandos wartet, kann sein Adreßgenerator und sein Datenweg von dem Vektorprozessor benutzt werden. Wenn der Cache während einer Vorauslese-Anforderung auf einen Speicherausfall trifft, wird die Anforderung abgewiesen, da der Ausfall später während der Verarbeitung einer Anforderung nach einem einzelnen Vektorelement auftreten wird. Wenn der Umsetzpuffer während der Vorauslese- Anforderung auf einen Fehlgriff trifft, wird der Fehlgriff als Teil des Vorauslesens verarbeitet, und deshalb tritt ein Fehlgriff während des Verarbeitens der Anforderungen nach den einzelnen Vektorelementen nicht auf.
- Weitere Aufgaben und Vorteile der Erfindung werden nach dem Lesen der nachfolgenden detaillierten Beschreibung und mit Bezug auf die Zeichnungen verständlicher, in denen: 1 ein schematisches Diagramm ist, das die Erfindung illustriert, die in einem Digitalcomputer verwendet wird, der sowohl einen Vektorprozessor als auch einen Skalarprozessor hat;
- Figur 2 ist ein Blockdiagramm einer bevorzugten Organisation für den Cache und den Hauptspeicher, die in dem Digitalcomputer nach Figur 1 verwendet werden;
- Figur 3 ist ein Diagramm, das einen Vektor zeigt, der im Hauptspeicher abgespeichert wurde;
- Figur 4 ist ein schematisches Diagramm einer Logikschaltung, die zum Erzeugen von Vorauslese-Anforderungen in Übereinstimmung mit der vorliegenden Erfindung verwendet werden kann;
- Figur 5 ist ein Blockdiagramm einer alternativen Schaltung, die eine sequentielle Zustandsmaschine zum Erzeugen von Vektor- Vorauslese-Anforderungen in Übereinstimmung mit der vorliegenden Erfindung verwendet;
- Figur 6 ist ein Flußdiagramm, das die kombinatorische Logik zeigt, welche in der sequentiellen Zustandsmaschine der Figur 5 verwendet wird; und
- Figur 7 ist eine bevorzugte Ausführungsform der vorliegenden Erfindung, die einen Mikrocode in einer Skalarverarbeitungseinheit verwendet, um Vektor-Vorauslese- Anforderungen für eine zugeordnete Vektorverarbeitungseinheit zu erzeugen.
- Obwohl die Erfindung verschiedenen Modifikationen und alternativen Formen unterzogen werden kann, sind spezielle Ausführungsformen von ihr exemplarisch in den Zeichnungen gezeigt und werden hier im Detail beschrieben. Es sollte jedoch verstanden werden, daß es nicht beabsichtigt ist, die Erfindung auf die offenbarten, speziellen Formen zu beschränken, sondern im Gegensatz dazu ist es beabsichtigt, alle Modifikationen, Äquivalente und Alternativen, die unter den Geist und in den Bereich der Erfindung fallen, abzudecken, wie sie durch die angehängten Ansprüche definiert ist.
- Man wende sich nun den Zeichnungen zu, wo in Figur 1 ein Digitalcomputer gezeigt wird, der mit 20 bezeichnet ist, und der sowohl einen Skalarprozessor 21 als auch einen Vektorprozessor 22 enthält, die sich den Zugriff auf einen gemeinsamen Hauptspeicher 23 teilen. In Übereinstimmung mit der Auslegung eines herkömmlichen Digitalcomputers, der einen Skalarprozessor verwendet, enthält der Digitalcomputer 20 einen Cache 24, der dem Skalarprozessor 21 auf einer Durchschnittsbasis ermöglicht, skalare Daten mit einer schnelleren Geschwindigkeit als die Zugriffszeit des Hauptspeichers 23 zu verarbeiten. Der Cache 24 enthält eine Einrichtung zum Speichern selektierter, vordefinierter Blöcke von Datenelementen, eine Einrichtung zum Empfangen von Anforderungen von dem Skalarprozessor 21, auf ein spezifisches Datenelement zuzugreifen, eine Einrichtung zum Überprüfen, ob das Datenelement in einem Block ist, der in dem Cache gespeichert ist, und eine Einrichtung, die aktiv ist, wenn Daten für den Block, der das spezifizierte Datenelement enthält, nicht derart gespeichert sind, zum Lesen des spezifizierten Datenblocks aus dem Hauptspeicher 23 und zum Speichern des Datenblocks im Cache 24.
- Anders ausgedrückt, stellt der Cache ein "Fenster" in den Hauptspeicher hinein zur Verfügung und enthält Daten, die wahrscheinlich von dem Skalarprozessor benötigt werden. Wenn ein Datenelement, das vom Skalarprozessor benötigt wird, nicht im Cache 24 gefunden wird, wird das Datenelement von dem Hauptspeicher 23 erhalten, aber bei diesem Vorgang wird ein gesamter Block, einschließlich zusätzlicher Daten, von dem Hauptspeicher 23 aus erhalten und in den Cache 24 geschrieben. Aufgrund des Prinzips der Lokalität in der Zeit und im Speicherraum bestehen Wahrscheinlichkeiten dafür, daß dieses Datenelement in dem Block gefunden wird, der das früher adressierte Datenelement enthält, bei den nachfolgenden Zeitpunkten, bei denen der Skalarprozessor 21 ein Datenelement erwünscht. Deshalb bestehen Wahrscheinlichkeiten dafür, daß der Cache 24 bereits das Datenelement enthält, das vom Skalarprozessor 21 erwünscht wird. Im allgemeinen kann der Hauptspeicher 23, da auf den Cache 24 mit einer viel höheren Geschwindigkeit als auf den Hauptspeicher 23 zugegriffen werden kann, eine proportional langsamere Zugriffs zeit haben als der Cache 24, ohne daß die Durchschnittsgeschwindigkeit des Skalarprozessors 21 verschlechtert wird. Deshalb kann der Hauptspeicher 23 aus langsameren und weniger teuren Speicherelementen bestehen.
- Wie in der Figur 1 gezeigt wird, greift der Vektorprozessor 22 auch auf den Cache 24 zu, um Vektorelemente zu erhalten. Der Vektorprozessor 22 empfängt z.B. einen Vektorladebefehl, der dem Vektorprozessor befiehlt, Vektorelement-Adressen zum Cache 24 zu senden, und in Antwort auf diese Vektorelement-Adressen sendet der Cache die gewünschten Vektorelemente zum Vektorprozessor. Es ist erwünscht, einen Cache 24 zu verwenden, der im wesentlichen zur Verwendung mit dem Skalarprozessor 21 ausgelegt ist. Der Cache 24 kann deshalb Speicher- und Steuerschaltungen verwenden, die in herkömmlichen und kommerziell erhältichen Computersystemen gefunden werden. Zum praktischen Ausführen der Erfindung ist es z.B. erwünscht, einen Cache 24 und einen Hauptspeicher 23 zu verwenden, die ähnlich zum Cache und zum Hauptspeicher des Digitalcomputers "VAX-11" sind, wie er im Kapitel 11 von Levy und Eckhouse Jr., Computer Programming and Architecture - VAX-11, Digital Equipment Corporation (1980) Seiten 351-368 beschrieben wird, das hier durch Bezugnahme aufgenommen wird. Die mit "VAX" bezeichneten Digitalcomputer sind kommerziell von der Digital Equipment Corporation, 111 Powdermill Road, Maynard, MA 01754- 1418 erhältlich.
- Obwohl herausgefunden wurde, daß Cache-Speicher extrem gut bei Skalarverarbeitung arbeiten, haben sie weniger gut bei der Vektorverarbeitung funktioniert, und folglich enthalten typische Vektorverarbeitungssysteme entweder keinen Cache oder sie führen keine Cache-Verarbeitung von Vektordaten durch. Die Größe der Vektordaten-Strukturen überschreitet typischerweise die Größe des Datenblocks in einem Cache, der für Skalarverarbeitung ausgelegt ist, und manchmal überschreitet die Vektordaten-Struktur die Größe des Cache-Speichers. Manchmal ist ein Vektor klein genug, um in die Blockgröße hineinzupassen, aber sogar in diesem Fall ist es möglich, daß sich der Vektor über die Blockgrenze hinaus erstreckt. Wenn dies auftritt, kann das Auslesen aller Element in dem Vektor unterbrochen werden, wenn die Blockgrenze während des Adressierens des Cache gekreuzt wird. Auch wenn ein Vektor eine geringe Anzahl von Elementen hat, ist es möglich, daß diese Elemente in beabstandeten oder nicht fortlaufenden Speicherstellen gespeichert sind, so daß nur wenige Vektorelemente pro Block adressiert werden würden. In diesem Fall könnte die Adressierung des Cache-Speichers unterbrochen werden, wenn die Blockgrenzen gekreuzt werden.
- In Übereinstimmung mit einem wichtigen Aspekt der vorliegenden Erfindung ist der Digitalcomputer 20 mit einem Vorauslesungs- Anforderungs-Generator 25 versehen, der Block-Vorauslese- Anforderungen an den Cache in Antwort auf einen Vektorladebefehl ausgibt. Der Vorauslesungs-Anforderungs-Generator 25 gibt die Block-Vorauslese-Anforderungen mit einer hohen Geschwindigkeit aus, um sicherzustellen, daß die erforderlichen Speicherblöcke von dem Hauptspeicher 23 zu dem Cache 24 sobald wie möglich übertragen werden. Im allgemeinen werden die erforderlichen Blöcke angefordert, bevor die entsprechenden Vektorelemente durch den Vektorprozessor adressiert werden, und in einigen Fällen werden die Blöcke aus dem Speicher zu einer Zeit ausgelesen, während der der Vektorprozessor 22 die Vektorelemente adressiert, die von dem Vektorladebefehl spezifiziert werden.
- Der Vorauslesungs-Anforderungs-Generator 25 enthält eine Einrichtung zum Empfangen der Vektorinformationen, die durch den Vektorladebefehl spezifiziert werden, eine Einrichtung zum Bestimmen der Datenblöcke, die zumindest ein Element des spezifizierten Vektors enthalten, und eine Einrichtung zum Übertragen von Anforderungen, um auf die Datenblöcke zu verweisen, die bestimmt werden, zumindest ein Datenelement des Vektors zu enthalten.
- Man wende sich nun der Figur 2 zu, wo ein Blockdiagramm einer bevorzugten Organisation des Cache 24 und des Hauptspeichers 23 gezeigt ist. Der Hauptspeicher 23 wird mit vier Speicherbänken gezeigt, die allgemein mit 26, 27, 28 und 29 bezeichnet sind. Diese Speicherbänke können jeweils z.B. bis zu einem halben Gigabyte speichern. Obwohl die allgemeine Organisation des Hauptspeichers 23 herkömmlich ist, sollten die Speicheradressen für die Speicherbänke an Blockgrenzen zueinander versetzt sein, wie es in der Figur 2 gezeigt wird. Die Blockgröße beträgt z.B. 64 Byte. Ein erster Block (BLOCK 0) hat zugeordnete Byte-Adressen von 0 bis 63 und ist in der ersten Bank 26 gespeichert. Ein zweiter Block (BLOCK 1) hat zugeordnete Byte-Adressen von 64 bis 127 und ist in der zweiten Speicherbank 27 gespeichert. Der dritte Block (BLOCK 2) hat zugeordnete Byte-Adressen von 128 bis 191 und ist in der dritten Speicherbank 28 gespeichert. Der vierte Block (BLOCK 3) hat zugeordnete Byte-Adressen von 192 bis 225 und ist in der vierten Speicherbank 29 gespeichert. Der fünfte Block (BLOCK 4) hat zugeordnete Byte-Adressen von 256 bis 319 und ist in der ersten Speicherbank 26 gespeichert usw. Zudem ist der Hauptspeicher 23 mit einer Steuerschaltung versehen, die es erlaubt, daß auf eine Vielzahl von Speicherbänken simultan zugegriffen werden kann, damit Blöcke bei unterschiedlichen Byte- Adress-Bereichen erhalten werden können.
- Ein Blockversetzen der Speicherbank-Adressen ist beim Durchführen der vorliegenden Erfindung nützlich, da Vektoren herkömmlicherweise auf eine lineare Art mit Bezug auf die physikalischen Adressen der Bytes in dem Hauptspeicher gespeichert und mit Verweis versehen sind. Wenn sich ein Vektor über eine oder mehrere Blockgrenzen hinaus erstreckt, ist es für viele der fortlaufenden Blöcke erwünscht, daß auf sie simultan im Hauptspeicher 23 zugegriffen werden kann. Dies erlaubt z.B. der durchschnittlichen Speicherzugriffsgeschwindigkeit für die Datenblöcke, ein Vielfaches der Zugriffsgeschwindigkeit für eine einzelne Speicherbank zu überschreiten. Im Fall von vier Speicherbänken, wie in der Figur 2 gezeigt wird, ist es erwünscht, zuzulassen, daß auf zumindest drei Speicherbänke simultan zugegriffen werden kann.
- Wie in der Figur 2 gezeigt wird, ist der Cache 24 herkömmlich, mit der Ausnahme der Tatsache, daß er mit einem Auslesepuffer 30 versehen ist, der anzeigt, auf welche der Hauptspeicherbänke gegenwärtig zugegriffen wird. Wenn der Auslesepuffer z.B. voll ist, wird ein Signal erzeugt, das verursacht, daß zusätzliche Füllanforderungen vorübergehend zurückgestellt werden. Zudem wird dann, wenn eine Füllanforderung erzeugt wird, die mit einer Füllanforderung übereinstimmt, die bereits in dem Auslesepuffer ist, der Empfang der Füllanforderung bestätigt, ohne daß eine zusätzliche Füllanforderung in dem Auslesepuffer plaziert wird.
- Wie herkömmlich enthält der Cache 24 ein Eingangsadreß-Register, das allgemein mit 31 bezeichnet ist, einen Kennzeichenspeicher, der allgemein mit 32 bezeichnet ist, und einen Datenspeicher, der allgemein mit 33 bezeichnet ist. Der Datenspeicher 33 ist zum Speichern von ausgewählten Blöcken der vordefinierten Blöcke der Datenelemente organisiert. Um anzuzeigen, ob Daten für einen spezifischen Block in dem Datenspeicher 33 gespeichert sind, ist der Kennzeichenspeicher 32 zum Speichern jeweiliger Kennzeichen, die den Blöcken zugeordnet sind, organisiert. Der Cache 24 enthält weiterhin eine Einrichtung wie z.B. einen Vergleicher 34 zum Überprüfen, ob Daten für einen spezifizierten Block im Cache- Speicher gespeichert sind.
- Wie spezifisch in der Figur 2 gezeigt wird, umfaßt das Kennzeichen den oberen Abschnitt der Blockadresse. In Antwort auf eine Füllanforderung, wird ein adressierter Block im Hauptspeicher zu einem oder mehreren vordefinierten Schlitzen (slots) im Datenspeicher 33 übertragen. Die Schlitze, die mit einem gegebenen Block verbunden sind, werden durch einen Index j indiziert. Der Index j und das Kennzeichen für einen bestimmten Block spezifizieren die Blockadresse für diesen Block. Wenn eine Adresse eines gewünschten Bytes im Eingangsregister 31 empfangen wird, zeigt deshalb der Indexabschnitt j auf zumindest einen entsprechenden Schlitz in dem Kennzeichenspeicher 32 und das adressierte Kennzeichen wird dem Vergleicher 34 zum Vergleich mit dem Kennzeichen zugeführt, das durch die Byte-Adresse spezifiziert wird.
- Wenn der Vergleicher 34 eine Übereinstimmung detektiert, wird ein "Treffer (hit)" angezeigt, der signalisiert, daß das gewünschte Byte in dem Block in dem Datenspeicher 33 enthalten ist, der durch den Index j indiziert wird. Ansonsten zeigt der Vergleicher 34 einen "Fehlgriff (miss)" an und verursacht, daß eine entsprechende Füllanforderung in den Auslesepuffer 30 plaziert wird, wenn der Auslesepuffer nicht bereits die erforderliche Füllanforderung enthält. Wenn eine Füllanforderung in dem Auslesepuffer 30 plaziert ist, wird die Füllanforderung zu der entsprechenden der vier Speicherbänke 26 bis 29 gesendet, die die Blöcke speichert, die durch die Blockadressen in dem Eingangsregister 31 spezifiziert werden.
- Wie weiter in Figur 2 illustriert wird, enthalten der Kennzeichenspeicher 32 und der Datenspeicher 33 2048 oder 2K unterschiedliche Schlitze, die durch einen Index j spezifiziert sind, der elf Binärbits hat. Diese Binärbits sind in den Bits 6- 16 der Byte-Adresse untergebracht. Die Bits 0-5 der Byte-Adresse spezifizieren die bestimmte Position des Bytes in dem Block, der durch das Eingangsregister 31 adressiert wird. Typischerweise enthält jedes Datenelement acht fortlaufende Bytes, die ein "Quad-Wort" bilden. Die Position des Bytes in einem Quad-Wort wird durch einen "Byte-Rest", der die Bits 0-2 der Byte-Adresse enthält, spezifiziert. Die Position des Quad-Worts in einem Block wird durch einen "Quad-Wort-Rest" angezeigt, der durch die Bits 3-5 der Byte-Adresse spezifiziert wird.
- Wir wenden uns nun der Figur 3 zu, in der ein Vektor gezeigt wird, der fünf Elemente enthält, die in hintereinanderfolgenden Blöcken k und (k+1) in dem Hauptspeicher 23 gespeichert sind. Der Vektor ist derart gezeigt, daß er fünf Elemente enthält und daß er sich über die Grenze zwischen zwei Blöcken erstreckt. Des weiteren wird der Vektor so gezeigt, daß er einen "Schritt (stride)" (S) von 16 hat. Der "Schritt" (S) ist als die Differenz zwischen den Byte-Adressen von benachbarten Vektorelementen definiert. Der Schritt (S) könnte gleiche der Anzahl der Byte pro Vektorelement sein. In diesem Fall sind keine "Lücken" im Speicher zwischen benachbarten Vektorelementen gegeben. Aber in anderen Fällen z.B., wenn sowohl auf den Reihen-Vektor als auch auf den Spalten-Vektor einer Matrix verwiesen wird, ist es erwünscht, Vektoren mit unterschiedlichen Schritten verarbeiten zu können.
- Im allgemeinen ist das i-te Vektor-Element (Ai) bei einer Adresse von A+iS angeordnet, wobei A die Byte-Adresse des Vektors ist und der Index i von 0 bis N-1 reicht, wobei N die Anzahl der Elemente in dem Vektor angibt. Die Byte-Adresse (A) des Vektors ist als Adresse des ersten Elements definiert. Es soll jedoch angemerkt werden, daß der Schritt (S) eine negative Zahl sein kann, was bedeutet, daß die Adresse des Vektors der Adresse des Vektor- Elements entspricht, das die höchste Byte-Adresse hat, und nicht die niedrigste.
- Man wende sich nun der Figur 4 zu, wo ein schematisches Diagramm einer synchronen Logikschaltung gezeigt wird, die allgemein mit 40 bezeichnet wird und die für den Vorauslesungs-Generator 25 der Figur 1 verwendet werden kann. Die Logikschaltung 40 bestimmt die Datenblöcke, die zumindest ein Datenelement eines gegebenen Vektors enthalten, indem sie sequentiell die Adressen berechnet, die mit jedem der hintereinanderfolgenden Datenelementen des Vektors verbunden sind, und indem sie testet, ob jede berechnete Adresse innerhalb eines unterschiedlichen Blocks gegenüber der vorhergehenden, berechneten Adresse ist. Zum Berechnen der Adressen der Vektorelemente enthält die Schaltung 40 einen Binäraddierer 41 und ein Adreßregister 42. Der Addierer 41 addiert die gegenwärtige Adresse in dem Adreßregister 42 zu dem Schritt (S) hinzu, um die nächste Adresse zu bestimmen. Um das Adreßregister 42 mit dem Anfangsvektor A zu laden, ist ein Multiplexer 43 vorgesehen, der entweder die Anfangsadresse A oder den Ausgang des Addierers 41 auswählt und den ausgewählten Wert dem Dateneingang des Adreßregisters 42 zuführt. Die am meisten signifikanten Bits der Adresse in dem Adreßregister 42 spezifizieren eine Blockadresse, die als Vorauslese-Adresse für die Block-Vorauslese-Anforderungen verwendet wird.
- Um zu testen, ob die berechnete Adresse von dem Multiplexer 42 unterschiedlich zu der vorhergehenden, berechneten Adresse in dem Adreßregister 42 ist, enthält die Logikschaltung 40 einen numerischen Vergleicher 44. Der Ausgang des Vergleichers 44 wird von einem Verzögerungs-Flip-Flop 45 abgetastet, um ein Block- Vorauslese-Anforderungs-Signal bereitzustellen. Um unmittelbar eine Anfangs-Block-Vorauslese-Anforderung für die Anfangsvektor- Adresse (A) zu erzeugen, enthält die Schaltung 40 ein ODER-Gatter 46, das auch das Flip-Flop 45 in Antwort auf ein START PREFETCH Signal aktiviert. Das START PREFETCH Signal wird auch dem Auswahleingang des Multiplexers 43 zugeführt, damit das Adreßregister 42 anfänglich mit der Vektoradresse (A) geladen wird.
- Um das Block-Vorauslesen zu beenden, wenn alle Vektor-Adressen in dem Adreßregister 42 berechnet worden sind, ist ein Längenzähler 47 vorgesehen, der die Anzahl der restlichen Vektorelemente, die berechnet werden müssen, angibt. Der Längenzähler 47 wird anfänglich mit einer um 1 niedrigeren Zahl als der Anzahl N der Vektorelemente in Antwort auf das START PREFETCH Signal geladen. Der Längenzähler 47 zählt um 1 während jeder Adreßberechnung herunter. Das Vorauslesen ist deshalb beendet, wenn der Längenzähler 47 auf 0 herunterzählt. Ein "gleich 0" Ausgang des Zählers 47 wird einem Inverter 48 zugeführt, um ein Signal zum Sperren des Zählens des Längenzählers 47, des Berechnens in dem Adreßregister 42 und des Ausgebens von Vorauslese-Anforderungen durch das Flip-Flop 45 bereitzustellen. Ein solches Signal sollte hier auch erzeugt werden, wenn der Auslesepuffer voll ist, und für diesen Zweck wird ein UND-Gatter 49 vorgesehen, das das FETCH BUFFER FULL Signal mit dem Ausgang des Inverters 48 kombiniert.
- Das anfängliche Laden des Adreßregisters 42 muß beim Start des Vorauslesens unabhängig vom Zustand des Längenzählers auftreten. Ein Taktfreigabesignal für das Adreßregister 42 wird deshalb von einem ODER-Gatter 50 bereitgestellt, das den Ausgang des Gatters 49 mit dem START PREFETCH Signal kombiniert. Es ist auch erwünscht, ein einfaches nicht-aufgetastetes Flip-Flop als Flip- Flop 45 zu verwenden, und dies kann ausgeführt werden, indem ein UND-Gatter 51 vorgesehen wird, um den Ausgang des Vergleichers 44 mit dem Ausgang des UND-Gatters 49 aufzutasten.
- Ein Nachteil der Schaltung 40 in Figur 4 besteht darin, daß die Adresse jedes Vektorelements berechnet werden muß. Wenn der Schritt (S) relativ klein verglichen mit der Anzahl der Vektorelemente pro Block ist, kann eine bemerkenswert lange Verzögerung zwischen jeder der Vorauslese-Anforderungen gegeben sein. Für den Vektor in Figur 3 gibt es z.B. eine Verzögerung von drei Taktzyklen zwischen der Anfangs-Ausleseanforderung für BLOCK k und der Ausleseanforderung für den BLOCK k+1. Für Vektordaten- Strukturen, die sich über mehr als eine Blockgrenze hinaus erstrecken, wird die Verzögerung zwischen den Ausleseanforderungen durch die Anzahl der Vektorelemente pro Block bestimmt.
- Es ist möglich, die Verzögerung zwischen den Vorauslese- Anforderungen zu reduzieren, indem ein Verfahren zum Berechnen der Adressen der Blöcke, die gelesen werden sollen, verwendet wird, das nicht notwendigerweise die Adresse jedes Vektorelements berechnet, sondern stattdessen nur die Adresse jedes M Vektorelements berechnet, wobei die ganze Zahl M in Übereinstimmung mit dem Wert des Schritts (S) ausgewählt wird. Dies kann durchgeführt werden, indem der Wert von M z.B. zu Eins ausgewählt wird, wenn die Größe des Schritts (S) größer als die Hälfte der Anzahl der Bytes pro Block ist, indem die ganze Zahl M zu Zwei ausgewählt wird, wenn die Größe des Schritts (S) kleiner als oder gleich der Hälfte aber größer als ein Viertel der Anzahl der Bytes pro Block ist, indem die ganze Zahl M zu Vier ausgewählt wird, wenn die Größe des Schritts (S) kleiner oder gleich einem Viertel aber größer als ein Achtel der Anzahl der Bytes pro Block ist usw.. In einem speziellen Fall gibt es eine begrenzte Zahl von Multiplikationsfaktoren M, die von der Maximalzahl von Vektorelementen abhängt, die pro Block gespeichert werden können.
- Man wende sich nun der Figur 5 zu, wo ein Vorauslesungs- Anforderungs-Generator gezeigt ist, der allgemein mit 60 bezeichnet ist, und zwar in der Form einer sequentiellen Zustandsmaschine zum Berechnen und Testen der Vektoradressen in Übereinstimmung mit einer ganzen Zahl M, die in Übereinstimmung mit der Größe des Schritts (S) ausgewählt ist. Die sequentielle Zustandsmaschine 60 enthält ein Adreßregister 61 und einen Addierer 62 zum Berechnen der Adressen von gewissen Vektorelementen aus den Vektorelementen. Die sequentielle Zustandsmaschine 60 enthält weiterhin ein Vektorlängenregister 63, das analog zu dem Längenzähler 47 ist, aber, da die Anzahl der Vektorelemente, die berechnet werden, von dem Schritt (S) abhängt, das Vektorlängenregister sollte in Übereinstimmung mit dem ausgewählten Wert von M geändert werden. Für diesen Zweck ist ein zweiter Addierer 64 vorgesehen, der zum Inkrementieren des Werts, der in dem Vektorlängenregister 63 gespeichert ist, um den Wert von M verwendet wird. Um den Zustand der sequentiellen Zustandsmaschine anzuzeigen, sind ein Zustandsregister 65 und eine kombinatorische Logik 66 vorgesehen, die die Addierer 62 und 64 in Übereinstimmung mit den Eingängen und Ausgängen im gegenwärtigen Zustand des Zustandsregisters 65 betreibt und die auch den nächsten Zustand für das Zustandsregister 65 in Übereinstimmung mit dem gegenwärtigen Zustand der Maschine und ihren Eingängen und Ausgängen bestimmt.
- Man wende sich nun der Figur 6 zu, in der ein Flußdiagramm gezeigt ist, das allgemein mit 69 bezeichnet ist und das die kombinatorische Logik 66 der Figur 5 definiert. In Antwort auf ein START PREFETCH Signal beim Schritt 70 wird das Adreßregister (61 in Figur 5) mit einer Vektoranfangsadresse (A) geladen und beim Schritt 71 wird das Vektorlängenregister (63 in Figur 5) mit dem Wert von N-1 geladen. Als nächstes wird beim Schritt 72 eine Vorauslese-Anforderung für die Adresse A ausgegeben. Die Vorauslesung wird beendet, wenn N-1 gleich 0 ist, was beim Schritt 73 getestet wird. Ansonsten gibt es zusätzliche Vektorelemente, die Vorauslese-Anforderungen erfordern könnten. In diesem Fall wird die Größe des Schritts (S) mit der Blocklänge verglichen, um zu entscheiden, ob eine Vorauslese-Anforderung für jedes und jedes andere Vektorelement ausgegeben werden soll, wenn die Größe des Schritts größer oder gleich der Blocklänge ist, oder nur für gewisse Vektorelemente aus den Vektorelementen, wenn die Größe des Schritts (S) kleiner als die Blocklänge ist.
- Wenn die Größe des Schritts größer oder gleich der Blocklänge ist, berechnet die sequentielle Zustandsmaschine 60 nur die Adresse jedes Vektorelements und gibt eine Vorauslese-Anforderung für jede berechnete Adresse aus. Insbesondere wird das Vektorlängenregister um 1 im Schritt 75 inkrementiert, und das Adreßregister wird um den Schritt (S) im Schritt 76 weitergeschaltet. Im Schritt 77 schreitet der Zustand der Maschine nicht fort, wenn der Auslesepuffer voll ist. Ansonsten wird im Schritt 78 eine Vorauslese-Anforderung für die gegenwärtige Adresse ausgegeben. Schließlich wird im Schritt 79 der Vorgang für das nächste Vektorelement wiederholt, außer wenn das Vektorlängenregister kleiner oder gleich Null ist. In diesem Fall ist das Vorauslesen beendet.
- Wenn die Größe des Schritts (S) kleiner als die Blocklänge ist, wird eine gewissermaßen unterschiedliche Vorgehensweise verwendet, um zu bestimmen, ob die Adresse des nächsten Vektorelements in den gleichen oder den nächsten Block fällt. Um zu testen, ob die Adresse entweder innerhalb des gleichen oder des nächsten Blocks ist, ist es nicht notwendig, die vorhergehende Blockadresse mit der gegenwärtigen Blockadresse zu vergleichen, da es bekannt ist, daß sich die Blockadresse nur um den Wert 1 ändern kann. Deshalb kann die Änderung in der Blockadresse detektiert werden, indem nur eine Änderung des am wenigsten signifikanten Bits der Blockadresse detektiert wird oder indem äquivalenterweise detektiert wird, ob ein "Aus- Übertrag (carry out)" in diese Bitposition hinein gegeben ist.
- Um die Ausgabe von Vorauslese-Anforderungen schneller zu machen, wird der Beschleunigungsfaktor oder die ganze Zahl M auf der Basis der Größe des Schritts (S) ausgewählt. Im allgemeinen wird die ganze Zahl M derart ausgewählt, daß sie so groß wie möglich ist, aber nicht so groß ist, daß ein Block übersprungen werden kann. Wie oben angemerkt wurde, wird der Beschleunigungsfaktor bevorzugterweise auf der Basis ausgewählt, ob S innerhalb bestimmter, binärer Bruchteile der Anzahl von Byte pro Block fällt. Der Beschleunigungsfaktor M kann auf der Basis der Größe des Schritts (S) bestimmt werden, indem die Binärbits des Schritts (S) überprüft werden. Die Binärbits können z.B. durch eine Logikschaltung überprüft werden oder indem die Bits von einem Schieberegister geschoben werden.
- Für die Schaltung, die in Figur 2 gezeigt wird, kann der Beschleunigungsfaktor M einen Wert von z.B. 1, 2, 4 oder 8 haben, was ein eher minimaler Satz von Möglichkeiten ist. Wenn der Beschleunigungsfaktor M ausgewählt ist, wird das Produkt MS auch bestimmt, um das Vektoradreßregister um diesen Betrag zu dekrementieren, wenn eine neue Vektorelement-Adresse berechnet wird. Für ein spezielles Beispiel, wie z.B. die Figur 2, gibt es wiederum einen eher minimalen Satz an Möglichkeiten für das Produkt MS. Diese Möglichkeiten können weiter beschränkt werden, indem von den Vektorelementen gefordert wird, daß sie sich auf Langwort- oder Quad-Wort-Grenzen aufhalten. Im Quad-Wort-Fall kann der Schritt (S) z.B. durch die Werte 8, 16, 24, 32, 40, 48 oder 56 Bytes beschränkt sein und deshalb kann das Produkt MS entweder 40, 48, 56 oder 64 sein. Das Auswählen wird deshalb einfach beim Schritt 80 durchgeführt, gemäß:
- Im Schritt 81 wird das Vektorlängenregister um die ganze Zahl M dekrementiert, und im Schritt 82 schreitet das Adreßregister um das Produkt MS fort. Im Schritt 83 wird eine Blockadressenänderung detektiert, indem z.B. der Aus-Übertrag in das am wenigsten signifikante Bit der Blockadresse überprüft wird. Wenn sich die Blockadresse nicht ändert, wird das Vektorlängenregister im Schritt 84 überprüft, und wenn es einen Wert kleiner oder gleich Null aufweist, ist das Vorauslesen beendet. Ansonsten wird das Vektorlängenregister wiederum im Schritt 81 dekrementiert und das Adreßregister schreitet im Schritt 82 fort, bis entweder das Vorauslesen beendet ist oder sich die Blockadresse ändert. Sobald sich die Blockadresse ändert, wird der Wert in dem Vektorlängenregister mit Null im Schritt 85 verglichen, um zu bestimmen, ob die berechnete Adresse am Ende des Vektors ist oder das Ende des Vektors überschritten hat. Wenn der Wert in dem Vektorlängenregister nicht kleiner oder gleich Null ist, gibt es ein Vektorelement an der neuen Blockadresse, und deshalb wird dann, wenn der Auslesepuffer nicht voll ist, wie im Schritt 86 überprüft wird, im Schritt 87 eine Vorauslese-Anforderung für die gegenwärtige Adresse ausgegeben und die sequentielle Zustandsmaschine fährt im Schritt 84 fort.
- Wenn im Schritt 85 bestimmt wurde, daß der Wert in dem Vektorlängenregister kleiner oder gleich Null war, dann kann das letzte Element des Vektors entweder eine Blockadresse haben oder keine Blockadresse haben, wie es durch das Adreßregister angegeben wird. Wenn das letzte Vektorelement in dem Block ist, der durch das Adreßregister angegeben wird, muß eine letzte Vorauslese-Anforderung ausgegeben werden. Ansonsten ist das Vorauslesen beendet. Um zu bestimmen, welche dieser Bedingungen gültig ist, ist es notwendig, das Adreßregister einzustellen, um die Adresse des letzten Vektorelements zu bestimmen. Um dies durchzuführen, wird der Versatz oder die Anzahl der Bytes von der Adresse des letzten Vektorelements zur Adresse des Adreßregisters im Schritt 88 bestimmt, indem das Produkt aus dem Restwert in dem Vektorlängenregister und dem Schritt (S) bestimmt wird, Es soll jedoch angemerkt werden, daß dieser Versatz (D) einen begrenzten Satz von möglichen Werten in jedem besonderen Fall hat, so daß er vollständig durch eine Logikschaltung oder eine Suchtabelle (look-up table) bestimmt werden kann.
- Beim Schritt 89 wird das Adreßregister um den Versatz (D) weitergeschaltet, so daß die Adresse die Adresse des letzten Vektorelements wird. Das Vorauslesen ist dann beendet oder das letzte Vorauslesekommando wird in Abhängigkeit davon ausgegeben, ob eine Blockadressenänderung aufgrund des Weiterschaltens des Adreßregisters auftritt, wie es im Schritt 90 getestet wird. Wie zuvor wird die Blockadressenänderung durch eine Änderung in dem am wenigsten signifikanten Bit der Blockadresse angegeben, oder alternativerweise durch einen Aus-Übertrag in diese Bitposition. Wenn eine Blockadressenänderung auftritt ist das Vorauslesen beendet. Ansonsten wenn der Auslesepuffer nicht voll ist, wie es beim Schritt 91 getestet wird, wird eine letzte Vorauslese- Anforderung im Schritt 92 ausgegeben.
- Das Flußdiagramm in der Figur 6 kann in eine Gegenwärtiger- Zustand/Nächster-Zustand-Tabelle und in die kombinatorische Logik 66 für die sequentielle Zustandsmaschine umgesetzt werden, was durch Standardtechniken bestimmt werden kann. Gemäß den Standardtechniken sind die Schritte in dem Flußdiagramm 69 der Figur 6 gruppiert und sequentiellen Zuständen für die Gegenwärtiger-Zustand/Nächster-Zustand-Tabelle zugeordnet. Alternativerweise kann das Steuerverfahren, das durch das Flußdiagramm 69 in der Figur 69 illustriert wird, durch die Ausführung eines gespeicherten Programms realisiert werden.
- Man wende sich nun der Figur 7 zu, in der ein Blockdiagramm eines digitalen Computersystems 100 gezeigt wird, das einen Mikrocode ausführt, um das Vektor-Vorauslesen in Übereinstimmung mit der vorliegenden Erfindung durchzuführen. Das System enthält eine Hauptspeichereinheit 101, die vier separate Datenbänke 102, 103, 104, 105 zum Speichern von Daten und Programmbefehlen enthält. Die Speicherbänke der Hauptspeichereinheit 101 sind, wie in der Figur 2 gezeigt wird, zum Speichern von 64-Byte-Datenblöcken bei zueinander versetzten Speicheradressen organisiert. Das digitale Computersystem 100 enthält auch eine Cache-Einheit 106, die ähnlich zum Cache 24 der Figur 2 ist.
- Programmbefehle werden von der Cache-Einheit 106 aus der Befehlsverarbeitungseinheit 107 zugeführt, die die Befehle analysiert und Befehlsdaten zu einer Skalarverarbeitungseinheit 108 sendet. Spezifischerweise enthält die Skalarverarbeitungseinheit eine Mikrosequenzer- und Ausgabelogik 109, die einen vorgespeicherten Mikrocode 110 ausführt, um die analysierten Befehle von der Befehlsverarbeitungseinheit 107 zu interpretieren und auszuführen. Diese Befehle enthalten Skalarbefehle, die die Mikrosequenzer- und Ausgabelogik ausführt, indem eine Registerdatei und eine Arithmetik-Logik-Einheit 111 betrieben werden. Diese Skalarbefehle enthalten z.B. einen Befehl, Skalardaten aus der Cache-Einheit 106 auszulesen und die Daten in die Registerdatei 111 zu laden.
- Ein Skalar-Ladebefehl enthält eine "virtuelle Adresse", die in eine "physikalische Adresse" durch einen Umsetzpuffer 112 für virtuelle Adresse zu physikalischer Adresse in der Cache-Einheit 106 umgesetzt wird. Die Physikalischen Adressen entsprechen den Byte-Adressen in der Hauptspeichereinheit 101. Die virtuellen Adressen entsprechen einem breiteren Bereich von Adressen, die durch Programmbefehle spezifiziert werden.
- Um Daten bei einer physikalischen Adresse zu erhalten, die durch den Umsetzpuffer 112 für virtuelle zu physikalischer Adresse spezifiziert werden, enthält der Cache 106 einen Kennzeichenspeicher 113 und einen Datenspeicher 114. Ein Abschnitt der physikalischen Adresse spezifiziert ein Kennzeichen für die gewünschten Daten, und eine Cache-Steuerlogik 115 bestimmt, ob ein entsprechendes Kennzeichen in dem Kennzeichenspeicher 113 enthalten ist. Wenn das der Fall ist, werden die gewünschten Daten aus dem Datenspeicher 114 erhalten. Ansonsten gibt die Steuerlogik 115 eine Füllanforderung an die Hauptspeichereinheit 101 aus, um einen Datenblock zu erhalten, der die adressierten Daten enthält, und um diesen Datenblock zu dem Datenspeicher zu übertragen.
- Der oben beschriebene Betrieb der Skalarverarbeitungseinheit 108 ist ähnlich zu dem Betrieb eines herkömmlichen Digitalcomputers, wie z.B. eines mit "VAX" bezeichneten Computers.
- Es ist erwünscht, eine Hauptspeichereinheit 101, eine Cache- Einheit 106, eine Befehlsverarbeitungseinheit 107 und eine Skalarverarbeitungseinheit 108, wie oben beschrieben wurde, auch zum Ausführen von Vektorbefehlen zu verwenden. Für diesen Zweck ist das digitale Computersystem 100 mit einer Vektorverarbeitungseinheit 116 versehen. Die Vektorverarbeitungseinheit enthält eine Steuerlogik 117, eine Vektorregisterdatei 118 zum Speichern von Vektordaten, einen Vektoraddierer 119, eine Vektormaskeneinheit 120 und einen Vektormultiplizierer 121. Die Vektormaskeneinheit 120 enthält ein Maskenregister zum Speichern eines Maskenbits entsprechend jedem Vektorelement. Die Maskenbits können zum Steuern des Schreibens in ihre entsprechenden Vektorelemente hinein verwendet werden. Die Steuerlogik 117 verwaltet die Aktivität in der Vektorverarbeitungseinheit 116 in Antwort auf Kommandos von der Skalarverarbeitungseinheit 108. Die Skalarverarbeitungseinheit 108 sendet diese Kommandos zur Vektorverarbeitungseinheit, wenn die Mikrosequenzer- und Ausgabelogik 108 einen Vektorbefehl von der Befehlsverarbeitungseinheit 107 interpretieren.
- In Übereinstimmung mit der vorliegenden Erfindung ist es erwünscht, die Cache-Einheit 106 als Datenspeicher für Vektordaten und auch für Skalardaten zu verwenden. Des weiteren ist es erwünscht, eine Cache-Einheit 106 zu verwenden, die speziell für die Skalarverarbeitungseinheit 108 ausgelegt wurde. Wie oben ausgeführt wurde, kann diese Aufgabe erfüllt werden, indem Block-Vorauslese-Anforderungen zu der Cache-Einheit 106 in Antwort auf einen Vektorladebefehl übertragen werden. Wie in der Figur 7 gezeigt wird, werden die Vorauslese-Anforderungen durch die Mikrosequenzer- und die Ausgabelogik 109 ausgegeben und über einen Steuerbus 122 zur der Cache-Steuerlogik 115 übertragen.
- Wenn der gewünschte Datenblock nicht in dem Datenspeicher 114 gespeichert ist, gibt die Steuerlogik eine Füllanforderung an die Hauptspeichereinheit 101 aus, und die unerledigten Füllanforderungen werden in einem Auslesepuffer 123 notiert. Die Hauptspeichereinheit 101 enthält eine Speichersteuerlogik 124, die jede Füllanforderung zu der speziellen Speicherbank 102, 103, 104, 105 weitergibt, die den angeforderten Datenblock speichert. Des weiteren erlaubt die Speichersteuerlogik 124, daß zumindest drei der Datenbänke simultan eine Füllanforderung verarbeiten.
- Damit jede Datenbank ihre jeweiligen Füllanforderungen unabhängig und simultan verarbeiten kann, enthält jede Bank einen Datenspeicher 125, eine Steuerlogik 126 und einen Puffer 127. Sobald die Speicherbank eine Füllanforderung vervollständigt hat, und ihr Puffer mit dem angeforderten Block gefüllt ist, aktiviert die Speichersteuerlogik 124 einen Multiplexer 128, um einen Datenweg von der Speicherbank zur Cache-Einheit 106 bereitzustellen. Der Datenblock wird dann in dem Datenspeicher 114 gespeichert und ein entsprechendes Kennzeichen wird im Kennzeichenspeicher 113 gespeichert. Deshalb wird der Datenspeicher der Cache-Einheit 106 mit den Datenblöcken versehen, die die Vektorelemente enthalten, welche von der Vektorverarbeitungseinheit 116 benötigt werden.
- In Antwort auf den Vektorladebefehl führt die Mikrosequenzer- und Ausgabelogik 109 eine Prozedur in dem Mikrocode 110 zum Ausgeben von mehrfachen Block-Vorauslese-Anforderungen aus. Die Prozedur ist ähnlich zur Prozedur, die in dem Flußdiagramm 69 der Figur 6 gezeigt wird. Ein Ausdruck des zugehörigen Mikrocodes ist im Anhang I der vorliegenden Spezifikation enthalten. Um diese Prozedur auszuführen, enthält die Skalarverarbeitungseinheit 108 ein Vektoradreßregister 129 und ein Vektorlängenregister 130. Während der Ausführung der Vorauslese-Prozedur testet die Mikrosequenzer- und Ausgabelogik Signale, die vom Steuerbus 122 aus empfangen werden und die anzeigen, ob der Auslesepuffer 123 leer oder voll ist.
- Es ist möglich, das Leersignal zu verwenden, um zu bestimmen, ob die ersten paar Elemente eines Vektors in dem Cache gespeichert sind, indem das Leersignal getestet wird, nachdem Vorauslese- Anforderungen für die ersten paar Elemente ausgegeben wurden. Wenn der Auslesepuffer zu diesem Zeitpunkt leer ist, kann es erwünscht sein, die Ausgabe der Vorauslese-Anforderungen unter der Annahme zu stoppen, daß der gesamte Vektor sehr wahrscheinlich im Cache ist, und deshalb kann eine gewisse Zeit eingespart werden, indem der Vorauslese-Vorgang beendet wird.
- In Übereinstimmung mit einem zusätzlichen Merkmal der vorliegenden Erfindung ist die Cache-Einheit 106 mit Bypässen versehen, die die Übertragung von Daten von der Hauptspeichereinheit 101 zu der Vektorverarbeitungseinheit 116 beschleunigen, wenn gewünschte Vektorelementdaten nicht in dem Datenspeicher 114 gefunden werden und folglich aus der Hauptspeichereinheit 101 geholt werden müssen. Die Cache-Einheit 106 enthält eine Anzahl von Bussen und Gattern, die den Durchgang von Daten von einem Bus zum anderen steuern. Diese Gatter enthalten ein Gatter 131 zum Übertragen von Speicherkommandos von der Cache-Steuerlogik 123 zur Hauptspeichereinheit 101 und ein Gatter 132 zum Durchlassen von physikalischen Adressen von dem Umsetzpuffer 112 für virtuelle zu physikalischer Adresse zur Hauptspeichereinheit 101.
- Die Cache-Einheit 106 ist auch mit einem Register 133 und einem Registerbypass 134 zwischen dem Datenspeicher 114 und der Hauptspeichereinheit 101 versehen. Das Register 133 und der Registerbypass 134 stellen eine zusätzliche Flexibilität beim Übertragen von Daten von der Hauptspeichereinheit 101 aus zur Cache-Einheit 106 bereit. Es ist auch vorteilhaft, einen Cache- Bypass-Multiplexer 135 vorzusehen, der es erlaubt, daß Daten zu der Skalarverarbeitungseinheit 108 oder zu der Vektorverarbeitungseinheit 116 zur gleichen Zeit übertragen werden, während der sie in den Datenspeicher 114 geschrieben werden. Anders ausgedrückt aktiviert die Cache-Steuerlogik 115 den Cache-Bypass-Multiplexer 135, immer dann Daten von einem internen Bus 136 zu einem Ausgangsbus 137 zu übertragen, wenn die physikalische Adresse der Daten, die in den Datenspeicher 114 geschrieben werden, mit der physikalischen Adresse übereinstimmt, die einer virtuellen Adresse entspricht, welche durch die Skalarverarbeitungseinheit 108 oder die Vektorverarbeitungseinheit 116 erwünscht wird. Der Cache-Bypass- Multiplexer 135 eliminiert deshalb in diesem Fall die Verzögerung, die erforderlich sein würde, um die gewünschten Daten aus dem Datenspeicher 114 zu lesen.
- In Anbetracht des Obenstehenden ist ein Verarbeitungssystem für digitale Daten beschrieben worden, das einen Cache und einen Hauptspeicher hat, die sowohl für Vektorverarbeitung als auch für Skalarverarbeitung geeignet sind. Ein Vorauslesungs-Anforderungs- Generator zum Vorauslesen von Datenblöcken vor der Anforderung individueller Vektorelemente ist vorgesehen, um sicherzustellen, daß die erforderlichen Daten sobald wie möglich für die Verwendung durch den Vektorprozessor erhalten werden. Das Vektor- Vorauslese-Verfahren ermöglicht, daß eine Vektorverarbeitungseinheit, leicht einem Digitalcomputer hinzugefügt werden kann, der eine Skalarverarbeitungseinheit aufweist, und zwar mit minimaler Modifikation der Hardware in dem Hauptspeicher und dem Cache. Des weiteren kann das Vektor- Vorausleseverfahren einfach durch eine Mikrocode-Prozedur zum Interpretieren eines Vektor-Ladebefehls in einem Computersystem implementiert werden, das eine Skalarprozessoreinheit enthält, die einen Mikrocode ausführt. VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE VEKTORLADEBEFEHL-MIKROCODE
Claims (18)
1. Verfahren zum Betreiben eines Digital-Computers, wobei der
Digital-Computer einen Vektorprozessor (22), einen Hauptspeicher
(23) und einen Cache (24) enthält; wobei der Vektorprozessor eine
Sequenz von Datenelementen von dem Cache empfängt und
Vektoroperationen mit den Datenelementen durchführt; wobei der
Hauptspeicher eine Einrichtung zum Speichern von Datenelementen bei
entsprechenden Speicheradressen enthält; wobei der Cache enthält
eine Cache-Speichereinrichtung zum Speichern von ausgewählten,
vordefinierten Blöcken der Datenelemente, eine Einrichtung zum
Empfangen einer Anforderung, an einem Datenblock, der durch eine
Adresse spezifiziert wird, einen Verweis anzubringen, eine
Einrichtung zum Überprüfen, ob Daten für den spezifizierten Block
in der Cache-Speicher-Einrichtung gespeichert sind, und eine
Einrichtung, die arbeitet, wenn Daten für den spezifizierten
Block nicht derart gespeichert sind, zum Lesen des spezifizierten
Datenblocks vom Hauptspeicher und zum Abspeichern des Datenblocks
in der Cache-Speichereinrichtung;
dadurch gekennzeichnet,
daß der Digital-Computer weiterhin eine Vorauslesungs-
Generatoreinrichtung zum Vorauslesen der Datenblöcke aufweist,
die Datenelemente eines Vektors enthalten, der durch einen
Vektorladebefehl spezifiziert wird, wobei die
Vorauslesungs-Generatoreinrichtung die folgenden Schritte ausführt:
(a) Empfangen eines Befehls, um einen Vektor von Datenelementen,
der durch eine Vektoradresse und einen Vektorschritt spezifiziert
wird, zu erhalten und in den Vektorprozessor (22) zu laden, wobei
einige dieser Datenblöcke jeweils eine Vielzahl von
Datenelementen im Vektor enthalten;
(b) Berechnen einer Serie von Adressen aus der Vektoradresse und
dem Vektorschritt, die die Datenblöcke spezifizieren, die
zumindest ein Datenelement des Vektors enthalten, wobei jede Adresse
in der Serie einen unterschiedlichen der Datenblöcke
spezifiziert, die zumindest ein Datenelement des Vektors enthalten; und
(c) Übertragen von Anforderungen, die die Adressen dieser Serien
enthalten, zu dem Cache, um auf die Datenblöcke zu verweisen, die
zumindest ein Datenelement des Vektors enthalten.
2. Verfahren, wie in Anspruch 1 beansprucht, wobei die
Einrichtung zum Empfangen einer Anforderung, um auf einen Datenblock zu
verweisen, der von einer Adresse spezifiziert wird, aufweist eine
Einrichtung zum Empfangen einer spezifizierten Speicheradresse,
eine Einrichtung zum Bestimmen des Blocks, der die spezifizierte
Speicheradresse enthält, eine Einrichtung zum Erhalten des
Datenelements von der Speichereinrichtung, das der spezifizierten
Speicheradresse zugeordnet ist, wenn der Block, der die
spezifizierte Speicheradresse enthält, in der Speichereinrichtung
gespeichert ist, und ansonsten zum Erhalten des Datenelements von
dem Hauptspeicher (23), und wobei das Verfahren weiterhin
aufweist die Schritte des Berechnens der Speicheradresse, die jedem
der Elemente des Vektors zugeordnet ist, aus der Vektoradresse
und dem Vektorschritt, des Übertragens der berechneten
Speicheradressen zu dem Cache (24) und des Sendens der
Datenelemente, die der berechneten Speicheradressen zugeordnet sind, von
der Einrichtung zum Erhalten aus zu dem Vektorprozessor (22).
3. Verfahren, wie in Anspruch 1 oder Anspruch 2 beansprucht,
wobei der Schritt des Berechnens der Serie von Adressen durch
Ausführen einer Mikrocode-Prozedur durchgeführt wird.
4. Verfahren, wie in einem der Ansprüche 1 bis 3 beansprucht,
wobei der Schritt des Berechnens der Serie von Adressen das
sequentielle Berechnen der Speicheradressen, die mit
hintereinanderfolgenden Datenelementen des Vektors verbunden sind, und des Testens
enthält, ob jede berechnete Speicheradresse innerhalb eines
unterschiedlichen Blocks von der zuvor berechneten Adresse aus ist.
5. Verfahren, wie in Anspruch 4 beansprucht, wobei der Schritt
des sequentiellen Berechnens der Speicheradressen, die den
hintereinanderfolgenden Datenelementen des Vektors zugeordnet sind,
die Adresse jedes M-ten Datenelements des Vektors berechnet,
wobei M eine ganze Zahl ist, für die unterschiedliche Werte als
eine Funktion des Vektorschritts ausgewählt werden.
6. Verfahren, wie in Anspruch 5 beansprucht, wobei der Schritt
des sequentiellen Berechnens das Vergleichen des Vektorschritts
mit der Speichergröße eines Blocks enthält
7. Verfahren, wie in Anspruch 5 beansprucht, das weiterhin den
Schritt des Änderns eines Zählwerts um die ganze Zahl M jedesmal
dann aufweist, wenn die Adresse jedes M-ten Datenelements des
Vektors berechnet wird.
8. Verfahren, wie in Anspruch 7 beansprucht, das weiterhin den
Schritt des Einstellens der Adresse, die für das letzte M-te
Datenelement des Vektors berechnet wird, um einen Wert aufweist,
der als eine Funktion eines Rests des Zählwerts und des
Vektorschritts ausgewählt wird.
9. Verfahren, wie in einem der Ansprüche 1 bis 8 beansprucht,
wobei der Digital-Computer zumindest einen Datenpuffer (133)
enthält, der in einem Datenweg von dem Hauptspeicher zu dem
Vektorprozessor zwischenangeordnet ist, und wobei das Verfahren
weiterhin das Überprüfen, ob die mit Verweisen versehenen Datenblöcke
im Datenpuffer gespeichert sind, und, wenn die mit Verweisen
versehenen Datenblöcke nicht in dem Datenpuffer gefunden werden,
das Übertragen entsprechender Auslese-Anforderungen zu dem
Hauptspeicher enthält.
10. Verfahren, wie in Anspruch 9 beansprucht, wobei das Verfahren
weiterhin das Laden der Auslese-Anforderungen in einen Auslese-
Puffer (123) und das Entfernen der Auslese-Anforderungen aus dem
Auslese-Puffer aufweist, wenn ihre jeweiligen Datenblöcke aus dem
Speicher geholt werden.
11. Verfahren, wie in Anspruch 10 beansprucht, wobei der Schritt
des Sendens jeweiliger Auslese-Anforderungen vorübergehend
ausgesetzt wird, wenn der Auslese-Puffer voll wird.
12. Verfahren, wie in Anspruch 10 oder Anspruch 11 beansprucht,
wobei der Schritt des Sendens jeweiliger Auslese-Anforderungen
den Schritt des Überprüfens, ob der Auslese-Puffer bereits die
Auslese-Anforderung enthält, und, wenn festgestellt wird, daß der
Auslese-Puffer bereits die Auslese-Anforderung enthält, das
Hemmen einer erneuten Übertragung der Auslese-Anforderung zum
Hauptspeicher enthält.
13. Digital-Computer mit einem Hauptspeicher (101) und einem
Cache (106), der mit dem Hauptspeicher gekoppelt ist; wobei der
Hauptspeicher eine Einrichtung zum Speichern von Datenelementen
bei jeweiligen Adressen enthält; wobei der Cache aufweist eine
Cache-Speichereinrichtung (114) zum Speichern ausgewählter
vordefinierter Blöcke der Datenelemente, eine Einrichtung zum
Empfangen von Anforderungen, an einem spezifizierten Datenblock
Verweise anzubringen, eine Einrichtung zum Überprüfen, ob Daten
für den spezifizierten Block in der Cache-Speichereinrichtung
gespeichert sind, und eine Einrichtung, die arbeitet, wenn Daten
für den spezifizierten Block nicht derart gespeichert sind, zum
Lesen des spezifizierten Datenblocks aus dem Hauptspeicher und
zum Abspeichern des spezifizierten Datenblocks in der Cache-
Speichereinrichtung; und einen Vektorprozessor (116) der mit dem
Cache gekoppelt ist, wobei der Vektorprozessor eine Einrichtung
zum Empfangen einer Sequenz von Datenelementen aus dem Cache und
zum Durchführen von Vektoroperationen mit den Datenelementen
enthält; dadurch gekennzeichnet, daß:
der Digital-Computer weiterhin aufweist eine Vorauslesungs-
Generatoreinrichtung (109), die mit dem Vektorprozessor (116) und
dem Cache (106) gekoppelt ist, zum Vorauslesen der Datenblöcke,
die die Datenelemente eines Vektors enthalten, der durch einen
Vektor-Ladebefehl spezifiziert wird; wobei die Vorauslesungs-
Generatoreinrichtung enthält:
eine Einrichtung zum Empfangen eines Befehls, um einen Vektor,
der durch eine Vektoradresse und einen Vektorschritt spezifiziert
wird, von diesen Datenelementen zu erhalten und in den
Vektorprozessor (116) zu laden, wobei einige der Datenblöcke
jeweils eine Vielzahl von Datenelementen im Vektor enthalten;
eine Einrichtung zum Berechnen einer Serie von Adressen aus der
Vektoradresse und dem Vektorschritt, die die Datenblöcke
spezifizieren, welche zumindest ein Datenelement des Vektors enthalten,
wobei jede Adresse in der Serie einen unterschiedlichen der
Datenblöcke spezifiziert, der zumindest ein Datenelement des
Vektors enthält; und
eine Einrichtung zum Übertragen von Anforderungen, die die
Adressen der Serie enthalten, zu dem Cache, um Datenblöcke mit
Verweisen zu versehen, die zumindest ein Datenelement des Vektors
enthalten.
14. Digital-Computer, wie in Anspruch 13 beansprucht, der
weiterhin eine Einrichtung, die mit dem Cache und dem Vektorprozessor
gekoppelt ist, zum Senden der Datenelemente des Vektors von dem
Cache aus zu dem Vektorprozessor aufweist.
15. Digital-Computer, wie in Anspruch 14 beansprucht, wobei die
Einrichtung zum Übertragen der Datenelemente eine Cache-Speicher-
Bypass-Einrichtung (135) zum Übertragen der Datenelemente zu dem
Vektorprozessor enthält, die aus dem Hauptspeicher geholt werden,
wenn sie in den Cache geschrieben werden.
16. Digital-Computer, wie in einem der Ansprüche 13 bis 15
beansprucht, wobei die Einrichtung zum Übertragen der Datenelemente
ein Register (133), das im Datenweg zwischen dem Hauptspeicher
und dem Cache gekoppelt ist, und ein Register-Bypass-Gatter
(134), das mit dem Register verbunden ist, zum Umgehen des
Registers enthält.
17. Digital-Computer, wie in einem der Ansprüche 13 bis 16
beansprucht, wobei die Einrichtung zum Berechnen der Serie von
Adressen eine Einrichtung zum sequentiellen Berechnen der Adressen,
die hintereinanderfolgenden Datenelementen des Vektors zugeordnet
sind, und zum Testen enthält, ob jede berechnete Adresse
innerhalb eines unterschiedlichen Blocks von der zuvor
berechneten Adresse aus ist.
18. Digital-Computer, wie in einem der Ansprüche 13 bis 17
beansprucht, wobei der Cache einen Auslese-Anforderungs-Puffer (123)
zum Puffern der Anforderungen, Datenblöcke mit Verweisen zu
versehen, enthält, wobei der Auslese-Anforderungs-Puffer ein
Signal erzeugt, das anzeigt, wenn der Auslese-Anforderungs-Puffer
voll ist, und wobei die Vorauslesungs-Generator-Einrichtung eine
Einrichtung, die auf das Puffer-Voll-Signal reagiert, zum
vorübergehenden Aussetzen der Übertragung der Anforderungen hat,
die Datenblöcke mit Verweisen zu versehen.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/142,794 US4888679A (en) | 1988-01-11 | 1988-01-11 | Method and apparatus using a cache and main memory for both vector processing and scalar processing by prefetching cache blocks including vector data elements |
PCT/US1989/000021 WO1989006397A2 (en) | 1988-01-11 | 1989-01-04 | Method for prefetching vector data from memory in a memory system designed for scalar processing |
Publications (2)
Publication Number | Publication Date |
---|---|
DE68911398D1 DE68911398D1 (de) | 1994-01-27 |
DE68911398T2 true DE68911398T2 (de) | 1994-06-09 |
Family
ID=22501312
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE68911398T Expired - Fee Related DE68911398T2 (de) | 1988-01-11 | 1989-01-04 | Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem. |
Country Status (6)
Country | Link |
---|---|
US (1) | US4888679A (de) |
EP (1) | EP0348495B1 (de) |
AU (1) | AU2939689A (de) |
CA (1) | CA1317032C (de) |
DE (1) | DE68911398T2 (de) |
WO (1) | WO1989006397A2 (de) |
Families Citing this family (117)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6467680A (en) * | 1987-09-09 | 1989-03-14 | Hitachi Ltd | Vector processor |
US5261113A (en) * | 1988-01-25 | 1993-11-09 | Digital Equipment Corporation | Apparatus and method for single operand register array for vector and scalar data processing operations |
AU613742B2 (en) * | 1988-04-27 | 1991-08-08 | Nec Corporation | Memory access control device which can be formed by a reduced number of lsi's |
US5210834A (en) * | 1988-06-01 | 1993-05-11 | Digital Equipment Corporation | High speed transfer of instructions from a master to a slave processor |
US5257394A (en) * | 1988-10-18 | 1993-10-26 | Japan Atomic Energy Research Institute | Logical expression processing pipeline using pushdown stacks for a vector computer |
JPH02109160A (ja) * | 1988-10-18 | 1990-04-20 | Japan Atom Energy Res Inst | ベクトル計算機用演算装置 |
US5146578A (en) * | 1989-05-01 | 1992-09-08 | Zenith Data Systems Corporation | Method of varying the amount of data prefetched to a cache memory in dependence on the history of data requests |
US5093777A (en) * | 1989-06-12 | 1992-03-03 | Bull Hn Information Systems Inc. | Method and apparatus for predicting address of a subsequent cache request upon analyzing address patterns stored in separate miss stack |
JPH0666056B2 (ja) * | 1989-10-12 | 1994-08-24 | 甲府日本電気株式会社 | 情報処理システム |
US5197140A (en) * | 1989-11-17 | 1993-03-23 | Texas Instruments Incorporated | Sliced addressing multi-processor and method of operation |
US5197130A (en) * | 1989-12-29 | 1993-03-23 | Supercomputer Systems Limited Partnership | Cluster architecture for a highly parallel scalar/vector multiprocessor system |
US5623650A (en) * | 1989-12-29 | 1997-04-22 | Cray Research, Inc. | Method of processing a sequence of conditional vector IF statements |
JP3018038B2 (ja) * | 1990-01-18 | 2000-03-13 | 三菱電機株式会社 | キャッシュを有するデータ処理装置 |
JP2825906B2 (ja) * | 1990-02-01 | 1998-11-18 | 株式会社日立製作所 | 計算機システム |
US5261066A (en) * | 1990-03-27 | 1993-11-09 | Digital Equipment Corporation | Data processing system and method with small fully-associative cache and prefetch buffers |
US5598547A (en) * | 1990-06-11 | 1997-01-28 | Cray Research, Inc. | Vector processor having functional unit paths of differing pipeline lengths |
JPH0452741A (ja) * | 1990-06-14 | 1992-02-20 | Toshiba Corp | キャッシュメモリ装置 |
US5263144A (en) * | 1990-06-29 | 1993-11-16 | Digital Equipment Corporation | Method and apparatus for sharing data between processors in a computer system |
EP0471462B1 (de) * | 1990-08-06 | 1998-04-15 | NCR International, Inc. | Verfahren zum Betrieb eines Rechnerspeichers und Anordnung |
DE69130967T2 (de) * | 1990-08-06 | 1999-10-21 | Ncr International, Inc. | Rechnerspeicheranordnung |
GB2247546B (en) * | 1990-08-31 | 1995-03-01 | Sun Microsystems Inc | Method and apparatus for predictive caching |
US5724548A (en) * | 1990-09-18 | 1998-03-03 | Fujitsu Limited | System including processor and cache memory and method of controlling the cache memory |
JP2718254B2 (ja) * | 1990-10-02 | 1998-02-25 | 日本電気株式会社 | ベクトル処理装置 |
RU1804645C (ru) * | 1991-03-27 | 1993-03-23 | Институт Точной Механики И Вычислительной Техники Им.С.А.Лебедева | Центральный процессор |
US5625793A (en) * | 1991-04-15 | 1997-04-29 | International Business Machines Corporation | Automatic cache bypass for instructions exhibiting poor cache hit ratio |
US5357618A (en) * | 1991-04-15 | 1994-10-18 | International Business Machines Corporation | Cache prefetch and bypass using stride registers |
US5293603A (en) * | 1991-06-04 | 1994-03-08 | Intel Corporation | Cache subsystem for microprocessor based computer system with synchronous and asynchronous data path |
US5333291A (en) * | 1991-06-14 | 1994-07-26 | International Business Machines Corporation | Stride enhancer for high speed memory accesses with line fetching mode and normal mode employing boundary crossing determination |
JP3204323B2 (ja) * | 1991-07-05 | 2001-09-04 | エヌイーシーマイクロシステム株式会社 | キャッシュメモリ内蔵マイクロプロセッサ |
EP0543652B1 (de) * | 1991-11-19 | 1998-10-28 | Fujitsu Limited | Speicherzugriffseinrichtung |
US5742842A (en) * | 1992-01-28 | 1998-04-21 | Fujitsu Limited | Data processing apparatus for executing a vector operation under control of a master processor |
US5423016A (en) * | 1992-02-24 | 1995-06-06 | Unisys Corporation | Block buffer for instruction/operand caches |
US5379393A (en) * | 1992-05-14 | 1995-01-03 | The Board Of Governors For Higher Education, State Of Rhode Island And Providence Plantations | Cache memory system for vector processing |
US5381539A (en) * | 1992-06-04 | 1995-01-10 | Emc Corporation | System and method for dynamically controlling cache management |
US5418973A (en) * | 1992-06-22 | 1995-05-23 | Digital Equipment Corporation | Digital computer system with cache controller coordinating both vector and scalar operations |
JP3304444B2 (ja) * | 1992-11-30 | 2002-07-22 | 富士通株式会社 | ベクトル処理装置 |
US5440687A (en) * | 1993-01-29 | 1995-08-08 | International Business Machines Corporation | Communication protocol for handling arbitrarily varying data strides in a distributed processing environment |
EP1186995B1 (de) | 1993-11-05 | 2003-09-03 | Intergraph Corporation | Befehlsspeicher mit assoziativem Kreuzschienenschalter |
US5634025A (en) * | 1993-12-09 | 1997-05-27 | International Business Machines Corporation | Method and system for efficiently fetching variable-width instructions in a data processing system having multiple prefetch units |
JP2752902B2 (ja) * | 1994-05-31 | 1998-05-18 | 甲府日本電気株式会社 | ベクトル処理装置 |
US5881302A (en) * | 1994-05-31 | 1999-03-09 | Nec Corporation | Vector processing unit with reconfigurable data buffer |
JPH0877143A (ja) * | 1994-09-02 | 1996-03-22 | Kofu Nippon Denki Kk | ベクトルデータ処理装置 |
DE69535330T2 (de) * | 1994-09-14 | 2007-05-31 | Intel Corporation, Santa Clara | Caching-System mit Explitzer Folgeliste |
US5832533A (en) * | 1995-01-04 | 1998-11-03 | International Business Machines Corporation | Method and system for addressing registers in a data processing unit in an indexed addressing mode |
US5887183A (en) * | 1995-01-04 | 1999-03-23 | International Business Machines Corporation | Method and system in a data processing system for loading and storing vectors in a plurality of modes |
US5680338A (en) * | 1995-01-04 | 1997-10-21 | International Business Machines Corporation | Method and system for vector processing utilizing selected vector elements |
US5890222A (en) * | 1995-01-04 | 1999-03-30 | International Business Machines Corporation | Method and system for addressing registers in a data processing unit in an indirect addressing mode |
JP3548616B2 (ja) * | 1995-01-20 | 2004-07-28 | 株式会社日立製作所 | 情報処理装置 |
US5689653A (en) * | 1995-02-06 | 1997-11-18 | Hewlett-Packard Company | Vector memory operations |
US5724533A (en) * | 1995-11-17 | 1998-03-03 | Unisys Corporation | High performance instruction data path |
US5663924A (en) * | 1995-12-14 | 1997-09-02 | International Business Machines Corporation | Boundary independent bit decode for a SDRAM |
US6131140A (en) * | 1995-12-22 | 2000-10-10 | Cypress Semiconductor Corp. | Integrated cache memory with system control logic and adaptation of RAM bus to a cache pinout |
US5829031A (en) * | 1996-02-23 | 1998-10-27 | Advanced Micro Devices, Inc. | Microprocessor configured to detect a group of instructions and to perform a specific function upon detection |
US5652774A (en) * | 1996-07-08 | 1997-07-29 | International Business Machines Corporation | Method and apparatus for decreasing the cycle times of a data processing system |
US5802564A (en) * | 1996-07-08 | 1998-09-01 | International Business Machines Corp. | Method and apparatus for increasing processor performance |
KR100280285B1 (ko) | 1996-08-19 | 2001-02-01 | 윤종용 | 멀티미디어 신호에 적합한 멀티미디어 프로세서 |
US5924117A (en) * | 1996-12-16 | 1999-07-13 | International Business Machines Corporation | Multi-ported and interleaved cache memory supporting multiple simultaneous accesses thereto |
US6243822B1 (en) | 1997-12-24 | 2001-06-05 | Elbrus International Limited | Method and system for asynchronous array loading |
US6247107B1 (en) * | 1998-04-06 | 2001-06-12 | Advanced Micro Devices, Inc. | Chipset configured to perform data-directed prefetching |
US6334176B1 (en) * | 1998-04-17 | 2001-12-25 | Motorola, Inc. | Method and apparatus for generating an alignment control vector |
US6202130B1 (en) * | 1998-04-17 | 2001-03-13 | Motorola, Inc. | Data processing system for processing vector data and method therefor |
US6282634B1 (en) * | 1998-05-27 | 2001-08-28 | Arm Limited | Apparatus and method for processing data having a mixed vector/scalar register file |
US6292845B1 (en) * | 1998-08-26 | 2001-09-18 | Infineon Technologies North America Corp. | Processing unit having independent execution units for parallel execution of instructions of different category with instructions having specific bits indicating instruction size and category respectively |
US6496902B1 (en) * | 1998-12-31 | 2002-12-17 | Cray Inc. | Vector and scalar data cache for a vector multiprocessor |
US6311280B1 (en) * | 1999-02-22 | 2001-10-30 | Nband Communications | Low-power memory system with incorporated vector processing |
US6088784A (en) * | 1999-03-30 | 2000-07-11 | Sandcraft, Inc. | Processor with multiple execution units and local and global register bypasses |
US6665749B1 (en) * | 1999-08-17 | 2003-12-16 | Nec Electronics, Inc. | Bus protocol for efficiently transferring vector data |
US6665790B1 (en) * | 2000-02-29 | 2003-12-16 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
US6760816B1 (en) * | 2000-09-29 | 2004-07-06 | Intel Corporation | Critical loads guided data prefetching |
US6662273B1 (en) | 2000-09-29 | 2003-12-09 | Intel Corporation | Least critical used replacement with critical cache |
US6782469B1 (en) | 2000-09-29 | 2004-08-24 | Intel Corporation | Runtime critical load/data ordering |
US6591345B1 (en) * | 2000-11-28 | 2003-07-08 | Hewlett-Packard Development Company, L.P. | Method for ensuring maximum bandwidth on accesses to strided vectors in a bank-interleaved cache |
US6996739B2 (en) * | 2001-07-11 | 2006-02-07 | Sun Microsystems, Inc. | Accumulator memory for performing operations on block operands |
US7234022B2 (en) * | 2001-12-19 | 2007-06-19 | Sun Microsystems, Inc. | Cache accumulator memory for performing operations on block operands |
US20030115416A1 (en) * | 2001-12-19 | 2003-06-19 | Nixon Walter T. | Cache accumulator memory with an associativity mechanism |
GB2390700B (en) * | 2002-04-15 | 2006-03-15 | Alphamosaic Ltd | Narrow/wide cache |
US7577816B2 (en) * | 2003-08-18 | 2009-08-18 | Cray Inc. | Remote translation mechanism for a multinode system |
US7421565B1 (en) | 2003-08-18 | 2008-09-02 | Cray Inc. | Method and apparatus for indirectly addressed vector load-add -store across multi-processors |
US7437521B1 (en) | 2003-08-18 | 2008-10-14 | Cray Inc. | Multistream processing memory-and barrier-synchronization method and apparatus |
US7334110B1 (en) | 2003-08-18 | 2008-02-19 | Cray Inc. | Decoupled scalar/vector computer architecture system and method |
US7735088B1 (en) | 2003-08-18 | 2010-06-08 | Cray Inc. | Scheduling synchronization of programs running as streams on multiple processors |
US7743223B2 (en) * | 2003-08-18 | 2010-06-22 | Cray Inc. | Decoupling of write address from its associated write data in a store to a shared memory in a multiprocessor system |
US8307194B1 (en) | 2003-08-18 | 2012-11-06 | Cray Inc. | Relaxed memory consistency model |
US7519771B1 (en) | 2003-08-18 | 2009-04-14 | Cray Inc. | System and method for processing memory instructions using a forced order queue |
US7503048B1 (en) | 2003-08-18 | 2009-03-10 | Cray Incorporated | Scheduling synchronization of programs running as streams on multiple processors |
US7366873B1 (en) | 2003-08-18 | 2008-04-29 | Cray, Inc. | Indirectly addressed vector load-operate-store method and apparatus |
US7543133B1 (en) * | 2003-08-18 | 2009-06-02 | Cray Inc. | Latency tolerant distributed shared memory multiprocessor computer |
US7386756B2 (en) * | 2004-06-17 | 2008-06-10 | Intel Corporation | Reducing false error detection in a microprocessor by tracking instructions neutral to errors |
US7555703B2 (en) * | 2004-06-17 | 2009-06-30 | Intel Corporation | Method and apparatus for reducing false error detection in a microprocessor |
US7478769B1 (en) | 2005-03-09 | 2009-01-20 | Cray Inc. | Method and apparatus for cooling electronic components |
DE602006016256D1 (de) * | 2006-06-28 | 2010-09-30 | St Microelectronics Nv | Verfahren und Anordnung für Cachespeicherverwaltung und entsprechende Prozessorarchitektur |
US8683139B2 (en) | 2006-10-31 | 2014-03-25 | Hewlett-Packard Development Company, L.P. | Cache and method for cache bypass functionality |
US9710384B2 (en) * | 2008-01-04 | 2017-07-18 | Micron Technology, Inc. | Microprocessor architecture having alternative memory access paths |
US8972958B1 (en) | 2012-10-23 | 2015-03-03 | Convey Computer | Multistage development workflow for generating a custom instruction set reconfigurable processor |
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 |
JP4687729B2 (ja) * | 2008-03-04 | 2011-05-25 | 日本電気株式会社 | キャッシュメモリ及びベクトル処理装置並びにベクトルデータ整列方法 |
US8904153B2 (en) | 2010-09-07 | 2014-12-02 | International Business Machines Corporation | Vector loads with multiple vector elements from a same cache line in a scattered load operation |
US8635431B2 (en) | 2010-12-08 | 2014-01-21 | International Business Machines Corporation | Vector gather buffer for multiple address vector loads |
US8850162B2 (en) | 2012-05-22 | 2014-09-30 | Apple Inc. | Macroscalar vector prefetch with streaming access detection |
US10430190B2 (en) | 2012-06-07 | 2019-10-01 | Micron Technology, Inc. | Systems and methods for selectively controlling multithreaded execution of executable code segments |
US9785436B2 (en) * | 2012-09-28 | 2017-10-10 | Intel Corporation | Apparatus and method for efficient gather and scatter operations |
US10585801B2 (en) * | 2012-11-26 | 2020-03-10 | Advanced Micro Devices, Inc. | Prefetch kernels on a graphics processing unit |
WO2014107148A1 (en) | 2013-01-03 | 2014-07-10 | Intel Corporation | Adaptive data prefetching |
KR102202575B1 (ko) | 2013-12-31 | 2021-01-13 | 삼성전자주식회사 | 메모리 관리 방법 및 장치 |
US9639472B2 (en) | 2014-07-15 | 2017-05-02 | International Business Machines Corporation | Prefetch list management in a computer system |
US10762164B2 (en) | 2016-01-20 | 2020-09-01 | Cambricon Technologies Corporation Limited | Vector and matrix computing device |
CN106991077A (zh) * | 2016-01-20 | 2017-07-28 | 南京艾溪信息科技有限公司 | 一种矩阵计算装置 |
WO2017181419A1 (zh) * | 2016-04-22 | 2017-10-26 | 北京中科寒武纪科技有限公司 | 一种子矩阵运算装置及方法 |
CN111651203B (zh) | 2016-04-26 | 2024-05-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量四则运算的装置和方法 |
CN111857819B (zh) | 2016-04-26 | 2024-05-03 | 中科寒武纪科技股份有限公司 | 一种用于执行矩阵加/减运算的装置和方法 |
CN107315718B (zh) * | 2016-04-26 | 2020-08-21 | 中科寒武纪科技股份有限公司 | 一种用于执行向量内积运算的装置和方法 |
US11360771B2 (en) * | 2017-06-30 | 2022-06-14 | Intel Corporation | Method and apparatus for data-ready memory operations |
US11500779B1 (en) * | 2019-07-19 | 2022-11-15 | Marvell Asia Pte, Ltd. | Vector prefetching for computing systems |
US11379379B1 (en) | 2019-12-05 | 2022-07-05 | Marvell Asia Pte, Ltd. | Differential cache block sizing for computing systems |
TWI762852B (zh) * | 2020-01-03 | 2022-05-01 | 瑞昱半導體股份有限公司 | 記憶體裝置及其操作方法 |
CN113110878A (zh) * | 2020-01-09 | 2021-07-13 | 瑞昱半导体股份有限公司 | 存储器装置及其操作方法 |
CN113741567B (zh) * | 2021-11-08 | 2022-03-29 | 广东省新一代通信与网络创新研究院 | 矢量加速器及其控制方法、装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4583165A (en) * | 1982-06-30 | 1986-04-15 | International Business Machines Corporation | Apparatus and method for controlling storage access in a multilevel storage system |
US4594682A (en) * | 1982-12-22 | 1986-06-10 | Ibm Corporation | Vector processing |
US4620275A (en) * | 1984-06-20 | 1986-10-28 | Wallach Steven J | Computer system |
US4771380A (en) * | 1984-06-22 | 1988-09-13 | International Business Machines Corp. | Virtual vector registers for vector processing system |
US4760518A (en) * | 1986-02-28 | 1988-07-26 | Scientific Computer Systems Corporation | Bi-directional databus system for supporting superposition of vector and scalar operations in a computer |
-
1988
- 1988-01-11 US US07/142,794 patent/US4888679A/en not_active Expired - Lifetime
-
1989
- 1989-01-04 WO PCT/US1989/000021 patent/WO1989006397A2/en active IP Right Grant
- 1989-01-04 AU AU29396/89A patent/AU2939689A/en not_active Abandoned
- 1989-01-04 EP EP89901914A patent/EP0348495B1/de not_active Expired - Lifetime
- 1989-01-04 DE DE68911398T patent/DE68911398T2/de not_active Expired - Fee Related
- 1989-01-09 CA CA000587760A patent/CA1317032C/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US4888679A (en) | 1989-12-19 |
EP0348495A1 (de) | 1990-01-03 |
WO1989006397A2 (en) | 1989-07-13 |
CA1317032C (en) | 1993-04-27 |
WO1989006397A3 (en) | 1989-08-10 |
AU2939689A (en) | 1989-08-01 |
EP0348495B1 (de) | 1993-12-15 |
DE68911398D1 (de) | 1994-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE68911398T2 (de) | Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem. | |
DE68928677T2 (de) | Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle | |
DE69331039T2 (de) | Rechnersystem mit einem Vorausholungscachespeicher | |
DE69028153T2 (de) | Cache-Speicherfehlgriffsvorhersageverfahren und -vorrichtung | |
DE2459006C2 (de) | Einrichtung zum Bilden einer absoluten Adresse in einer Datenverarbeitunsanlage | |
DE69032812T2 (de) | Vorrichtung und Verfahren zur parallelen Verarbeitung | |
DE69132186T2 (de) | Cache-Speicherverwaltungsanordnung | |
DE69025658T2 (de) | Verfahren zur Verbesserung der Leistung eines mehrstufigen Cachespeichers durch erzwungene Fehlgriffe | |
DE3851746T2 (de) | Sprungvorhersage. | |
DE69518676T2 (de) | Cache-Speicheranordnung für einen Speicher | |
DE69226928T2 (de) | Verfahren und Direktspeicherzugriffssteuerung zum asynchronen Daten-Lesen von einem -Schreiben in einen Speicher mit verbessertem Durchfluss | |
DE69715328T2 (de) | System und Verfahren zur Parallelisierung der Durchführung von Speichertransaktionen mittels mehreren Speichermodellen | |
DE19526007C2 (de) | Horizontal partitionierter Befehls-Cache-Speicher | |
DE3151745C2 (de) | ||
DE69932066T2 (de) | Mechanismus zur "store-to-load forwarding" | |
DE69534148T2 (de) | Rechnersystem zur Ausführung von Verzweigungsbefehlen | |
DE69228380T2 (de) | Verfahren zur erhöhung der datenverarbeitungsgeschwindigkeit in einem rechnersystem | |
DE69418146T2 (de) | Temporärer Registersatz für einen superpipeline-superskalaren Prozessor | |
DE3587439T2 (de) | Gemeinsam benutzter Mehrprozessor-Pipeline-Cachespeicher. | |
DE69514165T2 (de) | Mehrstufige Cache-Speicheranordnung | |
DE69224084T2 (de) | Rechneranordnung mit Mehrfachpufferdatencachespeicher und Verfahren dafür | |
DE68928519T2 (de) | Verfahren und Vorrichtung zur Vorhersage der richtigen Durchführung der Übersetzungen von virtuellen in physikalische Adressen | |
DE69625486T2 (de) | Speichersteuerung zur nicht sequentiellen ausführung von schreibbefehlen | |
DE69132018T2 (de) | Rechner mit Vorausholungs-Cache-Speicher | |
DE69229667T2 (de) | Simulierte cachespeicher-assoziativität |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8328 | Change in the person/name/address of the agent |
Free format text: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER, 80538 MUENCHEN |
|
8339 | Ceased/non-payment of the annual fee |