DE68921906T2 - Verfahren für ein Multiprozessorsystem mit sich selbst zuordnenden Prozessoren. - Google Patents
Verfahren für ein Multiprozessorsystem mit sich selbst zuordnenden Prozessoren.Info
- Publication number
- DE68921906T2 DE68921906T2 DE68921906T DE68921906T DE68921906T2 DE 68921906 T2 DE68921906 T2 DE 68921906T2 DE 68921906 T DE68921906 T DE 68921906T DE 68921906 T DE68921906 T DE 68921906T DE 68921906 T2 DE68921906 T2 DE 68921906T2
- Authority
- DE
- Germany
- Prior art keywords
- processors
- processor
- execution
- parallel
- register
- 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 - Lifetime
Links
- 238000000034 method Methods 0.000 title claims description 148
- 230000008569 process Effects 0.000 claims description 136
- 238000004891 communication Methods 0.000 claims description 58
- 238000011112 process operation Methods 0.000 claims description 14
- 238000001514 detection method Methods 0.000 claims description 2
- 238000012544 monitoring process Methods 0.000 claims description 2
- 230000011664 signaling Effects 0.000 claims description 2
- 238000013507 mapping Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000013459 approach Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 4
- 239000002131 composite material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009118 appropriate response Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 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/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- 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/3834—Maintaining memory consistency
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Multi Processors (AREA)
Description
- Die vorliegende Erfindung betrifft allgemein Computersysteme und im besonderen Systeme mit einer Mehrzahl von unabhängigen Prozessoren.
- Die Rechenbedürfnisse im Feld der wissenschaftlichen Datenverarbeitung haben sich bis zu einem Punkt gesteigert, bei dem es schwierig ist, einen einzelnen Prozessor zu bauen, der ausreichende Leistungsfähigkeit hat. Dies ist durch Grenzen in der physikalischen Technologie beim Computerbau begründet. Ein Ansatz, dieses Problem zu lösen, besteht in der Verwendung von einer Mehrzahl von Prozessoren, um die Datenverarbeitungsleistung eines Systems zu erhöhen. Jedoch begegnet man vielen Problemen bei dem Versuch, Vielfach-Prozessoren zu verwenden. Vielfach-Prozessorsysteme können gleichzeitig mehrere unabhängige Prozesse (Programme) ausführen, und dies führt zu einer Steigerung des Systemdurchsatzes. Es besteht jedoch der Bedarf nach einem Vielfach-Prozessorsystem, das die Ausführung eines einzelnen Prozesses beschleunigen kann.
- Es wurde bereits eine Anzahl von Systemen beschrieben, die das Ziel haben, die Rechengeschwindigkeit für einen einzelnen Prozeß zu erhöhen, aber alle diese Systeme haben einen oder mehrere Nachteile. Ein Beispiel eines solchen Systems ist in US-Patent Nr. 4 636 942 von Chen et al. beschrieben. Dieses Patent beschreibt ein System, in dem mehrere Prozessoren einen Satz gemeinsamer Register teilen. Diese Register werden in Cluster eingeteilt, und die Prozessoren, die zur Ausführung der gleichen Task zugewiesen sind, werden durch das Betriebssystem zum Zugriff auf einen gemeinsamen Cluster zugewiesen. Die Cluster- Register schaffen, zusammen mit einem Satz von Hardware-Semaphoren, eine schnelle Synchronisation zwischen den zusammenarbeitenden Prozessoren. Dieses System hat eine Anzahl von Nachteilen, die tendenziell zur Verschlechterung der Leistungsfähigkeit des Systems führen, wenn es zum parallelen Prozessieren eingesetzt wird. Wenn ein Prozeß parallele Operationen startet, muß die Cluster-Zuweisung von Registern durch das Betriebssystem ausgeführt werden. Diese Übergabe der Steuerung vom ausführenden Prozeß zum Betriebssystem und zurück ist recht zeitaufwendig. Nach Zuordnung der Prozessoren wird eine Task-Synchronisierung zwischen den Prozessoren mit einer Laufzeitbibliothek durchgeführt, die in den Prozeßcode eingebettet sein muß und erhebliche Ausführungszeit benötigt, um die Task-Synchronisierung durchzuführen. Ferner wird der Multi-Task-Betrieb für eine parallele Ausführung eines Prozesses bei Chen et al. durch den Programmierer aufgerufen. Daher wird eine Parallelisierung nur aufgerufen, wenn dies zuvor durch den Programmierer bestimmt worden ist. Grundsätzlich benutzt der Ansatz von Chen et al. einen erheblichen Zeitüberhang, um den Multi-Task-Betrieb innerhalb eines Prozesses aufzurufen. Als Ergebnis dessen kann das in dem Patent von Chen et al. beschriebene System nur effektiv angewendet werden, wenn sehr große parallelisierbare Abschnitte des Codes innerhalb eines Prozesses vorhanden sind. Dies wird als "grobkörnige Parallelisierung" bezeichnet. Das von Chen et al. beschriebene System kann nicht in effizienter Weise verwendet werden, um Parallelisierung in kleinen Bereichen auszuführen.
- Ein anderer Ansatz, der vorgeschlagen worden ist, besteht darin, Prozessoren im voraus für eine Task im Programm zu reservieren, wenn der Prozeß zur Ausführung geladen wird, wobei alle reservierten Prozessoren für die gesamte Ausführungszeit reserviert bleiben. Ein solcher Ansatz wurde vorgeschlagen in "Microtasking on IBM Multiprocessors", P. Carnevali et al., Proc. of the 1986 IBM Europe Institute Seminar on Parallel Computing: Parallel Systems and Computation, Oberlech, AT, August 1986, Seiten 41- 46. Durch Reservieren der Prozessoren im voraus können die parallelen Segmente des Prozesses mit reduzierter Synchronisationszeit ausgeführt werden. Die meisten Prozesse haben aber sowohl serielle als auch parallele Codesegmente, und wenn ein serielles Segment in einem Prozessor ausgeführt wird, laufen die übrigen reservierten Prozessoren im Leerlauf. Wenn der Prozeß in seriellem Code ausgeführt wird, laufen die übrigen Prozessoren im Leerlauf zustand. In den meisten praktischen Anwendungen führt der Ansatz, Prozessoren im voraus im Programm für parallele Ausführung zu reservieren, wie in dem obigen Artikel beschrieben, zu einem Verlust von Systemdurchsatz aufgrund des Leerlauf zustands der nicht benötigten Prozessoren während serieller Programmausführung.
- In Hinblick auf den Bedarf für eine erhöhte Verarbeitungsgeschwindigkeit für einzelne Prozesse und auf die Schwierigkeiten, denen man beim Versuch, Multi-Prozessoren einzusetzen, begegnete, besteht ein Bedarf für ein Verfahren, das die parallelen Segmente eines Prozesses mit einem geringen Zeitüberhang ausführen kann, während keine Prozessoren im Leerlaufzustand gehalten werden, wenn ein Prozeß in einem seriellen Segment ausgeführt wird.
- Gemäß der Erfindung wird ein Verfahren zur parallelen Ausführung eines Prozesses in einem Computersystem mit einer Mehrzahl von Prozessoren geschaffen, wobei das Verfahren die Schritte aufweist:
- Beginnen der Ausführung eines Prozesses durch Schreiben von Prozeßstatusparametern für den Prozeß in definierte Register in einem Kommunikationsregistersatz, der für alle Prozessoren in dem System zugänglich ist,
- Starten einer seriellen Ausführung des Instruktionscodes des Prozesses durch einen ersten der Prozessoren,
- auf die Ausführung einer Parallelisierungsinstruktion für den Prozeß durch den ersten Prozessor, welche Parallelisierungsinstruktion parallele Prozeßoperationen für den Prozeß, welche parallel ausführbar sind, anzeigen, hin (a) Schreiben von zusätzlichen Prozeßstatusparametern für den Prozeß in den Kommunikationsregistersatz, um anderen der Prozessoren zu ermöglichen, bei der Ausführung der parallelen Prozeßoperationen für. den Prozeß mitzuwirken, und (b) Signalisieren an alle anderen Prozessoren, daß paralle Prozeßoperationen zur Ausführung bereitstehen, indem ein den Prozeßstatusparametern zugeordnetes Semaphorregister gesetzt wird,
- Überwachen des Semaphors durch einen oder mehrere der anderen Prozessoren, wenn die anderen Prozessoren in einem Leerlauf zustand sind, um nachzuweisen, wann der erste Prozessor das Semaphor gesetzt hat, um die anderen Prozessoren zur Mitwirkung in der Ausführung von parallelen Prozeßoperationen des Prozesses aufzufordern, und
- auf den Nachweis der Setzung des Semaphors durch einen oder mehrere der anderen Prozessoren hin Zugreifen auf die in dem Kommunikationsregistersatz gespeicherten Prozeßstatusparameter und Beginnen der Ausführung der parallelen Prozeßoperationen durch den einen oder die mehreren Prozessoren.
- Für ein vollständigeres Verständnis der vorliegenden Erfindung und ihrer Vorteile wird nun auf die folgende Beschreibung im Zuammenhang mit den zugehörigen Zeichnungen Bezug genommen, in denen:
- Figur 1 ein Blockdiagramm eines Multi-Prozessor-Computersystems zeigt, das zur Ausführung des Verfahrens gemäß der vorliegenden Erfindung geeignet ist;
- Figur 2 ein Blockdiagramm der genauen Schaltungen für die in Figur 1 dargestellte Speicher/Kommunikationsregister- Steuerung zeigt;
- Figur 3 eine Darstellung der dem Mikrocode zugänglichen Inhalte eines Kommunikationsregisterblocks zeigt;
- Figur 4 ein Blockdiagramm zeigt, das eine Mikrocode-Operation innerhalb eines Prozessors darstellt; und
- Figur 5 eine Zeitskalendarstellung ist, die die Prozessorverwendung zur Ausführung eines einzelnen Prozesses zeigt, wobei der Prozeß anfangs in serieller Weise auf einem einzelnen Prozessor ausgeführt wird und dann zur parallelen Ausführung auf mehreren Prozessoren aufgespalten wird, und dann zur fortgesetzten seriellen Ausführung auf einem einzelnen Prozessor zurückkehrt.
- Zweck der vorliegenden Erfindung ist es, die Verwendung von Multi-Prozessoren zu ermöglichen, um die Leistung eines einzelnen Programms zu beschleunigen, während gleichzeitig eine maximale Leistungsfähigkeit für mehrere simultane Programme erhalten bleibt. Im allgemeinen haben Anwendungsprogramme Segmente, die nur in serieller Weise durch einen einzelnen Prozessor ausgeführt werden können, und zwar grundsäztlich aufgrund der Datenabhängigkeiten, und haben ferner Segmente, die parallel durch eine Mehrzahl von Prozessoren ausgeführt werden können. Um in effizienter Weise kurze Segmente von parallelen Operationen verwenden zu können, ist es wesentlich, daß der erforderliche Zeitüberhang zum Starten von Multi-Prozessor-Operationen so gering wie möglich ist. Nur wenn dieser Zeitüberhang genügend klein gemacht wird, kann Parallelisierung mit feiner Granularitaut ausgenutzt werden. Wenn immer ein Prozeß bei der Ausführung stoppen und das Betriebssystem rufen muß, gibt es einen erheblichen Zeitverlust. Die vorliegende Erfindung macht es überflüssig, das Betriebssystem zu rufen, um parallele Operationen zu starten.
- Um die vorliegende Erfindung besser zu verstehen, ist es wichtig, das als "Pfad" bezeichnete Programmablaufkonzept zu verstehen. Ein Pfad ist ein Ausführungsweg des Prozesses (Programm). Ein rein sequentieller Prozeß hat einen einzelnen Pfad. Wenn ein Prozeß ein Segment hat, das parallel durch mehrere Prozessoren ausgeführt werden kann, dann kann der Prozeß mehrere Pfade während dieser Zeit haben. Die maximale Anzahl von Pfaden, die an einem beliebigen Punkt bestehen können, wird gelegentlich als "logische" Pfadzahl bezeichnet. Da typische Programmabläufe zwischen seriellen und parallelen Segmenten hin und her gehen, variiert die logische Pfadzahl von Segment zu Segment. Es ist aber nicht erforderlich, daß jeder Pfad einen gesonderten Prozessor hat, auf dem er ausgeführt wird. Alle logischen Pfade können sequentiell auf einem einzelnen Prozessor ausgeführt werden, wie es normalerweise auf einem Einzelprozessorsystem geschieht. Bei der vorliegenden Erfindung kann das Betriebssystem einen gegebenen Prozeß auf eine Anzahl von Pfaden beschränken, die er parallel ausführen kann. Diese Grenze kann als die maximale "physikalische" Pfadzahl bezeichnet werden. Wenn die physikalische Pfadzahl für ein gegebenes Segment kleiner als die logische Pfadzahl, bedeutet dies lediglich, daß einige logische Pfade sequentiell und nicht parallel ausgeführt werden. Die maximale physikalische Pfadzahl für einen Prozeß ist ein Parameter, der durch das Betriebssystem, durch einen Parameter gesteuert werden kann, der in einem Kommunikationsregistersatz als eine Pfadreservierungsmaske gespeichert ist.
- Die vorliegende Erfindung schafft ein Verfahren, mit dein ein einzelner Prozeß mit parallelen Segmenten entweder auf einem einzelnen Prozessor oder, für die parellelen Segmente, durch eine Mehrzahl von Prozessoren ausgeführt werden kann, wenn diese Prozessoren zur Verfügung stehen. Wenn ein Prozessor die Ausführung eines Pfades eines Prozesses abgeschlossen hat und andere Pfade dieses Prozesses noch in Arbeit sind, dann kann dieser Prozessor freigegeben werden, so daß er andere Prozesse im Computersystem abarbeiten kann. Ein sehr wichtiger Aspekt der vorliegenden Erfindung besteht darin, daß Prozessoren "eingeladen" werden, beim parallelen Prozessieren mitzuwirken, eher als auf Befehl reserviert zu werden. Ein Prozessor nimmt die Einladung an, wenn er in einem Leerlaufzustand ist und daher nicht irgendeinen anderen Prozeß abarbeitet. Diese Technik der nicht-Befehl- Reservierung schafft einen sehr hohen Grad an Ausnutzung von allen Prozessoren innerhalb eines Computersystems und schafft daher einen hohen Durchsatz für das Gesamtsystem. Eine detaillierte Beschreibung des Verfahrens der vorliegenden Erfindung ist in den folgenden Figuren zusammen mit den in den Anhängen I und II aufgeführten Listen gegeben.
- Unter Bezugnahme auf Figur 1 ist dort ein Blockdiagramm für ein Multi-Prozessor-Computersystem 20 zu sehen, das zur Ausführung eines Verfahrens gemäß der vorliegenden Erfindung geeignet ist. Das System 20 enthält einen Hauptspeicher 22 und eine Mehrzahl von Prozessoren wie 24 und 26. Der Prozessor 24 ist als erster Prozessor im System durch die Bezeichnung PROZESSOR 0 gekennzeichnet. Der letzte Prozessor in der Gruppe ist als PROZESSOR n bezeichnet. Es kann jede beliebige Anzahl von Prozessoren in dem System 20 geben, aber eine ausgewählte Ausführungsform hat z.B. eine Gruppe von vier Prozessoren.
- Jeder der Prozessoren enthält eine Vektorprozessoreinheit 24A und 26A, und auch eine skalare Prozessoreinheit 24B und 26B. Solche vektoriellen und skalaren Prozessoreinheiten sind detailliert in US Patent 4 620 275 von Wallach et al. beschrieben, welche Patentbeschreibung hier durch Bezugnahme aufgenommen wird.
- Jeder der Prozessoren 24 und 26 enthält weiter eine Speicher/Kommunikationsregistersteuerung, 24C und 26C. Diese Steuerungen sind detaillierter in Figur 2 erläutert.
- Prozessor 24 kommuniziert mit dem Hauptspeicher 22 über einen Adreßbus 28, einen Lese-Datenbus 30 und einen Schreib-Datenbus 32. Der Prozessor 26 kommuniziert mit dein Hauptspeicher 22 über einen Adreßbus 34, einen Lese-Datenbus 36 und einen Schreib-Datenbus 38.
- Das System 20 enthält weiter eine Gruppe von Kommunikationsregistern 46, die in acht Blöcke 46A bis 46H unterteilt sind. Jeder Block kann auch als ein Satz von Kommunikationsregistern bezeichnet werden. Jeder Satz von Kommunikationsregistern oder jeder Block, wie etwa 46A, weist eine Mehrzahl von Registern auf. Diese werden bei Bezugnahme auf Figur 3 näher beschrieben.
- Jedem Satz von Kommunikationsregistern ist ein Semaphor zugeordnet, das dazu verwendet wird, einen mit den Daten in diesem Registersatz verbundenen Status zu signalisieren. Diese sind als Semaphore 48 gezeigt. Diese Semaphore werden implizit durch Instruktionen manipuliert, die die Kommunikationsregister lesen und beschreiben. Eine "Sende"-Instruktion prüft das Semaphor des Zielregisters und schreibt, wenn es gelöscht ist, die Daten und setzt das Semphor. In ähnlicher Weise liest eine "Empfange"- Instruktion die Registerdaten und löscht das Semphor, wenn es gesetzt ist. Semaphor-Operationen übergeben auch den Status auf einem Semaphor-Statusbus 49, der den Erfolg oder Fehlschlag der Semaphor-Operation anzeigt. Dieser Status steht dann den Steuerabschnitten des Prozessors, wie etwa 24 und 26, zur Verfügung, so daß eine geeignete Antwort gegeben werden kann.
- Das System 20 enthält weiter einen Lese-Datenbus 50, einen Schreib-Datenbus 51 und einen Adreßbus 52 für die Kommuikation zwischen den Prozessoren, wie etwa 24 und 26, und Kommunikationsregistern 46. Das System 20 hat einen Kommunikationsindexregisterbus 53 und einen Schutzflaggenbus 55, die beide mit den Steuerungen 24C und 26C verbunden sind. Die Steuerung 24C des Prozessors 24 ist verbunden, um Adressen von der Steuerung durch den Adreßbus 52 und den Registerbus 53 zu einer Kommunikationsregister-Adreßabbilundungs/Prüfschaltung 57 zu übertragen, um irgendein Register in den Kommunikationsregistern 46 über eine Leitung 59 zu adressieren. Die Steuerung 24C ist ferner so angeschlossen, um den Datenbus 50 auszulesen, um Daten aus den Kommunikationsregistern 46 zu lesen, und auf den Datenbus 51 zu schreiben, um Daten in die Kommunikationsregister 46 zu schreiben. Die Steuerung 24C kann ferner jedes mit den Kommunikationsregistern 46 verbundene Semaphor 48 setzen und löschen. Die Steuerung 26C kommuniziert in ähnlicher Weise durch die Busse 49, 50, 51, 52, 53 und 55 mit dem Kommunikationsregistern 46 und Semaphoren 48.
- Ein Schutzflaggenbus 55 ist mit den Steuerungen 24C und 26C verbunden, um einen Schutzstatus der Kommunikationsregister-Adreßabbildungs/Prüfschaltung 57 bereitzustellen. Diese Schaltung 57 kann dann Adressen nachweisen, die durch Anwenderprogramme fehlerhaft erzeugt wurden.
- In dem Computersystem 20 kann jeder Prozessor, wie etwa 24 und 26, unabhängig auf den Hauptspeicher zugreifen. Bei herkömmlichem Multi-Prozessieren können separate Prozesse (Programme) unabhängig voneinander in Prozessoren, wie etwa 24 und 26, laufen, während sie auf den gleichen Hauptspeicher zugreifen. Ebenso kann ein einzelner Prozeß in mehreren Pfaden ausgeführt werden, wie weiter unten beschrieben wird, durch Verwendung der Koinmunikationsregister 46 und der Semaphore 48. Kurz gesagt, wenn ein Prozeß auszuführen ist, der sowohl serielle als auch parallele Komponenten enthält, wird er anfangs bei irgendeinem der Prozessoren ausgeführt, wie beispielsweise Prozessor 24. Wenn der Prozeß begonnen hat, wird einer der Kommunikationsregisterblöcke, z.B. 46A, durch das Betriebssystem dem Prozeß zugeordnet. Ein Anfangssatz von Prozeßstatusinforination, der weiter bei Bezugnahme auf Figur 3 beschrieben wird, wird dann durch den Prozessor 24 in die Register des Blocks 46A durch Ausführung des Betriebssystems geschrieben, das dann den Prozessor veranlaßt, die Ausführung des ausgewählten Prozesses zu beginnen. Während der Prozessor 24 den ausgewählten Prozeß ausführt, können andere Prozessoren in dem System entweder andere Prozesse ausführen oder in einem Leerlauf zustand sein. Wenn der Prozessor 24 einer Parallelisierungsinstruktion begegnet, die weiter unten beschrieben wird, führt er eine Abfolge von Operationen aus., um die anderen Prozessoren zu informieren, daß parallele Ausführung möglich ist. Zunächst sperrt er den "Verzweigungsblock", welcher die Kommunikationsregister 000A-000D enthält, indem er ein Senden zu Register 000A ausführt (siehe Figur 3). Durch Setzen dieses Semaphors, das als das "Verzweigungssperr"-Semaphor bezeichnet wird, informiert er die anderen Prozessoren im System, daß die Verzweigungsblockgruppe von Registern modifiziert wird. Der Prozessor 24 schreibt dann zusätzliche Prozeßstatusinformationen in den Verzweigungsblock, und schließt durch Setzen des dem Register 000D zugeordneten Semaphors ab, des "Verzweigungsspeicher"-Semaphors.
- Die Kombination der Setzung der Verzweigungssperre und des Verzweigungsspeichers signalisiert den anderen Prozessoren, daß parallele Ausführung möglich ist.
- Während der ausgewählte Prozeß in dem Prozessor 24 ausgeführt wird, sind alle anderen Prozessoren, die keine Prozesse ausführen, in einem Leerlauf zustand. In dem Leerlauf zustand zählt jeder dieser Prozessoren ein Adressregister herauf, um sequentiell bestimmte Semaphor-Register innerhalb der Kommunikationsregister 46 zu überprüfen. Die Prozessoren im Leerlaufzustand suchen kontinuierlich nach Semaphoren, die gesetzt sind, um anzuzeigen, daß parallele Operationen zur Ausführung bereitstehen. Wenn ein Leerlauf-Prozessor, z.B. Prozessor 26, feststellt, daß ein Semaphor innerhalb des Blocks 46 A gesetzt worden ist, um anzuzeigen, daß parallele Operationen verfügbar sind, dann liest der Prozessor 26 die Prozeßstatusinformation aus dem Block 46A und beginnt, auf Grundlage dieser Prozeßstatusinformation, mit der Ausführung eines parallelen Pfades des Prozesses, wie oben definiert. Der Zugriff auf die Prozeßstatusinformation erlaubt es dein Prozessor 26, unmittelbar mit der Ausführung von Prozeßinstruktionen durch Zugriff auf den Hauptspeicher 22 zu beginnen. In den meisten Fällen wird der Prozessor 24 einen ersten der parallelen Pfade für den ausgewählten Prozeß ausgeführt haben. Nachdem Pfade durch die Prozessoren 24 und 26. gestartet wurden, kann jeder andere Prozessor, der in einem Leerlaufzustand ist, ebenfalls einen Pfad zur Ausführung aufnehmen. Am Ende einer Pfadausführung begegnet der den Pfad aus führende Prozessor einer "Verbindungs"-Instruktion (Join). Jeder Prozessor, der das Verbinden ausführt, ersetzt eine Flagge in einer Pfadzuordnungsmaske (unten beschrieben) und zählt einen zugehörigen Pfadzähler (unten beschrieben) herunter. Beide Parameter sind an Stelle 0017 des Kommunikationsregistersatzes 46A. Der letzte Prozessor, der eine Verbindungsinstruktion ausführt, erkennt sie als die letzte Verbindungsinstruktion, weil der Pfadzähler 1 ist, und dieser Prozessor fährt mit der seriellen Ausführung des Prozesses fort. Es ist zu bemerken, daß dieser letzte Prozessor jeder beliebe Prozessor in dem System sein kann und nicht notwendig derjenige sein muß, der ursprünglich die Verzweigung gespreichert hat. Sollte dieser letzte Prozessor einer weiteren Parallelisierungsinstruktion begegnen, wird der oben beschriebene Vorgang wiederholt. Es ist zu bemerken, daß, wenn keiner der Prozessoren im Leerlauf zustand ist, Prozessor 24 jeden der Pfade des ausgewählten Prozesses sequentiell abarbeitet. Daher führt das Computersystem der vorliegenden Erfindung parallele Operation auf Basis von Einladung und nicht auf Befehl aus.
- Eine detailliertere Beschreibung der Funktionsweise der vorliegenden Erfindung und ihrer Rechnerarchitektur wird weiter unten gegeben.
- In Figur 2 ist ein schematisches Diagrainm für die Speicher-/Kommunikationsregistersteuerung 24 aus Figur 1 dargestellt. Diese Steuerung arbeitet in Verbindung mit der vektoriellen und der skalaren Prozessoreinheit 24A und 24B, um Adressen zu generieren und Daten von und zu dem Kommunikationsregistern 46 und dem Hauptspeicher 22 zu übertragen. Die vektorielle Prozessoreinheit 24A und die skalare Prozessoreinheit 24B führen Makroinstruktionen durch Anwendung von Mikrocode aus, der selbst dekodiert wird, um die Operationen mit verschiedenen Logikeinheiten, und Registern in dem Prozessor auszulösen. Diese Befehlsausführung ist in der Industrie üblich.
- Innerhalb der Steuerung 24C ist eine Registerdatei vorgesehen, die so angeschlossen ist, um Daten und Adressen zwischen dein Prozessor 24 und den Kommunikationsregisterbussen 50, 51 und 52 zu übertragen. Es ist ferner eine ALU 62 vorgesehen, die die durch die Prozeßinstruktionen geforderte Adreßarithmetik ausführen kann. Die Registerdatei 60 empfängt Steuerungsbefehle aus dekodierten Mikroinstruktionen, die durch die Prozessoreinheiten 24A und 24B erzeugt werden. Die besonderen Steuerleitungen sind nicht dargestellt, aber sind in der Industrie wohlbekannt. Die Steuerung 24 enthält weiter ein Literalregister 64, das Adreßinformationen aus Prozeßinstruktionen empfängt. Das Literalregister 64 ist so angeschlossen, um eine zweite Eingabe für die ALU 62 zu liefern.
- Die Ausgabe aus der ALU 62 ist ein 16 Bit Adressensegment, das durch die Instruktionen für einen ausgewählten Prozeß erzeugt wird, der durch einen Prozessor ausgeführt wird. Dieses Adressensegment wird streng durch die Prozeßsoftware erzeugt. Dieses Adressensegment wird nach der Erzeugung in der Registerdatei 60 gespeichert, bevor es auf den Adreßbus 52 übertragen wird.
- Die Steuerung 24 enthält weiter ein Kornmunikationsindexregister 66, das einen Kommunikationsregisterindexwert speichert. Das Register 66 ist unabhängig von der Prozeßsoftware, d.h. es kann nicht durch irgendeine Prozeßinstruktion gesetzt oder gelesen werden. Das Register 66 arbeitet ausschließlich in Reaktion auf Mikroinstruktionen, die durch einen Prozessor ausgeführt werden, wenn er in dem Leerlaufzustand ist. Diese Mikrocode-Operation wird weiter in Verbindung mit Figur 4 beschreiben. Wenn ein Prozessor, wie etwa Prozessor 24, in einem Leerlaufzustand ist, führt er wiederholt eine Folge von Operationen aus, die als Leerlaufschleife bekannt ist. Eine der in dieser Leerlaufschleife ausgeführten Operationen besteht darin, die Verzweigungsspeicher-Semaphore (siehe Figur 3) der verschiedenen Kommunikationsregistersätze durchzugehen auf der Suche nach einem parallelen Segment, bei dem er bei Ausführung teilnehmen kann. Dieses Durchgehen erfolgt unter Verwendung eines speziellen Satzes von Adressen, der dem Mikrocode zur Verfügung steht, aber nicht den Anwenderprogrammen. Der Prozessor zeigt sein Recht zur Benutzung dieser speziellen Adressen an, indem er den Inhalt seines Schutzstatusflaggenregisters 65 über den Schutzstatusbus 55 zu der Prüfschaltung 57 schickt. Diese Statusflagge ist in einem Statuszustand, wenn ein Anwenderprozeß in einem Prozessor ausgeführt wird, und ist in einem anderen Zustand, wenn das Betriebssystem oder eine Leerlaufschleife in dem Prozessor läuft.
- Die Ausgaben des Kommunikationsindexregisters 66, des Kommunikationsregisteradreßbusses 52 und der Schutzstatusflaggenschaltung 65 werden zu der Kommunkationsregister-Adreßabbildungs-/Prüfschaltung 57 geleitet. Die Schaltung 57 untersucht die empfangene Adresse um sicherzustellen, daß sie Kommunikationsregister adressiert, die physikalisch vorhanden sind und für die die Schutzstatusflagge den Zugriff erlaubt. Anwenderprogramme dürfen nicht auf die durch Mikrocode und das Betriebssystem verwendeten Register zugreifen. Die Schaltung 57 fügt auch ausgewählte Adreßbits mit Adreßbits des Kommunikationsadreßregisters 66 zusammen, um eine zusammengesetzte 10-Bitadresse zu erzeugen, um ein ausgewähltes Kommunikationsregister zu adressieren. Die Schaltung 57 kombiniert ein erstes, prozeßunabhängiges Adreßsegment aus dem Register 66 mit einem zweiten, prozeßabhängigen Adreßsegment aus der ALU 62, um eine zusammengesetzte Adresse zur Adressierung eines Registers in dem Register 46 zu erzeugen.
- Es wird nun auf Figur 3 Bezug genommen, worin ein Detail der in einem Block innerhalb des Kommunikationsregisters 64 gespeicherten Information gezeigt ist. In der vorliegenden Ausführungsform enthält der Block 46A 128 64 Bit Register. Der Block 46 enthält prozeßstatusinformation, die durch einen ablaufenden Prozeß festgelegt ist und es anderen Prozessoren erlaubt, eine Prozeß operation, die durch den in dem Block gespeicherten Prozeßstatus definiert ist, parallel aufzunehmen und auszuführen.
- Die in einen Kommunikationsregisterblock wie 46A gespeicherte Information ist folgende:
- (1) Speicherplätze 000A-000D sind der "Verzweigungsblock". Sie enthalten Inf ormationen, die durch einen eine Parallelisierungsinstruktion ausführenden Prozessor erzeugt wird, um anderen Prozessoren zu ermöglichen, ein paralleles Codesegment des ausgeführten Prozesses auszuführen.
- (2) Speicherplätze 000E-0011 enthalten Segmentbeschreibungsregister (SDR). Sie bilden die oberste Stufe des Prozeß-Speicherabbildungsbaums und werden sowohl für die serielle als auch für die parallele Ausführung benötigt.
- (3) Speicherplätze 0012-0016 enthalten Trap-Instructions-Register, was spezielle Bitflags zur Fehlersuche in auf mehreren Prozessoren laufenden Programmen sind.
- (4) Speicherplatz 0017 enthält Pfadzuordnungs-Steuerinformation. Die Pfadzuordnungsmaske enthält ein Bit für jeden möglichen physikalischen Pfad in dem Prozeß. Die zugeordnete Pfadzahl beschreibt die Anzahl der momentan ausgeführten Pfade. Ein sich selbst zuordnender Prozessor löscht ein Bit in der Pfadmaske und zählt die Pfadzahl herauf. Der Prozessor verfährt umgekeht, wenn er die Zuordnung auflöst.
- (5) Speicherplätze 0018-001F enthalten Zeitwerte, die die Ausführungszeit auf jeder CPU des Prozesses überwachen, die von diesem Kommunikationsregistersatz aus laufen. Diese Information wird zur Kontoführung benutzt.
- (6) Speicherplätze 4000-401F sind zur Verwendung durch das Betriebssystem reserviert.
- (7) Speicherplätze 8000-803F sind für die Anwenderprogramme reserviert. Die Zuordnung dieser Register wird für einen typischen Prozeß automatisch durch den Compiler ausgeführt.
- Alle Register werden während der Prozeßerzeugung durch das Betriebssystem initialisiert. Darauf werden die obigen Ziffern 1, 3, 4, 5 und 6 durch das Betriebssystem und durch Mikrocode während der Ausführung des Prozesses manipuliert. Obiger Punkt 7 wird direkt durch den Anwenderprozeß kontrolliert.
- Wenn ein Prozeß in einem Prozessor ausgeführt wird und eine Parallelisierungsinstruktion auftritt, verursacht die Ausführung der Parallelisierungsinstruktion, daß zusätzliche Statusinformation in den entsprechenden Kommunikationsregisterblock geschrieben wird. Die durch eine Parallelisierungsinstruktion in den Block geschriebene Information wird als "Verzweigungsblock" Information bezeichnet. Die innerhalb des Verzweigungsblocks, welcher durch einen Prozessor geschrieben wird, der andere Prozessoren zur Teilnahme bei paralleler Ausführung eines Codesegments einlädt, enthaltene Information ist folgende:
- fork.FP Anfangsblockzeiger, der durch einen neuen Pfad zu verwenden ist.
- fork.AP Anfangsargumentzeiger, der durch den neuen Pfad zu verwenden ist.
- fork.PC Adresse der ersten Instruktion, die durch den neuen Pfad auszuführen ist.
- fork.PSW Anfangs-Programmstatuswort, das durch den neuen Pfad zu verwenden ist.
- fork.Source_PC Adresse der Instruktion, die den Verzweigungs- oder Gabelungsbefehl aufgestellt hat.
- fork.type Definition, ob eine Verzweigungs- oder Gabelungsinstruktion den neuen Pfad erzeugt hat (eine Verzweigungsinstruktion lädt nur einen Prozessor zur Teilnahme bei paralleler Ausführung ein, während eine Gabelungsinstruktion mehr als einen Prozessor zur Teilnahme im Parallelbetrieb einlädt.)
- fork.SP Anfänglicher Stapelzeiger des neuen Pfades.
- Ferner wird das dem fork.FP zugeordnete Semaphor als "Verzweigungssperre"-Flagge verwendet, und das mit dein fork. SP verbundene Semaphor als "Verzweigungsspeicher"-Flagge verwendet. Wenn die Verzweigungssperre-Flagge gesetzt ist, zeigt sie an, daß eine Verzweigung durch einen Prozessor gespeichert oder aufgenommen ist, und daß kein anderer Prozessor auf den Verzweigungsblock zugreifen sollte, bis die Flagge gelöscht ist. Wenn die Verzweigungsspeicher-Flagge gesetzt ist, zeigt sie an, daß eine gültige Verzweigung gespeichert ist und daß ein leerlauf ender Prozessor eingeladen ist, die Verzweigung aufzunehmen.
- Wenn ein leerlaufender Prozessor festgestellt hat, daß ein Semaphor gesetzt worden ist und Parallele Operationen zur Verfügung stehen, ist alle erforderliche Information, um mit der Ausführung dieser Operation zu beginnen, in einem Block des Kommunikationsregisters wie oben und in bezug auf Figur 3 beschrieben, vorhanden.
- Es wird nun auf Figur 4 Bezug genommen, worin ein Mikrocode- System 80 zur Verwendung in den Prozessoren der vorliegenden Erfindung gezeigt ist. Das System 80 ist in jeder skalaren Prozessoreinheit für jeden Prozessor, wie 24 und 26, implementiert. Prozeß-Makroinstruktionen werden aus dem Hauptspeicher abgeleitet und zu einem Instruktionsverteiler-Übersetzer 82 geführt. Der Übersetzer erzeugt eine erste Mikroinstruktionsadresse, für jede Makroinstruktion über eine Leitung 84 zu einem ersten Multiplexer 86. Die erste Mikroinstruktionsadresse wird dann durch eine Leitung 88 zu einem Mikrocode-Steuerspeicher 90 geleitet. Die erste Mikroinstruktion wird dann durch eine Leitung 92 zu einem Mikrocode-Instruktionsregister 94 geleitet, das auch als Decoder arbeitet. Wenn eine Mikrocode-Instruktion dekodiert ist, werden Steuersignale erzeugt, die auf Register und andere Logikeinheiten innerhalb des Prozessors gerichtet sind. Verschiedene beispielhafte Steuerleitungssignale sind durch die gestrichelten Linien in Figuren 2 und 4 gezeigt.
- Nachdem die erste Mikroinstruktion aus der Tabelle 82 gesendet und in dem Register 94 dekodiert ist, werden nachfolgende Mikroinstruktionen durch den Mikrocode-Steuerspeicher 90 erteilt, um die Ausführung der entsprechenden Makroinstruktion abzuschließen. Die nächste Mikrocode-Adresse und Abwandlungen werden durch das Register 94 erzeugt und über eine Leitung 96 zu einer nächsten Adreßlogikschaltung 98 übertragen. Die Leitung 96 ist auch an einen Multiplexer 99 angeschlossen, der verschiedene Prozeßstatusinformationen aus einer Vielzahl von Leitungen empfängt, einschließlich Leitung 49, die den Semaphorstatus aus den Kommunikationsregistern anzeigt. Dieser Status kann während Zugriff auf das Kommunikationsregister nachgewiesen werden, um den Mikrocode zu veranlassen, in Abhängigkeit vom Semaphorstatus auf zuzweigen. Dies erlaubt es z.B., daß der Mikrocode in der Leerlaufschleife eines Prozessors feststellen kann, ob ein Verzweigungssemaphor gespeichert worden ist, um andere Prozessoren zur Teilnahme bei der Ausführung eines parallelen Prozeßsegments einzuladen.
- Wenn irgendeiner der Prozessoren in dem System 20, wie etwa Prozessor 24 oder 26, nicht bei der Ausführung eines Prozesses ist, wird dieser Prozessor, wie oben bemerkt, in einen Leerlaufzustand versetzt, der die Ausführung einer Mikrocode-Leerlaufschleife bewirkt. Bei einem Schritt in dieser Mikrocode-Leerlaufschleife wird das Kommunikationsindexregister 66 während jeder Schleife um eine Einheit heraufgezählt durch ein Steuersignal aus dem Register 94 zu den Kommunikationsindexregister 66. Das Register 66 hat in einer ausgewählten Ausführungsform drei Bits, was eine Adressierbarkeit von acht Blöcken 46A-46H ermöglicht. 16 Adreßbits wählen ein bestimmtes Register in dem ausgewählten Block während der normalen Prozeßausführung aus, aber zusätzlich ist ein spezieller Bereich von Adressen für den Mikrocode verfügbar, der es ihm ermöglicht, auf jede beliebige Adresse in irgendeinem der Blöcke zuzugreifen.
- Mithin sorgt die Durchführung des Leerlauf zustandes für ein kontinuierliches Überprüfen des "Verzweigungsspeicher"-Semaphors in jedem der Blöcke in der Suche nach einem gesetzten Semaphor. Wenn ein solches Semaphor gefunden wird, wird der entsprechende Wert des Kommunikationsindexregisters (CIR) in dem CIR-Register 66 gehalten. Der Prozessor fährt dann fort, die in dem ausgewählten Block gespeicherte Prozeßstatusinformation zu verwenden, um mit dem Start eines Prozeßpfades zu beginnen. Während der Ausführung des Prozesses werden verschiedene Adreßinformationen für die Kommunikationsregister erzeugt, aber diese enthält nur 16 Adreßbits, die den Speicherplatz innerhalb eines Blocks definieren, aber nicht definieren, welcher Block adressiert werden soll. Die Adreßinformation für einen bestimmten Block wird durch das Adreßsegment, welches in dein Kommunikationsindexregister 66 gespeichert ist, definiert. Mithin arbeitet der Prozeß unabhängig von und ohne Wissen von dem speziellen Block, der die Prozeßstatusinformation enthält. Die Identifizierung des bestimmten Blockes wird vollständig unabhängig von den Prozeßinstruktionen ausgeführt. Die Prozeßausführung ist ferner unabhängig von dem bestimmten Prozessor, in dem der Prozeß ausgeführt wird.
- Die vorliegende Erfindung erfordert die Verwendung von Parallelisierungsinstruktionen, die innerhalb des Objektcodes enthalten sind, der von den Prozessoren ausgeführt wird. In Anhang I ist eine Auflistung eines Quellcodes in FORTRAN für einen Prozeß dargestellt, der Matrixmultiplikation durchführt. Vor der Multiplikation löschen die Programminstruktionen einen Speicherbereich. Sowohl die Multiplikations- als auch die Löschoperationen enthalten "Do"-Schleifen, die ein besonderer Typ von Instruktionen sind, die besonders für Parallelisierung geeignet sind.
- Wenn der in Anhang I gezeigte Quellcode kompiliert wird, wird ein Objektcode erzeugt, der in Anhang II gezeigt ist. Unter dem mit Instruktionen bezeichneten Abschnitt, in etwa der 13. Zeile darunter, befindet sich eine als "Spawn" bezeichnete Instruktion. Dies ist eine Parallelisierungsinstruktion. Die Gabelungsinstruktion (Spawn) entspricht nicht einem bestimmten Befehl in der Quellsprache, sondern resultiert aus einer Analyse des Compilers von möglichen Datenabhängigkeiten der verschiedenen Iterationen, die durch die Schleife ausgeführt werden, welche durch den Continue-Befehl beim Quellzeichen 10 abgeschlossen wird. Diese spezielle Gabelung (Spawn) hat eine maximale logische Pfadzahl von 100, da alle Iterationen der Schleife 10 parallel ausgeführt werden können. Wie zuvor diskutiert, wird die maximale physikalische Pfadzahl zum Zeitpunkt der Ausführung durch das Betriebssystem festgesetzt, in Abhängigkeit von vorgegebenen Reservierungsparametern.
- Vor der Ausführung jeder Iteration einer parallelen Operation, greift ein teilnehmender Prozessor auf ein bestimmtes Kommunikationsregister (hier Register 8000) zu und stellt fest, ob noch eine andere Iteration auszuführen ist oder nicht. Wenn keine Iteration mehr vorhanden ist, dann wird der Prozessor abzweigen und die auf das Zeichen L6 folgende Verbindungsinstruktion (Join) ausführen. Während der Ausführung der Verbindungsinstruktion stellt der Prozessor fest, ob er der letzte Prozessor beim Abschluß eines Pfades ist oder nicht. Wenn nicht, geht er in den Leerlauf zustand über und beginnt mit der Suche nach einem parallelen Prozeß, in den er sich zur Ausführung einschalten kann. Wenn er der letzte Prozessor bei der Ausführung eines parallelen Pfades ist, beginnt er mit der Ausführung des nächsten Pfades folgend auf die Verbindung.
- Es ist zu bemerken, daß, wie in unserem Beispiel, der Code unmittelbar mit einem anderen parallelen Segment beginnen und sich wieder auf gabeln kann, um parallele Ausführung zu ermöglichen.
- Infolge dieser Gabelungsinstruktion wird ein Semaphorregister gesetzt, um jeden verfügbaren Prozessor zur parallelen Ausführung der Do-Schleife einzuladen. Die Parameter für die parallele Ausführung werden in den in Figur 3 gezeigten Kommunikationsregisterblock geladen. Diese bestimmte Gabelungsinstruktion ("Spawn") wird durch eine Verbindungsinstruktion ("Join") etwa 13 Zeilen später abgeschlossen. Jeder Prozessor, der einen Pfad zur Ausführung aufnimmt, führt die erforderlichen Prozeßoperationen aus und begegnet dann der Verbindungsinstruktion. Diese "Join"-Instruktion veranlaßt den Prozessor, zu überprüfen, ob er den letzten Pfad ausführt oder nicht. Wenn nicht, kehrt er in den Leerlauf zustand zurück und sucht nach einem anderen parallelen Prozeß zur Ausführung. Wenn er der letzte ist, dann beginnt er mit der Ausführung des seriellen Pfades, der auf die Verbindung folgt.
- Genau vor der mit "L7" bezeichneten Zeile befindet sich eine weitere Gabelungsinstruktion ("Spawn"), die anzeigt, daß die Operationen in dem mit "20" bezeichneten Quellbefehl parallel ausgeführt werden können. Diese Gabelungsinstruktion wird durch eine Verbindungsinstruktion ("Join") nahe dem Ende der Liste abgeschlossen.
- Die Funktionsweise der vorliegenden Erfindung wird nun unter Bezugnahme auf die Figuren und insbesondere auf Figur 5 weiter beschrieben. Figur 5 illustriert ebenfalls das Pfadkonzept der vorliegenden Erfindung. Wie in dieser Figur dargestellt, wird ein Prozeß A seriell als ein einzelner Pfad 110 durch den Prozessor P0 durchgeführt. Die Prozessoren P1 und P3 sind im Leerlauf. Ein Prozeß B ist in Ausführung durch den Prozessor P2. Zum Zeitpunkt T1 führt Prozessor P0 eine Gabelungsinstruktion ("Spawn") im Prozeß A aus. Die Prozeßstatusinformation für die parallele Ausführung des Codes in Prozeß A wird in einen entsprechenden Kommunikationsregistersatz geschrieben. Die leerlaufenden Prozessoren P1 und P3 bemerken das Semaphor, das in dem Kommunikationsregistersatz gesetzt ist, und nehmen die Pfade 116 und 118 zur Ausführung auf. Prozessor P1 übernimmt den Pfad 114 zur Ausführung und, bis zum Zeitpunkt T2, arbeiten die Prozessoren P0, P1 und P3 parallel Code für Prozeß A ab. Zum Zeitpunkt T2 schließt Prozessor P2 Prozeß B ab und geht in den Leerlaufzustand über. Prozessor P2 nimmt dann Pfad 120 von Prozeß A an und wird der vierte Prozessor bei der gleichzeitigen Ausführung von Prozeß A.
- Zum Zeitpunkt T3 empfängt Prozessor P3 einen Unterbrechungsbefehl und beginnt mit der Ausführung des Betriebssystems. Dies dauert bis zum Zeitpunkt T4, zu dem der Prozessor T3 zur Ausführung des Pfades 118 zurückgeht.
- Prozessor P0 schließt die Ausführung des Pfades 114 zum Zeitpunkt T5 ab und führt eine Verbindungsinstruktion ("Join") aus. Da die anderen Prozessoren immer noch Pfade von Prozeß A ausführen, geht Prozessor P0 in den Leerlauf zustand.
- Prozessoren P1 und P3 schließen die Ausführung der Pfade 116 und 118 zum Zeitpunkt T6 ab und gehen in den Leerlaufzustand über, da Prozessor P2 immer noch Pfad 120 von Prozeß A ausführt.
- Zum Zeitpunkt T7 schließt Prozessor P2 die Ausführung von Pfad 120 ab und führt eine Verbindungsinstruktion ("Join") aus. Da keine anderen Prozessoren mehr einen Teil von Prozeß A ausführen, beginnt Prozessor P2 mit der seriellen Ausführung von Prozeß A mit Pfad 124.
- Zum Zeitpunkt T8 tritt ein Unterbrechungsbefehl für Prozessor P0 auf, um diesen Prozessor zur Ausführung des Betriebssystems zu veranlassen. Zum Zeitpunkt T9 beginnt der Prozessor P0 mit der Ausführung eines neuen Programms C mit Pfad 126.
- Wie aus der obigen Beschreibung erkennbar ist, kann ein einzelner Prozeß auf einem oder mehreren Prozessoren ausgeführt werden und nach einer Aufgabelung kann der ursprüngliche Prozeß auf einem anderen Prozessor fortgeführt werden. Der Prozeß selbst weiß nicht, welcher Prozessor den Prozeß ausführt oder wieviele Prozessoren den Prozeß ausführen. Diese Verfahrensweise schafft große Unabhängigkeit für das Computersystem und eine verbesserte Ausnutzung der Mehrzahl von Prozessoren.
- Obwohl eine Ausführungsform der Erfindung in den folgenden Zeichnungen dargestellt und in der vorhergehenden detaillierten Beschreibung beschrieben worden ist, ist dies so zu verstehen, daß die Erfindung nicht auf die beschriebene Ausführungsform beschränkt ist, sondern zu einer Vielzahl von Neuanordnungen, Abwandlungen und Ersetzungen in der Lage ist.
Claims (4)
1. Verfahren zur parallelen Ausführung eines Prozesses in einem
Computersystem (20) mit einer Mehrzahl von Prozessoren (24,
25, 26,..., N), wobei das Verfahren die Schritte aufweist:
Beginnen der Ausführung eines Prozesses durch Schreiben von
Prozeßstatusparametern für den Prozeß in definierte Register
(46A-46H) in einem Kommunikationsregistersatz (46), der für
alle Prozessoren in dem System zugänglich ist,
Starten einer seriellen Ausführung des Instruktionscodes des
Prozesses durch einen ersten der Prozessoren (24),
auf die Ausführung einer Parallelisierungsinstruktion für
den Prozeß durch den ersten Prozessor (24), welche
Parallelisierungsinstruktion parallele Prozeßoperationen für den
Prozeß, welche parallel ausführbar sind, anzeigen, hin (a)
Schreiben von zusätzlichen Prozeßstatusparametern für den
Prozeß in den Kommunikationsregistersatz (46), um anderen
der Prozessoren (26) zu ermöglichen, bei der Ausführung der
parallelen Prozeßoperationen für den Prozeß mitzuwirken, und
(b) Signalisieren an alle anderen Prozessoren (25,..., N),
daß paralle Prozeßoperationen zur Ausführung bereitstehen,
indem ein den Prozeßstatusparametern zugeordnetes
Semaphorregister (48) gesetzt wird,
Überwachen des Semaphors (48) durch einen oder mehrere der
anderen Prozessoren, wenn die anderen Prozessoren in einem
Leerlauf zustand sind, um nachzuweisen, wann der erste
Prozessor (24) das Semaphor (48) gesetzt hat, um die anderen
Prozessoren zur Mitwirkung in der Ausführung von parallelen
Prozeßoperationen des Prozesses auf zufordern, und
auf den Nachweis der Setzung des Semaphors (48) durch einen
oder mehrere der anderen Prozessoren hin Zugreifen auf
die
in dem Kommunikationsregistersatz (46) gespeicherten
Prozeßstatusparameter und Beginnen der Ausführung der parallelen
Prozeßoperationen durch den einen oder die mehreren
Prozessoren.
2. Verfahren nach Anspruch 1, welches den Schritt einschließt
Rückführen aller bis auf einen von dem einen oder mehreren
Prozessoren, die die parallelen Prozeßoperationen ausgeführt
haben, in einen Leerlauf zustand und Fortführen der seriellen
Ausführung des Prozesses durch den verbleibenden einen von
dem einen oder mehreren Prozessoren.
3. Verfahren nach Anspruch 2, wobei der eine der Prozessoren,
der die serielle Ausführung des Prozesses fortsetzt, der
letzte von dem einen oder mehreren Prozessoren ist, um die
Ausführung der parallelen Prozeßoperationen zu beenden.
4. Verfahren nach Anspruch 1, wobei der Schritt des Beginnens
der Ausführung eines Prozesses durch ein Betriebssystem des
Computersystems ausgeführt wird, wobei das Betriebssystem in
einem der Prozessoren arbeitet.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/161,768 US5050070A (en) | 1988-02-29 | 1988-02-29 | Multi-processor computer system having self-allocating processors |
Publications (2)
Publication Number | Publication Date |
---|---|
DE68921906D1 DE68921906D1 (de) | 1995-05-04 |
DE68921906T2 true DE68921906T2 (de) | 1995-07-27 |
Family
ID=22582640
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE68928848T Expired - Fee Related DE68928848T2 (de) | 1988-02-29 | 1989-01-25 | Multi-Prozessor-Rechnersystem mit prozessunabhängiger Adressierung von Kommunikationsregistern |
DE68921906T Expired - Lifetime DE68921906T2 (de) | 1988-02-29 | 1989-01-25 | Verfahren für ein Multiprozessorsystem mit sich selbst zuordnenden Prozessoren. |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE68928848T Expired - Fee Related DE68928848T2 (de) | 1988-02-29 | 1989-01-25 | Multi-Prozessor-Rechnersystem mit prozessunabhängiger Adressierung von Kommunikationsregistern |
Country Status (3)
Country | Link |
---|---|
US (1) | US5050070A (de) |
EP (2) | EP0330836B1 (de) |
DE (2) | DE68928848T2 (de) |
Families Citing this family (86)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5261108A (en) * | 1988-10-08 | 1993-11-09 | Nec Corporation | Multiprocessor communications register providing complete access in a full access mode, and mapped access in a partial access mode |
DE69031233T2 (de) * | 1989-02-24 | 1997-12-04 | At & T Corp | Adaptive Arbeitsfolgeplanung für Mehrfachverarbeitungssysteme |
US5353418A (en) * | 1989-05-26 | 1994-10-04 | Massachusetts Institute Of Technology | System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread |
WO1990014629A2 (en) * | 1989-05-26 | 1990-11-29 | Massachusetts Institute Of Technology | Parallel multithreaded data processing system |
US5127092A (en) * | 1989-06-15 | 1992-06-30 | North American Philips Corp. | Apparatus and method for collective branching in a multiple instruction stream multiprocessor where any of the parallel processors is scheduled to evaluate the branching condition |
DE3923872A1 (de) * | 1989-07-19 | 1991-01-24 | Philips Patentverwaltung | Schaltungsanordnung zum steuern des zugriffs auf einen speicher |
US5249293A (en) * | 1989-06-27 | 1993-09-28 | Digital Equipment Corporation | Computer network providing transparent operation on a compute server and associated method |
US5247676A (en) * | 1989-06-29 | 1993-09-21 | Digital Equipment Corporation | RPC based computer system using transparent callback and associated method |
US5430876A (en) * | 1989-06-27 | 1995-07-04 | Digital Equipment Corporation | Remote procedure callback system and method |
EP0422310A1 (de) * | 1989-10-10 | 1991-04-17 | International Business Machines Corporation | Verteilter Mechanismus für die schnelle Planung von gemeinsamen Objekten |
JPH0640324B2 (ja) * | 1989-10-26 | 1994-05-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチプロセッサ・システムおよびそのプロセス同期方法 |
US5263169A (en) * | 1989-11-03 | 1993-11-16 | Zoran Corporation | Bus arbitration and resource management for concurrent vector signal processor architecture |
US5179702A (en) * | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
US5524255A (en) * | 1989-12-29 | 1996-06-04 | Cray Research, Inc. | Method and apparatus for accessing global registers in a multiprocessor system |
JPH04219859A (ja) * | 1990-03-12 | 1992-08-10 | Hewlett Packard Co <Hp> | 並列プロセッサに直列命令ストリームデータを分散するハードウェアディストリビュータ |
DE69130588T2 (de) * | 1990-05-29 | 1999-05-27 | National Semiconductor Corp., Santa Clara, Calif. | Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür |
US5339415A (en) * | 1990-06-11 | 1994-08-16 | Cray Research, Inc. | Dual level scheduling of processes to multiple parallel regions of a multi-threaded program on a tightly coupled multiprocessor computer system |
JP2818016B2 (ja) * | 1990-08-09 | 1998-10-30 | 株式会社日立製作所 | プロセス並列実行方法および装置 |
US5381540A (en) * | 1990-08-13 | 1995-01-10 | Dallas Semiconductor Corporation | Interface: interrupt masking with logical sum and product options |
US5349680A (en) * | 1990-11-07 | 1994-09-20 | Kabushiki Kaisha Toshiba | Information processing apparatus for executing application programs under control of a system program |
US5257372A (en) * | 1990-12-19 | 1993-10-26 | Cray Research, Inc. | Methods for efficient distribution of parallel tasks to slave processes in a multiprocessing system |
US5434970A (en) * | 1991-02-14 | 1995-07-18 | Cray Research, Inc. | System for distributed multiprocessor communication |
US5430850A (en) * | 1991-07-22 | 1995-07-04 | Massachusetts Institute Of Technology | Data processing system with synchronization coprocessor for multiple threads |
US5895489A (en) * | 1991-10-16 | 1999-04-20 | Intel Corporation | Memory management system including an inclusion bit for maintaining cache coherency |
US5349682A (en) * | 1992-01-31 | 1994-09-20 | Parallel Pcs, Inc. | Dynamic fault-tolerant parallel processing system for performing an application function with increased efficiency using heterogeneous processors |
CA2106280C (en) * | 1992-09-30 | 2000-01-18 | Yennun Huang | Apparatus and methods for fault-tolerant computing employing a daemon monitoring process and fault-tolerant library to provide varying degrees of fault tolerance |
US5892944A (en) * | 1993-07-20 | 1999-04-06 | Kabushiki Kaisha Toshiba | Program execution and operation right management system suitable for single virtual memory scheme |
DK0635784T3 (da) * | 1993-07-23 | 2000-03-27 | Siemens Ag | Multiprocessorsystem. |
JPH0784973A (ja) * | 1993-09-16 | 1995-03-31 | Fujitsu Ltd | マルチ処理プロセッサ制御装置および制御方法 |
US5537542A (en) * | 1994-04-04 | 1996-07-16 | International Business Machines Corporation | Apparatus and method for managing a server workload according to client performance goals in a client/server data processing system |
US5473773A (en) * | 1994-04-04 | 1995-12-05 | International Business Machines Corporation | Apparatus and method for managing a data processing system workload according to two or more distinct processing goals |
US5606666A (en) * | 1994-07-19 | 1997-02-25 | International Business Machines Corporation | Method and apparatus for distributing control messages between interconnected processing elements by mapping control messages of a shared memory addressable by the receiving processing element |
US6327607B1 (en) | 1994-08-26 | 2001-12-04 | Theseus Research, Inc. | Invocation architecture for generally concurrent process resolution |
US5550970A (en) * | 1994-08-31 | 1996-08-27 | International Business Machines Corporation | Method and system for allocating resources |
US6009454A (en) * | 1994-09-30 | 1999-12-28 | Allen-Bradley Company, Llc | Multi-tasking operation system for industrial controller |
US5740350A (en) * | 1995-06-30 | 1998-04-14 | Bull Hn Information Systems Inc. | Reconfigurable computer system |
US5696939A (en) * | 1995-09-29 | 1997-12-09 | Hewlett-Packard Co. | Apparatus and method using a semaphore buffer for semaphore instructions |
US6532487B1 (en) | 1995-12-04 | 2003-03-11 | International Business Machines Corporation | Method and system for managing semaphores in an object-oriented multi-tasking computer system |
US5706514A (en) * | 1996-03-04 | 1998-01-06 | Compaq Computer Corporation | Distributed execution of mode mismatched commands in multiprocessor computer systems |
US5987590A (en) * | 1996-04-02 | 1999-11-16 | Texas Instruments Incorporated | PC circuits, systems and methods |
US5799182A (en) * | 1997-01-21 | 1998-08-25 | Ford Motor Company | Multiple thread micro-sequencer apparatus and method with a single processor |
WO1998043193A2 (en) | 1997-03-21 | 1998-10-01 | University Of Maryland | Spawn-join instruction set architecture for providing explicit multithreading |
JP3790607B2 (ja) * | 1997-06-16 | 2006-06-28 | 松下電器産業株式会社 | Vliwプロセッサ |
US5938753A (en) * | 1997-09-19 | 1999-08-17 | International Business Machines Corporation | Method and apparatus for controlling autonomous units transferring data between buses having different ordering policies |
US6076157A (en) * | 1997-10-23 | 2000-06-13 | International Business Machines Corporation | Method and apparatus to force a thread switch in a multithreaded processor |
US6105051A (en) * | 1997-10-23 | 2000-08-15 | International Business Machines Corporation | Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor |
US6212544B1 (en) | 1997-10-23 | 2001-04-03 | International Business Machines Corporation | Altering thread priorities in a multithreaded processor |
US6697935B1 (en) | 1997-10-23 | 2004-02-24 | International Business Machines Corporation | Method and apparatus for selecting thread switch events in a multithreaded processor |
US6567839B1 (en) | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
US20040030873A1 (en) * | 1998-10-22 | 2004-02-12 | Kyoung Park | Single chip multiprocessing microprocessor having synchronization register file |
FR2799020A1 (fr) * | 1999-09-28 | 2001-03-30 | Koninkl Philips Electronics Nv | Dispositif a plusieurs processeurs ayant une interface pour une memoire collective |
US6738840B1 (en) * | 1999-08-31 | 2004-05-18 | Koninklijke Philips Electronics N.V. | Arrangement with a plurality of processors having an interface for a collective memory |
ATE390788T1 (de) | 1999-10-14 | 2008-04-15 | Bluearc Uk Ltd | Vorrichtung und verfahren zur hardware-ausführung oder hardware-beschleunigung von betriebssystemfunktionen |
US6804769B1 (en) * | 2000-02-18 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | Unified buffer for tracking disparate long-latency operations in a microprocessor |
US6745274B1 (en) * | 2000-04-25 | 2004-06-01 | Hewlett-Packard Development Company, L.P. | Apparatus and method for synchronizing multiple accesses to common resources |
US7162718B1 (en) | 2000-12-12 | 2007-01-09 | International Business Machines Corporation | Language extension for light weight threading in a JVM |
US7124224B2 (en) * | 2000-12-22 | 2006-10-17 | Intel Corporation | Method and apparatus for shared resource management in a multiprocessing system |
US7178009B2 (en) * | 2001-04-04 | 2007-02-13 | Intel Corporation | Different register data indicators for each of a plurality of central processing units |
JP3702813B2 (ja) | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
JP3632635B2 (ja) | 2001-07-18 | 2005-03-23 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
US7487504B2 (en) * | 2002-02-06 | 2009-02-03 | International Business Machines Corporation | Thread dispatch for multiprocessor computer systems |
US7363546B2 (en) * | 2002-07-31 | 2008-04-22 | Sun Microsystems, Inc. | Latent fault detector |
US7000091B2 (en) * | 2002-08-08 | 2006-02-14 | Hewlett-Packard Development Company, L.P. | System and method for independent branching in systems with plural processing elements |
US7457822B1 (en) | 2002-11-01 | 2008-11-25 | Bluearc Uk Limited | Apparatus and method for hardware-based file system |
US8041735B1 (en) | 2002-11-01 | 2011-10-18 | Bluearc Uk Limited | Distributed file system and method |
US7356568B2 (en) | 2002-12-12 | 2008-04-08 | International Business Machines Corporation | Method, processing unit and data processing system for microprocessor communication in a multi-processor system |
US7493417B2 (en) | 2002-12-12 | 2009-02-17 | International Business Machines Corporation | Method and data processing system for microprocessor communication using a processor interconnect in a multi-processor system |
US7359932B2 (en) * | 2002-12-12 | 2008-04-15 | International Business Machines Corporation | Method and data processing system for microprocessor communication in a cluster-based multi-processor system |
US7360067B2 (en) | 2002-12-12 | 2008-04-15 | International Business Machines Corporation | Method and data processing system for microprocessor communication in a cluster-based multi-processor wireless network |
US7451224B1 (en) | 2003-04-23 | 2008-11-11 | Cisco Technology, Inc. | Method and apparatus for automatically synchronizing a unique identifier of a network device |
US7631055B1 (en) | 2003-04-23 | 2009-12-08 | Cisco Technology, Inc. | Method and apparatus providing automatic connection announcement from a modular network device to a network management point |
US7523185B1 (en) | 2004-01-13 | 2009-04-21 | Cisco Technology, Inc. | Method and apparatus for providing automatic frame relay and ATM provisioning of network devices |
US7290164B1 (en) | 2004-03-03 | 2007-10-30 | Cisco Technology, Inc. | Method of reverting to a recovery configuration in response to device faults |
US7676655B2 (en) * | 2004-06-30 | 2010-03-09 | Sun Microsystems, Inc. | Single bit control of threads in a multithreaded multicore processor |
US20060156316A1 (en) * | 2004-12-18 | 2006-07-13 | Gray Area Technologies | System and method for application specific array processing |
US8104030B2 (en) * | 2005-12-21 | 2012-01-24 | International Business Machines Corporation | Mechanism to restrict parallelization of loops |
WO2007084700A2 (en) * | 2006-01-19 | 2007-07-26 | University Of Maryland Office Of Technology Commercialization | System and method for thread handling in multithreaded parallel computing of nested threads |
US20070250681A1 (en) * | 2006-04-10 | 2007-10-25 | International Business Machines Corporation | Independent programmable operation sequence processor for vector processing |
US7673166B2 (en) * | 2006-10-24 | 2010-03-02 | Hewlett-Packard Development Company, L.P. | Computation of processor clock frequency ratios |
US20080114506A1 (en) * | 2006-11-10 | 2008-05-15 | Davis Christopher L | Hard landing detection |
US8051423B2 (en) * | 2007-02-06 | 2011-11-01 | Mba Sciences, Inc. | System and method for tracking resources during parallel processing |
US8065681B2 (en) * | 2007-10-12 | 2011-11-22 | International Business Machines Corporation | Generic shared memory barrier |
US20090182983A1 (en) * | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Compare and Branch Facility and Instruction Therefore |
EP2435914B1 (de) * | 2009-05-26 | 2019-12-11 | Telefonaktiebolaget LM Ericsson (publ) | Verfahren und planer in einem betriebssystem |
US10834109B2 (en) * | 2014-12-23 | 2020-11-10 | Mcafee, Llc | Determining a reputation for a process |
US9582312B1 (en) | 2015-02-04 | 2017-02-28 | Amazon Technologies, Inc. | Execution context trace for asynchronous tasks |
Family Cites Families (82)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
NL134125C (de) * | 1958-04-25 | |||
US3229260A (en) * | 1962-03-02 | 1966-01-11 | Ibm | Multiprocessing computer system |
US3346851A (en) * | 1964-07-08 | 1967-10-10 | Control Data Corp | Simultaneous multiprocessing computer system |
US3337854A (en) * | 1964-07-08 | 1967-08-22 | Control Data Corp | Multi-processor using the principle of time-sharing |
US3348210A (en) * | 1964-12-07 | 1967-10-17 | Bell Telephone Labor Inc | Digital computer employing plural processors |
US3374465A (en) * | 1965-03-19 | 1968-03-19 | Hughes Aircraft Co | Multiprocessor system having floating executive control |
US3386082A (en) * | 1965-06-02 | 1968-05-28 | Ibm | Configuration control in multiprocessors |
US3541516A (en) * | 1965-06-30 | 1970-11-17 | Ibm | Vector arithmetic multiprocessor computing system |
US3440611A (en) * | 1966-01-14 | 1969-04-22 | Ibm | Parallel operations in a vector arithmetic computing system |
US3480914A (en) * | 1967-01-03 | 1969-11-25 | Ibm | Control mechanism for a multi-processor computing system |
US3496551A (en) * | 1967-07-13 | 1970-02-17 | Ibm | Task selection in a multi-processor computing system |
US3593300A (en) * | 1967-11-13 | 1971-07-13 | Ibm | Arrangement for automatically selecting units for task executions in data processing systems |
US3614742A (en) * | 1968-07-09 | 1971-10-19 | Texas Instruments Inc | Automatic context switching in a multiprogrammed multiprocessor system |
US3611306A (en) * | 1969-02-05 | 1971-10-05 | Burroughs Corp | Mechanism to control the sequencing of partially ordered instructions in a parallel data processing system |
US3560934A (en) * | 1969-06-10 | 1971-02-02 | Ibm | Arrangement for effecting vector mode operation in multiprocessing systems |
US3643227A (en) * | 1969-09-15 | 1972-02-15 | Fairchild Camera Instr Co | Job flow and multiprocessor operation control system |
US3648253A (en) * | 1969-12-10 | 1972-03-07 | Ibm | Program scheduler for processing systems |
US3810119A (en) * | 1971-05-04 | 1974-05-07 | Us Navy | Processor synchronization scheme |
CS164932B2 (de) * | 1971-09-07 | 1975-11-28 | ||
GB1434186A (en) * | 1972-04-26 | 1976-05-05 | Gen Electric Co Ltd | Multiprocessor computer systems |
USRE27703E (en) * | 1972-09-05 | 1973-07-24 | Configuration control in multiprocessors | |
US3916383A (en) * | 1973-02-20 | 1975-10-28 | Memorex Corp | Multi-processor data processing system |
US3833889A (en) * | 1973-03-08 | 1974-09-03 | Control Data Corp | Multi-mode data processing system |
FR2253423A5 (de) * | 1973-11-30 | 1975-06-27 | Honeywell Bull Soc Ind | |
US4073005A (en) * | 1974-01-21 | 1978-02-07 | Control Data Corporation | Multi-processor computer system |
US4130865A (en) * | 1974-06-05 | 1978-12-19 | Bolt Beranek And Newman Inc. | Multiprocessor computer apparatus employing distributed communications paths and a passive task register |
US4034347A (en) * | 1975-08-08 | 1977-07-05 | Bell Telephone Laboratories, Incorporated | Method and apparatus for controlling a multiprocessor system |
JPS5841538B2 (ja) * | 1975-12-04 | 1983-09-13 | 株式会社東芝 | マルチプロセツサシステム ノ ユウセンセイギヨホウシキ |
US4318174A (en) * | 1975-12-04 | 1982-03-02 | Tokyo Shibaura Electric Co., Ltd. | Multi-processor system employing job-swapping between different priority processors |
US4128880A (en) * | 1976-06-30 | 1978-12-05 | Cray Research, Inc. | Computer vector register processing |
US4228496A (en) * | 1976-09-07 | 1980-10-14 | Tandem Computers Incorporated | Multiprocessor system |
US4228495A (en) * | 1978-12-19 | 1980-10-14 | Allen-Bradley Company | Multiprocessor numerical control system |
US4481580A (en) * | 1979-11-19 | 1984-11-06 | Sperry Corporation | Distributed data transfer control for parallel processor architectures |
US4412303A (en) * | 1979-11-26 | 1983-10-25 | Burroughs Corporation | Array processor architecture |
IT1126475B (it) * | 1979-12-03 | 1986-05-21 | Honeywell Inf Systems | Apparato di comunicazione tra piu' processori |
FR2471631B1 (fr) * | 1979-12-11 | 1986-02-21 | Cii Honeywell Bull | Dispositif de synchronisation et d'affectation de processus entre plusieurs processeurs dans un systeme de traitement de l'information |
NL7909178A (nl) * | 1979-12-20 | 1981-07-16 | Philips Nv | Rekenmachine met verspreide redundantie welke is verdeeld over verschillende isolatiegebieden voor fouten. |
US4318173A (en) * | 1980-02-05 | 1982-03-02 | The Bendix Corporation | Scheduler for a multiple computer system |
US4368514A (en) * | 1980-04-25 | 1983-01-11 | Timeplex, Inc. | Multi-processor system |
JPS56164464A (en) * | 1980-05-21 | 1981-12-17 | Tatsuo Nogi | Parallel processing computer |
JPS57757A (en) * | 1980-06-04 | 1982-01-05 | Hitachi Ltd | Job execution schedule system |
CH651950A5 (de) * | 1980-10-20 | 1985-10-15 | Inventio Ag | Multiprozessoranordnung. |
US4495570A (en) * | 1981-01-14 | 1985-01-22 | Hitachi, Ltd. | Processing request allocator for assignment of loads in a distributed processing system |
JPS57121750A (en) * | 1981-01-21 | 1982-07-29 | Hitachi Ltd | Work processing method of information processing system |
FR2500659B1 (fr) * | 1981-02-25 | 1986-02-28 | Philips Ind Commerciale | Dispositif pour l'allocation dynamique des taches d'un ordinateur multiprocesseur |
JPS57164340A (en) * | 1981-04-03 | 1982-10-08 | Hitachi Ltd | Information processing method |
US4394727A (en) * | 1981-05-04 | 1983-07-19 | International Business Machines Corporation | Multi-processor task dispatching apparatus |
US4445197A (en) * | 1981-10-27 | 1984-04-24 | International Business Machines Corporation | Weak synchronization and scheduling among concurrent asynchronous processors |
US4543627A (en) * | 1981-12-14 | 1985-09-24 | At&T Bell Laboratories | Internal communication arrangement for a multiprocessor system |
US4507726A (en) * | 1982-01-26 | 1985-03-26 | Hughes Aircraft Company | Array processor architecture utilizing modular elemental processors |
JPS58134357A (ja) * | 1982-02-03 | 1983-08-10 | Hitachi Ltd | ベクトルプロセッサ |
JPS58225422A (ja) * | 1982-06-25 | 1983-12-27 | Toshiba Corp | デ−タ制御装置 |
US4691280A (en) * | 1982-06-28 | 1987-09-01 | The Singer Company | High performance multi-processor system |
US4539637A (en) * | 1982-08-26 | 1985-09-03 | At&T Bell Laboratories | Method and apparatus for handling interprocessor calls in a multiprocessor system |
US4530051A (en) * | 1982-09-10 | 1985-07-16 | At&T Bell Laboratories | Program process execution in a distributed multiprocessor system |
JPS5955565A (ja) * | 1982-09-24 | 1984-03-30 | Fujitsu Ltd | マルチフア−ムウエア方式 |
NL8204038A (nl) * | 1982-10-20 | 1984-05-16 | Philips Nv | Multiprocessorrekenmachinesysteem, bevattende n parallel werkende rekenmachinemodules, en rekenmachinemodule te gebruiken in zo een multiprocessorrekenmachinesysteem. |
US4482956A (en) * | 1982-11-04 | 1984-11-13 | International Business Machines Corporation | Parallel queueing method |
US4504906A (en) * | 1982-11-30 | 1985-03-12 | Anritsu Electric Company Limited | Multiprocessor system |
US4543626A (en) * | 1982-12-06 | 1985-09-24 | Digital Equipment Corporation | Apparatus and method for controlling digital data processing system employing multiple processors |
US4633387A (en) * | 1983-02-25 | 1986-12-30 | International Business Machines Corporation | Load balancing in a multiunit system |
SE435975B (sv) * | 1983-03-18 | 1984-10-29 | Ellemtel Utvecklings Ab | Anordning i ett datorstyrt telekommunikationssystem for att vid overforing av datainformation mellan en regional processor och en central processor medelst ett kosystem utfora lastreglering |
US4661900A (en) * | 1983-04-25 | 1987-04-28 | Cray Research, Inc. | Flexible chaining in vector processor with selective use of vector registers as operand and result registers |
US4636942A (en) * | 1983-04-25 | 1987-01-13 | Cray Research, Inc. | Computer vector multiprocessing control |
EP0131658B1 (de) * | 1983-07-08 | 1987-10-28 | International Business Machines Corporation | Synchronisationsvorrichtung für ein Multiprocessing-System |
US4591975A (en) * | 1983-07-18 | 1986-05-27 | Data General Corporation | Data processing system having dual processors |
US4646231A (en) * | 1983-07-21 | 1987-02-24 | Burroughs Corporation | Method of synchronizing the sequence by which a variety of randomly called unrelated activities are executed in a digital processor |
US4589063A (en) * | 1983-08-04 | 1986-05-13 | Fortune Systems Corporation | Data processing system having automatic configuration |
JPS6077265A (ja) * | 1983-10-05 | 1985-05-01 | Hitachi Ltd | ベクトル処理装置 |
JPS6079460A (ja) * | 1983-10-07 | 1985-05-07 | Nec Corp | 密結合多重演算装置における制御方式 |
GB8328396D0 (en) * | 1983-10-24 | 1983-11-23 | British Telecomm | Multiprocessor system |
US4639856A (en) * | 1983-11-04 | 1987-01-27 | International Business Machines Corporation | Dual stream processor apparatus |
US4660141A (en) * | 1983-12-06 | 1987-04-21 | Tri Sigma Corporation | Self configuring computer network with automatic bus exchange of module identification numbers and processor assigned module numbers |
US4635187A (en) * | 1983-12-19 | 1987-01-06 | At&T Bell Laboratories | Control for a multiprocessing system program process |
US4569017A (en) * | 1983-12-22 | 1986-02-04 | Gte Automatic Electric Incorporated | Duplex central processing unit synchronization circuit |
US4683531A (en) * | 1984-07-02 | 1987-07-28 | Ncr Corporation | Polling method for data processing system |
US4704680A (en) * | 1984-08-15 | 1987-11-03 | Tektronix, Inc. | Address computation system for updating starting addresses of data arrays in an array processor within an instruction cycle |
US4658351A (en) * | 1984-10-09 | 1987-04-14 | Wang Laboratories, Inc. | Task control means for a multi-tasking data processing system |
JPS61114363A (ja) * | 1984-11-07 | 1986-06-02 | Hitachi Ltd | 計算機システム間ジヨブ転送方式 |
US4674036A (en) * | 1984-11-23 | 1987-06-16 | Gte Communication Systems Corporation | Duplex controller synchronization circuit for processors which utilizes an address input |
US4642756A (en) * | 1985-03-15 | 1987-02-10 | S & H Computer Systems, Inc. | Method and apparatus for scheduling the execution of multiple processing tasks in a computer system |
US4725946A (en) * | 1985-06-27 | 1988-02-16 | Honeywell Information Systems Inc. | P and V instructions for semaphore architecture in a multiprogramming/multiprocessing environment |
-
1988
- 1988-02-29 US US07/161,768 patent/US5050070A/en not_active Expired - Lifetime
-
1989
- 1989-01-25 EP EP89101275A patent/EP0330836B1/de not_active Expired - Lifetime
- 1989-01-25 DE DE68928848T patent/DE68928848T2/de not_active Expired - Fee Related
- 1989-01-25 DE DE68921906T patent/DE68921906T2/de not_active Expired - Lifetime
- 1989-01-25 EP EP94250185A patent/EP0623875B1/de not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0330836A3 (de) | 1992-04-29 |
DE68928848T2 (de) | 1999-06-10 |
EP0623875A3 (de) | 1995-07-05 |
EP0623875A2 (de) | 1994-11-09 |
EP0623875B1 (de) | 1998-11-04 |
US5050070A (en) | 1991-09-17 |
DE68921906D1 (de) | 1995-05-04 |
DE68928848D1 (de) | 1998-12-10 |
EP0330836A2 (de) | 1989-09-06 |
EP0330836B1 (de) | 1995-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE68921906T2 (de) | Verfahren für ein Multiprozessorsystem mit sich selbst zuordnenden Prozessoren. | |
DE68925646T2 (de) | Pipeline-multiprozessorsystem | |
DE3210816C2 (de) | ||
DE69408601T2 (de) | System und Verfahren zur Emulierung von Vielfachprozess-Pipelines in einer Einprozessumgebung | |
DE69428396T2 (de) | Bildverarbeitungssystem mit Fliessbandarbeitsprinzip für Einzelanwendungsumgebung | |
DE69637020T2 (de) | Überpartitionierungssystem und-verfahren zum Erhöhen der Anzahl von Prüfpunkten in komponentenbasierten Parallelanwendungen | |
DE68926956T2 (de) | Anordnung zur teilung eines generischen kodes für ein digitales datenverarbeitungssystem | |
DE69522842T2 (de) | Gleichzeitige Verarbeitung in parallelen und fast parallelen objektorientierten Systemen | |
DE69622305T2 (de) | Verfahren und Gerät für einen optimierenden Kompiler | |
EP0689694B1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE3638572C2 (de) | ||
DE69909829T2 (de) | Vielfadenprozessor für faden-softwareanwendungen | |
DE69032418T2 (de) | Privatspeicher für Fäden in einem multifaden digitalen Datenverarbeitungssystem | |
DE3686789T2 (de) | Vektorverarbeitungsgeraet. | |
DE69130630T2 (de) | Synchrones Verfahren und Gerät für Prozessoren | |
DE69030523T2 (de) | Synchronisierung für Multiprozessorsystem | |
DE3750625T2 (de) | Datenverarbeitungssystem mit zwei Ausführungseinheiten. | |
DE69127101T2 (de) | System für verteilte mehrfachrechnerkommunikation | |
DE68921776T2 (de) | Prozessorssimulation. | |
DE2430127C2 (de) | Einrichtung zur Steuerung des Speicherzugriffs konkurrierender Benutzer | |
DE69132675T2 (de) | Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter | |
DE68921775T2 (de) | Prozessorssimulation. | |
DE69021659T2 (de) | Verfahren und Vorrichtung zur reihenweisen Parallelprogrammfehlersuche. | |
DE68927218T2 (de) | Verfahren und Vorrichtung für Zustandskode in einem Zentralprozessor | |
DE2317870C2 (de) | Schaltungsanordnung zur Steuerung der Datenübertragung zwischen dem Hauptspeicher und mindestens einem E/A-Gerät in einer digitalen Datenverarbeitungsanlage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD CO., PALO ALTO, CALIF., US |
|
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE), |
|
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE |