DE102023100874A1 - Effiziente Synchronisationsbarrieren für mehrere Vorrichtungen durch Multicasting - Google Patents

Effiziente Synchronisationsbarrieren für mehrere Vorrichtungen durch Multicasting Download PDF

Info

Publication number
DE102023100874A1
DE102023100874A1 DE102023100874.9A DE102023100874A DE102023100874A1 DE 102023100874 A1 DE102023100874 A1 DE 102023100874A1 DE 102023100874 A DE102023100874 A DE 102023100874A DE 102023100874 A1 DE102023100874 A1 DE 102023100874A1
Authority
DE
Germany
Prior art keywords
devices
notification
barrier
counters
synchronization barrier
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.)
Pending
Application number
DE102023100874.9A
Other languages
English (en)
Inventor
Glenn Alan Dearth
Mark Hummel
Daniel Joseph Lustig
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102023100874A1 publication Critical patent/DE102023100874A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Synchronisation In Digital Transmission Systems (AREA)

Abstract

In verschiedenen Beispielen kann eine einzige Benachrichtigung (z. B. eine Anforderung für einen Speicherzugriff), dass ein Verarbeitungselement (PE) eine Synchronisationsbarriere erreicht hat, an mehrere physikalische Adressen (PAs) und/oder Vorrichtungen weitergegeben werden, die mit mehreren Verarbeitungselementen verbunden sind. Auf diese Weise kann die Benachrichtigung es ermöglichen, dass eine Anzeige, dass das Verarbeitungselement die Synchronisationsbarriere erreicht hat, an mehrere Ziele umcodiert wird. Jede Benachrichtigung kann auf die PAs der einzelnen PEs und/oder Vorrichtungen einer Barrieren-Gruppe zugreifen, um einen entsprechenden Zähler zu aktualisieren. Die PEs und/oder Vorrichtungen können den Zähler abfragen oder anderweitig verwenden, um festzustellen, wann jedes PE der Gruppe die Synchronisationsbarriere erreicht hat. Wenn ein entsprechender Zähler die Synchronisation an der Synchronisationsbarriere anzeigt, kann ein PE mit der Durchführung einer Rechenaufgabe asynchron mit einer oder mehreren anderen PEs fortfahren, bis eine nachfolgende Synchronisationsbarriere erreicht werden kann.

Description

  • Hintergrund
  • Rechenprozesse können mehrere Verarbeitungselemente, wie z. B. Streaming-Multiprozessoren (SMs) oder Grafikverarbeitungseinheiten (GPUs), nutzen, um Verarbeitungsvorgänge parallel durchzuführen. Bei der parallelen Datenverarbeitung kann eine Synchronisationsbarriere verwendet werden, um die Verarbeitung zu synchronisieren, indem die Verarbeitungselemente nach Abschluss der jeweiligen Rechenaufgaben an der Synchronisationsbarriere warten, bis alle Verarbeitungselemente einen bestimmten Ausführungspunkt erreicht haben, bevor ein Verarbeitungselement den Ausführungspfad fortsetzt. Wenn alle Verarbeitungselemente die Synchronisationsbarriere erreicht haben, können die Verarbeitungselemente mit weiteren jeweiligen Rechenaufgaben fortfahren, bis eine weitere Synchronisationsbarriere erreicht oder die Verarbeitung abgeschlossen wird.
  • Bei einem herkömmlichen Ansatz zum Implementieren einer Synchronisationsbarriere werden die SMs, die an der Synchronisationsbarriere warten sollen, auf mehrere GPUs verteilt, wobei eine der GPUs zur Speicherung eines Zählers im Speicher verwendet wird. Wenn ein SM an der Synchronisationsbarriere ankommt, sendet der SM einen Lesevorgang an die GPU, die den Zähler speichert, um den Zähler zu inkrementieren. Die GPU fragt den Speicher ab, bis der Zähler anzeigt, dass alle SMs an der Synchronisationsbarriere angekommen sind. Die Vorrichtung sendet dann Schreibvorgänge, einen an jede andere GPU, die an der Synchronisationsbarriere teilnimmt, um den Wert eines Flags an der Vorrichtung zu ändern. Die anderen GPUs fragen jeweils lokal den Speicher ab, um festzustellen, ob das Flag gesetzt ist, was der GPU anzeigt, dass die Synchronisationsbarriere von jeder GPU erreicht wurde und weitere Berechnungen durchgeführt werden können. Bei diesem Ansatz kann es jedoch zu Verzögerungen kommen, nachdem die Synchronisationsbarriere von jeder GPU erreicht wurde, da die anderen GPUs darauf warten müssen, dass das Flag von der GPU, die den Zähler abfragt, gesetzt wird, bevor sie mit Rechenaufgaben fortfahren.
  • Zusammenfassung
  • Ausführungsformen der vorliegenden Offenbarung betreffen effiziente Synchronisationsbarrieren für mehrere Vorrichtungen unter Verwendung von Multicasting. Es werden Systeme und Verfahren offenbart, die Multicast-Benachrichtigungen von Verarbeitungselementen, die eine Synchronisationsbarriere erreichen, an mehrere Verarbeitungselemente ermöglichen. Offenbarte Ansätze können es den Verarbeitungselementen ermöglichen, lokal zu verfolgen und zu bestimmen, ob jedes Verarbeitungselement die Synchronisationsbarriere erreicht hat.
  • Im Gegensatz zu herkömmlichen Ansätzen, wie den oben beschriebenen, kann die Barrieren-Synchronisation Multicasting unterstützen, wobei eine einzelne Benachrichtigung (z. B. eine Anforderung für einen Speicherzugriff), dass ein Verarbeitungselement (PE) eine Synchronisationsbarriere erreicht hat, an mehrere physikalische Adressen (PAs) und/oder Vorrichtungen weitergegeben werden kann, die mit mehreren Verarbeitungselementen verbunden sind (z. B. entsprechend dem jeweiligen lokalen Speicher). Auf diese Weise kann die Benachrichtigung, dass das Verarbeitungselement die Synchronisationsbarriere erreicht hat, an mehreren Zielen aufgezeichnet werden. In mindestens einer Ausführungsform kann jede Benachrichtigung auf die PAs jeder PE und/oder jeder Vorrichtung einer Barrieren-Gruppe zugreifen, um einen entsprechenden Zähler zu aktualisieren. Die PEs und/oder Vorrichtungen können den Zähler abfragen oder anderweitig verwenden, um festzustellen, wann jedes PE der Gruppe die Synchronisationsbarriere erreicht hat. Zeigt ein entsprechender Zähler die Synchronisation an der Synchronisationsbarriere an, kann ein PE damit fortfahren, eine Rechenaufgabe asynchron mit einem oder mehreren anderen PEs durchzuführen, bis eine nachfolgende Synchronisationsbarriere erreicht werden kann.
  • Figurenliste
  • Die vorliegenden Systeme und Verfahren für effiziente Synchronisationsbarrieren für mehrere Vorrichtungen unter Verwendung von Multicasting werden im Folgenden unter Bezugnahme auf die beigefügten Zeichnungen detailliert beschrieben, wobei:
    • 1 ist ein Diagramm, das ein Beispiel für die Verwendung von Multicasting für die Barrieren-Synchronisation in einer kollaborativen Verarbeitungsumgebung gemäß einigen Ausführungsformen der vorliegenden Offenbarung zeigt;
    • 2 ist ein Diagramm, das Beispiele für Übersetzungspfade eines Speichersystems zeigt, das getrennte Speicherbereiche für Unicasting und Multicasting in einer kollaborativen Verarbeitungsumgebung implementiert, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 3 ist ein Diagramm, das Beispiele für Übersetzungspfade eines Speichersystems zeigt, das Multicasting unter Verwendung von Einschränkungen in einer kollaborativen Verarbeitungsumgebung implementiert, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 4 ist ein Flussdiagramm, das ein Verfahren zeigt, das ein Switch verwenden kann, um eine Synchronisationsbarriere zu implementieren, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 5 ist ein Flussdiagramm, das ein Verfahren zeigt, das ein Speichermanager verwenden kann, um eine Synchronisationsbarriere gemäß einigen Ausführungsformen der vorliegenden Offenbarung zu implementieren;
    • 6 ist ein Flussdiagramm, das ein Verfahren zeigt, das eine oder mehrere Vorrichtungen verwenden können, um eine Synchronisationsbarriere gemäß einigen Ausführungsformen der vorliegenden Offenbarung zu implementieren;
    • 7 ist ein Blockdiagramm einer beispielhaften Rechenvorrichtung, die zur Verwendung beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist; und
    • 8 ist ein Blockdiagramm eines beispielhaften Datenzentrums, das zur Verwendung beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist.
  • Ausführliche Beschreibung
  • Ausführungsformen der vorliegenden Offenbarung betreffen effiziente Synchronisationsbarrieren für mehrere Vorrichtungen unter Verwendung von Multicasting. Es werden Systeme und Verfahren offenbart, die Multicast-Benachrichtigungen von Verarbeitungselementen, die eine Synchronisationsbarriere erreichen, an mehrere Verarbeitungselemente ermöglichen. Offenbarte Ansätze können es den Verarbeitungselementen ermöglichen, lokal zu verfolgen und zu bestimmen, ob jedes Verarbeitungselement die Synchronisationsbarriere erreicht hat.
  • Die vorliegende Offenbarung sieht teilweise eine Barrieren-Synchronisation vor, die Multicasting unterstützen kann, wobei eine einzelne Benachrichtigung (z. B. eine Anforderung für einen Speicherzugriffsvorgang), dass ein Verarbeitungselement (PE) eine Synchronisationsbarriere (hier auch als „Barriere“ bezeichnet) erreicht hat, an mehrere physikalische Adressen (PAs) und/oder Vorrichtungen weitergegeben werden kann, die mit mehreren Verarbeitungselementen verbunden sind (z. B. entsprechend dem jeweiligen lokalen Speicher). So kann die Benachrichtigung es ermöglichen, dass eine Anzeige, dass das Verarbeitungselement die Synchronisationsbarriere erreicht hat, an mehreren Zielen aufgezeichnet wird. In mindestens einer Ausführungsform kann jede Benachrichtigung auf die PAs jeder PE und/oder jeder Vorrichtung einer Barrieren-Gruppe zugreifen, um einen entsprechenden Zähler zu aktualisieren. Die PEs und/oder Vorrichtungen können den Zähler abfragen oder anderweitig verwenden, um festzustellen, wann jedes PE der Gruppe die Synchronisationsbarriere erreicht hat. Zeigt ein entsprechender Zähler die Synchronisation an der Synchronisationsbarriere an, kann ein PE damit fortfahren, eine Rechenaufgabe asynchron mit einem oder mehreren anderen PEs durchzuführen, bis eine nachfolgende Synchronisationsbarriere erreicht werden kann.
  • Mit Bezug auf 1 ist 1 ein Diagramm, das ein Beispiel für die Verwendung von Multicasting für die Barrieren-Synchronisation in einer kollaborativen Verarbeitungsumgebung 100 gemäß einigen Ausführungsformen der vorliegenden Offenbarung zeigt.
  • Es versteht sich, dass diese und andere hier beschriebene Anordnungen nur als Beispiele zu verstehen sind. Andere Anordnungen und Elemente (z. B. Maschinen, Schnittstellen, Funktionen, Anordnungen, Gruppierungen von Funktionen usw.) können zusätzlich zu den gezeigten oder anstelle von ihnen verwendet werden, und einige Elemente können ganz weggelassen werden. Außerdem sind viele der hier beschriebenen Elemente funktionale Einheiten, die als einzelne oder verteilte Komponenten oder in Verbindung mit anderen Komponenten und in jeder geeigneten Kombination und an jedem geeigneten Ort implementiert werden können. Verschiedene hier beschriebene Funktionen, die von Einheiten ausgeführt werden, können von Hardware, Firmware und/oder Software ausgeführt werden. Beispielsweise können verschiedene Funktionen von einem Prozessor ausgeführt werden, der im Speicher gespeicherte Anweisungen ausführt. In einigen Ausführungsformen können die hier beschriebenen Systeme, Verfahren und Prozesse unter Verwendung ähnlicher Komponenten, Merkmale und/oder Funktionen wie die einer beliebigen Anzahl von Instanzen des Beispiel-Computergeräts 700 von 7 und/oder des Beispiel-Datenzentrums 800 von 8 ausgeführt werden.
  • Die kollaborative Verarbeitungsumgebung 100 kann eine oder mehrere Vorrichtungen umfassen, wie z. B. die Vorrichtungen 102A, 102B und 102C, bis Vorrichtung 102N (hier auch als „Vorrichtungen 102“ bezeichnet). Die kollaborative Verarbeitungsumgebung 100 kann auch einen oder mehrere Switches, wie z. B. einen Switch 104, enthalten. Die kollaborative Verarbeitungsumgebung 100 kann ferner ein oder mehrere Verarbeitungselemente umfassen, wie die Verarbeitungselemente 106A, 106B und 106C bis 106N (im Folgenden auch als „Verarbeitungselemente 106“ bezeichnet). Die kollaborative Verarbeitungsumgebung 100 kann ferner einen oder mehrere Speichermanager enthalten, wie z. B. die Speichermanager 108A, 108B und 108C bis 108N (im Folgenden auch als „Speichermanager 108“ bezeichnet). Außerdem kann die kollaborative Verarbeitungsumgebung 100 einen oder mehrere Speicher enthalten, z. B. die Speicher 110A, 110B und 110C bis 110N (im Folgenden auch als „Speicher 110“ bezeichnet).
  • Beispielhaft und nicht einschränkend enthält die Vorrichtung(en) 102A das Verarbeitungselement(e) 106A, den Speichermanager 108A und den Speicher 110A, die Vorrichtung(en) 102B enthält das Verarbeitungselement(e) 106B, den Speichermanager 108B und den Speicher 110B, die Vorrichtung(en) 102C enthält das Verarbeitungselement(e) 106C, den Speichermanager 108C und den Speicher 110C, und die Vorrichtung(en) 102N enthält das Verarbeitungselement(e) 106N, den Speichermanager 108N und den Speicher 110N. Obwohl in jeder Vorrichtung 102 ein einzelnes Verarbeitungselement 106 dargestellt ist, kann eine Vorrichtung 102 eine beliebige Anzahl von Verarbeitungselementen 106 enthalten, beispielsweise zehn bis hundert oder mehr. Andere in den Vorrichtungen 102 enthaltene Vorrichtungen können, sofern vorhanden, ähnliche entsprechende Komponenten enthalten.
  • Beispiele für eine Vorrichtung 102 sind eine GPU, eine CPU, eine Logikeinheit (z. B. die Logikeinheit 720), ein integrierter Schaltkreis und/oder eine Kombination aus einem oder mehreren davon. Der Switch 104 kann im Allgemeinen einer kohärenten Struktur entsprechen, die die Vorrichtungen 102, die Verarbeitungselemente 106, die Speichermanager 108 und/oder die Speicher 110 miteinander verbindet. In Ausführungsformen kann der Switch 104 eine parallele oder anderweitig koordinierte Verarbeitung zwischen den Vorrichtungen 102 und/oder den Verarbeitungselementen 106 ermöglichen. In mindestens einer Ausführungsform stellt der Switch 104 eine direkte Vorrichtung-zu-Vorrichtung-Verbindung oder ein Netzwerk zwischen den Vorrichtungen 102 bereit. Der Switch 104 kann es ermöglichen, dass Übertragungen von einer beliebigen Anzahl von Vorrichtungen 102 und/oder deren Komponenten an jedes der anderen Vorrichtungen 102 weitergeleitet werden.
  • Obwohl der Switch 104 als extern zu den Vorrichtungen 102 dargestellt ist (z. B. auf einer separaten Vorrichtung oder einem integrierten Schaltkreis), können in mindestens einer Ausführungsform ein oder mehrere Teile des Switches 104 und/oder dessen Funktionalität in eine oder mehrere der Vorrichtungen 102 integriert sein. Obwohl nur ein Switch 104 gezeigt wird, kann der Switch 104 eine beliebige Anzahl von Switches darstellen, die die Vorrichtungen 102 in einer beliebigen geeigneten Topologie verbinden. Wenn mehrere Switches vorhanden sind, können verschiedene Switches verschiedene Multicast- und/oder Barrieren-Gruppen von Vorrichtungen 102 bilden, wie hier beschrieben. Multicast- und/oder Barrieren-Gruppen können hierarchische Beziehungen aufweisen, wobei eine Barriere einer Untergruppe zu einer Gruppe als eine Barriere einer einzelnen Vorrichtung oder Knotens innerhalb der Gruppe behandelt werden kann.
  • Beispiele für die Verarbeitungselemente 106 sind ein oder mehrere Streaming-Multiprozessoren (SMs), SIMD-Einheiten (Single Instruction, Multiple Data), Kerne wie CPU-Kerne, Multithreading-Verarbeitungseinheiten, Parallelverarbeitungseinheiten, Threads, Thread-Gruppen usw. In mindestens einer Ausführungsform kann ein Verarbeitungselement 106 so konfiguriert sein, dass es einen oder mehrere Thread-Blöcke und/oder Thread-Gruppen parallel ausführt.
  • In einer oder mehreren Ausführungsformen verfügt jede Vorrichtung 102 über einen eigenen Speicher 110 (physikalischer Speicher, z. B. Direktzugriffsspeicher), der über ein eigenes Speichersystem und einen eigenen Speicherbus realisiert werden kann. Die Speichermanager 108 und/oder Switch 104 können verwendet werden, um die Speicherbusse effektiv auf eine oder mehrere andere Vorrichtungen 102 zu erweitern. In anderen Beispielen können eine oder mehrere der Vorrichtungen 102 zumindest einen Teil des Speichers 110, des Speichersystems und/oder des Speicherbusses gemeinsam nutzen. Wie dargestellt, können die Speicher 110 zum Speichern von Zählern 102A, 102B und 102C bis 102N (hier auch als „Zähler 120“ bezeichnet) verwendet werden, die von entsprechenden Verarbeitungselementen 106 und/oder Vorrichtungen 102 verwendet werden können, um zu verfolgen oder zu bestimmen, wie viele der Verarbeitungselemente 106 eine Barriere erreicht haben.
  • Zu den Speichermanagern 108 gehören beispielsweise ein oder mehrere Speichercontroller, wie ein Speicherchipcontroller (MCC), eine Speichercontrollereinheit (MCU) und/oder eine Speichermanagereinheit (MMU), wie eine GPU-MMU (GMMU), eine ausgelagerte MMU (PMMU) usw.
  • Eines oder mehrere der Verarbeitungselemente 106, der Vorrichtungen 102 und/oder ihrer Threads können die kollaborative Verarbeitungsumgebung 100 nutzen, um eine synchronisierte Verarbeitung durchzuführen, die parallele Verarbeitungsoperationen umfassen kann. Beispielsweise kann jede Kombination der Komponenten Mitglied oder Knoten einer Barrieren-Gruppe sein, die eine oder mehrere Barrieren nutzt, um die Verarbeitung zu synchronisieren. 1 zeigt ein Beispiel, bei dem die Verarbeitungselemente 106A, 106B, 106C und 106N Mitglieder oder Knoten einer Barrieren-Gruppe sind, obwohl eine Barrieren-Gruppe in anderen Beispielen anders konfiguriert sein kann, z. B. durch Einbeziehung von mehr oder weniger Verarbeitungselementen 106. Auch wenn ein Verarbeitungselement 106 als Mitglied einer Barrieren-Gruppe bezeichnet werden kann, müssen nicht alle dem Verarbeitungselement 106 entsprechenden Threads Mitglied der Barrieren-Gruppe sein.
  • Die Barrieren-Gruppe kann eine Barriere verwenden, um die Verarbeitungselemente 106 in die Lage zu versetzen, nach Abschluss der jeweiligen Rechenaufgaben an der Barriere zu warten, bis alle Mitglieder einen bestimmten Ausführungspunkt erreicht haben, bevor ein Mitglied einen Ausführungspfad weitergeht. Wenn alle Mitglieder die Barriere erreicht haben, können die Mitglieder mit weiteren jeweiligen Rechenaufgaben fortfahren, sofern diese verfügbar sind. Dieser Prozess kann fortgesetzt werden, wenn weitere Barrieren für die Barrieren-Gruppe vorhanden sind. Darüber hinaus kann eines oder mehrere der Verarbeitungselemente 106 Mitglied mehrerer Barrieren-Gruppen sein, die unterschiedliche Mitglieder umfassen können. In einigen Beispielen kann derselbe Ausführungspfad für ein Verarbeitungselement 106 (und/oder einen Thread) mehrere Barrieren für verschiedene Barrieren-Gruppen enthalten.
  • Offenbarte Ansätze können für alle geeigneten Rechenaufgaben verwendet werden, die eine Barriere nutzen können. Als Beispiel und ohne Einschränkung können die Verarbeitungselemente 106 jeweils eine Rechenaufgabe ausführen und Informationen untereinander austauschen. Dieser Prozess kann beliebig oft wiederholt werden. Jedes Mal kann eine Barriere verwendet werden, so dass die Verarbeitungselemente synchronisiert werden können, wenn die Informationen gemeinsam genutzt werden (z. B. liest jedes Verarbeitungselement die Werte des anderen oder legt sie an einem zentralen Ort ab). Ohne die Barriere könnten beispielsweise ein oder mehrere Puffer von einem oder mehreren Verarbeitungselementen 106 überschrieben werden, während sie noch in Gebrauch sind, oder ein oder mehrere Verarbeitungselemente 106 könnten einen Puffer eines anderen Verarbeitungselements 106 verarbeiten, bevor der Puffer einen aktualisierten Wert enthält.
  • In mindestens einer Ausführungsform können die Verarbeitungselemente 106 einer Barrieren-Gruppe vor der Ankunft an einer entsprechenden Barriere initialisiert werden. Beispielsweise können auf den Verarbeitungselementen 106 ein oder mehrere Prozesse laufen, die auf den Vorrichtungen 102 (z. B. auf einem oder mehreren Threads davon) eine oder mehrere Anwendungen ausführen. Ein oder mehrere Teile der Initialisierung können beim oder als Reaktion auf den Start von mindestens einem der Prozesse und/oder Anwendungen erfolgen (z. B. mit den Ausführungspfaden, die eine oder mehrere Barrieren implementieren). Beispielsweise können ein oder mehrere Teile der Initialisierung als Reaktion auf und/oder als Teil des Starts eines Programms (z. B. eines Multiprozessorprogramms) erfolgen, das unter Verwendung der Verarbeitungselemente 106 ausgeführt wird. In einer oder mehreren Ausführungsformen können ein oder mehrere Teile der für die Initialisierung verwendeten Informationen an den Kernel weitergegeben werden, der gestartet wird (z. B. damit sie verfügbar sind, wenn der Prozess startet). Zusätzlich oder alternativ können ein oder mehrere Teile der Initialisierung als Reaktion auf und/oder als Teil der Erstellung einer Thread-Gruppe nach dem Start des Programms erfolgen. Beispielsweise können die Verarbeitungselemente 106 während der Laufzeit die Erstellung einer Thread-Gruppe koordinieren, so dass die Schwellengruppe in der Software erstellt wird und die für die Initialisierung verwendeten Informationen den Verarbeitungselementen 106 zur Implementierung der Barriere zur Verfügung gestellt werden.
  • Die Initialisierung kann beispielsweise das Aufzeichnen, Bereitstellen oder anderweitige Verfügbarmachen der zum Implementieren einer oder mehrerer Barrieren verwendeten Informationen umfassen. Zu den nicht einschränkenden Beispielen gehören Daten, die eine Menge der Vorrichtungen 102 und/oder der Verarbeitungselemente 106 angeben, die an einer Barriere und/oder Barrieren-Gruppe (die mehreren Barrieren entsprechen kann) teilnehmen, Daten, die Werte initialisieren oder anderweitig definieren, die in den Zählern 120 gespeichert sind, Daten, die Werte initialisieren oder anderweitig definieren, die zum Inkrementieren der Zähler 120 verwendet werden, Daten, die Werte initialisieren oder anderweitig definieren, die verwendet werden, um zu bestimmen, ob eine Barriere von jedem Mitglied der Barrieren-Gruppe erreicht wurde, und/oder Daten, die eine Multicast-Gruppe für eine Barrieren-Gruppe initialisieren, zuweisen oder anderweitig definieren, Speicher für PAs, die für die Zähler 120 verwendet werden, Zuordnungen zwischen VAs und PAs, usw.
  • In einer oder mehreren Ausführungsformen kann jedes Verarbeitungselement 106 (z. B. ein SM) einer Barrieren-Gruppe, wenn es eine Barriere der Barrieren-Gruppe erreicht, eine Benachrichtigung oder eine andere Anzeige an jedes andere Verarbeitungselement 106, die entsprechende Vorrichtung 102 oder den Speicher 110 und/oder ein anderes Ziel der Barrieren-Gruppe bereitstellen. Beispielsweise kann das Verarbeitungselement 106 mindestens basierend auf dem Abschluss einer Rechenaufgabe, die der Barriere entspricht, eine Benachrichtigung an den/die Switch 104 senden. Der Switch 104 kann dann die Benachrichtigung an alle mit der Barrieren-Gruppe verbundenen Ziele unter Verwendung von Multicasting weiterleiten oder anderweitig bereitstellen, wodurch ein dem Ziel entsprechender Zähler 120 inkrementiert wird. In einer oder mehreren Ausführungsformen kann die Benachrichtigung eine Anzeige der Ziele enthalten, den der Switch 104 verwenden kann, um die Ziele zu bestimmen oder die Benachrichtigung anderweitig an die Ziele weiterzuleiten oder bereitzustellen. So kann eine einzige Benachrichtigung dazu führen, dass alle Zähler 120 inkrementiert werden. Der Zeitpunkt, zu dem die Zähler 120 erhöht werden, kann jedoch aufgrund von Unterschieden in der Latenz und Bandbreite zwischen den Verbindungen variieren.
  • 1 zeigt Beispiele von Benachrichtigungen 130A, 130B und 130C bis 130N (hier auch als „Benachrichtigungen 130“ bezeichnet), die von den Mitgliedern der Barrieren-Gruppe bereitgestellt werden können. Beispielsweise kann das Verarbeitungselement 106A die Benachrichtigung 130A, das Verarbeitungselement 106B die Benachrichtigung 130B, das Verarbeitungselement 106C die Benachrichtigung 130C und das Verarbeitungselement 106N die Benachrichtigung 130N bereitstellen.
  • In mindestens einer Ausführungsform kann eine Benachrichtigung eine Aufforderung zur Anforderung einer oder mehrerer Speicherzugriffsoperationen enthalten. Beispiele für Anforderungen (Speicherzugriffsanforderungen) für Speicherzugriffsoperationen umfassen solche für Lade-, Speicher-, Reduktions- und/oder Atomoperationen, die an das Speichersystem gesendet werden können, wobei das Speichersystem optional einen oder mehrere Werte als Antwort (z. B. an den Anforderer) zurückgibt. Die 2 und 3 dienen als nicht einschränkende Beispiele dafür, wie Anforderungen in einer oder mehreren Ausführungsformen implementiert werden können. Es können jedoch auch andere Ansätze verwendet werden.
  • In einer oder mehreren Ausführungsformen kann jede Benachrichtigung eine Anforderung für eine oder mehrere Speicherzugriffsoperationen auslösen und/oder enthalten. Die Speicherzugriffsoperationen können z. B. atomare Operationen sein, so dass sie nicht unterbrochen werden können. In mindestens einer Ausführungsform kann jede Benachrichtigung einer oder mehreren Reduktionsoperationen (einschließlich Lesen, Ändern und Schreiben) entsprechen, wie z. B. einer atomaren Reduktions-Additionsoperation. Zum Beispiel kann ein Verarbeitungselement 106 eine atomare Reduktions-Additionsoperation (z. B. eine Reduktions-Multicast-Operation) an den Switch 104 senden. Der Switch 104 kann Multicasting verwenden, um die Operation an alle Ziele weiterzuleiten, wobei eine atomare Operation an jeder physikalischen Adresse einer Multicast-Gruppe durchgeführt werden kann, ohne eine Antwort zurückzugeben. Beispielsweise kann eine Operation an einer physikalischen Adresse einen oder mehrere Werte (die in der Anforderung enthalten sein können) enthalten oder anzeigen, die zu einem oder mehreren Werten hinzugefügt werden, die an der/den physikalischen Adresse(n), die dem Zähler 120 entsprechen, gespeichert sind. Bei einer verteilten Multicast-Hierarchie kann der Switch 104 auf jeder Stufe Antworten sammeln.
  • Wenn ein Zähler 120, der von einem Verarbeitungselement 106 verwendet wird, als Reaktion auf Benachrichtigungen von jedem Teilnehmer an einer Barriere inkrementiert worden ist, was die Ankunft jedes Teilnehmers an der Barriere anzeigt, kann das Verarbeitungselement 106 nach der Barriere fortfahren, was das Durchführen einer zusätzlichen Rechenaufgabe beinhalten kann. Wenn es beispielsweise in 1 vier Teilnehmer gibt, kann der Zähler 120A jedes Mal, wenn die Benachrichtigung 130 vom Switch 104 empfangen wird, um 1 erhöht werden. Unter der Annahme, dass der Zähler 120A bei 0 begonnen hat, kann der Zähler 120A mit einem Wert von mindestens 4 anzeigen, dass alle Benachrichtigungen 130A, 130B, 130C und 130N empfangen und verwendet worden sind, um den Zähler 120A zu inkrementieren.
  • Folglich kann der Zähler 120A verwendet werden, um festzustellen, ob alle Teilnehmer die Barriere erreicht haben und das dem Zähler 120A entsprechende Verarbeitungselement 106A nach der Barriere fortfahren kann. Die Zähler 120B, 120C und 120N können in ähnlicher Weise von den Verarbeitungselementen 106B, 106C und 106N verwendet werden, um zu bestimmen, ob sie nach der Barriere fortfahren. Auch wenn als Beispiel die Addition angeführt wurde, kann ein Zähler 120 auf jede geeignete Weise inkrementiert werden, um die Ankunft an einer Barriere anzuzeigen (z. B. Multiplikation, Subtraktion, Division usw.).
  • In einer oder mehreren Ausführungsformen kann die Vorrichtung 102 und/oder der Speichermanager 108, der mit einem Verarbeitungselement 106 verbunden ist (z. B. lokal), den Zähler 120 (z. B. eine lokale Kopie) im Speicher 110 abfragen 140 oder anderweitig überwachen, um festzustellen, ob der darin gespeicherte Wert(e) anzeigt, dass das Verarbeitungselement 106 nach der Barriere fortfahren kann (anzeigt, dass alle Teilnehmer die Barriere zumindest erreicht haben). In mindestens einer Ausführungsform kann die lokale Abfrage zumindest basierend darauf beginnen, das Verarbeitungselement 106 die Benachrichtigung 130 bereitstellt. In mindestens einer Ausführungsform kann die lokale Abfrage zumindest basierend darauf enden, dass die Vorrichtung 102 feststellt, dass das Verarbeitungselement 106 nach der Barriere fortfahren kann. In dem Beispiel, in dem für jede Benachrichtigung 130 1 zum Zähler 120 addiert wird, kann die Vorrichtung 102 feststellen, dass das Verarbeitungselement 106 nach der Barriere fortfahren kann, zumindest basierend auf der Feststellung, dass der im Zähler 120 gespeicherte Wert größer oder gleich 4 ist.
  • Wie hier beschrieben, kann der Zeitpunkt, zu dem die Zähler 120 inkrementiert werden, aufgrund von Unterschieden in der Latenzzeit und Bandbreite zwischen den Verbindungen für verschiedene Ziele variieren. Dies kann dazu führen, dass unterschiedliche Zähler 120 zu unterschiedlichen Zeiten anzeigen, dass alle Teilnehmer die Barriere erreicht haben. Durch die Überwachung einzelner Zähler 120 für die Verarbeitungselemente 106 können verschiedene Verarbeitungselemente 106 nach der Barriere zu unterschiedlichen Zeiten fortfahren, ohne auf eine Anzeige von einem anderen Vorrichtung 102 und/oder anderen potentiellen Verzögerungsquellen warten zu müssen.
  • In einer oder mehreren Ausführungsformen kann eine Barrieren-Gruppe an einer Folge von Barrieren teilnehmen. Anstatt die Zähler 120 für jede Barriere zurückzusetzen, kann jede Barriere einer jeweiligen Epoche entsprechen, wobei ein entsprechender Epochenwert verwendet wird, um festzustellen, ob jeder Teilnehmer die Barriere für diese Epoche erreicht hat. In einer oder mehreren Ausführungsformen kann der Epochenwert einem Vielfachen der Anzahl der Teilnehmer an der Barriere entsprechen. In Fortsetzung des Beispiels, bei dem ein Wert von mindestens 4 anzeigt, dass alle 4 Teilnehmer an der Barriere angekommen sind, kann ein nächster Epochenwert 8 sein, gefolgt von 12, gefolgt von 16 usw. Wenn einem Verarbeitungselement 106 erlaubt wird, nach einer bestimmte Epoche fortzufahren, wenn ein Zähler 120 größer oder gleich dem entsprechenden Epochenwert ist, können andere Verarbeitungselemente 106 Aufgaben für eine nachfolgende Barriere abschließen und entsprechende Benachrichtigungen senden, selbst wenn das Verarbeitungselement 106 noch nicht überprüft hat, ob alle Verarbeitungselemente 106 an der vorherigen Barriere angekommen sind.
  • In mindestens einer Ausführungsform unterhält jede an einer Barriere beteiligte Vorrichtung 102 einen Zähler (z. B. einen 64-Bit-Zähler) für jeden Bereich des Speichers 110, der Ziel einer Gewebe-Barrieren-Synchronisation ist. Jede Vorrichtung 102 kann auch lokal einen Wert für die nächste Epoche speichern (der ein Vielfaches der Anzahl der Teilnehmer sein kann). Die Verwendung eines 64-Bit-Zählers 120 kann es der Software ermöglichen, einen Zählerumbruch effektiv zu ignorieren. Es gibt jedoch viele verschiedene Ansätze für die Handhabung eines Zählerumlaufs bei den Zählern 120. So kann beispielsweise ein langsamerer Synchronisationsprozess mit der Softwarebarriere durchgeführt werden, bevor ein Umlauf stattfindet. Außerdem können die Zähler 120 so viele Epochen speichern, dass ein Umlauf effektiv vernachlässigt werden kann. In einer oder mehreren Ausführungsformen können die Zähler 120 für Grenzwertprüfungen analysiert werden. Wenn ein Zähler 120 einen bestimmten Wert überschreitet, kann ein langsamerer Zähler verwendet werden, der auch die Zähler 120 löscht (z. B. um wieder bei 0 zu beginnen). In mindestens einer Ausführungsform kann ein oberstes Bit der Zähler 120 für einen Überlauf reserviert werden. Die Vorrichtung 102 kann erkennen, wenn dieses Bit gesetzt wird, und eine Maßnahme ergreifen. In einer oder mehreren Ausführungsformen kann die Behandlung des Überlaufs in eine atomare Operation integriert werden, die zur Inkrementierung der Zähler 120 durchgeführt wird. Beispielsweise könnte die atomare Operation die Inkrementierung durchführen und eine Umlauf-Bedingung erkennen, um eine oder mehrere Umlauf-Behandlungsoperationen auszulösen (z. B. Setzen des Zählers 120 auf einen anderen Wert). Eine Antwort kann gegeben werden, wenn eine Umlaufbedingung erkannt wird, um eine Abfrage nach einem anderen Wert zu veranlassen.
  • In mindestens einer Ausführungsform kann ein Speichermanager 108 verwendet werden, um eine Benachrichtigung von einem entsprechenden Verarbeitungselement 106 bereitzustellen, was beinhalten kann, dass der Speichermanager 108 einen oder mehrere Teile der Adressübersetzung durchführt. Beispielsweise kann jeder Speichermanager 108 eine Anforderung von seinem entsprechenden Verarbeitungselement 106 empfangen, die eine oder mehrere VAs angibt, und Daten, die der einen oder den mehreren VAs und/oder der Anforderung entsprechen, dem Switch 104 zur weiteren Verarbeitung bereitstellen, was eine anfängliche oder weitere Adressübersetzung umfassen kann. Beispiele für Anforderungen (Speicherzugriffsanforderungen) für Speicherzugriffsoperationen umfassen solche für Laden, Speichern und/oder Atomisierung, die an das Speichersystem gesendet werden können, wobei das Speichersystem optional einen oder mehrere Werte als Antwort zurückgibt.
  • In mindestens einer Ausführungsform können die prozessspezifischen VAs in PAs und/oder Zwischenadressen übersetzt werden. Außerdem kann ein Speichermanager 108 zumindest einen Teil der Adressübersetzung vornehmen. Beispielsweise kann jeder Speichermanager 108 eine VA in eine Zwischenadresse übersetzen (z. B. eine lineare Adresse eines globalen virtuellen Adressraums, in den verschiedene Verarbeitungsknoten oder -elemente einen oder mehrere Bereiche des lokalen physikalischen Speichers eindeutig zuordnen können), die für die weitere Übersetzung in einen oder mehrere PAs verwendet werden kann. In verschiedenen Ausführungsformen kann ein Switch 104 beispielsweise einen oder mehrere PAs (z. B. in einer Anforderung) empfangen, die von einem VA übersetzt wurden (z. B. übersetzt von einem Speichermanager 108, der den einen oder die mehreren PAs bereitstellt), oder er kann eine Zwischenadresse empfangen (z. B. übersetzt von einem Speichermanager 108, der die Zwischenadresse bereitstellt), die an ein oder mehrere entsprechende Vorrichtungen 102 zur weiteren Übersetzung weitergeleitet werden kann. In einer oder mehreren Ausführungsformen kann ein Translation-Lookaside-Buffer (TLB), z. B. ein Link-TLB, verwendet werden, um die Zwischenadresse in einen PA zu übersetzen. Beispielsweise kann der Switch 104 die Zwischenadresse an eine oder mehrere der Vorrichtungen 102 zur Übersetzung in einen entsprechenden PA unter Verwendung eines entsprechenden TLB der Vorrichtung 102 weiterleiten.
  • 2 ist ein Diagramm, das Beispiele für Übersetzungspfade eines Speichersystems veranschaulicht, das getrennte Speicherbereiche für Unicasting und Multicasting in der kollaborativen Verarbeitungsumgebung 100 implementiert, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. In mindestens einer Ausführungsform kann der Speichermanager 108 eine VA in eine PA für Unicast-Speicherzugriff übersetzen (z. B. unter Verwendung des VA 216A) und eine VA in eine Zwischenadresse für Multicast-Speicherzugriff übersetzen (z. B. unter Verwendung des VA 218). Während in einigen Beispielen ein Switch 104 keine Adressübersetzung durchführt, kann in anderen Beispielen ein Switch 104 zumindest einen Teil der Adressübersetzung durchführen. Beispielsweise kann ein Switch 104 eine VA (z. B. in einer Anforderung) empfangen und die VA in mehrere PAs übersetzen, oder er kann eine Zwischenadresse (z. B. von einem Speichermanager 108) empfangen und die Zwischenadresse in mehrere PAs übersetzen.
  • Wie in 2 angezeigt, kann ein Verarbeitungselement 106 in einer oder mehreren Ausführungsformen eine VA verwenden, der für den Speicherzugriff in sein eigenes PA oder ein PA einer anderen Vorrichtung 102 übersetzt wird. 2 zeigt zum Beispiel, dass das Verarbeitungselement 106A eine Anforderung bereitstellen kann, die eine VA 216A angibt, der auf eine PA 220A des Verarbeitungselements 106A zeigt. 2 zeigt auch, dass das Verarbeitungselement 106A eine Anforderung bereitstellen kann, die eine VA 216B angibt, der auf eine PA 220N des Verarbeitungselements 106N zeigt. Ferner kann das Verarbeitungselement 106N eine Anforderung bereitstellen, die die VA 216B angibt, die auf die PA 220N des Verarbeitungselements 106N verweist. Somit kann der gleiche VA von beiden Vorrichtungen 102 bereitgestellt werden, um auf dieselbe PA zuzugreifen. Beispielsweise können die Anfragen von einem oder mehreren Prozessen gestellt werden, die auf den Vorrichtungen 102A und 102N laufen (z. B. ein oder mehrere Threads) und eine oder mehrere Anwendungen ausführen, während sie sich den Speicherplatz teilen.
  • Die VAs 216A und 216B sind Beispiele für Unicast-VAs. Der Empfang eines Unicast-VA in einer Anforderung kann dem Speichersystem anzeigen, dass die Anforderung eine Unicast-Speicheroperation betrifft, bei der die VA in eine einzelne PA und einen entsprechenden Speicherzugriff übersetzt wird. Das Speichersystem kann auch Multicast-VAs unterstützen. Der Empfang einer Multicast-VA in einer Anforderung (z. B. entsprechend einer Benachrichtigung über das Erreichen einer Barriere) kann dem Speichersystem anzeigen, dass die Anforderung für eine Multicast-Speicheroperation bestimmt ist, bei der die VA in mehrere PAs und entsprechende Speicherzugriffe übersetzt wird. Beispielsweise kann ein Speichermanager 108 konfiguriert sein, die VA zu verwenden, um zu bestimmen, ob die VA in eine PA oder eine Zwischenadresse übersetzt werden soll, wobei eine Zwischenadresse Multicasting an einen Switch 104 und eine PA Unicasting an den Switch 104 anzeigen kann. Beispielsweise zeigt 2, dass das Verarbeitungselement 106A oder das Verarbeitungselement 106N eine Anforderung bereitstellen kann, die eine VA 218 angibt, die auf die PA 220A des Verarbeitungselements 106A und die PA 220N des Verarbeitungselements 106N zeigt. Somit kann dieselbe VA von beiden Vorrichtungen 102 bereitgestellt werden, um auf dieselben PAs zuzugreifen.
  • So können gemäß einer oder mehreren Ausführungsformen der Multicast-Speicherzugriff und der Unicast-Speicherzugriff auf unterschiedliche VA-Bereiche abgebildet werden. In mindestens einer Ausführungsform kann ein Prozess mindestens einen Teil der Zuordnung vornehmen. Als Beispiel und ohne Einschränkung kann der Prozess Speicher für die VA 216A und 216B unter Verwendung eines Zuweisungsbefehls (z. B. eines API-Aufrufs) zuweisen, beispielsweise in der Form: VA 216A, VA 216B = Malloc(), der, wenn er ausgeführt wird, PAs für jeden angegebenen VA zuweisen kann, wobei die VAs als Unicast-VAs im Speichersystem konfiguriert werden.
  • Um beispielsweise eine oder mehrere VAs im Speichersystem als Multicast-VAs zu konfigurieren, kann der Prozess unter Verwendung einer Zuordnungsanweisung (z. B. eines API-Aufrufs) Speicher für den VA 218 (und/oder andere VAs) zuweisen, z. B. in folgender Form: VA 218 = CreateMulticastAlias(VA 216A, VA 216B). Diese Zuordnungsanweisung kann eine oder mehrere VAs angeben, die als Multicast-VAs konfiguriert werden sollen (z. B. VA 218), sowie einen oder mehrere VAs (z. B. VA 216A und VA 216B), für die entsprechende PAs auf den/die angegebenen VA(s) abgebildet werden sollen. In diesem Beispiel kann der Speicher für die VA 216A und die VA 216B vor dem Zuordnungsbefehl zugewiesen werden. In anderen Beispielen kann durch die Ausführung des Zuordnungsbefehls Speicher für eine oder mehrere VAs und/oder PAs zugewiesen werden, die auf die Multicast-VA(s) abgebildet werden sollen. Darüber hinaus werden im vorliegenden Beispiel die PAs, die dem Multicast-VA zugeordnet sind (z. B. der VA 218, der den PAs 220A und 220N zugeordnet ist), auch Unicast-VAs zugeordnet (z. B. dem VA 216A und dem VA 216B), was in einigen Ausführungsformen nicht der Fall sein muss.
  • Da die VAs angeben, ob ein Befehl als Multicast-Speicherzugriff oder als Unicast-Speicherzugriff verarbeitet werden soll, können Multicast-Speicherzugriffe in das Speichersystem aufgenommen werden, wobei die Unicast-Syntax beibehalten wird. Zusätzlich oder alternativ können unterschiedliche Multicast- und Unicast-Befehle (und/oder Operanden oder Parameter desselben Befehls) bereitgestellt werden, um anzuzeigen, ob der Befehl mittels Multicasting oder Unicasting verarbeitet werden soll. In solchen Beispielen sind separate Unicast- und Multicast-VA-Räume möglicherweise nicht erforderlich (können aber dennoch verwendet werden). Beispielsweise kann ein Speichermanager 108 und/oder der Switch 104 eine Anweisung empfangen und unterschiedliche Adressen erzeugen (z. B. eine PA oder eine Zwischenadresse) und/oder bestimmen, welche Vorrichtung oder welche Vorrichtungen 102 die der Anforderung entsprechenden Daten bereitstellen soll(en), je nachdem, ob es sich bei der Anweisung um eine Multicast-Anweisung oder eine Unicast-Anweisung handelt.
  • In einer oder mehreren Ausführungsformen können bei der Ausführung einer Multicast-Operation Werte aus einem Speicher 110 an den Switch 104 und/oder ein oder mehrere Werte an eine oder mehrere Vorrichtungen 102 in der Multicast-Gruppe (die einer Barrieren-Gruppe entsprechen kann) geliefert werden. So kann beispielsweise ein Wert von einer Vorrichtung 102, das eine Anfrage initiiert hat, einem entsprechenden Verarbeitungselement 106A über einen internen Pfad der Vorrichtung 102 bereitgestellt werden, während Werte von anderen Vorrichtungen 102 über einen Switch 104 bereitgestellt werden können. In mindestens einer Ausführungsform kann die Software, z. B. ein Prozess oder eine Anwendung, angeben, ob der interne Pfad verwendet werden soll (z. B. in der Anforderung oder Anweisung). In mindestens einer Ausführungsform kann ein interner Pfad in einem Vorrichtung 102 eine geringere Latenz und Bandbreite aufweisen als eine Verbindung, die die Vorrichtung 102 verlässt. So kann eine Anforderung vom Verarbeitungselement 106A der Vorrichtung 102A den Speicher 110A schneller erreichen, als wenn die Anforderung an den Switch 104 gesendet und dann an die Vorrichtung 102A zurückgesendet würde. Bei einigen Softwareprotokollen kann es jedoch wünschenswert sein, die Anforderung zurück zu spiegeln, damit alle Vorrichtungen 102 bei der Verarbeitung der Anforderung gleichbehandelt werden, wie in 1. Während in 1 gezeigt wird, wie die Benachrichtigungen 130 an die Vorrichtung 102 zurückgespiegelt werden, kann die Vorrichtung 102, die die Anfrage stellt, zusätzlich oder alternativ den internen Pfad der Vorrichtung 102 zur Verarbeitung der Benachrichtigung 130 verwenden (der möglicherweise nicht durch den Switch 104 führt).
  • Nachfolgend werden nicht einschränkende Beispiele für Multicasting-Operationen aufgeführt, die in einer oder mehreren Ausführungsformen für Benachrichtigungen verwendet werden können. Eine reduzierende Ladeoperation kann Multicasting an einen oder mehrere Knoten einer Multicast-Gruppe umfassen, was zu N Antworten (z. B. geladene Werte) führt, die Durchführung einer oder mehrerer Aggregationen der N Antworten, um aggregierte Daten zu erzeugen, und die anschließende Bereitstellung der aggregierten Daten an mindestens einen Knoten der Multicast-Gruppe. Beispielsweise können die N Antworten zu einem Wert kombiniert werden, der dem anfordernden Verarbeitungselement 106 und/oder dem Prozess zur Verfügung gestellt werden kann. Zur Kombination der Antworten können verschiedene Ansätze verwendet werden, z. B. eine Summe, ein Durchschnittswert, ein Mindestwert, ein Höchstwert, ein Ergebnis einer BITAND-, einer BITOR- oder einer anderen bitweisen Operation usw. In verschiedenen Beispielen kann das Kombinieren der Antworten die Auswahl einer Teilmenge einer oder mehrerer Antworten und/oder die Erzeugung eines statistischen Wertes umfassen, der mindestens einer der Antworten entspricht.
  • In mindestens einer Ausführungsform kann der Switch 104 die N Antworten empfangen und die aggregierten Daten erzeugen, indem er einen oder mehrere Teile der Kombination ausführt. In einer oder mehreren Ausführungsformen kann die Reduzierung oder Kombination jedoch zumindest teilweise auf einer oder mehreren der Vorrichtungen 102 erfolgen, wie z. B. der anfordernden Vorrichtung 102 und/oder einer oder mehreren Vorrichtungen 102, die eine Antwort auf die Anforderung empfangen sollen. Nehmen wir zum Beispiel an, dass die anfragende Vorrichtung 102 die Vorrichtung 102A in 1 ist. Die Antworten für die übrigen Vorrichtungen 102, einschließlich der Vorrichtung 102N, können vom Switch 104 empfangen und aggregiert werden. Die Antwort für die Vorrichtung 102A kann vom Speicher 110A ohne Verwendung des Switches 104 empfangen werden (z. B. über einen Pfad innerhalb der Vorrichtung 102A). Die Vorrichtung 102A kann die aggregierten Antworten empfangen (z. B. basierend darauf, dass es die anfragende Vorrichtung 102 und/oder eine Vorrichtung 102 ist, die eine Antwort empfangen soll) und diese mit der intern empfangenen Antwort kombinieren, um einen oder mehrere Werte zu erzeugen, die in eine Antwort auf die Anfrage aufzunehmen sind.
  • Eine Multicast-Speicheroperation kann das Multicasting eines oder mehrerer Werte an einen oder mehrere Knoten einer Multicast-Gruppe umfassen, um den einen oder die mehreren Werte in jedem der Knoten zu speichern. Eine Multicast-Reduktionsoperation kann die Durchführung einer atomaren Operation an jeder PA einer Multicast-Gruppe beinhalten, ohne eine Antwort zurückzugeben.
  • In mindestens einer Ausführungsform können eine oder mehrere der Speicherzugriffsoperationen asynchron in Bezug auf die Vorrichtungen 102, die Verarbeitungselemente 106 und/oder die Speicher 110 durchgeführt werden. Wenn also Anforderungen zum Zugriff auf die Speicher 110 unter Verwendung von Multicasting weitergegeben (z. B. dupliziert) werden, können die Zugriffe auf verschiedene PAs zusammen mit dem Empfang von Antworten asynchron durchgeführt werden. Werden beispielsweise mehrere Multicast-Operationen nacheinander ausgeführt, kann die Reihenfolge der Speicher- und Ladevorgänge für die verschiedenen Speicher 110 aufgrund unterschiedlicher Latenzen variieren, was zu unvorhersehbaren Ergebnissen führt. Ähnliche Ergebnisse können bei Ausführungsformen auftreten, bei denen das Speichersystem sowohl Multicasting- als auch Unicasting-Operationen unterstützt. So kann beispielsweise ein Multicast-Speicher auf der VA 218 ausgeführt werden, gefolgt von einem Unicast-Speicher durch das Verarbeitungselement 106A auf der VA 216A. Da der interne Pfad für die VA 216A zur PA 220A kürzer ist, kann die Unicast-Speicherung zur VA 216A vor der Multicast-Speicherung zur VA 218 abgeschlossen werden, obwohl die Anfrage später gestellt wurde. Daher muss der Prozess, der die Anfragen stellt, diese Möglichkeiten berücksichtigen. Diese Möglichkeiten können beispielsweise dadurch entstehen, dass das Speichersystem so konfiguriert ist, dass es eine schwache Reihenfolge zwischen den Speicherzugriffsoperationen und/oder der Anforderungsverarbeitung zulässt.
  • In mindestens einer Ausführungsform kann das Speichersystem mit einer oder mehreren Beschränkungen konfiguriert werden, so dass der/die Prozess(e) eine solche Unvorhersehbarkeit nicht berücksichtigen muss/können. So kann bei den beschriebenen Ansätzen den Prozessen völlig verborgen bleiben, ob überhaupt ein Multicasting durchgeführt wird. Zum Beispiel kann in einer oder mehreren Ausführungsformen Code, der für ein Speichersystem geschrieben wurde, das nur Unicast-Operationen unterstützt, unter Verwendung einer oder mehrerer Multicast-Operationen anstelle einer oder mehrerer Unicast-Operationen ausgeführt werden. Somit muss Multicasting in einigen Ausführungsformen nicht unbedingt explizit über die API offenbart oder angefordert werden, kann aber dennoch durchgeführt werden. Von daher kann das Programmiermodell gegenüber einem Nicht-Multicasting-System unverändert bleiben. Solche Ausführungsformen können unter Verwendung eines oder mehrerer getrennter VA-Räume für Multicasting und Unicasting und/oder gemeinsamer VA-Räume für Multicasting und Unicasting implementiert werden (z. B. können beide Ansätze unter Verwendung desselben Speichersystems implementiert werden). Zusätzlich oder alternativ können der/die Prozess(e) und/oder andere eine oder mehrere der Einschränkungen konfigurieren (z. B. unter Verwendung eines oder mehrerer API-Aufrufe), so dass das Speichersystem in einer von dem/den Prozess(en) voraussichtlichen oder erwarteten Weise arbeitet.
  • Nun auf 3 bezugnehmend, ist 3 ein Diagramm, das Beispiele für Übersetzungspfade eines Speichersystems darstellt, das Multicasting unter Verwendung von Einschränkungen in einer kollaborativen Verarbeitungsumgebung 300 gemäß einigen Ausführungsformen der vorliegenden Offenbarung implementiert. Die kollaborative Verarbeitungsumgebung 300 kann eine oder mehrere Vorrichtungen umfassen, wie z. B. die Vorrichtungen 302A, 302B und 302C bis Vorrichtung 302N (hier auch als „Vorrichtungen 302“ bezeichnet). Die Vorrichtungen 302 können den Vorrichtungen 102 von 1 ähnlich sein oder sich von ihnen unterscheiden. In verschiedenen Ausführungsformen kann die kollaborative Verarbeitungsumgebung 300 (und das Speichersystem) mit der kollaborativen Verarbeitungsumgebung 100 identisch sein oder sich von dieser unterscheiden. Daher können eine oder mehrere der Vorrichtungen 102 in verschiedenen Ausführungsformen mit den Vorrichtungen 302 identisch sein oder sich von ihnen unterscheiden. Auch wenn die Verarbeitungselemente 106, die Speichermanager 108 und die Speicher 110 nicht dargestellt sind, können die gleichen oder ähnliche Komponenten in den Vorrichtungen 302 enthalten sein.
  • Die in der kollaborativen Verarbeitungsumgebung 300 implementierten Einschränkungen können in Abhängigkeit von den Fähigkeiten und Konfigurationen verschiedener Komponenten der kollaborativen Verarbeitungsumgebung 300 variieren, wie z. B., aber nicht ausschließlich, dem Speichersystem und dem Programmiermodell. In verschiedenen Beispielen können eine oder mehrere Beschränkungen durch eine beliebige Kombination aus den Speichermanagern 108, dem Switch(es) 104, den Speichern 110 und/oder anderen Komponenten (z. B. Seitentabellen, TLBs, Treibern usw.) durchgesetzt werden.
  • Ein Beispiel für eine Einschränkung sind die Zugriffsberechtigungen eines oder mehrerer Vorrichtungen 302 und/oder Verarbeitungselemente 106 auf eine oder mehrere bestimmte VAs. Beispielsweise können eine oder mehrere Vorrichtungen 302 Schreibzugriff auf eine oder mehrere bestimmte VAs, wie die VA 216A, haben, während eine oder mehrere andere Vorrichtungen 302 nur einen Lesezugriff haben können. Eine Vorrichtung 302 (oder Verarbeitungselement 106) mit Schreibzugriff kann hier als Produzent und eine Vorrichtung 302 mit Nur-Lese-Zugriff als Konsument bezeichnet werden. Beispielhaft und ohne Einschränkung kann nur die Vorrichtung 302A ein Produzent sein und die anderen Vorrichtungen 302 können in einer oder mehreren Ausführungsformen Konsumenten sein. In verschiedenen Beispielen kann eine Vorrichtung 302 ein Produzent oder Konsument für einige VAs sein und für andere nicht.
  • Einschränkungen, bei denen die Zugriffsrechte auf einen oder mehrere bestimmte VAs festgelegt oder anderweitig begrenzt werden, können verwendet werden, um unvorhersehbare Antworten auf Anfragen zu vermeiden. Da nur die Vorrichtung 302A in die VA 216A schreiben kann, können in den offenbarten Beispielen Wettlaufbedingungen für andere Schreibvorgänge von anderen Vorrichtungen 302 vermieden werden, und in allen PAs 220 kann derselbe Wert vorhanden sein, wenn Lesevorgänge stattfinden.
  • Ein weiteres Beispiel für eine Einschränkung betrifft die Zugriffspfade für ein Verarbeitungselement 106, die Vorrichtung 302 und/oder einen oder mehrere bestimmte VAs, wenn ein oder mehrere bestimmte Speicherzugriffe und/oder Speicherzugriffs- oder Operationstypen (z. B. Laden, Speichern, Reduzieren usw.) durchgeführt oder eine oder mehrere Anfragen anderweitig verarbeitet werden. Beispielhaft und ohne Einschränkung kann die Vorrichtung 302A und/oder jeder Produzent die Einschränkung haben, dass alle Anforderungen (oder bestimmte Anforderungen mit bestimmten Merkmalen wie z. B. dem Zugriffstyp oder unter bestimmten Bedingungen) an den Switch 104 weitergeleitet werden. Wird eine Anfrage an den Switch 104 weitergeleitet und soll in der Vorrichtung 302A verarbeitet werden, kann die Anfrage an die Vorrichtung 302A zurück reflektiert werden.
  • Einschränkungen, die die Einstellung oder anderweitige Steuerung der Zugriffspfade beinhalten, können auch verwendet werden, um unvorhersehbare Antworten auf Anfragen zu vermeiden. In den offenbarten Beispielen werden alle Anfragen von der Vorrichtung 302A, die die VA 216A betreffen, an die Vorrichtung 302A zurück reflektiert, so dass kein Risiko besteht, dass eine später eingehende Anfrage zuerst über einen kürzeren internen Pfad der Vorrichtung 302A verarbeitet wird. In ähnlicher Weise kann die Vorrichtung 302A und/oder jeder Produzent die Einschränkung haben, dass alle Ladevorgänge (oder andere Zugriffsarten) über den Switch 104 reflektiert werden. Die anderen Vorrichtungen 302 und/oder jeder Konsument können die Einschränkung haben, dass alle Ladevorgänge lokal (z. B. über den internen Zugriffspfad) ausgeführt werden oder auf andere Weise kürzere Pfade als ein Produzent verwenden, wie in 3 dargestellt.
  • Ein weiteres Beispiel für Beschränkungen, die die Festlegung oder anderweitige Steuerung der Zugriffspfade betreffen, ist die Beschränkung, welche Anforderungen von einer oder mehreren Vorrichtungen 302 und/oder Verarbeitungselementen an den Switch 104 weitergeleitet werden. In mindestens einer Ausführungsform können nur Anforderungen (z. B. wenn die Anforderungen einen oder mehrere bestimmte VAs betreffen) von Produzenten und/oder der Vorrichtung 302A an den Switch 104 weitergeleitet und/oder mit diesem verarbeitet werden.
  • Ein weiteres Beispiel für eine Einschränkung ist die Frage, ob ein Prozess und/oder eine andere Software eine Anzeige bereitgestellt hat, dass keine Wettlaufbedingungen auftreten werden (z. B. für eine oder mehrere bestimmte und/oder spezifizierte VAs). Die Anzeige kann für oder mit einer oder mehreren bestimmten Anfragen und/oder VAs bereitgestellt werden und/oder einen Zeitraum umfassen oder angeben (z. B. nach dem Multicasting nicht mehr stattfinden darf oder unter Verwendung anderer hierin beschriebener Einschränkungen durchgeführt werden kann).
  • Zum Beispiel können eine oder mehrere Vorrichtungen 302 Schreibzugriff auf einen oder mehrere bestimmte VAs, wie den VA 216A, haben, während eine oder mehrere andere Vorrichtungen 302 nur Lesezugriff haben können. Eine Vorrichtung 302 (oder Verarbeitungselement 106) mit Schreibzugriff kann hier als Produzent und eine Vorrichtung 302 mit Nur-Lese-Zugriff als Konsument bezeichnet werden. Beispielhaft und ohne Einschränkung kann nur die Vorrichtung 302A ein Produzent sein und die anderen Vorrichtungen 302 können in einer oder mehreren Ausführungsformen Konsumenten sein. In verschiedenen Beispielen kann eine Vorrichtung 302 ein Produzent oder Konsument für einige VAs sein und für andere nicht.
  • In einer oder mehreren Ausführungsformen können die Beschränkungen so auferlegt werden, dass die Ergebnisse (z. B. zurückgegebene Werte) der Verarbeitung der Anfragen unter Verwendung von Multicasting mit den Ergebnissen der Verarbeitung der Anfragen ohne Verwendung von Multicasting übereinstimmen. Je nach Konfiguration und Fähigkeiten der kollaborativen Verarbeitungsumgebung 300 können eine oder mehrere zusätzliche oder alternative Beschränkungen verwendet werden.
  • In einer oder mehreren Ausführungsformen kann das Multicasting verwendet werden, um die Bearbeitung einer oder mehrerer Anfragen zu beschleunigen, die andernfalls mit Unicasting bearbeitet worden wären. In einigen Ausführungsformen können die eine oder mehrere Einschränkungen verwendet werden, um konsistente Ergebnisse für jedes mögliche Szenario zu gewährleisten. Ob Multicasting oder Unicasting verwendet wird, kann für das Programmiermodell undurchsichtig sein.
  • Gemäß einem oder mehreren Aspekten der Offenbarung können eine oder mehrere Multicasting-Operationen durchgeführt werden, um die Verarbeitung von Speicherzugriffsanforderungen zu beschleunigen. In einem oder mehreren Beispielen können Multicasting-Operationen anstelle von einem oder mehreren Unicasting-Operationen durchgeführt werden. Dadurch kann die Anzahl der verarbeiteten Anfragen reduziert werden. Zusätzlich oder alternativ können eine oder mehrere Multicasting-Operationen durchgeführt werden, um eine oder mehrere zukünftige Speicherzugriffsoperationen zu beschleunigen.
  • Als Beispiel für das Vorhergehende kann die kollaborative Verarbeitungsumgebung 300 erkennen, dass ein Satz der Verarbeitungselemente 106 denselben Wert in einer Vielzahl der Speicher 110 unter Verwendung einer Vielzahl von Anforderungen speichern wird, und die Vielzahl von Anforderungen unter Verwendung einer oder mehrerer Multicasting-Operationen verarbeiten. Zusätzlich oder alternativ kann die kollaborative Verarbeitungsumgebung 300 erkennen, dass ein Satz der Verarbeitungselemente 106 denselben Wert aus einer Vielzahl der Speicher 110 unter Verwendung einer Vielzahl von Anforderungen laden wird, und den Wert im Voraus in jeden der Speicher 110 unter Verwendung einer oder mehrerer Multicasting-Operationen kopieren. So können die Ladevorgänge beispielsweise schnell von den lokalen Kopien (z. B. für Konsumenten) durchgeführt werden, im Gegensatz zu den Ladevorgängen von derselben PA, die der/die Prozess(e) möglicherweise über langsamere Pfade der VA zugeordnet haben. Wie in 3 dargestellt, können beispielsweise Ladevorgänge für die Vorrichtungen 302B, 302C und 302N von lokalen Kopien durchgeführt werden, die in den PAs 220B, 220C bzw. 220N gespeichert sind. Dies kann in verschiedenen Szenarien von Vorteil sein, z. B. wenn eine Synchronisationsbarriere zwischen den Vorrichtungen 302 erzwungen wird und die Vorrichtungen 302 warten, bis der langsamste Ladevorgang abgeschlossen ist.
  • Es können verschiedene Ansätze verwendet werden, um eine beliebige Kombination der vorstehenden Szenarien zu ermitteln, zu identifizieren, vorherzusagen und/oder anderweitig zu antizipieren, um Speicherzugriffe in der kollaborativen Verarbeitungsumgebung 300 zu beschleunigen. Dies kann unter Verwendung einer beliebigen Kombination der Speichermanager 108, des/der Switch(es) 104, der Speicher 110 und/oder anderer Komponenten (z. B. Seitentabellen, TLBs, Treiber usw.) erfolgen.
  • In einer oder mehreren Ausführungsformen kann die Anwendung und/oder ein Prozess einen Hinweis geben (z. B. über einen API-Aufruf und/oder eine Nachricht auf Treiberebene), den die kollaborative Verarbeitungsumgebung 300 verwenden kann, um zu bestimmen, ob eine Kombination der vorstehenden Szenarien implementiert werden soll. Beispielsweise kann eine Anwendung Unicast-Speicher (z. B. über einen API-Aufruf) mit einem Hinweis zuweisen, der einen oder mehrere VAs angibt, die mittels Multicasting kopiert werden sollen (und/oder zu welche Vorrichtungen 102 kopiert werden soll). Wenn eine Zuweisung auf dem Vorrichtung 302A erfolgt, kann beispielsweise ein Kollektiv durchgeführt werden, bei dem die Vorrichtung 302A mit Treibern auf jeder anderen Vorrichtung 302 kommuniziert, die in die Multicast-Gruppe aufgenommen werden soll. Dies kann dazu führen, dass die Vorrichtung 302A den Sicherungsspeicher für alle Kopien einschließlich der Erstellung der Zuordnungen zuweist, wobei ein einzelner Zeiger für die VA zurückgegeben und an eine oder mehrere Vorrichtungen 302 ähnlich wie ein Unicast-Zeiger weitergegeben wird.
  • Zusätzlich oder alternativ kann die kollaborative Verarbeitungsumgebung 300 Zähler inkrementieren oder anderweitig Überwachungs- oder Mustererkennungstechniken verwenden, um eines oder mehrere der vorstehenden Szenarien auszulösen. Beispielsweise kann eine Speicherung an eine VA repliziert werden (z. B. basierend auf der Zuordnung des VA zu mehreren PAs), indem ein Multicasting an PAs durchgeführt wird, das zumindest auf dem Zählen oder anderweitigen Erkennen oder Identifizieren eines Musters basiert, wie z. B. Anfragen, die Gruppen von VAs betreffen, die häufig die gleichen Werte an diese oder andere PAs speichern. Wenn eine Zuweisung auf der Vorrichtung 302A erfolgt, kann die Vorrichtung 302A beispielsweise Speicher für eine einzige Kopie statt für alle Kopien zuweisen, wobei ein einziger Zeiger für den VA zurückgegeben und an eine oder mehrere Vorrichtungen 302 weitergegeben wird. Wenn ein Muster erkannt wird, kann ein Treiber einer Vorrichtung 302 bestimmen, dass die VA kopiert werden soll. Als Reaktion darauf kann der Treiber damit beginnen, Fehler zu erfassen, Fehler zu behandeln und/oder die VA anderweitig für das Multicasting umzuwandeln.
  • Nun auf 4 bezugnehmend, weist jeder Block des Verfahrens 400 und anderer hierin beschriebener Verfahren einen Rechenprozess auf, der mit einer beliebigen Kombination aus Hardware, Firmware und/oder Software durchgeführt werden kann. Beispielsweise können verschiedene Funktionen von einem Prozessor ausgeführt werden, der im Speicher gespeicherte Anweisungen ausführt. Die Verfahren können auch in Form von computerverwendbaren Anweisungen auf Computerspeichermedien gespeichert sein. Die Verfahren können durch eine eigenständige Anwendung, einen Dienst oder einen gehosteten Dienst (eigenständig oder in Kombination mit einem anderen gehosteten Dienst) oder ein Plug-in für ein anderes Produkt bereitgestellt werden, um nur einige zu nennen. Darüber hinaus wird das Verfahren 400 beispielhaft in Bezug auf 1 beschrieben. Diese Verfahren können jedoch zusätzlich oder alternativ von einem beliebigen System oder einer beliebigen Kombination von Systemen ausgeführt werden, einschließlich, aber nicht beschränkt auf die hier beschriebenen Systeme.
  • 4 ist ein Flussdiagramm, das das Verfahren 400 zeigt, das ein Switch(es) 104 verwenden kann, um eine Synchronisationsbarriere gemäß einigen Ausführungsformen der vorliegenden Offenbarung zu implementieren.
  • Das Verfahren 400 umfasst in Block B402 das Empfangen von Daten, die einer Benachrichtigung über die Ankunft eines PE an einer Synchronisationsbarriere entsprechen. Beispielsweise kann der Switch 104A Daten empfangen, die der Benachrichtigung 130A über die Ankunft eines PE 106A der an einer Synchronisationsbarriere beteiligten PEs 106 an der Synchronisationsbarriere entsprechen.
  • Das Verfahren 400 umfasst in Block B404 das Zuordnen der Benachrichtigung zu Vorrichtungen, die die PEs hosten. Zum Beispiel kann der Switch 104 die Benachrichtigung 130A mindestens einigen der Vorrichtungen 102 zuordnen, die mehrere PEs 106 hosten (z. B. jedem Vorrichtung 102).
  • Das Verfahren 400 umfasst in Block B406 das Weitergeben der Benachrichtigung an die Vorrichtungen, um die Zähler zu aktualisieren, die zur Steuerung des Durchgangs eines oder mehrerer PEs der PEs durch die Synchronisationsbarriere verwendet werden. Zum Beispiel kann der Switch 104 die Benachrichtigung 130A an die Vorrichtungen 102 weitergeben, um die Zähler 120 zu aktualisieren. Das Weitergeben kann jede Vorrichtung 102 veranlassen, einen Zähler 120 zu aktualisieren. Wie hierin beschrieben, kann jeder Zähler 120 die Ankunft der PEs 106 an der Synchronisationsbarriere verfolgen und kann verwendet werden, um den Durchgang eines oder mehrerer PEs 106 (die z. B. auf der Vorrichtung 102 gehostet werden, die den Zähler 120 enthält) durch die Synchronisationsbarriere zu steuern.
  • 5 ist ein Flussdiagramm, das ein Verfahren 500 zeigt, das einen Speichermanager 108 verwenden kann, um eine Synchronisationsbarriere gemäß einigen Ausführungsformen der vorliegenden Offenbarung zu implementieren.
  • Das Verfahren 500 umfasst in Block B502 das Empfangen einer Benachrichtigung, die die Ankunft eines Teilnehmers von Teilnehmern einer Synchronisationsbarriere an der Synchronisationsbarriere anzeigt. Zum Beispiel kann der Speichermanager 108A die Benachrichtigung 130A empfangen, die eine Ankunft des PE 106A an einer Synchronisationsbarriere anzeigt.
  • Das Verfahren 500 umfasst in Block B504 als Reaktion auf das Empfangen der Benachrichtigung das Veranlassen des Weitergebens der Benachrichtigung an die Vorrichtungen, um die Zähler zu aktualisieren, die zur Steuerung des Durchgangs eines oder mehrerer Teilnehmer durch die Synchronisationsbarriere verwendet werden. Beispielsweise kann der Speichermanager 108A als Reaktion auf das Empfangen der Benachrichtigung 130A Daten an den Switch 104 übertragen, die den Switch(es) 104 veranlassen, die Benachrichtigung 130A an die Vorrichtungen 102 weiterzugeben, um die Zähler 120 zu aktualisieren. Das Weitergeben kann jede Vorrichtung 102 veranlassen, einen Zähler 120 zu aktualisieren. Wie hierin beschrieben, kann jeder Zähler 120 die Ankunft der PEs 106 an der Synchronisationsbarriere verfolgen und kann verwendet werden, um den Durchgang eines oder mehrerer PEs 106 (die z. B. auf der Vorrichtung 102 gehostet werden, die den Zähler 120 enthält) durch die Synchronisationsbarriere zu steuern.
  • 6 ist ein Flussdiagramm, das ein Verfahren 600 zeigt, das von einer oder mehreren Vorrichtungen 102 und/oder Switches 104 verwendet werden kann, um eine Synchronisationsbarriere gemäß einigen Ausführungsformen der vorliegenden Offenbarung zu implementieren.
  • Das Verfahren 600 umfasst in Block B602 das Empfangen von Daten, die eine Benachrichtigung über die Ankunft eines Teilnehmers von Teilnehmern einer Synchronisationsbarriere an der Synchronisationsbarriere anzeigen. Zum Beispiel kann eine Vorrichtung 102 und/oder ein Switch 104 Daten empfangen, die die Benachrichtigung 130A über eine Ankunft des PE 1 06A an einer Synchronisationsbarriere anzeigen.
  • Das Verfahren 600 umfasst in Block B604 das Weitergeben der Benachrichtigung an mehrere Ziele, um den Durchgang der Teilnehmer durch die Synchronisationsbarriere zu steuern. Beispielsweise kann die Vorrichtung 102 und/oder der Switch 104 die Benachrichtigung 130A an mehrere Ziele (z. B. PAs, Vorrichtungen 102 usw.) weitergeben, um den Durchgang der PEs 106 durch die Synchronisationsbarriere zu steuern.
  • Beispielhafte Rechenvorrichtung
  • 7 ist ein Blockdiagramm einer beispielhaften Rechenvorrichtung(en) 700, die zur Verwendung bei der Implementierung einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist. Die Rechenvorrichtung 700 kann ein Verbindungssystem 702 umfassen, das direkt oder indirekt die folgenden Vorrichtungen miteinander verbindet: Speicher 704, eine oder mehrere Zentraleinheiten (CPUs) 706, eine oder mehrere Grafikverarbeitungseinheiten (GPUs) 708, eine Kommunikationsschnittstelle 710, Ein-/Ausgabe (I/O) Ports 712, Ein-/Ausgabekomponenten 714, eine Stromversorgung 716, eine oder mehrere Präsentationskomponenten 718 (z. B. Anzeige(n)) und eine oder mehrere Logikeinheiten 720. In mindestens einer Ausführungsform kann das (die) Computergerät(e) 700 eine oder mehrere virtuelle Maschinen (VMs) umfassen und/oder jede der Komponenten davon kann virtuelle Komponenten umfassen (z. B. virtuelle Hardwarekomponenten). Als nicht einschränkende Beispiele können eine oder mehrere der GPUs 708 eine oder mehrere vGPUs umfassen, eine oder mehrere der CPUs 706 können eine oder mehrere vCPUs umfassen, und/oder eine oder mehrere der Logikeinheiten 720 können eine oder mehrere virtuelle Logikeinheiten umfassen. So kann eine Rechenvorrichtung 700 diskrete Komponenten (z. B. eine vollständige GPU, die der Rechenvorrichtung 700 zugeordnet ist), virtuelle Komponenten (z. B. einen Teil einer GPU, die der Rechenvorrichtung 700 zugeordnet ist) oder eine Kombination davon umfassen.
  • Obwohl die verschiedenen Blöcke in 7 als über das Verbindungssystem 702 mit Leitungen verbunden dargestellt sind, ist dies nicht als Einschränkung gedacht und dient nur der Klarheit. In einigen Ausführungsformen kann beispielsweise eine Präsentationskomponente 718, wie z. B. ein Anzeigegerät, als I/O-Komponente 714 betrachtet werden (z. B. wenn die Anzeige ein Touchscreen ist). Ein weiteres Beispiel ist, dass die CPUs 706 und/oder GPUs 708 einen Speicher enthalten können (z. B. kann der Speicher 704 zusätzlich zum Speicher der GPUs 708, der CPUs 706 und/oder anderer Komponenten ein Speichergerät darstellen). Mit anderen Worten, die Rechenvorrichtung von 7 ist lediglich illustrativ. Es wird nicht zwischen Kategorien wie „Workstation“, „Server“, „Laptop“, „Desktop“, „Tablet“, „Client-Vorrichtung“, „mobiles Vorrichtung“, „tragbare Vorrichtung“, „Spielkonsole“, „elektronische Steuereinheit (ECU)“, „Virtual-Reality-System“ und/oder anderen Vorrichtungen- oder Systemtypen unterschieden, da sie alle in den Anwendungsbereich der Rechenvorrichtung von 7 fallen.
  • Das Verbindungssystem 702 kann eine oder mehrere Verbindungen oder Busse darstellen, wie z. B. einen Adressbus, einen Datenbus, einen Steuerbus oder eine Kombination davon. Das Verbindungssystem 702 kann einen oder mehrere Bus- oder Verbindungstypen umfassen, z. B. einen ISA-Bus (Industry Standard Architecture), einen EISA-Bus (Extended Industry Standard Architecture), einen VESA-Bus (Video Electronics Standards Association), einen PCI-Bus (Peripheral Component Interconnect), einen PCIe-Bus (Peripheral Component Interconnect Express) und/oder eine andere Art von Bus oder Verbindung. In einigen Ausführungsformen gibt es direkte Verbindungen zwischen den Komponenten. So kann beispielsweise die CPU 706 direkt mit dem Speicher 704 verbunden sein. Außerdem kann die CPU 706 direkt mit der GPU 708 verbunden sein. Bei einer direkten oder Punkt-zu-Punkt-Verbindung zwischen Komponenten kann das Verbindungssystem 702 eine PCIe-Verbindung enthalten, um die Verbindung herzustellen. In diesen Beispielen muss ein PCI-Bus nicht in der Recheneinheit 700 enthalten sein.
  • Der Speicher 704 kann aus einer Vielzahl von computerlesbaren Medien bestehen. Bei den computerlesbaren Medien kann es sich um alle verfügbaren Medien handeln, auf die die Rechenvorrichtung 700 zugreifen kann. Die computerlesbaren Medien können sowohl flüchtige als auch nicht-flüchtige Medien sowie austauschbare und nicht-entfernbare Medien umfassen. Als Beispiel und ohne Einschränkung können die computerlesbaren Medien Computerspeichermedien und Kommunikationsmedien umfassen.
  • Die Computerspeichermedien können sowohl flüchtige als auch nichtflüchtige Medien und/oder entfernbare und nicht entfernbare Medien umfassen, die in einem beliebigen Verfahren oder einer beliebigen Technologie zur Speicherung von Informationen wie computerlesbaren Anweisungen, Datenstrukturen, Programmmodulen und/oder anderen Datentypen implementiert sind. Beispielsweise kann der Speicher 704 computerlesbare Anweisungen speichern (z. B. solche, die ein Programm bzw. Programme und/oder ein Programmelement bzw. Programmelemente darstellen, wie z. B. ein Betriebssystem. Zu den Computerspeichermedien können unter anderem RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, Digital Versatile Disks (DVD) oder andere optische Plattenspeicher, Magnetkassetten, Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder jedes andere Medium gehören, das zur Speicherung der gewünschten Informationen verwendet werden kann und auf das die Rechenvorrichtung 700 zugreifen kann. Der hier verwendete Begriff „Computerspeichermedium“ umfasst nicht per se Signale.
  • Die Computerspeichermedien können computerlesbare Befehle, Datenstrukturen, Programmmodule und/oder andere Datentypen in einem modulierten Datensignal wie z. B. einer Trägerwelle oder einem anderen Transportmechanismus verkörpern und umfassen beliebige Informationsübertragungsmedien. Der Begriff „moduliertes Datensignal“ kann sich auf ein Signal beziehen, bei dem eine oder mehrere seiner Eigenschaften so eingestellt oder verändert sind, dass Informationen in dem Signal kodiert werden. Die Computerspeichermedien können beispielsweise verdrahtete Medien, wie ein verdrahtetes Netzwerk oder eine direkte Kabelverbindung, und drahtlose Medien, wie akustische, RF-, Infrarot- und andere drahtlose Medien, umfassen. Kombinationen der oben genannten Medien sollten ebenfalls in den Bereich der computerlesbaren Medien fallen.
  • Die CPU(s) 706 kann/können so konfiguriert sein, dass sie zumindest einige der computerlesbaren Anweisungen ausführen, um eine oder mehrere Komponenten des Computergeräts 700 zu steuern und eines oder mehrere der hierin beschriebenen Verfahren und/oder Prozesse durchzuführen. Die CPU(s) 706 kann/können jeweils einen oder mehrere Kerne (z. B. einen, zwei, vier, acht, achtundzwanzig, zweiundsiebzig usw.) umfassen, die in der Lage sind, eine Vielzahl von Software-Threads gleichzeitig zu verarbeiten. Die CPU(s) 706 kann/können jede Art von Prozessor umfassen und je nach Art des implementierten Computergeräts 700 verschiedene Arten von Prozessoren umfassen (z. B. Prozessoren mit weniger Kernen für mobile Vorrichtungen und Prozessoren mit mehr Kernen für Server). Je nach Art des Rechengeräts 700 kann der Prozessor beispielsweise ein Advanced RISC Machines (ARM)-Prozessor sein, der mit Reduced Instruction Set Computing (RISC) arbeitet, oder ein x86-Prozessor, der mit Complex Instruction Set Computing (CISC) arbeitet. Die Recheneinheit 700 kann eine oder mehrere CPUs 706 zusätzlich zu einem oder mehreren Mikroprozessoren oder zusätzlichen Coprozessoren, wie z. B. mathematischen Coprozessoren, enthalten.
  • Zusätzlich zu oder alternativ zu der/den CPU(s) 706 kann/können die GPU(s) 708 so konfiguriert sein, dass sie zumindest einige der computerlesbaren Anweisungen ausführen, um eine oder mehrere Komponenten des Computergeräts 700 zu steuern, um eines oder mehrere der hier beschriebenen Verfahren und/oder Prozesse durchzuführen. Eine oder mehrere der GPU(s) 708 können eine integrierte GPU sein (z. B. mit einer oder mehreren der CPU(s) 706 und/oder eine oder mehrere der GPU(s) 708 können eine diskrete GPU sein. In einigen Ausführungsformen kann eine oder mehrere der GPU(s) 708 ein Coprozessor einer oder mehrerer der CPU(s) 706 sein. Die GPU(s)708 kann von der Rechenvorrichtung 700 zum Rendern von Grafiken (z. B. 3D-Grafiken) oder zum Durchführen von Allzweckberechnungen verwendet werden. Die GPU(s) 708 kann/können zum Beispiel für General-Purpose Computing on GPUs (GPGPU) verwendet werden. Die GPU(s) 708 kann/können Hunderte oder Tausende von Kernen umfassen, die in der Lage sind, Hunderte oder Tausende von Software-Threads gleichzeitig zu verarbeiten. Die GPU(s) 708 kann/können als Reaktion auf Rendering-Befehle (z. B. Rendering-Befehle von der/den CPU(s) 706, die über eine Host-Schnittstelle empfangen werden) Pixeldaten für Ausgabebilder erzeugen. Die GPU(s) 708 kann/können einen Grafikspeicher, z. B. einen Anzeigespeicher, zum Speichern von Pixeldaten oder anderen geeigneten Daten, z. B. GPGPU-Daten, enthalten. Der Anzeigespeicher kann als Teil des Speichers 704 enthalten sein. Die GPU(s) 708 kann/können zwei oder mehr GPUs umfassen, die parallel arbeiten (z. B. über eine Verbindung). Die Verbindung kann die GPUs direkt verbinden (z. B. mit NVLINK) oder über einen Switch (z. B. mit NVSwitch). Wenn sie miteinander kombiniert werden, kann jede GPU 708 Pixeldaten oder GPGPU-Daten für verschiedene Teile einer Ausgabe oder für verschiedene Ausgaben erzeugen (z. B. eine erste GPU für ein erstes Bild und eine zweite GPU für ein zweites Bild). Jede GPU kann ihren eigenen Speicher haben oder sich den Speicher mit anderen GPUs teilen.
  • Zusätzlich zu oder alternativ zu der (den) CPU(s) 706 und/oder der (den) GPU(s) 708 kann (können) die Logikeinheit(en) 720 so konfiguriert sein, dass sie zumindest einige der computerlesbaren Befehle ausführt (ausführen), um eine oder mehrere Komponenten des Computergeräts 700 zu steuern, um eines oder mehrere der hier beschriebenen Verfahren und/oder Prozesse durchzuführen. In Ausführungsformen können die CPU(s) 706, die GPU(s) 708 und/oder die Logikeinheit(en) 720 diskret oder gemeinsam eine beliebige Kombination der Verfahren, Prozesse und/oder Teile davon ausführen. Eine oder mehrere der Logikeinheiten 720 können Teil einer oder mehrerer der CPU(s) 706 und/oder der GPU(s) 708 sein und/oder eine oder mehrere der Logikeinheiten 720 können diskrete Komponenten sein oder anderweitig außerhalb der CPU(s) 706 und/oder der GPU(s) 708 liegen. In Ausführungsformen kann eine oder mehrere der Logikeinheiten 720 ein Coprozessor einer oder mehrerer der CPU(s) 706 und/oder einer oder mehrerer der GPU(s) 708 sein.
  • Beispiele für die Logikeinheit(en) 720 umfassen einen oder mehrere Rechenkerne und/oder Komponenten davon, wie Datenverarbeitungseinheiten (DPUs), Tensorkerne (TCs), Tensorverarbeitungseinheiten (TPUs), Pixel Visual Cores (PVCs), Vision Processing Units (VPUs), Grafikverarbeitungscluster (GPCs), Texturverarbeitungscluster (TPCs), Streaming-Multiprozessoren (SMs), Tree Traversal Units (TTUs), Artificial Intelligence Accelerators (AIAs), Deep Learning Accelerators (DLAs), Arithmetic-Logic Units (ALUs), Application-Specific Integrated Circuits (ASICs), Floating Point Units (FPUs), Input/Output (I/O)-Elemente, Peripheral Component Interconnect (PCI) oder Peripheral Component Interconnect Express (PCIe)-Elemente und/oder dergleichen.
  • Die Kommunikationsschnittstelle 710 kann einen oder mehrere Empfänger, Sender und/oder Transceiver enthalten, die es der Rechenvorrichtung 700 ermöglichen, mit anderen Rechenvorrichtungen über ein elektronisches Kommunikationsnetzwerk zu kommunizieren, einschließlich drahtgebundener und/oder drahtloser Kommunikation. Die Kommunikationsschnittstelle 710 kann Komponenten und Funktionen enthalten, die die Kommunikation über eine Reihe verschiedener Netzwerke ermöglichen, wie z. B. drahtlose Netzwerke (z. B. Wi-Fi, Z-Wave, Bluetooth, Bluetooth LE, ZigBee usw.), drahtgebundene Netzwerke (z. B. Kommunikation über Ethernet oder InfiniBand), Weitverkehrsnetzwerke mit geringer Leistung (z. B. LoRaWAN, SigFox usw.) und/oder das Internet. In einer oder mehreren Ausführungsformen können die Logikeinheit(en) 720 und/oder die Kommunikationsschnittstelle 710 eine oder mehrere Datenverarbeitungseinheiten (DPUs) enthalten, um über ein Netzwerk und/oder über das Verbindungssystem 702 empfangene Daten direkt an eine oder mehrere GPU(s) 708 (z. B. einen Speicher) zu übertragen.
  • Über die I/O-Ports 712 kann die Rechenvorrichtung 700 logisch mit anderen Vorrichtungen gekoppelt werden, darunter die I/O-Komponenten 714, die Präsentationskomponente(n) 718 und/oder andere Komponenten, von denen einige in der Rechenvorrichtung 700 eingebaut (z. B. integriert) sein können. Illustrative I/O-Komponenten 714 umfassen ein Mikrofon, eine Maus, eine Tastatur, einen Joystick, ein Gamepad, einen Gamecontroller, eine Satellitenschüssel, einen Scanner, einen Drucker, ein drahtloses Vorrichtung usw. Die I/O-Komponenten 714 können eine natürliche Benutzerschnittstelle (NUI) bereitstellen, die Luftgesten, Sprache oder andere physiologische Eingaben eines Benutzers verarbeitet. In einigen Fällen können die Eingaben zur weiteren Verarbeitung an ein geeignetes Netzwerkelement übertragen werden. Eine NUI kann eine beliebige Kombination aus Spracherkennung, Stifterkennung, Gesichtserkennung, biometrischer Erkennung, Gestenerkennung sowohl auf dem Bildschirm als auch neben dem Bildschirm, Luftgesten, Kopf- und Augenverfolgung und Berührungserkennung (wie unten ausführlicher beschrieben) in Verbindung mit einer Anzeige des Computergeräts 700 implementieren. Die Computervorrichtung 700 kann Tiefenkameras, wie stereoskopische Kamerasysteme, Infrarotkamerasysteme, RGB-Kamerasysteme, Touchscreen-Technologie und Kombinationen davon, zur Gestenerkennung und -erfassung enthalten. Darüber hinaus kann die Rechenvorrichtung 700 Beschleunigungsmesser oder Gyroskope (z. B. als Teil einer Trägheitsmesseinheit (IMU)) enthalten, die die Erkennung von Bewegungen ermöglichen. In einigen Beispielen kann die Ausgabe der Beschleunigungsmesser oder Gyroskope von der Computervorrichtung 700 verwendet werden, um immersive Augmented Reality oder Virtual Reality darzustellen.
  • Die Stromversorgung 716 kann eine festverdrahtete Stromversorgung, eine Batteriestromversorgung oder eine Kombination davon sein. Die Stromversorgung 716 kann die Rechenvorrichtung 700 mit Strom versorgen, um den Betrieb der Komponenten des Computergeräts 700 zu ermöglichen.
  • Die Präsentationskomponente(n) 718 kann (können) eine Anzeige (z. B. einen Monitor, einen Touchscreen, einen Fernsehbildschirm, ein Head-up-Display (HUD), andere Anzeigetypen oder eine Kombination davon), Lautsprecher und/oder andere Präsentationskomponenten umfassen. Die Präsentationskomponente(n) 718 kann/können Daten von anderen Komponenten (z. B. der/den GPU(s) 708, der/den CPU(s) 706, DPUs usw.) empfangen und die Daten ausgeben (z. B. als Bild, Video, Ton usw.).
  • Beispielhaftes Datenzentrum
  • 8 zeigt ein Beispiel für ein Datenzentrum 800, das in mindestens einer Ausführungsform der vorliegenden Offenbarung verwendet werden kann. Das Datenzentrum 800 kann eine Datenzentrum-Infrastrukturschicht 810, eine Framework-Schicht 820, eine Softwareschicht 830 und/oder eine Anwendungsschicht 840 umfassen.
  • Wie in 8 dargestellt, kann die Datenzentrum-Infrastrukturschicht 810 einen Ressourcen-Orchestrator 812, gruppierte Rechenressourcen 814 und Knoten-Rechenressourcen („Knoten-C.Rs“) 816(1)-816(N) umfassen, wobei „N“ eine beliebige ganze, positive Zahl darstellt. In mindestens einer Ausführungsform können die Knoten-CRs 816(1)-816(N) eine beliebige Anzahl von zentralen Verarbeitungseinheiten (CPUs) oder anderen Prozessoren (einschließlich DPUs, Beschleunigern, feldprogrammierbaren Gate-Arrays (FPGAs), Grafikprozessoren oder Grafikverarbeitungseinheiten (GPUs) usw.), Speichervorrichtungen (z. B., dynamischer Festwertspeicher), Speichergeräte (z. B. Festkörper- oder Plattenlaufwerke), Netzwerk-Eingabe-/Ausgabegeräte (NW I/O), Netzwerk-Switches, virtuelle Maschinen (VMs), Stromversorgungsmodule und/oder Kühlmodule usw. In einigen Ausführungsformen können ein oder mehrere Knoten-CRs unter den Knoten-CRs 816(1)-816(N) einem Server entsprechen, der über eine oder mehrere der oben erwähnten Rechenressourcen verfügt. Darüber hinaus können in einigen Ausführungsformen die Knoten C.R.s 816(1)-8161(N) eine oder mehrere virtuelle Komponenten enthalten, wie z. B. vGPUs, vCPUs und/oder dergleichen, und/oder einer oder mehrere der Knoten C.R.s 816(1)-816(N) können einer virtuellen Maschine (VM) entsprechen.
  • In mindestens einer Ausführungsform können die gruppierten Rechenressourcen 814 separate Gruppierungen von Knoten-CRs 816 umfassen, die in einem oder mehreren Racks (nicht dargestellt) oder in vielen Racks in Rechenzentren an verschiedenen geografischen Standorten (ebenfalls nicht dargestellt) untergebracht sind. Separate Gruppierungen von Knoten-CRs 816 innerhalb der gruppierten Rechenressourcen 814 können gruppierte Rechen-, Netzwerk-, Speicher- oder Speicherressourcen umfassen, die zur Unterstützung einer oder mehrerer Arbeitslasten konfiguriert oder zugewiesen werden können. In mindestens einer Ausführungsform können mehrere Knoten-CRs 816 mit CPUs, GPUs, DPUs und/oder anderen Prozessoren in einem oder mehreren Racks gruppiert werden, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. Das eine oder die mehreren Racks können auch eine beliebige Anzahl von Stromversorgungsmodulen, Kühlmodulen und/oder Netzwerk-Switches in beliebiger Kombination enthalten.
  • Der Ressourcen-Orchestrator 812 kann einen oder mehrere Knoten-CRs 816(1)-816(N) und/oder gruppierte Rechenressourcen 814 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcen-Orchestrator 812 eine Software-Design-Infrastruktur (SDI)-Verwaltungseinheit für das Datenzentrum 800 umfassen. Der Ressourcen-Orchestrator 812 kann Hardware, Software oder eine Kombination davon umfassen.
  • In mindestens einer Ausführungsform, wie in 8 gezeigt, kann die Framework-Schicht 820 einen Job-Scheduler 832, einen Konfigurationsmanager 834, einen Ressourcenmanager 836 und/oder ein verteiltes Dateisystem 838 enthalten. Die Framework-Schicht 820 kann ein Framework zur Unterstützung der Software 832 der Softwareschicht 830 und/oder einer oder mehrerer Anwendung(en) 842 der Anwendungsschicht 840 enthalten. Die Software 832 oder die Anwendung(en) 842 können jeweils webbasierte Dienstsoftware oder Anwendungen umfassen, wie sie beispielsweise von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. Bei der Framework-Schicht 820 kann es sich um eine Art von freiem und quelloffenem Software-Webanwendungs-Framework wie Apache Spark™ (im Folgenden „Spark“) handeln, das ein verteiltes Dateisystem 838 für die Verarbeitung großer Datenmengen (z. B. „Big Data“) nutzen kann, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform kann der Job-Scheduler 832 einen Spark-Treiber enthalten, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Datenzentrums 800 unterstützt werden. Der Konfigurationsmanager 834 kann in der Lage sein, verschiedene Schichten zu konfigurieren, z. B. die Softwareschicht 830 und die Framework-Schicht 820 einschließlich Spark und das verteilte Dateisystem 838 zur Unterstützung der Verarbeitung großer Datenmengen. Der Ressourcenmanager 836 kann in der Lage sein, geclusterte oder gruppierte Computerressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 838 und des Job-Schedulers 832 zugeordnet sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Rechenressourcen gruppierte Rechenressourcen 814 auf der Datenzentrum-Infrastrukturschicht 810 umfassen. Der Ressourcenmanager 836 kann sich mit dem Ressourcen-Orchestrator 812 abstimmen, um diese zugeordneten oder zugewiesenen Computerressourcen zu verwalten.
  • In mindestens einer Ausführungsform kann die in der Softwareschicht 830 enthaltene Software 832 Software enthalten, die von mindestens Teilen der Knoten C.R.s 816(1)-816(N), der gruppierten Rechenressourcen 814 und/oder des verteilten Dateisystems 838 der Framework-Schicht 820 verwendet wird. Eine oder mehrere Arten von Software können unter anderem Internet-Suchsoftware, Software zum Scannen von E-Mail-Viren, Datenbanksoftware und Software für Streaming-Videoinhalte umfassen.
  • In mindestens einer Ausführungsform kann (können) die in der Anwendungsschicht 840 enthaltene(n) Anwendung(en) 842 eine oder mehrere Arten von Anwendungen umfassen, die von mindestens Teilen der Knoten C.R.s 816(1)-816(N), gruppierten Rechenressourcen 814 und/oder dem verteilten Dateisystem 838 der Framework-Schicht 820 verwendet werden. Eine oder mehrere Arten von Anwendungen können eine beliebige Anzahl von Genomanwendungen, kognitiven Berechnungen und Anwendungen für maschinelles Lernen umfassen, einschließlich Trainings- oder Inferenzsoftware, Framework-Software für maschinelles Lernen (z. B. PyTorch, TensorFlow, Caffe usw.) und/oder andere Anwendungen für maschinelles Lernen, die in Verbindung mit einer oder mehreren Ausführungsformen verwendet werden, sind aber nicht darauf beschränkt.
  • In mindestens einer Ausführungsform können der Konfigurationsmanager 834, der Ressourcenmanager 836 und der Ressourcen-Orchestrator 812 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen implementieren, die auf einer beliebigen Menge und Art von Daten basieren, die auf jede technisch mögliche Weise erfasst wurden. Selbstmodifizierende Aktionen können einen Datenzentrumsbetreiber des Datenzentrums 800 davon entlasten, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise nicht ausgelastete und/oder schlecht funktionierende Teile eines Datenzentrums zu vermeiden.
  • Das Datenzentrum 800 kann Werkzeuge, Dienste, Software oder andere Ressourcen enthalten, um ein oder mehrere maschinelle Lernmodelle zu trainieren oder Informationen unter Verwendung eines oder mehrerer maschineller Lernmodelle gemäß einer oder mehrerer hierin beschriebener Ausführungsformen vorherzusagen oder abzuleiten. Beispielsweise kann ein maschinelles Lernmodell bzw. können maschinelle Lernmodelle trainiert werden, indem Gewichtsparameter gemäß einer neuronalen Netzwerkarchitektur unter Verwendung von Software und/oder Rechenressourcen berechnet werden, die oben in Bezug auf das Datenzentrum 800 beschrieben wurden. In mindestens einer Ausführungsform können trainierte oder eingesetzte maschinelle Lernmodelle, die einem oder mehreren neuronalen Netzen entsprechen, verwendet werden, um Informationen abzuleiten oder vorherzusagen, wobei die oben beschriebenen Ressourcen in Bezug auf das Datenzentrum 800 verwendet werden, indem Gewichtungsparameter verwendet werden, die durch eine oder mehrere Trainingstechniken berechnet werden, wie z. B., aber nicht nur, die hier beschriebenen.
  • In mindestens einer Ausführungsform kann das Datenzentrum 800 CPUs, anwendungsspezifische integrierte Schaltkreise (ASICs), GPUs, FPGAs und/oder andere Hardware (oder entsprechende virtuelle Rechenressourcen) verwenden, um das Training und/oder die Inferenz unter Verwendung der oben beschriebenen Ressourcen durchzuführen. Darüber hinaus können eine oder mehrere der oben beschriebenen Software- und/oder Hardwareressourcen als Dienst konfiguriert werden, um Benutzern das Training oder die Inferenz von Informationen zu ermöglichen, wie z. B. Bilderkennung, Spracherkennung oder andere Dienste der künstlichen Intelligenz.
  • Beispielhafte Netzwerkumgebungen
  • Netzwerkumgebungen, die zur Verwendung bei der Implementierung von Ausführungsformen der Offenbarung geeignet sind, können ein oder mehrere Client-Vorrichtungen, Server, Network Attached Storage (NAS), andere Backend-Vorrichtungen und/oder andere Gerätetypen umfassen. Die Client-Vorrichtungen, Server und/oder anderen Gerätetypen (z. B. jedes Vorrichtung) können auf einer oder mehreren Instanzen des/der Computergeräts/e 700 von 7 implementiert werden - z. B. kann jede Vorrichtung ähnliche Komponenten, Merkmale und/oder Funktionalität des/der Computergeräts/e 700 enthalten. Wenn Backend-Vorrichtungen (z. B. Server, NAS usw.) implementiert sind, können die Backend-Vorrichtungen außerdem Teil eines Datenzentrums 800 sein, dessen Beispiel hier in Bezug auf 8 näher beschrieben wird.
  • Die Komponenten einer Netzwerkumgebung können über ein oder mehrere Netzwerke miteinander kommunizieren, die drahtgebunden, drahtlos oder beides sein können. Das Netz kann mehrere Netze oder ein Netz von Netzen umfassen. Beispielsweise kann das Netzwerk ein oder mehrere Wide Area Networks (WANs), ein oder mehrere Local Area Networks (LANs), ein oder mehrere öffentliche Netzwerke wie das Internet und/oder ein öffentliches Telefonnetz (PSTN) und/oder ein oder mehrere private Netzwerke umfassen. Wenn das Netz ein drahtloses Telekommunikationsnetz umfasst, können Komponenten wie eine Basisstation, ein Kommunikationsturm oder sogar Zugangspunkte (sowie andere Komponenten) eine drahtlose Konnektivität bieten.
  • Zu den kompatiblen Netzwerkumgebungen gehören eine oder mehrere Peer-to-Peer-Netzwerkumgebungen - in diesem Fall kann ein Server nicht in eine Netzwerkumgebung eingebunden sein - und eine oder mehrere Client-Server-Netzwerkumgebungen - in diesem Fall können ein oder mehrere Server in eine Netzwerkumgebung eingebunden sein. In Peer-to-Peer-Netzwerkumgebungen kann die hier beschriebene Funktionalität in Bezug auf einen oder mehrere Server auf einer beliebigen Anzahl von Client-Vorrichtungen implementiert werden.
  • In mindestens einer Ausführungsform kann eine Netzumgebung eine oder mehrere Cloud-basierte Netzumgebungen, eine verteilte Rechenumgebung, eine Kombination davon usw. umfassen. Eine Cloud-basierte Netzwerkumgebung kann eine Framework-Schicht, einen Job-Scheduler, einen Ressourcenmanager und ein verteiltes Dateisystem umfassen, die auf einem oder mehreren Servern implementiert sind, die einen oder mehrere Kernnetzwerkserver und/oder Edge-Server umfassen können. Eine Framework-Schicht kann ein Framework zur Unterstützung von Software einer Softwareschicht und/oder einer oder mehrerer Anwendungen einer Anwendungsschicht umfassen. Die Software oder die Anwendung(en) können jeweils webbasierte Dienstsoftware oder Anwendungen umfassen. In Ausführungsformen können ein oder mehrere Client-Vorrichtungen die webbasierte Dienstsoftware oder Anwendungen nutzen (z. B. durch Zugriff auf die Dienstsoftware und/oder Anwendungen über eine oder mehrere Anwendungsprogrammierschnittstellen (APIs)). Bei der Framework-Schicht kann es sich um eine Art von freiem und quelloffenem Software-Webanwendungs-Framework handeln, das z. B. ein verteiltes Dateisystem für die Verarbeitung großer Datenmengen (z. B. „Big Data“) verwendet, ohne darauf beschränkt zu sein.
  • Eine Cloud-basierte Netzwerkumgebung kann Cloud-Computing und/oder Cloud-Speicher bereitstellen, die eine beliebige Kombination der hier beschriebenen Rechen- und/oder Datenspeicherfunktionen (oder einen oder mehrere Teile davon) ausführen. Jede dieser verschiedenen Funktionen kann über mehrere Standorte von zentralen oder Kernservern (z. B. von einem oder mehreren Datenzentren, die über einen Staat, eine Region, ein Land, den Globus usw. verteilt sein können) verteilt sein. Befindet sich eine Verbindung zu einem Benutzer (z. B. einem Client-Vorrichtung) relativ nahe an einem oder mehreren Edge-Servern, kann ein Kernserver zumindest einen Teil der Funktionalität dem oder den Edge-Servern zuweisen. Eine Cloud-basierte Netzwerkumgebung kann privat (z. B. auf eine einzelne Organisation beschränkt), öffentlich (z. B. für viele Organisationen verfügbar) und/oder eine Kombination davon (z. B. eine hybride Cloud-Umgebung) sein.
  • Das (die) Client-Vorrichtung(en) kann (können) zumindest einige der Komponenten, Merkmale und Funktionen des (der) hier in Bezug auf 7 beschriebenen Beispiel-Computergeräts (-Vorrichtungen) 700 enthalten. Beispielhaft und ohne Einschränkung kann ein Client-Vorrichtung ein Personal Computer (PC), ein Laptop, ein mobiles Vorrichtung, ein Smartphone, ein Tablet-Computer, eine Smartwatch, ein tragbarer Computer, ein Personal Digital Assistant (PDA), ein MP3-Player, ein Virtual-Reality-Headset, ein Global Positioning System (GPS) oder eine Vorrichtung, ein Videoplayer, eine Videokamera, ein Überwachungsgerät oder -system, ein Fahrzeug, ein Boot, ein fliegendes Schiff, eine virtuelle Maschine ein Boot, ein fliegendes Schiff, eine virtuelle Maschine, eine Drohne, ein Roboter, ein tragbares Kommunikationsgerät, ein Krankenhausgerät, ein Spielgerät oder -system, ein Unterhaltungssystem, ein Fahrzeugcomputersystem, ein eingebettetes Systemsteuergerät, eine Fernbedienung, eine Vorrichtung, ein Unterhaltungselektronikgerät, eine Workstation, ein Edge-Vorrichtung, eine beliebige Kombination dieser beschriebenen Vorrichtungen oder jedes andere geeignete Vorrichtung.
  • Die Offenbarung kann im allgemeinen Kontext von Computercode oder maschinell verwendbaren Anweisungen, einschließlich von computerausführbaren Anweisungen wie Programmmodulen, beschrieben werden, die von einem Computer oder einer anderen Maschine, z. B. einem persönlichen Datenassistenten oder einem anderen Handheld-Vorrichtung, ausgeführt werden. Im Allgemeinen beziehen sich Programmmodule, einschließlich Routinen, Programme, Objekte, Komponenten, Datenstrukturen usw., auf Code, der bestimmte Aufgaben ausführt oder bestimmte abstrakte Datentypen implementiert. Die Offenbarung kann in einer Vielzahl von Systemkonfigurationen angewendet werden, einschließlich tragbaren Vorrichtungen, Unterhaltungselektronik, Allzweckcomputern, spezielleren Datenverarbeitungsvorrichtungen usw. Die Offenbarung kann auch in verteilten Computerumgebungen angewendet werden, in denen Aufgaben von ferngesteuerten Vorrichtungen ausgeführt werden, die über ein Kommunikationsnetz verbunden sind.
  • Wenn hier von „und/oder“ in Bezug auf zwei oder mehr Elemente die Rede ist, sollte dies so verstanden werden, dass nur ein Element oder eine Kombination von Elementen gemeint ist. So kann beispielsweise „Element A, Element B und/oder Element C“ nur Element A, nur Element B, nur Element C, Element A und Element B, Element A und Element C, Element B und Element C oder die Elemente A, B und C umfassen. Darüber hinaus kann „mindestens eines der Elemente A oder B“ mindestens eines der Elemente A, mindestens eines der Elemente B oder mindestens eines der Elemente A und mindestens eines der Elemente B einschließen.
  • Der Gegenstand der vorliegenden Offenbarung wird hier mit einer Genauigkeit beschrieben, die den gesetzlichen Anforderungen entspricht. Die Beschreibung selbst soll jedoch den Umfang dieser Offenbarung nicht einschränken. Vielmehr haben die Erfinder in Betracht gezogen, dass der beanspruchte Gegenstand auch auf andere Weise verkörpert werden könnte, um verschiedene Schritte oder Kombinationen von Schritten, die den in diesem Dokument beschriebenen ähnlich sind, in Verbindung mit anderen gegenwärtigen oder zukünftigen Technologien zu umfassen. Obwohl die Begriffe „Schritt“ und/oder „Block“ hier verwendet werden können, um verschiedene Elemente der angewandten Methoden zu bezeichnen, sollten die Begriffe nicht so ausgelegt werden, dass sie eine bestimmte Reihenfolge unter oder zwischen den verschiedenen hier offenbarten Schritten implizieren, es sei denn, die Reihenfolge der einzelnen Schritte wird ausdrücklich beschrieben.

Claims (20)

  1. Computerimplementiertes Verfahren, das aufweist: Empfangen von Daten, die einer Benachrichtigung über die Ankunft eines Verarbeitungselements, PE, von PEs, die an einer Synchronisationsbarriere teilnehmen, an der Synchronisationsbarriere entsprechen; Zuordnen der Benachrichtigung zu Vorrichtungen, die mehrere der PEs hosten; und Weitergeben der Benachrichtigung an die Vorrichtungen, um Zähler zu aktualisieren, wobei das Weitergeben jede Vorrichtung der Vorrichtungen veranlasst, einen Zähler der Zähler zu aktualisieren, wobei jeder Zähler die Ankünfte der PEs an der Synchronisationsbarriere verfolgt und verwendet wird, um den Durchgang von einem oder mehreren PEs der PEs durch die Synchronisationsbarriere zu steuern.
  2. Verfahren nach Anspruch 1, wobei die Benachrichtigung eine Speicherzugriffsanforderung für eine Reduktionsoperation aufweist und die Weitergabe die Speicherzugriffsanforderung an jede der Vorrichtungen ist.
  3. Verfahren nach Anspruch 1 oder 2, wobei das Empfangen der Daten von einer Vorrichtung erfolgt, die das PE hostet, und die Vorrichtung in den Vorrichtungen enthalten ist, an die die Benachrichtigung weitergegeben wird.
  4. Verfahren nach einem der vorhergehenden Ansprüche, wobei jede Vorrichtung der Vorrichtungen den Zähler analysiert, um es einem entsprechenden PE der auf der Vorrichtung gehosteten PEs zu ermöglichen, nach der Synchronisationsbarriere fortzufahren.
  5. Verfahren nach einem der vorhergehenden Ansprüche, wobei eine Vorrichtung der Vorrichtungen einem entsprechenden PE der auf der Vorrichtung gehosteten PEs ermöglicht, nach der Synchronisationsbarriere fortzufahren, mindestens darauf basierend, dass der Zähler größer oder gleich einem Schwellenwert ist.
  6. Verfahren nach einem der vorhergehenden Ansprüche, wobei eine Vorrichtung der Vorrichtungen einem entsprechenden PE der auf der Vorrichtung gehosteten PEs ermöglicht, nach der Synchronisationsbarriere fortzufahren, mindestens basierend auf dem Vergleichen des Zählers mit einem Epochenwert, der einer Menge von Synchronisationsbarrieren entspricht, die unter Verwendung des Zählers verfolgt worden sind.
  7. Verfahren nach einem der vorhergehenden Ansprüche, wobei das Empfangen der Daten, das Zuordnen der Benachrichtigung und das Weitergeben der Benachrichtigung von einem oder mehreren Switches durchgeführt werden, die sich außerhalb der Vorrichtungen befinden.
  8. Verfahren nach einem der vorhergehenden Ansprüche, wobei die Zähler mindestens basierend auf einer Adressübersetzung einer virtuellen Adresse, die mit der Benachrichtigung verbunden ist, in mindestens eine erste physikalische Adresse (PA), die einem ersten Zähler der Zähler entspricht, und eine zweite PA aktualisiert werden, die einem zweiten Zähler der Zähler entspricht.
  9. Verfahren nach einem der vorhergehenden Ansprüche, wobei der PE ein Streaming-Multiprozessor, eine Einzelbefehls-, Mehrfachdateneinheit, ein Verarbeitungskern, eine Multithreading-Verarbeitungseinheit, ein Thread oder eine Gruppe von Threads ist.
  10. System, das aufweist: eine oder mehrere Verarbeitungseinheiten; und eine oder mehrere Speichereinheiten, die Befehle speichern, die, wenn sie von der einen oder den mehreren Verarbeitungseinheiten ausgeführt werden, die eine oder die mehreren Verarbeitungseinheiten veranlassen, Operationen auszuführen, die aufweisen: Empfangen einer Benachrichtigung, die die Ankunft eines Teilnehmers von Teilnehmern einer Synchronisationsbarriere an der Synchronisationsbarriere anzeigt; und als Reaktion auf das Empfangen der Benachrichtigung, Übertragen von Daten, die eine Weitergabe der Benachrichtigung an Vorrichtungen bewirken, die mehrere der Teilnehmer hosten, um Zähler zu aktualisieren, wobei die Weitergabe jede Vorrichtung der Vorrichtungen veranlasst, einen Zähler der Zähler zu aktualisieren, wobei jeder Zähler Ankünfte der Teilnehmer an der Synchronisationsbarriere verfolgt und verwendet wird, um den Durchgang eines oder mehrerer Teilnehmer der Teilnehmer durch die Synchronisationsbarriere zu steuern.
  11. System nach Anspruch 10, wobei das Empfangen der Benachrichtigung und das Übertragen der Daten von einer Managementeinheit, MMU, als Reaktion darauf durchgeführt werden, dass die MMU die Benachrichtigung vom Teilnehmer empfängt.
  12. System nach Anspruch 10 oder 11, wobei die Benachrichtigung eine Speicherzugriffsanforderung für eine Reduktionsoperation aufweist und die Weitergabe die Speicherzugriffsanforderung an jede der Vorrichtungen ist.
  13. System nach einem der Ansprüche 10 bis 12, wobei die Daten die Benachrichtigung einem oder mehreren Switches anzeigen und der eine oder die mehreren Switches die Benachrichtigung den Vorrichtungen zuordnen, um die Weitergabe durchzuführen.
  14. System nach einem der Ansprüche 10 bis 13, wobei jede Vorrichtung der Vorrichtungen den Zähler analysiert, um es einem entsprechenden Teilnehmer der auf der Vorrichtung gehosteten Teilnehmer zu ermöglichen, nach der Synchronisationsbarriere fortzufahren.
  15. System nach einem der Ansprüche 10 bis 14, wobei die Operationen ferner das Erzeugen der Daten aufweisen, die mindestens auf dem Durchführen mindestens eines Teils einer Adressübersetzung einer virtuellen Adresse, die mit der Benachrichtigung verbunden ist, in mindestens eine erste physikalische Adresse (PA), die einem ersten Zähler der Zähler entspricht, und eine zweite PA basieren, die einem zweiten Zähler der Zähler entspricht.
  16. System nach einem der Ansprüche 10 bis 15, wobei die Operationen ferner als Reaktion auf das Empfangen der Benachrichtigung das Abfragen eines Zählers der Zähler aufweisen, der dem Teilnehmer entspricht, um zu steuern, ob der Teilnehmer nach der Synchronisationsbarriere fortfahren kann.
  17. Eine oder mehrere Vorrichtungen, die aufweisen: eine oder mehrere Hardwarekomponenten, um Daten zu empfangen, die eine Benachrichtigung über die Ankunft eines Teilnehmers von Teilnehmern einer Synchronisationsbarriere an der Synchronisationsbarriere anzeigen, und die Benachrichtigung an mehrere Ziele weiterzuleiten, um den Durchgang der Teilnehmer durch die Synchronisationsbarriere zu steuern.
  18. Eine oder mehrere Vorrichtungen nach Anspruch 17, wobei die eine oder mehreren Hardwarekomponenten eine oder mehrere Speichermanagereinheiten und einen oder mehrere Switches aufweisen.
  19. Eine oder mehrere Vorrichtungen nach Anspruch 17 oder 18, wobei jedes Ziel der Ziele einem entsprechenden Zähler entspricht, der als Reaktion auf die Benachrichtigung aktualisiert wird.
  20. Eine oder mehrere Vorrichtungen nach einem der Ansprüche 17 bis 19, wobei die Benachrichtigung eine Speicherzugriffsanforderung aufweist und die Speicherzugriffsanforderung an mehrere Vorrichtungen weitergegeben wird, um die Zähler zu aktualisieren.
DE102023100874.9A 2022-01-18 2023-01-16 Effiziente Synchronisationsbarrieren für mehrere Vorrichtungen durch Multicasting Pending DE102023100874A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/578,255 US20230229524A1 (en) 2022-01-18 2022-01-18 Efficient multi-device synchronization barriers using multicasting
US17/578,255 2022-01-18

Publications (1)

Publication Number Publication Date
DE102023100874A1 true DE102023100874A1 (de) 2023-07-20

Family

ID=86990396

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102023100874.9A Pending DE102023100874A1 (de) 2022-01-18 2023-01-16 Effiziente Synchronisationsbarrieren für mehrere Vorrichtungen durch Multicasting

Country Status (3)

Country Link
US (1) US20230229524A1 (de)
CN (1) CN116501512A (de)
DE (1) DE102023100874A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11966745B2 (en) 2021-11-15 2024-04-23 Google Llc Sparse SIMD cross-lane processing unit
US11972263B2 (en) 2021-11-22 2024-04-30 Google Llc Cooperative instruction prefetch on multicore system
US11977499B2 (en) * 2022-03-22 2024-05-07 Google Llc Streaming transfers and ordering model

Also Published As

Publication number Publication date
US20230229524A1 (en) 2023-07-20
CN116501512A (zh) 2023-07-28

Similar Documents

Publication Publication Date Title
DE102023100874A1 (de) Effiziente Synchronisationsbarrieren für mehrere Vorrichtungen durch Multicasting
DE102018130037A1 (de) DYNAMISCHES JITTER- und LATENZ-TOLERANTES RENDERING
DE112020004107T5 (de) Inhaltsempfehlungen unter verwendung eines oder mehrerer neuronaler netze
DE102021116109A1 (de) Bilderzeugung unter verwendung eines oder mehrerer neuronaler netzwerke
DE102021205690A1 (de) Trainieren neuronaler Netze mit begrenzten Daten unter Verwendung invertierbarer Augmentationsoperatoren
DE102021132992A1 (de) Messen und Detektieren von Leerlaufzeiten und Erkennen der Ursachen dafür in Cloud-basierten Streaming-Anwendungen
DE102021127175A1 (de) Delta-ausbreitung in cloud-zentrierten plattformen für zusammenarbeit und konnektivität
DE102022104142A1 (de) Strahldichte-caching in echtzeit durch ein neuronales netz für pfadverfolgungszwecke
DE102021125895A1 (de) Latenzbestimmungen für einrichtungen mit menschlicher schnittstelle
DE102022107232A1 (de) Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz
DE102021104310A1 (de) Reservoir-basiertes räumlich-zeitliches resampling nach wichtigkeit unter verwendung einer globalen beleuchtungsdatenstruktur
DE102021119725A1 (de) Überlagern von metadaten über videoströme on-demand zur intelligenten videoanalytik
DE102023104326A1 (de) Hierarchisches netzwerk für gestapeltes speichersystem
DE112020007087T5 (de) Gleichzeitige Hashtabellen-Aktualisierungen
DE102023113190A1 (de) Identifizieren von Applikationspuffern zum Nachbearbeiten und Wiederverwenden in sekundären Applikationen
DE102022121371A1 (de) Verhindern des unautorisierten übertragenen zugriffs durch adressensignierung
DE102022106956A1 (de) Konversationelle ki-plattformen mit dialogintegration von geschlossenen domänen und offenen domänen
DE102022107672A1 (de) Cloud-ausführung von audio/video compositing-anwendungen
DE102022114518A1 (de) Fusionierte verarbeitung eines kontinuierlichen mathematischen operators
DE102021128286A1 (de) Adaptives abtasten mit einer zielabtastrate
DE102019102825A1 (de) Kohärentes Caching von Daten für Skalierung mit hoher Bandbreite
DE102022112488A1 (de) Projektive hash-karten
DE102022132167A1 (de) Spielstilanalyse für Spielempfehlungen
DE112022001485T5 (de) Verfahren und einrichtungen zum synthetisieren von ansichten mit sechs freiheitsgraden aus spärlichen rgb-tiefe-eingaben
DE102022128969A1 (de) Erkennung von benutzerabsichten und zugehörigen entitäten unter verwendung eines neuronalen netzwerks in einer interaktionsumgebung

Legal Events

Date Code Title Description
R012 Request for examination validly filed