DE102022107232A1 - Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz - Google Patents

Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz Download PDF

Info

Publication number
DE102022107232A1
DE102022107232A1 DE102022107232.0A DE102022107232A DE102022107232A1 DE 102022107232 A1 DE102022107232 A1 DE 102022107232A1 DE 102022107232 A DE102022107232 A DE 102022107232A DE 102022107232 A1 DE102022107232 A1 DE 102022107232A1
Authority
DE
Germany
Prior art keywords
compressed data
data
check bits
processor
combination
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
DE102022107232.0A
Other languages
English (en)
Inventor
Michael Brendan Sullivan
Jeffrey Michael Pool
Yangxiang Huang
Timothy Kohchih Tsai
Siva Kumar Sastry Hari
Steven William Keckler
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 DE102022107232A1 publication Critical patent/DE102022107232A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/63Joint error correction and other techniques
    • H03M13/6312Error control coding in combination with data compression
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • G06N3/0442Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computer Hardware Design (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

Eine gepackte Fehlerkorrektur(ECC)-Technik bettet ECC-Prüfbits mit komprimierten Daten opportunistisch ein. Wenn komprimiert, werden die Daten in weniger Bits codiert und sind daher, wenn sie gespeichert oder übertragen werden, im Vergleich mit den unkomprimierten Daten fragmentiert. Die ECC-Prüfbits können mit komprimierten Daten an „Quellen“-Punkten gepackt werden. Die Prüfbits werden zusammen mit den komprimierten Daten übertragen und, an irgendeinem „Zwischen“ Punkt zwischen der Quelle und einem „Ziel“ können die Prüfbits verwendet werden, um Fehler in den komprimierten Daten zu erfassen und zu korrigieren. Im Gegensatz zu herkömmlichen Systemen, ermöglicht ein gepackter ECC eine Ende-zu-Ende-Abdeckung für ausreichend komprimierte Daten innerhalb des Prozessors und sowie auch außerhalb. Während Speicherungsschaltungen typischerweise durch einen strukturspezifischen ECC geschützt werden, ist der Schutz ebenfalls von Vorteil für Daten, wenn sie zwischen Verarbeitungs- und/oder Speicherungseinheiten übertragen werden.

Description

  • HINTERGRUND
  • Ein strukturspezifischer Fehlerkorrekturcode (ECC) wird bereitgestellt, um Fehler innerhalb von Speichervorrichtungen zu erfassen und zu korrigieren, wobei der ECC jedoch nicht extern verfügbar ist. Breite Schnittstellen von modernen Speichervorrichtungen schließen die Verwendung eines dedizierten ECC-Chips zwischen der Speichervorrichtung und einem Prozessor aus. Daher stellen Prozessoren ECC-Unterstützung unter Verwendung von Adresszuordnung bereit, um dedizierte Abschnitte des Speichers herauszuarbeiten, um ECC-Codes zu speichern, die als „eingebettet“ oder „inline“ ECC bezeichnet werden. Nachteile eines herkömmlichen Inline-ECC sind, dass viele Datenzugriffe ebenfalls einen separaten ECC-Zugriff erfordern, der Speicherbandbreitennutzung und Leistungsverbrauch im Vergleich mit nur einem Zugriff auf die Daten erhöht. Es gibt einen Bedarf, sich diesen Problemen und/oder anderen Problemen zu widmen, die dem Stand der Technik zugeordnet sind.
  • ZUSAMMENFASSUNG
  • Ausführungsformen der vorliegenden Offenbarung betreffen einen gepackten Fehlerkorrekturcode für den Schutz von komprimierten Daten. Systeme und Verfahren werden offenbart, die ECC-Prüfbits mit komprimierten Daten an „Quellen“-Punkten opportunistisch packen. Die Prüfbits werden zusammen mit den komprimierten Daten übertragen und an irgendeinem „Zwischen“-Punkt zwischen der Quelle und einem „Ziel“ können die Prüfbits verwendet werden, um Fehler in den komprimierten Daten zu erfassen und zu korrigieren. Im Gegensatz zu herkömmlichen Systemen, wie beispielsweise denen, die oben beschrieben sind, ermöglicht die gepackte ECC-Ende-zu-Ende-Abdeckung für ausreichend komprimierte Daten innerhalb und ebenfalls außerhalb des Prozessors. Während Speicherungsschaltungen typischerweise durch einen strukturspezifischen ECC geschützt werden, ist Schutz ebenfalls von Vorteil für Daten, wenn sie zwischen Verarbeitungs- und/oder Speicherungseinheiten übertragen werden. Insbesondere ist es wünschenswert, Schutz für die Kreuzschienenstruktur bereitzustellen.
  • Ein Verfahren, ein computerlesbares Medium und ein System werden für einen gepackten Fehlerkorrekturcode für den Schutz komprimierter Daten offenbart. In einer Ausführungsform werden komprimierte Daten innerhalb eines Prozessors verarbeitet, um Fehlerkorrektur-Prüfbits zu berechnen, und eine Anzahl von Speichereinheiten fester Größe, die benötigt wird, um eine Kombination der komprimierten Daten und Prüfbits zu speichern, wird bestimmt. In einer Ausführungsform ist die Anzahl von Speichereinheiten fester Größe ein minimale Anzahl, in bei der alle der komprimierten Daten und Prüfbits passen. In einer Ausführungsform werden die komprimierten Daten und die Prüfbits in die Anzahl für einen Transfer innerhalb des Prozessors oder an eine zusätzliche Vorrichtung kombiniert, die sich außerhalb des Prozessors befindet. In einer Ausführungsform wird die Kombination an eine Speicherungsressource innerhalb des Prozessors übertragen und eine Bestimmung basierend auf den Prüfbits wird durchgeführt, ob die komprimierten Daten beschädigt sind. Die Kombination wird in der Speicherungsressource gespeichert und, wenn die komprimierten Daten beschädigt sind, werden die komprimierten Daten unter Verwendung der Prüfbits, entweder bevor oder danach die Kombination gespeichert ist, korrigiert.
  • Figurenliste
  • Die vorliegenden Systeme und Verfahren zum Schützen komprimierter Daten unter Verwendung eines gepackten ECC werden ausführlich nachstehend mit Bezugnahme auf die beigefügten Zeichnungsfiguren beschrieben, wobei:
    • 1A ein Blockdiagramm einer beispielhaften ECC und komprimierten Datenpacklogik veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 1B ein Format für gepackte ECC-Prüfbits und komprimierte Daten veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 1C ein verschachteltes Format für gepackte ECC-Prüfbits und komprimierte Daten veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 1D einen Graphen von Packerfolgsraten veranschaulicht, wenn drei gepackte Kompressionszustände unterstützt werden, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 1E ein Ablaufdiagramm eines Verfahrens zum Packen von ECC-Prüfbits für den Schutz komprimierter Daten veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 2A einen Graphen von Ausfallraten für verschiedene gepackte Formate veranschaulicht, der zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 2B ein Blockdiagramm einer beispielhaften ECC und komprimierten Daten-Korrekturlogik veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 2C ein Blockdiagramm eines beispielhaften Systems zur Verwendung beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung veranschaulicht;
    • 2D ein anderes Ablaufdiagramm eines Verfahrens zum Packen von ECC-Prüfbits für den Schutz komprimierter Daten veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 3 eine beispielhafte Parallelverarbeitungseinheit veranschaulicht, die zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 4A einen beispielhaften allgemeinen
    • Verarbeitungscluster innerhalb der
    • Parallelverarbeitungseinheit von 3 veranschaulicht, der zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 4B eine beispielhafte Speicherpartitionseinheit der Parallelverarbeitungseinheit von 3 veranschaulicht, die zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 4C ein Beispiel des Streaming-Multi-Prozessors von
    • 4A veranschaulicht, der zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 5A ein Konzeptdiagramm eines Verarbeitungssystems ist, das unter Verwendung der PPU von 4 implementiert wird, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist;
    • 5B ein beispielhaftes System veranschaulicht, bei dem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert werden kann;
    • 5C Komponenten eines beispielhaftes Systems veranschaulicht, die verwendet werden können, um maschinelles Lernen in mindestens einer Ausführungsform zu lernen und zu benutzen; und
    • 6 ein beispielhaftes Streaming-System veranschaulicht, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Systeme und Verfahren werden offenbart, die einen gepackten ECC für den Schutz komprimierter Daten betreffen. ECC-Prüfbits können für die komprimierten Daten berechnet und mit den komprimierten Daten in einem gepackten Format unter Verwendung einer Anzahl von Bits kombiniert werden, die gleich oder geringer im Vergleich mit den unkomprimierten Daten ist. Gepackte ECC-komprimierte Daten können innerhalb eines Prozessors oder extern zu dem Prozessor übertragen werden. Die eingebetteten Prüfbits können verwendet werden, um Fehler in den komprimierten Daten an irgendeinem Punkt innerhalb des Prozessors oder durch eine externe Vorrichtung zu erfassen und zu korrigieren, welche die gepackten ECC-komprimierten Daten empfängt. Daher können zusätzlich zum Bereitstellen von Schutz innerhalb des Prozessors der gepackte ECC ebenfalls verwendet werden, um die komprimierten Daten zu schützen, die außerhalb des Prozessors übertragen werden. Umgekehrt kann der Prozessor gepackte ECC-Daten empfangen und irgendwelche Fehler in den empfangenen Daten erfassen und korrigieren, die komprimiert sind.
  • Die Darstellung von Daten in einem komprimierten Format kann Leistung verringern, insbesondere wenn auf einen Speicher zugegriffen wird, welcher die komprimierten Daten speichert. Komprimierte Daten können ebenfalls die Performance verbessern, wenn die Performance bandbreitenbegrenzt ist, indem ermöglicht wird, dass mehr Daten für jede Transaktion transferiert werden. Das Kombinieren von ECC-Prüfbits mit den komprimierten Daten stellt Schutz mit minimalen oder keinen Modifikationen an existierenden Caches und Speicherung innerhalb des Prozessors, Schnittstellen und externen Speichervorrichtungen bereit. Beispielsweise werden dedizierte Speicherung und Routing-Schaltungen für die gepackten ECC-Prüfbits nicht benötigt, weil die Prüfbits mit den komprimierten Daten eingebettet sind - wobei Bits belegt werden, die andernfalls aufgrund von Komprimierung unbenutzt sind. Durch ECC bereitgestellter Schutz verbessert Widerstandsfähigkeit und kann zur Sicherheitszertifizierung und/oder zur Erfüllung von Zuverlässigkeitsanforderungen benötigt werden.
  • Herkömmlicherweise werden Daten im Hauptspeicher und großen Speicherungsanordnungen durch strukturspezifischen ECC geschützt. Inline-Fehlererfassung oder -Korrektur unter Verwendung von ECC wird für Hauptspeicher bereitgestellt, indem ein fester Betrag der Speicherkapazität den ECC-Prüfbits gewidmet wird. Der feste Betrag ist zum Speichern anderer Daten nicht verfügbar, was die Hauptspeicherkapazität wirksam verringert. Außerdem konsumiert Lesen und Schreiben der ECC-Prüfbits zusätzliche Speicherbandbreite und Leistung. Es gibt ebenfalls Verwaltungsaufwand, um die ECC-Prüfbits in den Adressraum abzubilden und zusätzliche Transaktionen (z.B., Speicherzugriffe) zu erzeugen, um auf die ECC-Prüfbits zuzugreifen. Des Weiteren werden in Prozessoren, wie beispielsweise Graphikverarbeitungseinheiten (GPUs), die ECC-Prüfbits allgemein nicht von einer Struktur zu der nächsten übertragen, was Abdeckungslöcher zwischen dem ECC-Decodierer einer Struktur in der Speicherhierarchie und dem ECC-Codierer der nächsten Struktur in der Speicherhierarchie lässt.
  • Im Gegensatz zu herkömmlichen Lösungen erfordern gepackte ECC-komprimierte Daten lediglich dedizierte ECC-Speicherung, wenn die Prüfbits mit den komprimierten Daten aufgrund von unzureichender Komprimierung kombiniert werden können. Daher werden, wenn die Prüfbits mit den komprimierten Daten erfolgreich kombiniert werden, Speicherbandbreite und Leistungsverbrauch für Speicherzugriffe im Vergleich mit Inline-ECC-Implementierungen verringert. Insbesondere kann die Kombination der komprimierten Daten und Prüfbits im Speicher an einem Ort gespeichert werden, auf den durch eine einzige Adresse zugegriffen wird und die unter Verwendung einer einzigen Zugriffsanfrage gelesen oder beschrieben wird. Des Weiteren kann die ECC-Abdeckung durch die Speicherhierarchie und über mehrere Strukturen erweitert werden, wobei Abdeckungslöcher verringert oder beseitigt und die Möglichkeit für Ende-zu-Ende-Schutz bereitstellt.
  • 1A veranschaulicht ein Blockdiagramm einer beispielhaften ECC und komprimierter Datenpacklogik 100, die zur Verwendung beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist. Es versteht sich, dass diese und andere hier beschriebene Anordnungen nur als Beispiele dargelegt werden. Andere Anordnungen und Elemente (z.B. Maschinen, Schnittstellen, Funktionen, Reihenfolgen, Gruppierungen von Funktionen usw.) können zusätzlich oder anstelle der gezeigten verwendet werden und einige Elemente können ganz weggelassen werden. Ferner sind viele der hier beschriebenen Elemente funktionale Einheiten, die als diskrete oder verteilte Komponenten oder in Verbindung mit anderen Komponenten und in jeder geeigneten Kombination und an jeder geeigneten Stelle implementiert werden können. Verschiedene Funktionen, die hier so beschrieben werden, dass sie durch Entitäten ausgeführt werden, können durch Hardware, Firmware und/oder Software ausgeführt werden. Beispielsweise können verschiedene Funktionen durch einen Prozessor ausgeführt werden, der in einem Speicher gespeicherte Anweisungen ausführt. Darüber hinaus werden Durchschnittsfachleute verstehen, dass irgendein System, das die Operationen der ECC und komprimierten Datenpacklogik 100 innerhalb des Umfangs und Wesens von Ausführungsformen der vorliegenden Offenbarung liegt.
  • Wie in 1A gezeigt, komprimiert eine Datenkomprimierungseinheit 110 Daten und eine ECC-Berechnungseinheit 115 berechnet ECC-Prüfbits für die komprimierten Daten. Die von der Datenkomprimierungseinheit 110 durchgeführte Komprimierungsoperation wird von der ECC-Prüfbitberechnung und Packoperationen entkoppelt. Die Datenkomprimierungseinheit 110 kann in einer separate Verarbeitungs- oder Ausführungseinheit mit einer oder mehreren Speicherung und/oder Übertragungsschaltungen zwischen der Datenkomprimierungseinheit 110 und der ECC-Berechnungseinheit 115 sein. Um die komprimierten Daten am besten zu schützen, sollten die Prüfbits jedoch an der Ausgabe der Datenkomprimierungseinheit 110 berechnet werden, um zu gewährleisten, dass die komprimierten Daten nicht beschädigt werden, bevor die Prüfbits berechnet werden.
  • Eine Packeinheit 120 packt die Prüfbits und die komprimierten Daten in die kleinste mögliche Anzahl von Speicherungseinheiten fester Größe, z.B., Atome. In einer Ausführungsform besteht jedes Atom aus 32 Bytes und unkomprimierte Daten bestehen aus vier Atomen. Abhängig davon, wie komprimierbar die Daten sind, können die komprimierten Daten in ein, zwei, drei oder vier Atome passen. In einer Ausführungsform bestehen die Prüfbits, die für jedes Atom von Daten berechnet werden, aus 2 Bytes, so dass 8 Bytes von Prüfbits für vier Atome von komprimierten Daten berechnet werden. In einer Ausführungsform wird eine Anzahl von Atomen bestimmt, die benötigt wird, um eine Kombination der komprimierten Daten und Prüfbits zu speichern. In einer Ausführungsform ist die Anzahl von Atomen eine minimale Anzahl von Atomen, bei der die gesamte Kombination passt. Es ist möglich, dass eine zweite Anzahl von Atomen, die benötigt wird, um die komprimierten Daten ohne die Prüfbits zu speichern, geringer als die Anzahl von Atomen ist, die benötigt werden, um die Kombination der komprimierten Daten und der Prüfbits zu speichern. Die Packeinheit 120 gibt die Kombination und den Kompressionszustand aus. der Kompressionszustand kann in einer Speicherabbildungseinheit, in einer reservierten Metadaten-Speicherregion (möglicherweise mit einer separaten Cache-Hierarchie) gespeichert und/oder mit der Kombination übertragen werden. In einer Ausführungsform gibt der Kompressionszustand, ob die Prüfbits erfolgreich mit den komprimierten Daten in der Kombination gepackt sind oder nicht und die Anzahl von Atomen an, welche die Kombination belegen. In einer Ausführungsform gibt der Kompressionszustand ebenfalls das Komprimierungsformat an, das verwendet wird, um die Daten zu komprimieren, und das benötigt wird, um die komprimierten Daten zu dekomprimieren.
  • In einer Ausführungsform wird der Kompressionszustand mit Zuständen augmentiert, um sowohl gepackte als auch ungepackte Varianten jeder Komprimierungsgröße zu unterstützen. Beispielsweise kann ein einzelnes Bit den Kompressionszustand angeben, ob die Prüfbits mit den komprimierten Daten gepackt sind und das Komprimierungsformat in den verbleibenden Bits des Kompressionszustands codiert ist oder nicht. Daher werden die komprimierten Daten in den gleichen Bits ungeachtet dessen codiert, ob die Prüfbits mit den komprimierten Daten gepackt sind oder nicht. In einer Ausführungsform können, wenn der Kompressionszustand angibt, dass das Packen nicht erfolgreich ist, die getrennt gespeicherten Prüfbits als ein Block vorabgerufen werden, um die Anzahl von Prüfbitlesezugriffen zu verringern, um von der Packausfalllokalität zu profitieren.
  • Wenn Packen erfolgreich ist, ist der Kompressionszustand ein gepackter Kompressionszustand, der die Anzahl von Atomen angibt, bei denen die Kombination passt, und die möglichen gepackten Kompressionszustände können von einer Moduseinstellung abhängen. In einer Ausführungsform ist eine maximale Anzahl von Atomen gleich vier und vier mögliche gepackte Kompressionszustände, ein, zwei, drei und vier Atome, werden unterstützt. Die maximale Anzahl und die gepackten Kompressionszustände werden durch einen gepackten Modus gesteuert, der in die Packeinheit 120 eingegeben wird. Der gepackte Modus kann festgelegt, programmiert oder gemäß einer Einstellung oder einem Kontext konfiguriert sein. In einer anderen Ausführungsform ist die maximale Anzahl von Atomen gleich vier und lediglich zwei mögliche gepackte Kompressionszustände, zwei und vier Atome, werden unterstützt. In einer Ausführungsform ist Packen nicht erfolgreich, wenn die Anzahl von Atomen, die benötigt wird, um die Kombination zu speichern, größer als die maximale Anzahl von Atomen ist. Wenn Packen fehlschlägt, wird die Kombination der Prüfbits und der komprimierten Daten nicht gepackt und der Kompressionszustand ist „nicht gepackt“.
  • Wenn der Kompressionszustand nicht gepackt ist, werden die Prüfbits und die komprimierten Daten getrennt gespeichert und übertragen. In einer anderen Ausführungsform werden, wenn der Kompressionszustand nicht gepackt ist, die Prüfbits von der Kombination entfernt und verworfen, so dass die Prüfbits zur Fehlererfassung und Korrektur nicht verfügbar sind. In einer Ausführungsform ist die maximale Anzahl von Atomen groß genug, um unkomprimierten Daten gepackt mit den Prüfbits zu speichern. Wenn die maximale Anzahl groß genug ist, um unkomprimierte Daten gepackt mit den Prüfbits zu speichern, ist die maximale Anzahl ebenfalls groß genug, um alle Kombinationen von komprimierten Daten und den Prüfbits ungeachtet der Komprimierungsrate oder Komprimierbarkeit der Daten zu speichern. Daher gibt der nicht gepackte Kompressionszustand implizit an, dass die komprimierten Daten die maximale Anzahl von Atomen belegen.
  • Weitere veranschaulichende Informationen werden nun hinsichtlich verschiedener optionaler Architekturen und Merkmale dargelegt, mit denen das vorhergehende Rahmenwerk gemäß den Wünschen des Benutzers implementiert werden kann. Es sei nachdrücklich bemerkt, dass die folgenden Informationen für veranschaulichende Zwecke dargelegt werden und nicht in irgendeiner Art und Weise als beschränkend ausgelegt werden sollten. Jedes der folgenden Merkmale kann optional mit oder ohne den Ausschluss von anderen beschriebenen Merkmalen einbezogen werden.
  • 1B veranschaulicht ein Format zum Codieren einer Kombination aus gepackten ECC-Prüfbits 125 und komprimierten Daten 130, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist. Das Format umfasst eine ganzzahlige Anzahl von N Atomen, wobei 1≤N≤maximum. Wenn die komprimierten Daten 130 weniger als eine ganzzahlige Anzahl von Atomen belegen, sind die komprimierten Daten 130 „fragmentiert“ und die Prüfbits 125 können die nichtbelegten Bits füllen. Wenn die nichtbelegten Bits weniger als die Anzahl von Bits in den Prüfbits 125 sind, kann ein zusätzliches Atom aufgenommen werden, um die Prüfbits 125 mit den komprimierten Daten 130 zu packen. In einer Ausführungsform sind die Prüfbits 125 in der gleichen Position innerhalb des Formats ungeachtet der Anzahl von Atomen lokalisiert, die verwendet werden, um die komprimierten Daten 130 zu codieren. Beispielsweise können die Prüfbits 125 immer in den höchstwertigen Bits sein. In einer Ausführungsform werden die unbenutzten Bits auf einen konstanten oder beliebigen Wert eingestellt. In einer Ausführungsform sind die unbenutzten Bits unverändert im Vergleich mit den komprimierten Daten, die in die ECC-Berechnungseinheit 115 eingegeben werden. In einer Ausführungsform werden die unbenutzten Bits auf Werte eingestellt, das das Hin- und Herschalten (z.B., Signalumschalten) eines Busses minimieren, auf dem die Kombination übertragen wird.
  • 1C veranschaulicht ein verschachteltes Format zum Codieren einer Kombination aus gepackten ECC-Prüfbits 126 und komprimierten Daten 121, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist. Das Format umfasst ein Maximum von vier Atomen, wobei die komprimierten Daten 121 mit den Prüfbits 128 verschachtelt sind. Die Prüfbits 126-A werden für die komprimierten Daten 121-A berechnet und in einer Ausführungsform werden die komprimierten Daten 121-A durch Komprimieren eines Atoms von Daten erzeugt. Wenn die Kombination aus komprimierten Daten 121-A und den Prüfbits 126-A ein Atom überschreitet, schlägt das Packen fehl. Gleichermaßen werden die komprimierten Daten 121-B, 121-C und 121-D mit ihren jeweiligen Prüfbits 126-B, 126-C und 126-D verschachtelt.
  • Ein Vorteil des verschachtelten Formats ist, dass wenn auf weniger als vier Atomen zugegriffen wird, die komprimierten Daten 121 für jedes Atom, das gelesen wird, unter Verwendung der entsprechenden Prüfbits 128 verifiziert und, wenn benötigt, unabhängig korrigiert werden können. Auf ähnliche Weise können, wenn die vier Atome seriell übertragen werden, die komprimierten Daten 121 für jedes Atom verifiziert und, wenn benötigt, korrigiert werden, wenn sie empfangen werden.
  • In einer Ausführungsform umfassen die Kompressionszustände zwei oder mehr ungepackte Kompressionszustände und entsprechende gepackte Kompressionszustände. Beispielsweise sind die gepackten Kompressionszustände 4:1 und 4:2, die angeben, dass Daten, die vier Atomen belegen, komprimiert sind, und wenn mit Prüfbits kombiniert, jeweils 1 und 2 Atomen belegen. In diesem Beispiel, wenn mehr als zwei Atomen für die Kombination aus komprimierten Daten und Prüfbits benötigt werden, schlägt das Packen fehl. In einem anderen Beispiel umfassen die gepackten Kompressionszustände 4:3, was angibt, dass Daten, die vier Atome belegen, komprimiert sind und, wenn mit Prüfbits kombiniert, drei Atomen belegen. Auf ähnliche Weise werden, wenn die gepackten Kompressionszustände 4:4 umfassen, die vier Atome belegenden Daten komprimiert und, wenn mit Prüfbits kombiniert, vier Atomen belegen.
  • In einer Ausführungsform ist die Anzahl von Atomen eine Komprimierungsgröße, die lediglich basierend auf den komprimierten Daten bestimmt wird, und wenn die Kombination der komprimierten Daten und Prüfbits nicht in die Anzahl passen kann, das Packen fehlschlägt. In einer Ausführungsform ist die Anzahl von Atomen eine minimale Anzahl von Atomen, bei der die komprimierten Daten passen. In einer Ausführungsform werden, wenn Packen fehlschlägt, die Prüfbits von der Kombination entfernt und getrennt von den komprimierten Daten transferiert und/oder gespeichert. Wenn entweder Packen fehlschlägt oder ECC-Packen nicht aktiviert ist, geben die ungepackten Kompressionszustände von 4:1, 4:2, 4:3 und 4:4 an, dass die Daten, die vier Atomen belegen, jeweils in 1, 2, 3 und 4 Atomen komprimiert sind.
  • 1D veranschaulicht einen Graphen von Packerfolgsraten, wenn drei gepackte Kompressionszustände unterstützt werden, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Die horizontale Achse gibt die Anzahl von Bytes in den komprimierten Daten an. Die vertikale Achse gibt eine Anzahl der Vorkomnisse für verschiedene komprimierte Daten einer Verarbeitungsarbeitslast an. Die komprimierten Daten 130 belegen mehr als 30 Bytes eines 32Byte-Atoms. Unter der Annahme, dass die Prüfbits für jede 32 Bytes von Daten 2 Bytes erfordern, schlägt Packen für die komprimierten Daten 130 fehl. Für komprimierte Daten, die weniger als 32 Bytes belegen (in Richtung der linken Seite entlang der horizontalen Achse), gelingt Packen für einen gepackten Kompressionszustand von 4:1. Wenn die Komprimierungsgröße durch ein zusätzliches Atom vergrößert werden kann, wird die Anzahl von Atomen für komprimierte Daten 130 von eins auf zwei erhöht und Packen gelingt für einen Kompressionszustand von 4:2.
  • Komprimierte Daten 135 belegen mehr als 60 Bytes von zwei Atomen und Packen schlägt fehl. Wenn die Komprimierungsgröße vergrößert werden kann, wird die Anzahl von Atomen für komprimierte Daten 135 erneut von zwei auf drei erhöht und Packen gelingt für einen Kompressionszustand von 4:3. Komprimierte Daten 140 belegen mehr als 90 Bytes von drei Atomen, so dass Packen für komprimierte Daten 140 fehlschlägt. Wenn die Komprimierungsgröße nicht vergrößert werden kann, so dass die komprimierten Daten 130, 135 und 140 einen ungepackten Kompressionszustand aufweisen, ist die Packerfolgsrate gleich 83%.
  • 1E veranschaulicht ein Ablaufdiagramm eines Verfahrens 150 zum Packen von ECC-Prüfbits für komprimierten Datenschutz, das beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist. Jeder Block des hier beschrieben Verfahrens 150 umfasst ein Rechenverfahren, das unter Verwendung einer beliebigen Kombination aus Hardware, Firmware und/oder Software durchgeführt werden kann. So können beispielsweise verschiedene Funktionen von einem Prozessor ausgeführt werden, der im Speicher gespeicherte Anweisungen ausführt. Das Verfahren kann ebenfalls als computerverwendbare Anweisungen verkörpert sein, die auf Computerspeichermedien gespeichert sind. Das Verfahren kann durch eine eigenständige Anwendung, einen Dienst oder gehosteten Dienst (eigenständig oder in Kombination mit einem anderen gehosteten Dienst) oder einem Plug-in in ein anderes Produkt bereitgestellt werden, um nur einige zu nennen. Außerdem wird das Verfahren 150 beispielhaft mit Bezug auf die Logik von 1A beschrieben. Dieses Verfahren kann jedoch zusätzlich oder alternativ durch irgendein System oder eine irgendeine Kombination von Systemen, einschließlich, jedoch nicht begrenzt auf jene ausgeführt werden, die hier beschrieben werden. Des Weiteren versteht sich für Durchschnittsfachleute, dass jedes beliebige System, welches das Verfahren 150 ausführt, in den Umfang und das Wesen von Ausführungsformen der vorliegenden Offenbarung fällt.
  • Bei Schritt 155 werden komprimierte Daten innerhalb eines Prozessors verarbeitet, um ECC-Prüfbits zu berechnen. In einer Ausführungsform ist die ECC-Qualität festgelegt, so dass keine zusätzlichen Zustandsinformationen verfolgt oder gespeichert werden. Mit anderen Worten können in einer Ausführungsform Fehler in den komprimierten Daten unter Verwendung lediglich des Kompressionszustands, komprimierter Daten und den Prüfbits erfasst werden. In einer Ausführungsform werden die komprimierten Daten von einer zusätzlichen Vorrichtung empfangen, die sich außerhalb des Prozessors befindet. In einer Ausführungsform werden die komprimierten Daten innerhalb des Prozessors erzeugt.
  • Bei Schritt 160 wird eine Anzahl von Speichereinheiten fester Größe (z.B., Atome) bestimmt, die benötigt werden, um eine Kombination der komprimierten Daten und Prüfbits zu speichern. In einer Ausführungsform ist die Anzahl von Speichereinheiten fester Größe, die bestimmt wird, eine minimale Anzahl von Speichereinheiten fester Größe, bei der die gesamte Kombination passt. In einer Ausführungsform ist eine zweite Anzahl der Speichereinheiten fester Größe, die benötigt wird, um die komprimierten Daten ohne die Prüfbits zu speichern, geringer als die Anzahl, die benötigt wird, um die Kombination zu speichern. In einer Ausführungsform werden die ECC-Prüfbits für einen Abschnitt der komprimierten Daten in jeder Speichereinheit fester Größe getrennt berechnet und in der Speichereinheit fester Größe mit dem Abschnitt der komprimierten Daten kombiniert.
  • Bei Schritt 165 werden die komprimierten Daten und die Prüfbits in die Anzahl kombiniert, um eine Kombination zu erzeugen. Bei Schritt 170 wird die Kombination entweder innerhalb eines Prozessors oder an eine zusätzliche Vorrichtung übertragen, die sich außerhalb des Prozessors befindet. In einer Ausführungsform werden die Prüfbits an einer Schnittstelle mit der zusätzlichen Vorrichtung verworfen und lediglich die komprimierten Daten werden von dem Prozessor an die zusätzliche Vorrichtung übertragen. In einer Ausführungsform wird die Kombination in einer Speichervorrichtung gespeichert. In einer Ausführungsform wird die Kombination von dem Prozessor an die zusätzliche Vorrichtung über eine Zwischenverbindung übertragen. In einer Ausführungsform wird die Kombination durch eine Kreuzschienenverbindung innerhalb des Prozessors übertragen.
  • In einer Ausführungsform wird eine maximale Anzahl der Einheiten fester Größe definiert und, wenn die Anzahl größer als die maximale Anzahl ist, werden die Prüfbits aus der Kombination entfernt. Wenn die Prüfbits entfernt sind, können die Prüfbits innerhalb des Prozessors oder an die zusätzliche Vorrichtung getrennt von den komprimierten Daten transferiert werden. In einer Ausführungsform werden die komprimierten Daten in einem ersten Abschnitt einer Speichervorrichtung gespeichert und die Prüfbits werden in einem zweiten Abschnitt der Speichervorrichtung gespeichert, der von dem ersten Abschnitt getrennt ist.
  • 2A veranschaulicht einen Graphen von Ausfallraten für verschiedene gepackte Formate, der zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist. Jeder Satz von vier Balken entspricht der Packausfallrate während der Ausführung eines Programms. Der Balken am äußersten linken in jedem Satz ist für die gepackte Kompressionszustände (4:1 und 4:2) und die resultierende Packausfallrate ist im Mittel geringer als 50%. Wenn Packen fehlschlägt, werden die Prüfbits getrennt von den komprimierten Daten (z.B., Inline-ECC) gespeicherten. Daher werden im Vergleich mit herkömmlichen Inline-ECC die zusätzlichen Zugriffe für getrennt gespeicherte Prüfbits mehr als die Hälfte der Zeit elidiert. Hinzufügen des 4:3 Kompressionszustands führt zu einer durchschnittlichen Packausfallrate von nahezu 20%, wobei 4/5 der ECC Zugriffe im Vergleich mit herkömmlichen Inline-ECC elidiert werden.
  • Die beiden Balken ganz rechts für jeden Satz umfassen einen spezialisierten 4:4 gepackten Kompressionszustand. Die spezialisierte, gerade ausreichende 4:4 gepackte Komprimierung verstärkt die Packerfolgsrate für geringfügig komprimierbare Daten, insbesondere Gleitkommadaten. Die geringfügig komprimierbaren Daten komprimieren ausreichend, um die Prüfbits in die maximale Anzahl von Atomen zu packen, ist jedoch für Bandbreitenkomprimierung nicht ausreichend.
  • In einer Ausführungsform arbeitet ein spezialisierter Kompressor an einer kleinen 32Byte-Komprimierungs-Blockgröße, um einen Direktzugriff auf die geringfügig komprimierbaren Daten für den 4:4 gepackten Kompressionszustand beizubehalten, der vier 32Byte-Blöcke umfasst. Das arbeiten an der kleineren Blockgröße vermeidet eine potenzielle Leistungsverschlechterung in der Form von Überabruf während Direktzugriffe auf 32Byte-Granularität für geringfügig komprimierbare Arbeitslasten. In einer Ausführungsform ist der spezialisierte Kompressor innerhalb der Datenkomprimierungseinheit 110 oder in der ECC-Berechnungseinheit 115 enthalten. Wie in 2A gezeigt, verringert der 4:4 gepackte Kompressionszustand die durchschnittliche Packausfallrate auf 10% oder weniger. Wenn all vier gepackten Kompressionszustände verfügbar sind, wie durch die Balken ganz rechts in jedem Satz gezeigt, wird die niedrigste Packausfallrate erzielt.
  • 2B veranschaulicht ein Blockdiagramm einer beispielhaften ECC und komprimierte Daten-Korrekturlogik 200, die zur Verwendung beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist. Es versteht sich, dass diese und andere hier beschriebene Anordnungen nur als Beispiele dargelegt werden. Andere Anordnungen und Elemente (z.B. Maschinen, Schnittstellen, Funktionen, Reihenfolgen, Gruppierungen von Funktionen usw.) können zusätzlich oder anstelle der gezeigten verwendet werden und einige Elemente können ganz weggelassen werden. Ferner sind viele der hier beschriebenen Elemente funktionale Einheiten, die als diskrete oder verteilte Komponenten oder in Verbindung mit anderen Komponenten und in jeder geeigneten Kombination und an jeder geeigneten Stelle implementiert werden können. Verschiedene Funktionen, die hier so beschrieben werden, dass sie durch Entitäten ausgeführt werden, können durch Hardware, Firmware und/oder Software ausgeführt werden. Beispielsweise können verschiedene Funktionen durch einen Prozessor ausgeführt werden, der in einem Speicher gespeicherte Anweisungen ausführt. Darüber hinaus werden Durchschnittsfachleute verstehen, dass irgendein System, das die Operationen der ECC und komprimierten Daten-Korrekturlogik 200 innerhalb des Umfangs und Wesens von Ausführungsformen der vorliegenden Offenbarung liegt.
  • Wie in 2B gezeigt, berechnet eine ECC-Berechnungseinheit 215 ECC-Prüfbits für den komprimierten Datenabschnitt der gepackten Daten und eine Korrektureinheit 205 vergleicht die berechneten Prüfbits mit dem Abschnitt der Prüfbits der gepackten Daten, um zu erfassen, ob die komprimierten Daten korrekt oder beschädigt sind. Die ECC-Berechnungseinheit 215 und die Korrektureinheit 205 verwenden jeweils den Kompressionszustand für die gepackten Daten, um die komprimierten Daten und Prüfbits nach Bedarf zu trennen. Wenn die Korrektureinheit 205 bestimmt, dass die komprimierten Daten beschädigt sind, dann korrigiert die Korrektureinheit 205 die komprimierten Daten. Die Korrektureinheit 205 gibt die komprimierten Daten an eine Datendekomprimierungseinheit 210 und eine Packeinheit 220 aus. Die Korrektureinheit 205 gibt ebenfalls den Abschnitt der Prüfbits der gepackten Daten an die Packeinheit 220 aus.
  • Die Packeinheit 220 führt die gleichen Operationen wie die Packeinheit 120 durch, welche die Kombination und den Kompressionszustand ausgeben. In einer Ausführungsform kann sich der gepackte Modus im Vergleich mit dem gepackten Modus ändern, der von der Packeinheit 120 verwendet wurde. Wenn der gepackte Modus unverändert ist und keine Beschädigung der Korrektureinheit 205 erfasst wird, können die von der ECC-Berechnungseinheit 215 empfangenen gepackten Daten zur Ausgabe durch die ECC und komprimierte Daten-Korrekturlogik 200 ausgewählt werden. In einer Ausführungsform ist die Datendekomprimierungseinheit 210 an einem Zielpunkt und die gepackten Daten werden nicht innerhalb des Prozessors oder an eine zusätzliche Vorrichtung transferiert, die sich außerhalb befindet, und die Packeinheit 220 wird weggelassen.
  • Die von der Datendekomprimierungseinheit 210 durchgeführte Komprimierungsoperation ist von der ECC-Prüfbitberechnungs-, Korrektur- und Packoperationen entkoppelt. Die Datendekomprimierungseinheit 210 kann in einer separaten Verarbeitungseinheit mit einer oder mehreren Speicherungen und/oder Übertragungsschaltungen zwischen der Datenkomprimierungseinheit 210 und der Korrektureinheit 205 sein. Um die komprimierten Daten am besten zu schützen, sollte die Erfassung und, wenn benötigt, die Korrektur der komprimierten Daten jedoch am Eingang zu der Datendekomprimierungseinheit 210 durchgeführt werden, um zu gewährleisten, dass die komprimierten Daten zwischen der Korrektureinheit und der Datendekomprimierungseinheit 210 nicht beschädigt werden.
  • 2C veranschaulicht ein Blockdiagramm eines beispielhaften Systems 225 zur Verwendung beim Implementieren einiger Ausführungsformen der vorliegenden Offenbarung. Das System 225 umfasst einen Prozessor 230 und einen Speicher 235, der sich außerhalb des Prozessors 230 befindet und mehrere Speichervorrichtungen umfassen kann. Der Prozessor 230 umfasst eine Schnittstelle 254 mit mindestens einer zusätzlichen Vorrichtung 227, die sich außerhalb des Prozessors 230 befindet, und eine Schnittstelle 256 mit einer Zwischenverbindung eines NVLink 258.
  • Zusätzlich zu Einheiten, wie beispielsweise den Schnittstellen 254 und 256, umfasst der Prozessor 230 ebenfalls eine oder mehrere Einheiten, die eine Speicherung, wie beispielsweise einen L2-Cache 232 und L1-Cache 252, eine Zwischenverbindung der Kreuzschiene 255 und/oder Verarbeitungs- oder Ausführungskerne 250 umfassen. Jede einzelne der Einheiten kann eine ECC-Packeinheit 120 umfassen und/oder kann imstande sein, Daten zu komprimieren und ECC-Prüfbits zu berechnen. Jede einzelne der Einheiten kann eine ECC-Packeinheit 220 umfassen und/oder kann imstande sein, Fehler in komprimierten Daten basierend auf den Prüfbits zu erfassen und zu korrigieren. Jeder einzelne der Einheiten kann ebenfalls konfiguriert sein, um die komprimierten Daten zu dekomprimieren. Im Allgemeinen kann für eine bestimmte Transaktion irgendeine der Einheiten ein Quellenpunkt, der die gepackten Daten erzeugt, ein Zwischenpunkt, der die gepackten Daten mit oder ohne Erfassen und Korrigieren der Fehler einfach überträgt, oder ein Zielpunkt sein, der Fehler in den komprimierten Daten erfasst und korrigiert, die mit den Prüfbits in den gepackten Daten enthalten sind. Der Zielpunkt kann ebenfalls die komprimierten Daten dekomprimieren. Auf ähnliche Weise kann der Quellenpunkt ebenfalls die Daten komprimieren, die mit den Prüfbits gepackt sind. Die gepackten Daten können in dem Speicher 235 mit oder ohne Erfassen und Korrigieren von Fehlern gespeichert werden. Für einige Transaktionen ist die Quelle oder Ziel außerhalb des Prozessors 230 und wird via NVLink 258 erreicht. Der Quellenpunkt und Zielpunkt definieren eine Schutzzone für komprimierte Daten. Zwischenpunkte, die Fehler erfassen und korrigieren, können verwendet werden, um die Zuverlässigkeit zu verbessen.
  • Ein gepackter ECC ermöglicht einen opportunistischen Ende-zu-Ende-Schutz innerhalb der Schutzzone. Beispielsweise kann der L2-Cache 232 gepackte Daten speichern und optional Fehler erfassen und korrigieren. Die Kreuzschiene 255 kann gepackte Daten zwischen einem oder mehreren des L2-Cache 232, des L1-Cache 252 und der Schnittstelle 256 transferieren. Der L2-Cache 252 kann gepackte Daten speichern und optional Fehler erfassen und korrigieren, während die komprimierten Daten zur Ausgabe an den(die) Ausführungskern(e) 250 ebenfalls dekomprimiert werden. der L2-Cache 252 kann ebenfalls Daten komprimieren und packen, die von den Ausführungskern(en) 250 empfangen werden. Das Bereitstellen der Erfassung und Korrektur von Fehlern in dem L2-Cache 232 und L1-Cache 252 füllt ein potenzielles Zuverlässigkeits-Abdeckungsloch innerhalb des Prozessors 230 und vergrößert einen Bereich der Schutzzone über der Kreuzschiene 255.
  • Das Speichern gepackter Daten in dem Speicher 235 und das Erfassen und Korrigieren von Fehlern in dem L2-Cache 252 stellt Schutz für Daten bereit, die zwischen dem Speicher 235 und dem Prozessor 230 transferiert werden. Erfassen und Korrigieren von Fehlern an der Schnittstelle 254 stellt Schutz für Daten bereit, die zwischen dem Prozessor 230 und der zusätzlichen Vorrichtung 227 transferiert werden. Auf ähnliche Weise stellt das Erfassen und Korrigieren von Fehlern an der Schnittstelle 256 Schutz für Daten bereit, die zwischen dem Prozessor 230 und der mit dem NVlink 258 gekoppelten Vorrichtung transferiert werden.
  • 2D veranschaulicht ein anderes Ablaufdiagramm eines Verfahrens 260 zum Packen von ECC-Prüfbits für den Schutz komprimierter Daten, das zur Verwendung beim Implementieren der vorliegenden Offenbarung geeignet ist. Jeder Block des hier beschriebenen Verfahrens 260 weist einen Rechenprozess auf, der unter Verwendung einer beliebigen Kombination aus Hardware, Firmware und/oder Software durchgeführt werden kann. Beispielsweise können verschiedene Funktionen durch einen Prozessor ausgeführt werden, der im Speicher gespeicherte Anweisungen ausführt. Das Verfahren kann auch als computerverwendbare Anweisungen ausgeführt werden, die auf Computerspeichermedien gespeichert sind. Das Verfahren kann durch eine eigenständige Anwendung, einen Dienst oder gehosteten Dienst (eigenständig oder in Kombination mit einem anderen gehosteten Dienst) oder ein Plug-In in einem anderen Produkt bereitgestellt werden, um nur einige wenige zu nennen.
  • Außerdem wird das Verfahren 260 beispielhaft in Bezug auf die Logik von 1A, 2B und 2C beschrieben. Jedoch kann dieses Verfahren zusätzlich oder alternativ durch irgendein System oder irgendeine Kombination von Systemen ausgeführt werden, einschließlich, jedoch nicht beschränkt auf jene, die hier beschrieben sind. Darüber hinaus werden Durchschnittsfachleute verstehen, dass jedes System, das das Verfahren 260 ausführt, innerhalb des Umfangs und Wesens der Ausführungsformen der vorliegenden Offenbarung liegt.
  • Schritte 155 und 160 werden durchgeführt, wie zuvor in Verbindung mit dem Verfahren 150 beschrieben. Bei Schritt 265 wird die Kombination der komprimierten Daten und Prüfbits an eine Speicherungsressource innerhalb des Prozessors übertragen. In einer Ausführungsform umfasst eine Speicherungsressource innerhalb des Prozessors eine Registerdatei und/oder einen Speicher, wie beispielsweise den L2-Cache 232 und L1-Cache 252 innerhalb des Prozessors 230. In einer Ausführungsform wird die Kombination durch eine Kreuzschienenverbindung innerhalb des Prozessors an die Speicherungsressource übertragen. In einer Ausführungsform ist die Speicherungsressource ein Quellen-, Zwischen- und/oder Zielpunkt innerhalb des Prozessors.
  • Bei Schritt 270 bestimmt die Logik an dem Zwischen- oder Zielpunkt, an den die Kombination übertragen wird, ob die komprimierten Daten beschädigt sind. In einer Ausführungsform umfasst die Logik die ECC-Berechnungseinheit 215 und die Korrektureinheit 205. Wenn bei Schritt 270 die komprimierten Daten beschädigt sind, dann werden bei Schritt 275 die komprimierten Daten unter Verwendung der Prüfbits korrigiert, bevor mit Schritt 280 fortgefahren wird. Bei Schritt 280 wird die Kombination in der Speicherungsressource gespeichert. In einer anderen Ausführungsform werden lediglich die komprimierten Daten bei Schritt 280 gespeichert und die Prüfbits werden verworfen. In einer Ausführungsform wird Schritt 280 vor Schritt 270 durchgeführt und irgendwelche beschädigten komprimierten Daten, die in der Speicherungsressource gespeichert sind, werden überschrieben, nachdem sie korrigiert wurden. In einer anderen Ausführungsform wird Schritt 280 vor Schritt 270 durchgeführt und irgendwelche in der Speicherungsressource gespeicherten beschädigten komprimierten Daten werden korrigiert, wenn die komprimierten Daten aus der Speicherungsressource gelesen werden. In einer Ausführungsform empfing ein Ausführungskern innerhalb des Prozessors die Kombination von der Speicherungsressource, der Ausführungskern bestimmt basierend auf den Prüfbits, dass die komprimierten Daten beschädigt sind, und der Ausführungskern korrigiert die komprimierten Daten unter Verwendung der Prüfbits vor der Verarbeitung der komprimierten Daten.
  • In einer Ausführungsform wird die Kombination aus der Speicherungsressource gelesen und von dem Prozessor an eine zusätzliche Vorrichtung übertragen, die sich außerhalb des Prozessors befindet. In einer Ausführungsform bestimmt die zusätzliche Vorrichtung, dass die komprimierten Daten beschädigt sind und korrigiert die komprimierten Daten unter Verwendung der Prüfbits vor dem Verarbeiten und/oder Speichern der Kombination. In einer Ausführungsform werden die Prüfbits an einer Schnittstelle mit der zusätzlichen Vorrichtung verworfen und lediglich die komprimierten Daten werden von dem Prozessor an die zusätzliche Vorrichtung übertragen. In einer Ausführungsform wird die Kombination von dem Prozessor übertragen und in einer Speichervorrichtung gespeichert, die sich außerhalb des Prozessors befindet. In einer Ausführungsform werden die Prüfbits an einer Schnittstelle mit der Speichervorrichtung verworfen und lediglich die komprimierten Daten werden von dem Prozessor an die Speichervorrichtung übertragen.
  • Im Vergleich mit Inline-ECC-Implementierungen vermeidet oder verringert das Packen der Prüfbits mit den komprimierten Daten die dedizierte Prüfbitspeicherung in einem externen Speicher und dedizierte Schreib- und Leseanfragen für die Prüfbits erheblich. Der Schutz kann innerhalb eines Prozessors und zwischen separaten Vorrichtungen durch Übertragen der Kombination aus komprimierten Daten und Prüfbits zwischen unterschiedlichen Verarbeitungseinheiten, Speicherungsressourcen und Vorrichtungen erweitert werden. Daher können Zuverlässigkeitslöcher sogar für Zwischenverbindungsstrukturen innerhalb des Prozessors und zwischen Vorrichtungen gefüllt werden. Für Daten, die nicht ausreichend komprimiert werden können, kann Inline-ECC-Schutz verwendet werden, während immer noch von der Effizienz von Packen anderer Daten profitiert wird, die ausreichend komprimiert werden können. Insgesamt verringert der gepackte ECC Speicherbandbreitenverbrauch und Leistung, während Zuverlässigkeit und Performance verbessert werden.
  • Parallelverarbeitungsarchitektur 3 veranschaulicht eine Parallelverarbeitungseinheit (PPU) 300 gemäß einer Ausführungsform. Die PPU 300 kann eine oder mehrere der ECC und komprimierten Daten-Packlogik 100 oder der ECC und komprimierten Daten-Korrekturlogik 200 umfassen. Die PPU 300 kann eine oder mehrere der Datenkomprimierungseinheit 110, ECC-Berechnungseinheiten 115 und 215, Packeinheiten 120 und 220, Korrektureinheit 205 oder Datendekomprimierungseinheit 210 umfassen. Die PPU 300 kann konfiguriert sein, um das jeweils in 1E und 2D gezeigte Verfahren 150 oder 260 zu implementieren.
  • In einer Ausführungsform kann ein Prozessor wie die PPU 300 konfiguriert sein, ein neuronales Netzwerkmodell zu implementieren. Das neuronale Netzwerkmodell kann als Softwareanweisungen implementiert sein, die durch den Prozessor ausgeführt werden, oder in einer anderen Ausführungsformen kann der Prozessor eine Matrix von Hardwareelementen aufweisen, die konfiguriert sind, um einen Satz von Eingaben (z.B. elektrische Signale, die Werte repräsentieren) zu verarbeiten, um einen Satz von Ausgaben zu erzeugen, die Aktivierungen des neuronalen Netzwerkmodells repräsentieren können. In noch anderen Ausführungsformen kann das neuronale Netzwerkmodell als eine Kombination von Softwareanweisungen und einer Verarbeitung implementiert sein, die durch eine Matrix von Hardwareelementen ausgeführt wird. Das Implementieren des neuronalen Netzwerkmodells kann das Bestimmen eines Satzes von Parametern für das neuronale Netzwerkmodell durch z.B. ein überwachtes oder unüberwachtes Training des neuronalen Netzwerkmodells sowie auch oder alternativ das Durchführen einer Inferenz unter Verwendung des Satzes der Parameter aufweisen, um neue Sätze von Eingaben zu verarbeiten.
  • In einer Ausführungsform ist die PPU 300 ein Multi-Threaded-Prozessor bzw. mehrsträngiger Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist. Die PPU 300 ist eine Latenz-verbergende Architektur, die ausgestaltet ist, um eine große Anzahl von Threads bzw. Strängen parallel zu verarbeiten. Ein Thread bzw. Strang (z.B. ein Ausführungsthread) ist eine Instanziierung eines Satzes von Anweisungen, die konfiguriert sind, um von der PPU 300 ausgeführt zu werden. In einer Ausführungsform ist die PPU 300 eine Graphikverarbeitungseinheit (GPU), die konfiguriert ist, um eine Graphik-Rendering-Pipeline zur Verarbeitung von dreidimensionalen (3D) Graphikdaten zu implementieren, um zweidimensionale (2D) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeige(LCD)-Vorrichtung, zu erzeugen. In anderen Ausführungsformen kann die PPU 300 zum Durchführen von Allzweckberechnungen benutzt werden. Während ein beispielhafter paralleler Prozessor hier für veranschaulichende Zwecke bereitgestellt wird, sei nachdrücklich bemerkt, dass ein derartiger Prozessor lediglich für veranschaulichende Zwecke dargelegt wird und dass ein beliebiger Prozessor benutzt werden kann, um dasselbe zu ergänzen und/oder zu ersetzen.
  • Eine oder mehrere PPUs 300 können konfiguriert sein, um Tausende von HPC(High Performing Computing)-, Rechenzentrum-, Cloud-Computing- und Maschinenlern-Anwendungen zu beschleunigen. Die PPU 300 kann konfiguriert sein, um zahlreiche Deep-Learning-Systeme und Anwendungen für autonome Fahrzeuge, Simulation, Rechengraphik zu beschleunigen, wie beispielsweise Strahlen- oder Pfadverfolgung, Deep-Learning, hochgenaue Sprache, Bild- und Texterkennungssysteme, intelligente Videoanalyse, molekulare Simulationen, Wirkstoffentdeckung, Krankheitsdiagnose, Wettervorhersage, Analyse großer Datenmengen, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotertechnik, Fabrikautomation, Sprachübersetzung in Echtzeit, Online-Suchoptimierungen und personalisierte Benutzerempfehlungen und dergleichen.
  • Wie in 3 gezeigt, umfasst die PPU 300 eine Eingabe/Ausgabe(E/A)-Einheit 305, eine Frontend-Einheit 315, eine Planereinheit 320, eine Arbeitsverteilungs-Einheit 325, einen Hub 330, eine Kreuzschiene (Xbar) 370, einen oder mehrere allgemeine Verarbeitungscluster (GPCs) 350 und eine oder mehrere Speicherpartitionseinheiten 380. Die PPU 300 kann mit einem Host-Prozessor oder anderen PPUs 300 über eine Zwischenverbindung des Hochgeschwindigkeits-NVLink 310 verbunden sein. Die PPU 300 kann ebenfalls mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über eine Zwischenverbindung 302 verbunden sein. Die PPU 300 kann ebenfalls mit einem lokalen Speicher 304 verbunden sein, der eine Anzahl von Speichervorrichtungen umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von Direktzugriffsspeicher(DRAM)-Vorrichtungen umfassen. Die DRAM-Vorrichtungen können als ein HBM(Speicher mit hoher Bandbreite)-Subsystem konfiguriert sein, wobei mehrere DRAM-Dies innerhalb jeder Vorrichtung gestapelt sind.
  • Die Zwischenverbindung des NVLink 310 ermöglicht Systemen, eine oder mehrere PPUs 300 zu skalieren und zu umfassen, die mit einer oder mehreren CPUs kombiniert sind, unterstützt Cache-Kohärenz zwischen den PPUs 300 und CPUs sowie CPU-Mastering. Daten und/oder Befehle können mittels des NVLink 310 durch den Hub 330 an/von anderen Einheiten der PPU 300, wie beispielsweise eine oder mehrere Kopiermaschinen, einen Videocodierer, einen Videodecodierer, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt) übertragen werden. Das NVLink 310 wird ausführlicher in Verbindung mit 5A beschrieben.
  • Die E/A-Einheit 305 ist konfiguriert, um Kommunikationen (z.B. Befehle, Daten usw.) von einem Host-Prozessor (nicht gezeigt) über die Zwischenverbindung 302 zu übertragen und zu empfangen. Die E/A-Einheit 305 kann mit dem Host-Prozessor direkt über die Zwischenverbindung 302 oder durch eine oder mehrere Zwischenvorrichtungen, wie beispielsweise eine Speicherbrücke, kommunizieren. In einer Ausführungsform kann die E/A-Einheit 305 mit einem oder mehreren anderen Prozessoren, wie beispielsweise eine oder mehrere der PPUs, über die Zwischenverbindung 302 kommunizieren. In einer Ausführungsformen implementiert die E/A-Einheit 305 eine PCIe(Peripheral Component Zwischenverbindung Express)-Schnittstelle für Kommunikationen über einen PCIe-Bus und die Zwischenverbindung 302 ist ein PCIe-Bus. In alternativen Ausführungsformen kann die E/A-Einheit 305 andere Typen von wohlbekannten Schnittstellen zum Kommunizieren mit externen Vorrichtungen umfassen.
  • Die E/A-Einheit 305 decodiert Pakete, die über die Zwischenverbindung 302 empfangen wurden. In einer Ausführungsform stellen die Pakete Befehle dar, die konfiguriert sind, um die PPU 300 zu veranlassen, verschiedene Operationen durchzuführen. Die E/A-Einheit 305 überträgt die decodierten Befehle an verschiedene andere Einheiten der PPU 300, wie es die Befehle spezifizieren können. Beispielsweise können einige Befehle an die Frontend-Einheit 315 übertragen werden. Andere Befehle können an den Hub 330 oder andere Einheiten der PPU 300, wie beispielsweise eine oder mehrere Kopiermaschinen, einen Video-Codierer, einen Video-Decodierer, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt) übertragen werden. Mit anderen Worten ist die E/A-Einheit 305 konfiguriert, um Kommunikationen zwischen und unter den verschiedenen logischen Einheiten der PPU 300 weiterzuleiten.
  • In einer Ausführungsform codiert ein Programm, das von dem Host-Prozessor ausgeführt wird, einen Befehlsstrom in einem Puffer, welcher der PPU 300 Arbeitslasten zur Verarbeitung bereitstellt. Eine Arbeitslast kann mehrere Anweisungen und Daten umfassen, die von diesen Anweisungen zu verarbeiten sind. Der Puffer ist ein Bereich in einem Speicher, der von sowohl dem Host-Prozessor als auch der PPU 300 zugänglich ist (z.B Lesen/Schreiben). Beispielsweise kann die Host-Schnittstelleneinheit 310 konfiguriert sein, um auf den Puffer in einem Systemspeicher, der mit der Zwischenverbindung 302 verbunden ist, über Speicheranfragen, die über die Zwischenverbindung 302 übertragen werden, zuzugreifen. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und überträgt dann einen Zeiger zu dem Start des Befehlsstroms an die PPU 300. Die Frontend-Einheit 315 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Frontend-Einheit 315 verwaltet den einen oder mehrere Ströme, liest Befehle von den Strömen und leitet Befehle an die verschiedenen Einheiten der PPU 300 weiter.
  • Die Frontend-Einheit 315 ist mit einer Planereinheit 320 gekoppelt, welche die verschiedenen GPCs 350 konfiguriert, um Aufgaben zu verarbeiten, die durch den einen oder mehrere Ströme definiert sind. Die Planereinheit 320 ist konfiguriert, um Zustandsinformation zu verfolgen, die verschiedene Aufgaben betrifft, die von der Planereinheit 320 verwaltet werden. Der Zustand kann angeben, welchem GPC 350 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, ob ein Prioritätsniveau der Aufgabe zugeordnet ist und so weiter. Die Planereinheit 320 verwaltet die Ausführung einer Mehrzahl von Aufgaben auf dem einen oder mehreren GPCs 350.
  • Die Planereinheit 320 ist mit einer Arbeitsverteilungs-Einheit 325 gekoppelt, die konfiguriert ist, um Aufgaben zur Ausführung auf den GPCs 350 zu versenden. Die Arbeitsverteilungs-Einheit 325 kann eine Anzahl von eingeplanten Aufgaben verfolgen, die von der Planereinheit 320 empfangen werden. In einer Ausführungsform verwaltet die Arbeitsverteilungs-Einheit 325 einen Pool für anhängige Aufgaben und einen Pool für aktive Aufgaben für jeden der GPCs 350. Der Pool für anhängige Aufgaben kann eine Anzahl von Schlitzen (z.B. 32 Schlitze) umfassen, die Aufgaben enthalten, die zugewiesen sind, um von einem bestimmten GPC 350 verarbeitet zu werden. Der Pool für aktive Aufgaben kann eine Anzahl von Schlitzen (z.B. 4 Schlitze) für Aufgaben umfassen, die von den GPCs 350 aktiv verarbeitet werden. Wenn ein GPC 350 die Ausführung einer Aufgabe abschließt, wird diese Aufgabe aus dem Pool für aktive Aufgaben für den GPC 350 geräumt und eine der anderen Aufgaben wird aus dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 350 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 350 inaktiv war, wie beispielsweise während darauf gewartet wird, dass eine Datenabhängigkeit behoben wird, dann kann die aktive Aufgabe aus dem GPC 350 geräumt und zu dem Pool für anhängige Aufgaben zurückgeführt werden, während eine weitere Aufgabe in dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 350 eingeplant wird.
  • Die Arbeitsverteilungs-Einheit 325 kommuniziert mit dem einen oder mehreren GPCs 350 über eine Kreuzschiene bzw. XBar 370. Die XBar 370 ist ein Zwischenverbindungs-Netzwerk, das viele der Einheiten der PPU 300 mit anderen Einheiten der PPU 300 koppelt. Beispielsweise kann die XBar 370 konfiguriert sein, um die Arbeitsverteilungs-Einheit 325 mit einem bestimmten GPC 350 zu koppeln. Obwohl nicht explizit gezeigt, kann eine oder mehrere andere Einheiten der PPU 300 ebenfalls mit der XBar 370 über den Hub 330 verbunden sein.
  • Die Aufgaben werden von der Planereinheit 320 verwaltet und an einen GPC 350 von der Arbeitsverteilungs-Einheit 325 versandt. Der GPC 350 ist konfiguriert, um die Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 350 verbraucht werden, an einen unterschiedlichen GPC 350 über die XBar 370 weitergeleitet oder im Speicher 304 gespeichert werden. Die Ergebnisse können in den Speicher 304 über die Speicherpartitionseinheiten 380 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/von dem Speicher 304 implementieren. Die Ergebnisse können an eine andere PPU 300 oder CPU über den NVLink 310 übertragen werden. In einer Ausführungsform umfasst die PPU 300 eine Anzahl U von Speicherpartitionseinheiten 380, die gleich der Anzahl von getrennten und unterschiedlichen Speichervorrichtungen des Speichers 304 ist, die mit der PPU 300 gekoppelt sind. Eine Speicherpartitionseinheit 380 wird nachstehend ausführlicher in Verbindung mit 4B beschrieben.
  • In einer Ausführungsform führt ein Host-Prozessor einen Treiber-Kernel aus, der eine anwendungsprogrammierbare Schnittstelle (API) implementiert, die einer oder mehreren Anwendungen ermöglicht, die auf dem Host-Prozessor ausgeführt werden, Operationen zur Ausführung auf der PPU 300 einzuplanen. In einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 300 ausgeführt und die PPU 300 stellt Isolierung, Dienstqualität (QoS) und unabhängige Adressräume für die mehreren Rechenanwendungen bereit. Eine Anwendung kann Anweisungen (z.B. API-Aufrufe) erzeugen, welche den Treiber-Kernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 300 zu erzeugen. Der Treiberkernel gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 300 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von in Beziehung stehender Threads umfassen, die hier als ein Warp bezeichnet werden. In einer Ausführungsform umfasst ein Warp 32 in Beziehung stehende Threads, die parallel ausgeführt werden können. Kooperierende Threads können sich auf eine Mehrzahl von Threads beziehen, die Anweisungen umfassen, um die Aufgabe durchzuführen, und die Daten durch einen gemeinsam benutzten Speicher austauschen können. Threads und kooperierende Threads werden ausführlicher in Verbindung mit 4C beschrieben.
  • 4A veranschaulicht einen GPC 350 der PPU 300 von 3 gemäß einer Ausführungsform. Wie in 4A gezeigt, umfasst jeder GPC 350 eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform umfasst jeder GPC 350 einen Pipeline-Manager 410, eine Vor-Raster-Operationen-Einheit (PROP) 415, eine Raster-Engine 425, eine Arbeitsverteilungs-Kreuzschiene (WDX) 480, eine Speicherverwaltungseinheit (MMU) 490 und einen oder mehrere Datenverarbeitungscluster (DPCs) 420. Es wird anerkannt, dass der GPC 350 von 4A andere Hardwareeinheiten anstelle von oder zusätzlich zu den in 4A gezeigten Einheiten umfassen kann.
  • In einer Ausführungsform wird der Betrieb des GPC 350 durch den Pipeline-Manager 410 gesteuert. Der Pipeline-Manager 410 verwaltet die Konfiguration des einen oder mehrerer DPCs 420 zur Verarbeitung von Aufgaben, die dem GPC 350 zugeteilt sind. In einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen des einen oder mehrerer DPCs 420 konfigurieren, um mindestens einen Abschnitt einer Graphik-Rendering-Pipeline zu implementieren. Beispielsweise kann ein DPC 420 konfiguriert sein, um ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 440 auszuführen. Der Pipeline-Manager 410 kann ebenfalls konfiguriert sein, um Pakete, die von der Arbeitsverteilungs-Einheit 325 empfangen werden, an die geeigneten logischen Einheiten innerhalb des GPC 350 weiterzuleiten. Beispielsweise können einige Pakete an Festfunktions-Hardwareeinheiten in der PROP 415 und/oder der Raster-Engine 425 weitergeleitet werden, während andere Pakete an die DPCs 420 zur Verarbeitung durch die Primitiven-Engine 435 oder den SM 440 weitergeleitet werden können. In einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen der einen oder mehreren DPCs 420 konfigurieren, um ein Neuronal-Netzwerkmodell und/oder eine Rechen-Pipeline zu implementieren.
  • Die PROP-Einheit 415 ist konfiguriert, um Daten, die von der Raster-Engine 425 und den DPCs 420 erzeugt werden, an eine Raster-Operationen-Einheit (ROP-Einheit) in der Speicherpartitionseinheit 380 weiterzuleiten, die nachstehend ausführlicher in Verbindung mit 4B beschrieben wird. Die PROP-Einheit 415 kann ebenfalls konfiguriert sein, um Optimierungen zur Farbenmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen und dergleichen durchzuführen.
  • Die Raster-Engine 425 umfasst eine Anzahl von Festfunktions-Hardwareeinheiten, die konfiguriert sind, um verschiedene Raster-Operationen durchzuführen. In einer Ausführungsform umfasst die Raster-Engine 425 eine Setup-Engine, eine Grobraster-Engine, eine Aussonderungs-Engine, eine Abschneide-Engine, eine Feinraster-Engine und eine Kachelverschmelzende Engine. Die Setup-Engine empfängt transformierte Vertices und erzeugt Ebenengleichungen, die den geometrischen Primitiven zugeordnet sind, die durch die Vertices definiert werden. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformation (z.B. eine (x,y)-Abdeckungsmaske für eine Kachel) für die Primitive zu erzeugen. Die Ausgabe der Grobraster-Engine wird an die Aussonderungs-Engine übertragen, wo Fragmente, die der Primitiven zugeordnet sind, die einen z-Test nicht bestehen, ausgesondert und an eine Abschneide-Engine übertragen werden, wo Fragmente, die außerhalb eines Betrachtungsstumpfes liegen, abgeschnitten werden. Diejenigen Fragmente, welche die Abschneidung und Aussonderung überleben, können an eine Feinraster-Engine weitergeben werden, um Attribute für die Pixelfragmente basierend auf den Ebenengleichungen zu erzeugen, die durch die Setup-Engine erzeugt werden. Die Ausgabe der Raster-Engine 425 umfasst Fragmente, die beispielsweise von einem Fragment-Shader zu verarbeiten sind, der innerhalb eines DPC 420 implementiert ist.
  • Jeder DPC 420, der in dem GPC 350 umfasst ist, umfasst einen M-Pipe-Controller (MPC) 430, eine Primitiven-Engine 435 und einen oder mehrere SMs 440. Der MPC 430 steuert den Betrieb des DPC 420, wobei von dem Pipeline-Manager 410 empfangene Pakete an die geeigneten Einheiten im DPC 420 weitergeleitet werden. Beispielsweise können einem Vertex zugeordnete Pakete an die Primitiven-Engine 435 weitergeleitet werden, die konfiguriert ist, um der Vertex zugeordnete Vertexattribute von dem Speicher 304 zu holen. Im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den SM 440 übertragen werden.
  • Der SM 440 umfasst einen programmierbaren Streaming-Prozessor, der konfiguriert ist, um Aufgaben zu verarbeiten, die durch eine Anzahl von Threads dargestellt werden. Jeder SM 440 umfasst mehrere Threads (ist multi-threaded) und ist konfiguriert, um eine Mehrzahl von Threads (z.B. 32 Threads) von einer bestimmten Gruppe von Threads nebenläufig auszuführen. In einer Ausführungsform implementiert der SM 440 eine SIMD(Einzelne-Anweisung, Mehrere-Daten)-Architektur, wobei jeder Thread in einer Gruppe von Threads (z.B. einem Warp) konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten. Alle Threads in der Gruppe von Threads führen die gleichen Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 440 eine SIMT(Einzelne Anweisung, Mehrere Threads)-Architektur, wobei jeder Thread in einer Gruppe von Threads konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten, wobei jedoch einzelnen Threads in der Gruppe von Threads ermöglicht wird, während der Ausführung zu divergieren. In einer Ausführungsform wird ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden Warp beibehalten, was eine Nebenläufigkeit zwischen Warps und eine serielle Ausführung innerhalb Warps ermöglicht, wenn Threads innerhalb des Warp divergieren. In einer weiteren Ausführungsform wird ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden einzelnen Thread beibehalten, was eine gleiche Nebenläufigkeit zwischen allen Threads, innerhalb und zwischen Warps ermöglicht. Wenn der Ausführungszustand für jeden einzelnen Thread beibehalten wird, können Threads, welche die gleichen Anweisungen ausführen, konvergiert und für maximale Effizienz parallel ausgeführt werden. Der SM 440 wird ausführlicher nachstehend in Verbindung mit 4C beschrieben.
  • Die MMU 490 stellt eine Schnittstelle zwischen dem GPC 350 und der Speicherpartitionseinheit 380 bereit. Die MMU 490 kann eine Übersetzung von virtuellen Adressen in physische Adressen, einen Speicherschutz und eine Arbitrierung von Speicheranfragen bereitstellen. In einer Ausführungsform stellt die MMU 490 einen oder mehrere Adressenübersetzungspuffer (Translation Lookaside Buffers; TLBs) zum Durchführen der Übersetzung von virtuellen Adressen in physische Adressen in dem Speicher 304 bereit.
  • 4B veranschaulicht eine Speicherpartitionseinheit 380 der PPU 300 von 3 gemäß einer Ausführungsform. Wie in 4B gezeigt, umfasst die Speicherpartitionseinheit 380 eine Raster-Operationen(ROP)-Einheit 450, einen L2-Cache-Speicher 460 und eine Speicherschnittstelle 470. Die Speicherschnittstelle 470 ist mit dem Speicher 304 gekoppelt. Die Speicherschnittstelle 470 kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder dergleichen für Hochgeschwindigkeits-Datentransfer implementieren. In einer Ausführungsform umfasst die PPU 300 U Speicherschnittstellen 470, eine Speicherschnittstelle 470 pro Paar von Speicherpartitionseinheiten 380, wobei jedes Paar von Speicherpartitionseinheiten 380 mit einer entsprechenden Speichervorrichtung des Speichers 304 verbunden ist. Beispielsweise kann die PPU 300 mit bis zu Y Speichervorrichtungen, wie beispielsweise einem Speicherstapel mit hoher Bandbreite oder Graphikdoppeldatenraten, Version 5 SDRAM oder anderen Arten von persisten Speicher verbunden sein.
  • In einer Ausführungsform implementiert die Speicherschnittstelle 470 eine HBM2-Speicherschnittstelle und Y ist gleich einem halben U. In einer Ausführungsform sind die HBM2-Speicherstapel auf der gleichen physischen Packung wie die PPU 300 lokalisiert, die wesentliche Leistungs- und Flächeneinsparungen verglichen mit herkömmlichen GDDR5 SDRAM Systemen bereitstellt. In einer Ausführungsform umfasst jeder HBM2-Stapel vier Speicher-Dies und Y ist gleich 4, wobei der HBM2-Stapel zwei 128-Bit Kanäle pro Die für eine Gesamtzahl von 8 Kanälen und eine Datenbusbreite von 1024 Bit umfasst.
  • In einer Ausführungsform unterstützt der Speicher 304 Einzelfehlerkorrektur-Doppelfehlerdetektion (SECDED)(ECC), um Daten zu schützen. Der ECC stellt eine höhere Zuverlässigkeit für Rechenanwendungen bereit, die gegen Datenverfälschung empfindlich sind. Zuverlässigkeit ist besonders wichtig in großen Cluster-Rechenumgebungen, wo PPUs 300 sehr große Datensätze verarbeiten und/oder Anwendungen für längere Zeiträume ausführen.
  • In einer Ausführungsform implementiert die PPU 300 eine Mehr-Ebenen-Speicherhierarchie. In einer Ausführungsform unterstützt die Speicherpartitionseinheit 380 einen vereinheitlichten Speicher, um einen einzigen vereinheitlichten virtuellen Adressraum für den Speicher der CPU und den Speicher der PPU 300 bereitzustellen, der Datenteilung zwischen virtuellen Speichersystemen ermöglicht. In einer Ausführungsform wird die Häufigkeit von Zugriffen durch eine PPU 300 auf einen Speicher, der auf anderen Prozessoren lokalisiert ist, verfolgt, um sicherzustellen, dass Speicherseiten in den physischen Speicher der PPU 300 bewegt werden, die häufiger auf die Seiten zugreift. In einer Ausführungsform unterstützt das NVLink 310 Adressenübersetzungsdienste, die der PPU 300 erlauben, auf Seitentabellen einer CPU direkt zuzugreifen und einen vollen Zugriff auf den CPU-Speicher durch die PPU 300 bereitstellen.
  • In einer Ausführungsform transferieren Kopiermaschinen Daten zwischen mehreren PPUs 300 oder zwischen PPUs 300 und CPUs. Die Kopiermaschinen können Seitenfehler für Adressen erzeugen, die nicht in den Seitentabellen abgebildet werden. Die Speicherpartitionseinheit 380 kann dann die Seitenfehler bedienen, wobei die Adressen in der Seitentabelle abgebildet werden, nachdem die Kopiermaschine den Transfer durchführen kann. In einem herkömmlichen System ist der Speicher für mehrere Kopiermaschinenoperationen zwischen mehreren Prozessoren gesperrt (z.B. nicht auslagerbar), was den verfügbaren Speicher wesentlich verringert. Mit Hardware-Seiten-Faulting können Adressen an die Kopiermaschinen weitergeleitet werden, ohne sich Sorgen zu machen, ob die Speicherseiten resident sind und das Kopierverfahren transparent ist.
  • Daten von dem Speicher 304 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 380 geholt und in dem L2-Cache-Speicher 460 gespeichert werden, der Auf-Chip lokalisiert ist und zwischen den verschiedenen GPCs 350 gemeinsam benutzt wird. Wie gezeigt, umfasst jede Speicherpartitionseinheit 380 einen Bereich des L2-Cache-Speichers 460, der einem entsprechenden Speicher 304 zugeordnet ist. Cache-Speicher niedrigerer Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 350 implementiert werden. Beispielsweise kann jeder der SMs 440 einen Ll-Cache-Speicher implementieren. Der L1-Cache-Speicher ist ein privater Speicher, der einem bestimmten SM 440 fest zugeordnet ist. Daten von dem L2-Cache-Speicher 460 können geholt und in jedem der Ll-Cache-Speicher zur Verarbeitung in den Funktionseinheiten der SMs 440 gespeichert werden. Der L2-Cache-Speicher 460 ist mit der Speicherschnittstelle 470 und der XBar 370 gekoppelt.
  • Die ROP-Einheit 450 führt Graphik-Raster-Operationen durch, welche die Pixelfarbe betreffen, wie beispielsweise Farbenkomprimierung, Pixelmischung und dergleichen. Die ROP-Einheit 450 implementiert ebenfalls Tiefentesten in Verbindung mit der Raster-Engine 425, wobei eine Tiefe für einen Abtastort, der einem Pixelfragment zugeordnet ist, von der Aussonderungs-Engine der Raster-Engine 425 empfangen wird. Die Tiefe wird gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen Abtastort geprüft, der dem Fragment zugeordnet ist. Wenn das Fragment den Tiefentest für den Abtastort besteht, dann aktualisiert die ROP-Einheit 450 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 425. Es wird anerkannt, dass sich die Anzahl von Speicherpartitionseinheiten 380 von der Anzahl von GPCs 350 unterscheiden kann, und daher kann jede ROP-Einheit 450 mit jedem der GPCs 350 gekoppelt werden. Die ROP-Einheit 450 verfolgt Pakete, die von den unterschiedlichen GPCs 350 empfangen werden, und bestimmt, zu welchem GPC 350 ein durch die ROP-Einheit 450 erzeugtes Ergebnis durch die Xbar 470 weitergeleitet wird. Obwohl die ROP-Einheit innerhalb der Speicherpartitionseinheit 380 in 4B umfasst ist, kann die ROP-Einheit 450 außerhalb der Speicherpartitionseinheit 380 sein. Beispielsweise kann die ROP-Einheit 450 in der GPC oder einer anderen Einheit liegen.
  • 4C veranschaulicht den Streaming-Multiprozessor 440 von 4A gemäß einer Ausführungsform. Wie in 4C gezeigt, umfasst der SM 440 einen Anweisungs-Cache-Speicher 405, eine oder mehrere (K) Planereinheiten 410, eine Registerdatei 420, einen oder mehrere Verarbeitungskerne 450, eine oder mehrere Spezialfunktionseinheiten (SFUs) 452, eine oder mehrere Lade/Speicher-Einheiten (LSUs) 454, ein Zwischenverbindungs-Netzwerk 458 und einen gemeinsam benutzten Ll-Cache-Speicher 465.
  • Wie oben beschrieben, versendet die Arbeitsverteilungs-Einheit 325 Aufgaben zur Ausführung auf den GPCs 350 der PPU 300. Die Aufgaben werden einem bestimmten DPC 420 innerhalb eines GPC 350 zugeteilt, und wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 440 zugeteilt werden. Die Planereinheit 445 empfängt die Aufgaben von der Arbeitsverteilungs-Einheit 325 und verwaltet die Anweisungs-Planung (instruction scheduling) für einen oder mehrere Thread-Blöcke, die dem SM 440 zugewiesen sind. Die Planereinheit 445 plant Thread-Blöcke zur Ausführung als Warps von parallelen Threads, wobei jeder Thread-Block mindestens einem Warp zugeordnet ist. In einer Ausführungsform führt jeder Warp 32 Threads aus. Die Planereinheit 445 kann eine Mehrzahl von unterschiedlichen Thread-Blöcken verwalten, welche die Warps den unterschiedlichen Thread-Blöcken zuordnet und dann Anweisungen von der Mehrzahl von unterschiedlichen kooperativen Gruppen an die verschiedenen Funktionseinheiten (z.B. Kerne 442, SFUs 452 und LSUs 454) während jedes Taktzyklus versendet.
  • Cooperative Groups ist ein Programmiermodell zum Organisieren von Gruppen von kommunizierenden Threads, das Entwicklern ermöglicht, die Granularität auszudrücken, bei der Threads kommunizieren, wobei der Ausdruck von reicheren, effizienten Parallelzerlegungen ermöglicht wird. Cooperative-Start-APIs unterstützen die Synchronisierung unter Thread-Blöcken für die Ausführung von parallelen Algorithmen. Herkömmliche Programmiermodelle stellen einen einzigen, einfachen Aufbau zum Synchronisieren von kooperierenden Threads bereit: eine Barriere über alle Threads eines Threadblocks (z.B. die Funktion syncthreads()). Programmierer würden jedoch häufig gerne Gruppen von Threads bei kleineren als Thread-Block-Granularitäten definieren und innerhalb der definierten Gruppen synchronisieren, um größere Leistung, Gestaltungsflexibilität und Software-Wiederverwendung in der Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen.
  • Cooperative Groups ermöglicht Programmierern, Gruppen von Threads explizit bei Sub-Block(z.B. so klein wie ein einziger Thread)- und Mehr-Block-Granularitäten zu definieren und kollektive Operationen, wie beispielsweise Synchronisierung, an den Threads in einer kooperativen Gruppe durchzuführen. Das Programmiermodell unterstützt eine saubere Zusammensetzung über Softwaregrenzen, so dass Bibliotheken und Hilfsfunktionen innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne Annahmen über Konvergenz machen zu müssen. Cooperative-Groups-Primitiven ermöglichen neue Muster von kooperativer Parallelität, die Erzeuger-Verbraucher Parallelität, opportunistische Parallelität und globale Synchronisierung über ein gesamtes Gitter von Threadblöcken umfassen.
  • Eine Versandeinheit 448 ist konfiguriert, um Anweisungen an eine oder mehrere der Funktionseinheiten zu übertragen. In der Ausführungsform umfasst die Planereinheit 445 zwei Versandeinheiten 448, die ermöglichen, dass zwei unterschiedliche Anweisungen von dem gleichen Warp während jedes Taktzyklus versandt werden. In alternativen Ausführungsformen kann jede Planereinheit 445 eine einzige Versandeinheit 448 oder zusätzliche Versandeinheiten 448 umfassen.
  • Jeder SM 440 umfasst eine Registerdatei 455, die einen Satz von Registern für die Funktionseinheiten des SM 440 bereitstellt. In einer Ausführungsform ist die Registerdatei 455 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein zugehöriger Abschnitt der Registerdatei 455 zugeteilt ist. In einer anderen Ausführungsform ist die Registerdatei 455 zwischen den unterschiedlichen Warps aufgeteilt, die von dem SM 440 ausgeführt werden. Die Registerdatei 455 stellt temporäre Speicherung für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten verbunden sind.
  • Jeder SM 440 umfasst L Verarbeitungskerne 442. In einer Ausführungsform umfasst der SM 440 eine große Anzahl (z.B. 128, usw.) von unterschiedlichen Verarbeitungskernen 442. Jeder Kern 442 kann eine vollständig in einer Pipeline angeordnete (fully-pipelined) Einfach-Präzisions-Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit umfasst. In einer Ausführungsform implementieren die Gleitkommaarithmetik-Logikeinheiten den IEEE 754-3008 Standard für Gleitkommaarithmetik. In einer Ausführungsform umfassen die Kerne 442 64 Einfach-Präzisions-(32-Bit)-Gleitkommakerne, 64 Integer-Kerne, 32 Doppel-Präzisions-(64-Bit)-Gleitkommakerne und 8 Tensorkerne.
  • Tensorkerne, die konfiguriert sind, um Matrix-Operationen, und in einer Ausführungsform ein oder mehrere Tensorkerne durchzuführen, sind in den Kernen 442 umfasst. Insbesondere sind die Tensorkerne konfiguriert, um Deep-Learning-Matrix-Arithmetik, wie beispielsweise Faltungsoperationen für Neuronal-Netzwerktraining und Inferenzieren, durchzuführen. In einer Ausführungsform arbeitet jeder Tensorkern an einer 4x4 Matrix und führt eine Matrix-Multiplikations- und Akkumulations-Operation D=A×B+C durch, wobei A, B, C und D 4x4 Matrizen sind.
  • In einer Ausführungsform sind die Matrix-Multiplikations-Eingaben A und B 16-Bit-Gleitkomma-Matrizen, während die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkomma-Matrizen sein können. Tensorkerne arbeiten an 16-Bit-Gleitkomma-Eingabedaten mit 32-Bit-Gleitkomma-Akkumulation. Die 16-Bit-Gleitkomma-Multiplikation erfordert 64 Operationen und ergibt ein Produkt voller Präzision, das dann unter Verwendung einer 32-Bit-Gleitkomma-Addition mit den anderen Zwischenprodukten für eine 4x4x4-Matrix-Multiplikation akkumuliert wird. In der Praxis werden Tensorkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die von diesen kleineren Elementen aufgebaut werden. Eine API, wie beispielsweise die CUDA 9 C++ API, stellt spezialisierte Matrix-Lade-, Matrix-Multiplikations- und Matrix-Akkumulations- und Matrix-Speicher-Operationen bereit, um Tensorkerne von einem CUDA-C++ Programm effizient zu verwenden. Auf der CUDA-Ebene nimmt das Warp-Schnittstellenniveau 16x16 große Matrizen an, die alle 32 Threads des Warp überspannen.
  • Jeder SM 440 umfasst ebenfalls M SFUs 452, die Sonderfunktionen durchführen (z.B. Attributauswertung, reziproke Quadratwurzel und dergleichen). In einer Ausführungsform können die SFUs 452 eine Baumtraversierungseinheit umfassen, die konfiguriert ist, um eine hierarchische Baumdatenstruktur zu durchlaufen. In einer Ausführungsform können die SFUs 452 eine Textureinheit umfassen, die konfiguriert ist, um Texturkarten-Filteroperationen durchzuführen. In einer Ausführungsform sind die Textureinheiten konfiguriert, um Texturkarten (z.B. eine 2D-Anordnung von Texeln) von dem Speicher 304 zu laden und die Texturkarten abzutasten, um abgetastete Texturwerte zum Gebrauch in Shader-Programmen zu erzeugen, die von dem SM 440 ausgeführt werden. In einer Ausführungsform werden die Texturkarten in dem gemeinsam benutzten Speicher/Ll-Cache-Speicher 465 gespeichert. Die Textureinheiten implementieren Texturoperationen, wie beispielsweise Filteroperationen, unter Verwendung von Mip-Maps (z.B. Texturkarten von veränderlichem Detaillierungsgrad). In einer Ausführungsform umfasst jeder SM 340 zwei Textureinheiten.
  • Jeder SM 440 umfasst ebenfalls N LSUs 454, die Lade- und Speicheroperationen zwischen dem gemeinsam benutzten Speicher/Ll-Cache-Speicher 465 und der Registerdatei 455 implementieren. Jeder SM 440 umfasst ein Zwischenverbindungs-Netzwerk 458, das jede der Funktionseinheiten mit der Registerdatei 455 und dem gemeinsam benutzten Speicher/ Ll-Cache-Speicher 465 verbindet. In einer Ausführungsform ist das Zwischenverbindungs-Netzwerk 458 eine Kreuzschiene, die konfiguriert sein kann, um irgendeine der Funktionseinheiten mit irgendeinem der Register in der Registerdatei 455 und Speicherorten im gemeinsam benutzten Speicher/Ll-Cache-Speicher 465 zu verbinden.
  • Der gemeinsam benutzte Speicher/Ll-Cache-Speicher 465 ist eine Auf-Chip-Speicheranordnung, die Datenspeicherung und Kommunikation zwischen dem SM 440 und der Primitiven-Engine 435 und zwischen Threads in dem SM 440 ermöglicht. In einer Ausführungsform umfasst der gemeinsam benutzte Speicher/Ll-Cache-Speicher 465 128KB von Speicherkapazität und ist in dem Pfad von dem SM 440 zu der Speicherpartitionseinheit 380. Der gemeinsam benutzte Speicher/L1-Cache-Speicher 465 kann verwendet werden, um Lese- und Schreibvorgänge zwischenzuspeichern. Einer oder mehrere der gemeinsam benutzten Speicher/Ll-Cache-Speicher 465, L2-Cache-Speicher 460 und Speicher 304 sind Hintergrundspeicher.
  • Das Kombinieren eines Daten-Cache und gemeinsam benutzter Speicherfunktionalität in einem einzigen Speicherblock stellt die beste Gesamtleistung für beide Arten von Speicherzugriffen bereit. Die Kapazität ist als ein Cache von Programmen benutzbar, die den gemeinsam benutzten Speicher nicht verwenden. Wenn der gemeinsam benutzte Speicher beispielsweise konfiguriert ist, die Hälfte der Kapazität zu verwenden, können Textur- und Lade/Speicher-Operationen die verbleibende Kapazität verwenden. Integration innerhalb des gemeinsam benutzten Speichers/Ll-Cache-Speicher 465 ermöglicht dem gemeinsam benutzten Speicher/Ll-Cache-Speicher 465 als eine Leitung mit hohem Durchsatz zum Streamen von Daten zu arbeiten, während gleichzeitig eine höhere Bandbreite und ein latenzarmer Zugriff auf häufig wiederverwendete Daten bereitgestellt werden.
  • Wenn für Allzweck-Parallelberechnung konfiguriert, kann im Vergleich mit der Graphikverarbeitung eine einfachere Konfiguration verwendet werden. Im Einzelnen werden die in 3 gezeigten Festfunktions-Graphikverarbeitungseinheiten umgangen, wobei ein viel einfacheres Programmiermodell erzeugt wird. In der Allzweck-Parallelberechnungs-Konfiguration werden Blöcke von Threads von der Arbeitsverteilungs-Einheit 325 direkt den DPCs 420 zugewiesen und verteilt. Die Threads in einem Block führen das gleiche Programm unter Verwendung einer eindeutigen Thread-ID in der Berechnung, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, unter Verwendung des SM 440, um das Programm auszuführen und Berechnungen durchzuführen, eines gemeinsam benutzten Speicher/Ll-Cache-Speichers 465, um zwischen Threads zu kommunizieren, und der LSU 454 aus, um globalen Speicher durch den gemeinsam benutzten Speicher/Ll-Cache-Speicher 465 und die Speicherpartitionseinheit 380 zu lesen und zu beschreiben. Wenn für Allzweck-Parallelberechnung konfiguriert, kann der SM 440 ebenfalls Befehle schreiben, welche die Planereinheit 320 verwenden kann, um neue Arbeit auf den DPCs 420 zu starten.
  • Die PPU 300 kann in einem Tischcomputer, einem Laptop-Computer, einem Tablet-Computer, einem Smartphone (z.B. einer drahtlosen handgehaltenen Vorrichtung), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einer handgehaltenen elektronischen Vorrichtung und dergleichen umfasst sein. In einer Ausführungsform ist die PPU 300 auf einem einzelnen Halbleitersubstrat verkörpert. In einer anderen Ausführungsform ist die PPU 300 in einem System-auf-Chip (SoC) zusammen mit einer oder mehreren anderen Vorrichtungen, wie beispielsweise zusätzlichen PPUs 300, dem Speicher 304, einem Rechner-mit-reduziertem-Befehlssatz(RISC)-CPU, einer Speicherverwaltungseinheit (MMU), einem Digital/Analog-Wandler (DAC) und dergleichen umfasst.
  • In einer Ausführungsform kann die PPU 300 auf einer Graphikkarte umfasst sein, die eine oder mehrere Speichervorrichtungen 304 umfasst. Die Graphikkarte kann konfiguriert sein, um sich mit einem PCIe-Schlitz auf einer Hauptplatine eines Desktop-Computers schnittstellenmäßig zu verbinden. In noch einer anderen Ausführungsform kann die PPU 300 eine integrierte Graphikverarbeitungseinheit (iGPU) oder ein Parallelprozessor sein, der in dem Chipsatz der Hauptplatine umfasst ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Industrien eingesetzt, da Entwickler mehr Parallelität in Anwendungen wie z. B. künstlicher Intelligenz aufdecken und wirksam einsetzen. Hochleistungs-GPU-beschleunigte Systeme mit zehn bis vielen tausend Rechenknoten werden in Rechenzentren, Forschungseinrichtungen und Supercomputern eingesetzt, um immer größere Probleme zu lösen. Da die Anzahl der verarbeitenden Einrichtungen innerhalb der Hochleistungssysteme ansteigt, müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 5A ist ein Konzeptdiagramm eines Verarbeitungssystems 500, das unter Verwendung der PPU 300 von 3 gemäß einer Ausführungsform implementiert wird. Das beispielhafte System 565 kann konfiguriert sein, um das in 1E bzw. 2D gezeigte Verfahren 150 oder 260 zu implementieren. Das Verarbeitungssystem 500 umfasst eine CPU 530, einen Schalter 510 und mehrere PPUs 300 und jeweilige Speicher 304.
  • Die PPUs 300 können jeweils umfassen und/oder können konfiguriert sein, um Funktionen eines oder mehrerer Verarbeitungskerne und/oder Komponenten davon auszuführen, wie beispielsweise Tensorkerne bzw. Tensor Cores (TCs), Tensor Processing Units (TPUs), Pixel Visual Cores (PVCs), Ray Tracing (RT) Cores, Vision Processing Units (VPUs), Graphics Processing Clusters (GPCs), Texture Processing Clusters (TPCs), Streaming Multiprocessors (SMs), Tree Traversal Units (TTUs), Artificial Intelligence Accelerators (AIAs), Deep Learning Accelerators (DLAs), Arithmetik-LogikEinheiten (ALUs), anwendungsspezifische integrierte Schaltungen (ASICs), Gleitkomma-Einheiten (FPUs), Ein-/Ausgabe(E/A)-Elemente, Peripheral Component Interconnect (PCI)- oder Peripheral Component Interconnect Express (PCIe)-Elemente und/oder dergleichen.
  • Der NVLink 310 stellt Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 300 bereit. Obwohl eine bestimmte Anzahl von NVLink 310 - und Interconnect 302 Verbindungen dargestellt ist, kann die Anzahl der Verbindungen zu jeder PPU 300 und der CPU 530 variieren. Der Schalter 510 bildet die Schnittstelle zwischen der Verbindung 302 und der CPU 530. Die PPUs 300, die Speicher 304 und die NVLinks 310 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 525 zu bilden. In einer Ausführungsform unterstützt der Schalter 510 zwei oder mehr Protokolle, um zwischen verschiedenen Verbindungen und/oder Links eine Schnittstelle aufzubauen.
  • In einer anderen Ausführungsform (nicht dargestellt) stellt der NVLink 310 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 300 und der CPU 530 bereit, und der Schalter 510 bildet eine Schnittstelle zwischen der Verbindung 302 und jeder der PPUs 300. Die PPUs 300, die Speicher 304 und die Verbindung 302 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 525 zu bilden. In einer weiteren Ausführungsform (nicht dargestellt) stellt die Verbindung 302 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 300 und der CPU 530 bereit, und der Schalter 510 bildet eine Schnittstelle zwischen jeder der PPUs 300 unter Verwendung des NVLink 310, um eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den PPUs 300 bereitzustellen. In einer anderen Ausführungsform (nicht dargestellt) stellt der NVLink 310 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den PPUs 300 und der CPU 530 über den Schalter 510 bereit. In einer weiteren Ausführungsform (nicht dargestellt) stellt die Verbindung 302 eine oder mehrere Kommunikationsverbindungen direkt zwischen den einzelnen PPUs 300 bereit. Eine oder mehrere der Hochgeschwindigkeits-Kommunikationsverbindungen des NVLink 310-können als physische NVLink-Verbindung oder entweder als On-Chip- oder On-Die-Verbindung implementiert werden, die das gleiche Protokoll wie der NVLink 310 verwendet.
  • Im Zusammenhang mit der vorliegenden Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung beziehen, die auf einem Die oder Chip hergestellt ist. Es sei darauf hingewiesen, dass sich der Begriff Einzel-Halbleiterplattform ebenfalls auf Multi-Chip-Module mit erhöhter Konnektivität beziehen kann, die den On-Chip-Betrieb simulieren und wesentliche Verbesserungen gegenüber der Verwendung einer herkömmlichen Bus-Implementierung bereitstellen. Natürlich können die verschiedenen Schaltungen oder Einrichtungen ebenfalls separat oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Anwenders angeordnet sein. Alternativ kann das Parallelverarbeitungsmodul 525 als Leiterplattensubstrat implementiert werden und jede der PPUs 300 und/oder Speicher 304 können Einrichtungen mit Gehäuse sein. In einer Ausführungsform befinden sich die CPU 530, der Schalter 510 und das Parallelverarbeitungsmodul 525 auf einer einzigen Halbleiterplattform.
  • In einer Ausführungsform beträgt die Signalisierungsrate jedes NVLink 310 20 bis 25 Gigabit/Sekunde und jede PPU 300 umfasst sechs NVLink 310 -Schnittstellen (wie in 5A gezeigt, sind fünf NVLink 310 -Schnittstellen für jede PPU 300 vorhanden). Jeder NVLink 310 bietet eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jeder Richtung, wobei sechs Links 300 Gigabyte/Sekunde bereitstellen. Die NVLinks 310 können ausschließlich für die PPU-zu-PPU-Kommunikation verwendet werden, wie es in 5A dargestellt ist, oder für eine Kombination aus PPU-zu-PPU und PPU-zu-CPU, wenn die CPU 530 ebenfalls eine oder mehrere NVLink 310-Schnittstellen umfasst.
  • In einer Ausführungsform ermöglicht der NVLink 310 einen direkten Lade-/Speicher-/ atomaren Zugriff von der CPU 530 auf den Speicher 304 jeder PPU 300. In einer Ausführungsform unterstützt der NVLink 310 Kohärenzoperationen, so dass aus den Speichern 304 gelesene Daten in der Cache-Hierarchie der CPU 530 gespeichert werden können, was die Cache-Zugriffslatenz für die CPU 530 reduziert. In einer Ausführungsform umfasst der NVLink 310 eine Unterstützung für Adressübersetzungsdienste (ATS), wodurch die PPU 300 direkt auf Seitentabellen innerhalb der CPU 530 zugreifen kann. Einer oder mehrere der NVLinks 310 können ebenfalls so konfiguriert sein, dass sie in einem stromsparenden Modus arbeiten.
  • 5B veranschaulicht ein beispielhaftes System 565, in dem die verschiedenen Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert sein können. Das beispielhafte System 565 kann konfiguriert sein, um das in 1B gezeigte Verfahren 130, das in 2B gezeigte Verfahren 240 und/oder das in 2D gezeigte Verfahren 255 zu implementieren.
  • Wie gezeigt, ist ein System 565 vorgesehen, das mindestens eine zentrale Verarbeitungseinheit 530 umfasst, die mit einem Kommunikationsbus 575 verbunden ist. Der Kommunikationsbus 575 kann direkt oder indirekt eine oder mehrere der folgenden Einrichtungen koppeln: Hauptspeicher 540, Netzwerkschnittstelle 535, CPU(s) 530, Anzeigevorrichtung(en) 545, Eingabevorrichtung(en) 560, einen Schalter 510 und ein Parallelverarbeitungssystem 525. Der Kommunikationsbus 575 kann unter Verwendung eines beliebigen geeigneten Protokolls implementiert werden und kann eine oder mehrere Verbindungen oder Busse darstellen, wie z.B. einen Adressbus, einen Datenbus, einen Steuerbus oder eine Kombination davon. Der Kommunikationsbus 575 kann einen oder mehrere Bus- oder Verbindungstypen umfassen, wie 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), HyperTransport und/oder eine andere Art von Bus oder Verbindung. Bei einigen Ausführungsformen gibt es direkte Verbindungen zwischen den Komponenten. Zum Beispiel kann/können die CPU(s) 530 direkt mit dem Hauptspeicher 540 verbunden sein. Darüber hinaus kann (können) die CPU(s) 530 direkt mit dem Parallelverarbeitungssystem 525 verbunden sein. Bei einer direkten oder Punkt-zu-Punkt-Verbindung zwischen Komponenten kann der Kommunikationsbus 575 eine PCIe-Verbindung umfassen, um die Verbindung herzustellen. In diesen Beispielen muss kein PCI-Bus im System 565 vorhanden sein.
  • Obwohl die verschiedenen Blöcke von 5B als über den Kommunikationsbus 575 mit Leitungen verbunden dargestellt sind, ist dies nicht als Einschränkung gedacht und dient nur der Übersichtlichkeit. Bei einigen Ausführungsformen kann beispielsweise eine Präsentationskomponente, wie die Anzeigevorrichtung(en) 545, als E/A-Komponente betrachtet werden, wie die Eingabevorrichtung(en) 560 (z.B. wenn die Anzeige ein Touchscreen ist). Als weiteres Beispiel kann/können die CPU(s) 530 und/oder das Parallelverarbeitungssystem 525 einen Speicher umfassen (z.B. kann der Hauptspeicher 540 zusätzlich zu dem Parallelverarbeitungssystem 525, den CPUs 530 und/oder anderen Komponenten eine Speichereinrichtung darstellen). Mit anderen Worten, die Recheneinrichtung der 5B ist lediglich illustrativ. Es wird nicht zwischen Kategorien wie „Workstation“, „Server“, „Laptop“, „Desktop“, „Tablet“, „Client-Gerät“, „mobiles Gerät“, „Handheld-Gerät“, „Spielkonsole“, „elektronische Steuereinheit (ECU)“, „Virtual-Reality-System“ und/oder anderen Einrichtungs- oder Systemtypen unterschieden, da alle im Rahmen der Recheneinrichtung der 5B in Betracht gezogen werden.
  • Das System 565 umfasst ebenfalls einen Hauptspeicher 540. Eine Steuerlogik (Software) und Daten sind in dem Hauptspeicher 540 gespeichert, der die Form einer Vielzahl von computerlesbaren Medien annehmen kann. Bei den computerlesbaren Medien kann es sich um alle verfügbaren Medien handeln, auf die das System 565 zugreifen kann. Die computerlesbaren Medien können sowohl flüchtige als auch nicht-flüchtige Medien sowie entfernbare und nichtentfernbare Medien umfassen. Beispielhaft und ohne Einschränkung können die computerlesbaren Medien Computerspeichermedien und Kommunikationsmedien umfassen.
  • Die Computerspeichermedien können sowohl flüchtige als ebenfalls 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 z. B. computerlesbare Anweisungen, Datenstrukturen, Programmmodule und/oder andere Datentypen, implementiert sind. Beispielsweise kann der Hauptspeicher 540 computerlesbare Anweisungen speichern (z. B., die ein oder mehrere Programme und/oder ein oder mehrere Programmelemente darstellen, wie z. B. ein Betriebssystem). Computerspeichermedien können ein RAM, ein ROM, ein EEPROM, einen Flash-Speicher oder andere Speichertechnologien, eine CD-ROM, eine Digital Versatile Disk (DVD) oder andere optische Plattenspeicher, Magnetkassetten, Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder jedes andere Medium umfassen, das zum Speichern der gewünschten Informationen verwendet werden kann und auf das das System 565 zugreifen kann, sind aber nicht darauf beschränkt. Wie hier verwendet, umfasst der Begriff Computerspeichermedium nicht per se Signale.
  • Die Computerspeichermedien können computerlesbare Anweisungen, Datenstrukturen, Programmmodule und/oder andere Datentypen in einem modulierten Datensignal, wie z. B. einer Trägerwelle oder einem anderen Transportmechanismus, verkörpern und weisen beliebige Informationsübertragungsmedien auf. 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 sind. Beispielhaft und ohne Einschränkung können die Computerspeichermedien verdrahtete Medien, wie z. B. ein verdrahtetes Netzwerk oder eine direkt verdrahtete Verbindung, und drahtlose Medien, wie z. B. akustische, HF-, Infrarot- und andere drahtlose Medien, umfassen. Kombinationen der oben genannten Medien sollten ebenfalls in den Bereich der computerlesbaren Medien eingeschlossen werden.
  • Computerprogramme, wenn sie ausgeführt werden, ermöglichen dem System 565, verschiedene Funktionen auszuführen. Die CPU(s) 530 kann/können so konfiguriert sein, dass sie zumindest einige der computerlesbaren Anweisungen ausführt/ausführen, um eine oder mehrere Komponenten des Systems 565 zu steuern, um eine oder mehrere der hier beschriebenen Verfahren und/oder Prozesse durchzuführen. Die CPU(s) 530 kann/können jeweils einen oder mehrere Kerne umfassen (z. B. einen, zwei, vier, acht, achtundzwanzig, zweiundsiebzig usw.), die in der Lage sind, eine Vielzahl von Software-Threads gleichzeitig zu verarbeiten. Die CPU(s) 530 kann/können jeden Prozessortyp umfassen und je nach Art des implementierten Systems 565 unterschiedliche Prozessortypen umfassen (z. B. Prozessoren mit weniger Kernen für mobile Einrichtungen und Prozessoren mit mehr Kernen für Server). Je nach Art des Systems 565 kann der Prozessor beispielsweise ein Advanced RISC Machines (ARM)-Prozessor sein, der mit Reduced Instruction Set Computing (RISC) implementiert ist, oder ein x86-Prozessor, der mit Complex Instruction Set Computing (CISC) implementiert ist. Das System 565 kann eine oder mehrere CPUs 530 umfassen, zusätzlich zu einem oder mehreren Mikroprozessoren oder zusätzlichen Co-Prozessoren, wie z. B. mathematischen Co-Prozessoren.
  • Zusätzlich zu oder alternativ zu der/den CPU(s) 530 kann das Parallelverarbeitungsmodul 525 so konfiguriert sein, dass es zumindest einige der computerlesbaren Anweisungen ausführt, um eine oder mehrere Komponenten des Systems 565 zu steuern, um eines oder mehrere der hier beschriebenen Verfahren und/oder Prozesse durchzuführen. Das Parallelverarbeitungsmodul 525 kann vom System 565 zum Rendern von Graphiken (z. B. 3D-Graphiken) oder zur Durchführung von Allzweckberechnungen verwendet werden. Zum Beispiel kann das Parallelverarbeitungsmodul 525 für General-Purpose-Computing auf GPUs (GPGPU) verwendet werden. In Ausführungsformen kann/können die CPU(s) 530 und/oder das Parallelverarbeitungsmodul 525 diskret oder gemeinsam eine beliebige Kombination der Verfahren, Prozesse und/oder Abschnitte davon ausführen.
  • Das System 565 umfasst ebenfalls die Eingabevorrichtung(en) 560, das Parallelverarbeitungssystem 525 und die Anzeigevorrichtung(en) 545. Die Anzeigevorrichtung(en) 545 kann (können) eine Anzeige (z. B. einen Monitor, einen Touchscreen, einen Fernsehbildschirm, ein Heads-up-Display (HUD), andere Anzeigetypen oder eine Kombination davon), Lautsprecher und/oder andere Präsentationskomponenten umfassen. Die Anzeigevorrichtung(en) 545 kann/können Daten von anderen Komponenten (z. B. dem Parallelverarbeitungssystem 525, der/den CPU(s) 530 usw.) empfangen und die Daten ausgeben (z. B. als Bild, Video, Ton usw.) .
  • Die Netzwerkschnittstelle 535 kann es dem System 565 ermöglichen, logisch mit anderen Einrichtungen gekoppelt zu sein, einschließlich der Eingabevorrichtungen 560, der Anzeigevorrichtung(en) 545 und/oder anderen Komponenten, von denen einige in das System 565 eingebaut (z. B. integriert) sein können. Dargestellte Eingabegeräte 560 weisen ein Mikrofon, eine Maus, eine Tastatur, einen Joystick, ein Gamepad, eine Spielsteuerung, eine Satellitenschüssel, einen Scanner, einen Drucker, eine drahtlose Einrichtung usw. auf. Die Eingabevorrichtungen 560 können eine natürliche Benutzerschnittstelle (NUI) bereitstellen, die Luftgesten, Sprache oder andere physiologische Eingaben verarbeitet, die von einem Benutzer erzeugt werden. In einigen Fällen können die Eingaben an ein entsprechendes Netzwerkelement zur weiteren Verarbeitung übertragen werden. Eine NUI kann eine beliebige Kombination aus Spracherkennung, Stifterkennung, Gesichtserkennung, biometrischer Erkennung, Gestenerkennung sowohl auf dem Bildschirm als ebenfalls neben dem Bildschirm, Luftgesten, Kopf- und Augenverfolgung und Berührungserkennung (wie unten ausführlicher beschrieben) in Verbindung mit einer Anzeige des Systems 565 implementieren. Das System 565 kann Tiefenkameras, wie z. B. stereoskopische Kamerasysteme, Infrarotkamerasysteme, RGB-Kamerasysteme, eine Touchscreen-Technologie und Kombinationen davon, zur Gestenerkennung und -erfassung umfassen. Zusätzlich kann das System 565 Beschleunigungsmesser oder Gyroskope umfassen (z. B. als Teil einer Trägheitsmesseinheit (IMU)), die eine Bewegungserkennung ermöglichen. Bei einigen Beispielen kann die Ausgabe der Beschleunigungsmesser oder Gyroskope von dem System 565 verwendet werden, um immersive Augmented Reality oder Virtual Reality darzustellen.
  • Darüber hinaus kann das System 565 über eine Netzwerkschnittstelle 535 zu Kommunikationszwecken mit einem Netzwerk (z. B. einem Telekommunikationsnetzwerk, einem lokalen Netzwerk (LAN), einem drahtlosen Netzwerk, einem Weitverkehrsnetzwerk (WAN) wie dem Internet, einem Peer-to-Peer-Netzwerk, einem Kabelnetzwerk oder Ähnlichem) verbunden sein. Das System 565 kann ein verteiltes Netzwerk und/oder eine Cloud-Computing-Umgebung umfassen.
  • Die Netzwerkschnittstelle 535 kann einen oder mehrere Empfänger, Sender und/oder Transceiver umfassen, die es dem System 565 ermöglichen, mit anderen Recheneinrichtungen über ein elektronisches Kommunikationsnetzwerk zu kommunizieren, einschließlich einer drahtgebundenen und/oder drahtlosen Kommunikation. Die Netzwerkschnittstelle 535 kann Komponenten und Funktionen umfassen, um die Kommunikation über eine beliebige Anzahl verschiedener Netzwerke zu ermöglichen, wie z. B. drahtlose Netzwerke (z. B. Wi-Fi, Z-Wave, Bluetooth, Bluetooth LE, ZigBee usw.), verdrahtete Netzwerke (z. B. Kommunikation über Ethernet oder InfiniBand), Weitverkehrsnetzwerke mit geringer Leistung (z. B. LoRaWAN, SigFox usw.) und/oder das Internet.
  • Das System 565 kann ebenfalls eine Sekundärspeicherung umfassen (nicht gezeigt). Die Sekundärspeicherung umfasst beispielsweise ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk auf, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein Digital-Versatile-Disk(DVD)-Laufwerk, eine Aufnahmeeinrichtung oder einen Universal Serial Bus (USB)-Flash-Speicher darstellt. Das Wechselspeicherlaufwerk liest in bekannter Weise von und/oder schreibt auf einen Wechselspeicher. Das System 565 kann ebenfalls eine festverdrahtete Stromversorgung, eine Batteriestromversorgung oder eine Kombination davon umfassen (nicht dargestellt). Die Stromversorgung kann das System 565 mit Strom versorgen, um den Betrieb der Komponenten des Systems 565 zu ermöglichen.
  • Jedes der vorstehenden Module und/oder Vorrichtungen kann sogar auf einer einzigen Halbleiterplattform gelegen sein, um das System 565 zu bilden. Alternativ können die verschiedenen Module ebenfalls separat oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Benutzers angeordnet sein. Während verschiedene Ausführungsformen oben beschrieben wurden, sollte zu verstehen sein, dass sie lediglich als Beispiel und nicht als Einschränkung dargestellt wurden. Somit sollte die Breite und der Umfang einer bevorzugten Ausführungsform nicht durch eine der oben beschriebenen beispielhaften Ausführungsformen begrenzt sein, sondern nur in Übereinstimmung mit den folgenden Ansprüchen und deren Äquivalenten definiert sein.
  • Beispielhafte Netzwerkumgebungen
  • Netzwerkumgebungen, die zur Verwendung bei der Implementierung von Ausführungsformen der Erfindung geeignet sind, können ein oder mehrere Client-Vorrichtungen, Server, Netzwerkspeicher (NAS), andere Backend-Vorrichtungen und/oder andere Vorrichtungsarten umfassen. Die Client-Vorrichtungen, Server und/oder anderen Vorrichtungsarten (d.h. jede Vorrichtung) können auf einer oder mehreren Instanzen des Verarbeitungssystems 500 von 5A und/oder des Beispielsystems 565 von 5B implementiert sein - beispielsweise kann jede Vorrichtung ähnliche Komponenten, Merkmale und/oder Funktionen des Verarbeitungssystems 500 und/oder des beispielhaften Systems 565 aufweisen.
  • Komponenten einer Netzwerkumgebung können über ein oder mehrere Netzwerke, die drahtgebunden, drahtlos oder beides sein können, miteinander kommunizieren. Das Netzwerk kann mehrere Netzwerke oder ein Netzwerk von Netzwerken umfassen. Beispielsweise kann das Netzwerk ein oder mehrere Weitverkehrsnetzwerke (Wide Area Networks; WANs), ein oder mehrere Lokalbereichsnetzwerke (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 Netzwerk ein drahtloses Telekommunikationsnetzwerk umfasst, können Komponenten wie eine Basisstation, ein Kommunikationsturm oder sogar Zugangspunkte (sowie andere Komponenten) eine drahtlose Konnektivität bereitstellen.
  • Kompatible Netzwerkumgebungen können eine oder mehrere Peer-to-Peer-Netzwerkumgebungen - in diesem Fall muss ein Server nicht in einer Netzwerkumgebung umfasst sein - und eine oder mehrere Client-Server-Netzwerkumgebungen - in diesem Fall können ein oder mehrere Server in einer Netzwerkumgebung umfasst sein - umfassen. 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 Netzwerkumgebung eine oder mehrere Cloud-basierte Netzwerkumgebungen, eine verteilte Rechenumgebung, eine Kombination davon usw. umfassen. Eine Cloud-basierte Netzwerkumgebung kann eine Framework-Ebene, einen Job-Planer, einen Konfigurationsmanager, 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-Ebene kann ein Framework zur Unterstützung von Software einer Software-Ebene und/oder einer oder mehrerer Anwendungen einer Anwendungsebene umfassen. Die Software oder Anwendung/en kann/können jeweils webbasierte Dienst-Software oder -Anwendungen umfassen. In Ausführungsformen können ein oder mehrere der Client-Vorrichtungen die webbasierte Dienst-Software oder - Anwendungen verwenden (z.B. durch Zugriff auf die Dienst-Software und/oder - Anwendungen über eine oder mehrere Anwendungsprogrammierschnittstellen (APIs)). Die Framework-Ebene kann, ohne darauf beschränkt zu sein, eine Art freier und Open-Source-Software-Web-Anwendung-Framework sein, der z.B. ein verteiltes Dateisystem für die Verarbeitung großer Datenmengen (z.B. „Big Data“) verwendet.
  • Eine Cloud-basierte Netzwerkumgebung kann Cloud-Computing und/oder Cloud-Speicher bereitstellen, das/der eine beliebige Kombination der hier beschriebenen Rechen- und/oder Datenspeicherungsfunktionen (oder einen oder mehrere Teile davon) ausführt. Jede dieser verschiedenen Funktionen kann über mehrere Standorte von zentralen oder Kernservern (z.B. von einem oder mehreren Rechenzentren, die über einen Staat, eine Region, ein Land, den Globus usw. verteilt sein können) verteilt sein. Wenn sich eine Verbindung zu einem Benutzer (z.B. einer Client-Vorrichtung) relativ nah an einem oder mehreren Edge-Servern befindet, können ein oder mehrere 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 beispielhaften Verarbeitungssystems 500 von 5A und/oder des beispielhaften Systems 565 von 5B aufweisen. Beispielhaft und ohne Einschränkung kann eine Client-Vorrichtung ein Personal Computer (PC), ein Laptop-Computer, ein mobiles Vorrichtung, ein Smartphone, ein Tablet-Computer, eine intelligente Uhr, ein tragbarer Computer, ein Personal Digital Assistant (PDA), ein MP3-Player, ein Virtual-Reality-Headset, ein globales Positionsbestimmungs-System (GPS) oder -vorrichtung, ein Videoplayer, eine Videokamera, eine Überwachungsvorrichtung oder -system, ein Fahrzeug, ein Boot, eine fliegendes Einrichtung, eine virtuelle Maschine, eine Drohne, ein Roboter, ein Handheld-Kommunikationsvorrichtung, eine Krankenhausvorrichtung, eine Spielvorrichtung oder - system, ein Unterhaltungssystem, ein Fahrzeugcomputersystem, eine eingebettete Systemsteuerung, eine Fernbedienung, ein Apparat, eine Unterhaltungselektronikvorrichtung, eine Workstation, eine Edge-Vorrichtung, eine beliebige Kombination dieser beschriebenen Vorrichtungen oder jede andere geeignete Vorrichtung sein.
  • Maschinenlernen
  • Tiefe neuronale Netzwerke (DNNs), die auf Prozessoren entwickelt wurden, wie beispielsweise der PPU 300, wurden für diverse Verwendungsfälle, von selbstfahrenden Wagen bis schnellerer Wirkstoffentwicklung, von automatischer Bildbeschriftung in Online-Bilddatenbanken bis smarter Echtzeit-Sprachenübersetzung in Video-Chat-Anwendungen verwendet. Deep-Learning ist eine Technik, welche die neuronalen Lernverfahren des menschlichen Gehirns modelliert, die kontinuierlich lernt, kontinuierlich immer smarter wird und genauere Ergebnisse mit der Zeit schneller liefert. Ein Kind wird anfangs von einem Erwachsenen unterrichtet, verschiedene Formen korrekt zu identifizieren und zu klassifizieren, um schließlich imstande zu sein, Formen ohne irgendeine Nachhilfe zu identifizieren. Auf ähnliche Weise muss ein Tiefen-Learning-System oder ein neuronales Lernsystem in Objekterkennung und Klassifizierung trainiert werden, damit es smarter und effizienter beim Identifizieren von Grundobjekten, verdeckten Objekte usw. wird, während ebenfalls Objekten Kontext zugewiesen wird. Beispielsweise wird ein neuronales Lernsystem zur Orientierungspunkt-Lokalisierung und/oder Attributklassifizierung trainiert Auf der einfachsten Ebene schauen Neuronen im menschlichen Gehirn auf verschiedene Eingaben, die empfangen werden, wobei Wichtigkeitsgrade jeder dieser Eingaben zugewiesen werden und eine Ausgabe an andere Neuronen weitergeleitet wird, um auf diese zu wirken. Ein künstliches Neuron oder ein Perzeptron ist das grundlegendste Modell eines neuronale Netzwerks. In einem Beispiel kann ein Perzeptron eine oder mehrere Eingaben empfangen, die verschiedene Merkmale eines Objekts darstellen, die das Perzeptron trainiert wird, zu erkennen und zu klassifizieren, und jedem dieser Merkmale wird ein bestimmtes Gewicht basierend auf der Wichtigkeit des Merkmals beim Definieren der Gestalt eines Objekts zugewiesen.
  • Ein Modell eines tiefen neuronale Netzwerks (DNN) umfasst mehrere Schichten von vielen verbundenen Knoten (z.B. Perzeptronen, Boltzmann-Maschinen, radiale Basisfunktionen, Faltungsschichten usw.), die mit enormen Mengen an Eingabedaten trainiert werden können, um komplexe Probleme mit hoher Genauigkeit schnell zu lösen. In einem Beispiel gliedert eine erste Schicht des DNN-Modells ein Eingabebild eines Automobils in verschiedene Abschnitte auf und sucht nach Grundmustern, wie beispielsweise Linien und Winkel. Die zweite Schicht setzt die Linien zusammen, um nach Mustern höherer Ebene, wie beispielsweise Rädern, Windschutzscheiben und Spiegeln, zu suchen. Die nächste Schicht kennzeichnet den Typ des Fahrzeugs und die letzten paar Schichten erzeugen ein Etikett für das Eingabebild, welches das Modell einer speziellen Automobilmarke kennzeichnet.
  • Sobald das DNN trainiert ist, kann das DNN eingesetzt und verwendet werden, um Objekte oder Muster in einem als Inferenz bekannten Verfahren zu identifizieren und zu klassifizieren. Beispiele von Inferenz (der Prozess, durch den ein DNN nützliche Information von einer gegebenen Eingabe extrahiert) umfassen ein Identifizieren handgeschriebener Zahlen auf Schecks, die in Geldausgabe-Maschinen eingezahlt werden, ein Identifizieren von Bildern von Freunden in Photos, Liefern von Filmempfehlungen an über fünfzig Millionen Nutzer, Identifizieren und Klassifizieren unterschiedlicher Typen von Automobilen, Fußgängern und Straßengefahren in fahrerlosen Wagen oder Übersetzen von menschlicher Sprache in Echtzeit.
  • Während des Trainings strömen Daten durch das DNN in einer Vorwärtspropagierungsphase, bis eine Vorhersage erzeugt wird, die ein Etikett angibt, das der Eingabe entspricht. Wenn das neuronale Netzwerk die Eingabe nicht korrekt kennzeichnet, dann werden Fehler zwischen dem korrekten Etikett und dem vorhergesagten Etikett analysiert und die Gewichte werden für jedes Merkmal während einer Rückwärtspropagierungsphase eingestellt, bis das DNN die Eingabe und andere Eingaben in einem Trainingsdatensatz korrekt kennzeichnet. Das Training komplexer neuronaler Netzwerke erfordert enorme Mengen an paralleler Rechenleistung, die Gleitkomma-Multiplikationen und Gleitkomma-Additionen umfassen, die von der PPU 300 unterstützt werden. Inferenzieren ist weniger rechenintensiv als Training, das ein Latenz-empfindliches Verfahren ist, wobei ein trainiertes neuronales Netzwerk auf neue Eingaben angewandt wird, die es zuvor nicht gesehen hat, um Bilder zu klassifizieren, Emotionen zu erfassen, Empfehlungen zu identifizieren, Sprache zu erkennen und zu übersetzen, und im Allgemeinen neue Informationen abzuleiten.
  • Neuronale Netzwerke stützen sich sehr auf Matrixrechenoperationen und komplexe mehrschichtige Netzwerke erfordern enorme Mengen an Gleitkomma-Leistung und Bandbreite für sowohl Effizienz als auch Geschwindigkeit. Mit Tausenden von Verarbeitungskernen, die für Matrixrechenoperationen optimiert sind und einige zehn bis hunderte von TFLOPS von Leistung liefern, ist die PPU 300 eine Rechenplattform, die imstande ist, Leistung zu liefern, die für tiefe neuronale Netzwerk-basierte künstliche Intelligenz und Maschinenlernanwendungen erforderlich ist.
  • Des Weiteren können Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, zum Trainieren, Prüfen oder Zertifizieren von DNNs verwendet werden, die zur Erkennung von Objekten und Umgebungen in der realen Welt eingesetzt werden. Derartige Bilder können Szenen von Straßen, Fabriken, Gebäuden, städtischen Szenarien, ländlichen Szenarien, Menschen, Tieren und anderen physischen Objekten oder realen Umgebungen enthalten. Derartige Bilder können verwendet werden, um in Maschinen oder Robotern eingesetzte DNNs zu trainieren, zu prüfen oder zu zertifizieren, um physische Objekte in der realen Welt zu manipulieren, zu bearbeiten oder zu verändern. Außerdem können derartige Bilder verwendet werden, um in autonomen Fahrzeugen eingesetzte DNNs zu trainieren, zu prüfen oder zu zertifizieren, damit sie die Fahrzeuge durch die reale Welt navigieren und bewegen. Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, verwendet werden, um den Benutzern derartiger Maschinen, Robotern und Fahrzeugen Informationen zu vermitteln.
  • 5C veranschaulicht Komponenten eines beispielhaften Systems 555, das verwendet werden kann, um maschinelles Lernen zu trainieren und zu nutzen, gemäß mindestens einer Ausführungsform. Das beispielhafte System 555 kann eine oder mehrere der ECC und komprimierten Daten-Packlogik 100 oder der ECC und komprimierten Daten-Korrekturlogik 200 umfassen. Das beispielhafte System 555 kann eine oder mehrere der Datenkomprimierungseinheit 110, ECC-Berechnungseinheiten 115 und 215, Packeinheiten 120 und 220, Korrektureinheit 205 oder Datendekomprimierungseinheit 210 umfassen. Das beispielhafte System 555 kann konfiguriert sein, um das jeweils in 1E und 2D gezeigte Verfahren 150 oder 260 zu implementieren.
  • Wie erläutert wird, können verschiedene Komponenten durch verschiedene Kombinationen von Rechenvorrichtungen und Ressourcen oder ein einzelnes Rechensystem bereitgestellt werden, das unter der Steuerung einer einzelnen Entität oder mehrerer Entitäten sein kann. Ferner können Aspekte durch unterschiedliche Entitäten ausgelöst, initiiert oder angefordert werden. In mindestens einer Ausführungsform könnte das Training eines neuronalen Netzwerks durch einen Anbieter, der einer Anbieterumgebung 506 zugeordnet ist, angewiesen werden, während in mindestens einer Ausführungsform das Training durch einen Kunden oder einen anderen Benutzer angefragt werden könnte, der über eine Client-Vorrichtung 502 oder einer anderen derartigen Ressource Zugriff auf eine Anbieterumgebung hat. In mindestens einer Ausführungsform können Trainingsdaten (oder durch ein trainiertes neuronales Netzwerk zu analysierende Daten) durch einen Anbieter, einen Benutzer oder einen Dritt Inhaltsanbieter 524 eines Dritten werden. In mindestens einer Ausführungsform kann die Client-Vorrichtung 502 ein Fahrzeug oder Objekt sein, das zum Beispiel stellvertretend für einen Benutzer zu navigieren ist, das Anfragen übermitteln und/oder Anweisungen empfangen kann, welche bei der Navigation einer Vorrichtung helfen können.
  • In mindestens einer Ausführungsform können Anfragen über mindestens ein Netzwerk 504 übermittelt werden, um von einer Anbieterumgebung 506 empfangen zu werden. In mindestens einer Ausführungsform kann eine Client-Vorrichtung beliebige geeignete elektronische und/oder Rechenvorrichtungen sein, die es einem Benutzer ermöglicht, derartige Anfragen zu erzeugen und zu senden, wie beispielsweise, jedoch nicht darauf beschränkt, Desktop-Computer, Notebook-Computer, Computerserver, Smartphones, Tablet-Computer, Spielkonsolen (tragbar oder anderweitig), Computerprozessoren, Rechenlogik und Set-Top-Boxen. Das/die Netzwerk(e) 504 kann/können jedes beliebige geeignete Netzwerk zum Übertragen einer Anfrage oder anderer derartiger Daten umfassen, wie das Internet, ein Intranet, ein Ethernet, ein Mobilfunknetzwerk, ein Lokalbereichsnetzwerk (LAN), ein Weitbereichsnetzwerk (WAN), ein persönliches Netzwerk (PAN), ein Ad-hoc-Netzwerk von direkten drahtlosen Verbindungen zwischen Peers und so weiter.
  • In mindestens einer Ausführungsform können Anfragen an einer Schnittstellenschicht 508 empfangen werden, die Daten an einen Trainings- und Inferenzmanager 532 weiterleiten kann. In diesem Beispiel kann der Trainings- und Inferenzmanager 532 kann ein System oder Dienst sein, der Hardware und Software zum Verwalten von Anfragen und Bedienen entsprechender Daten oder Inhalte beinhaltet, in mindestens einer Ausführungsform kann der Trainings- und Inferenzmanager 532 eine Anfrage empfangen, um ein neuronales Netzwerks zu trainieren, und Daten für eine Anfrage an ein Trainingsmodul 512 bereitstellen. In mindestens einer Ausführungsform kann das Trainingsmodul 512 ein geeignetes Modell oder neuronales Netzwerk auswählen, das verwendet werden soll, wenn es nicht durch die Anfrage spezifiziert ist, und kann ein Modell unter Verwendung relevanter Trainingsdaten trainieren. In mindestens einer Ausführungsform können Trainingsdaten ein Batch von Daten sein, die in einem Trainingsdaten-Repositorium 514 gespeichert sind, die von der Client-Vorrichtung 502 empfangen oder von einem Drittanbieter 524 erhalten werden. In mindestens einer Ausführungsform kann das Trainingsmodul 512 für Trainingsdaten verantwortlich sein. Ein neuronales Netzwerk kann ein beliebiges geeignetes Netzwerk sein, wie beispielsweise ein rekurrentes neuronales Netzwerk (recurrent neural network; RNN) oder ein neuronales Faltungsnetzwerk (convolutional neural network; CNN). Sobald ein neuronales Netzwerk trainiert und erfolgreich bewertet wurde, kann ein trainiertes neuronales Netzwerk in einem Modell-Repositorium 516 gespeichert werden, das beispielsweise unterschiedliche Modelle oder Netzwerke für Benutzer, Anwendungen oder Dienste usw. speichern kann. In mindestens einer Ausführungsform kann es mehrere Modelle für eine einzelne Anwendung oder Einheit geben, die basierend auf einer Reihe unterschiedlicher Faktoren genutzt werden können.
  • In mindestens einer Ausführungsform kann zu einem späteren Zeitpunkt eine Anfrage von der Client-Vorrichtung 502 (oder einer anderen derartigen Vorrichtung) nach Inhalten (z.B. Pfadbestimmungen) oder Daten empfangen werden, die mindestens teilweise durch ein trainiertes neuronales Netzwerk bestimmt oder beeinflusst werden. Diese Anfrage kann zum Beispiel Eingabedaten umfassen, die unter Verwendung eines neuronalen Netzwerks zu verarbeiten sind, um eine oder mehrere Inferenzen oder andere Ausgabewerte, Klassifikationen oder Vorhersagen zu erhalten, oder für mindestens eine Ausführungsform können Eingabedaten durch die Schnittstellenschicht 508 empfangen und an das Inferenzmodul 518 geleitet werden, obwohl ebenfalls ein anderes System oder ein anderer Dienst ebenfalls verwendet werden kann. In mindestens einer Ausführungsform kann das Inferenzmodul 518 ein geeignetes trainiertes Netzwerk, wie beispielsweise ein trainiertes tiefes neuronales Netzwerk (DNN), wie hier erläutert, aus dem Modell-Repositorium 516 erhalten, wenn es nicht bereits lokal in dem Inferenzmodul 518 gespeichert ist. Das Inferenzmodul 518 kann Daten als Eingabe in ein trainiertes Netzwerk bereitstellen, das dann als Ausgabe eine oder mehrere Inferenzen erzeugen kann. Dies kann beispielsweise eine Klassifikation einer Instanz von Eingabedaten umfassen. In mindestens einer Ausführungsform können Inferenzen dann an die Client-Vorrichtung 502 zur Anzeige oder anderer Kommunikation an einen Benutzer übertragen werden. In mindestens einer Ausführungsform können Kontextdaten für einen Benutzer ebenfalls in einem Benutzerkontextdaten-Repositorium 522 gespeichert sein, das Daten über einen Benutzer umfassen kann, die als Eingabe in ein Netzwerk beim Erzeugen von Inferenzen oder Bestimmen von Daten zur Rückgabe an einen Benutzer nach dem Erhalten von Instanzen nützlich sein können. In mindestens einer Ausführungsform können relevante Daten, die mindestens einen Teil der Eingabe- oder Inferenzdaten umfassen können, ebenfalls in einer lokalen Datenbank 534 zum Verarbeiten zukünftiger Anfragen gespeichert sein. In mindestens einer Ausführungsform kann ein Benutzer Kontoinformationen oder andere Informationen verwenden, um auf Ressourcen oder Funktionalität einer Anbieterumgebung zuzugreifen. In mindestens einer Ausführungsform können, falls zulässig und verfügbar, Benutzerdaten ebenfalls gesammelt und verwendet werden, um Modelle weiter zu trainieren, um genauere Inferenzen für zukünftige Anfragen bereitzustellen. In mindestens einer Ausführungsform können Anfragen durch eine Benutzerschnittstelle an einer auf der Client-Vorrichtung 502 ausgeführten Anwendung 526 für maschinelles Lernen empfangen und Ergebnisse durch dieselbe Schnittstelle angezeigt werden. Eine Client-Vorrichtung kann Ressourcen, wie beispielsweise einen Prozessor 528 und Speicher 562 zum Erzeugen einer Anfrage und Verarbeiten von Ergebnissen oder einer Antwort sowie mindestens ein Datenspeicherelement 552 zum Speichern von Daten für die Anwendung 526 für maschinelles Lernen umfassen.
  • In mindestens einer Ausführungsform wird ein Prozessor 528 (oder ein Prozessor des Trainingsmoduls 512 oder des Inferenzmoduls 518) eine zentrale Verarbeitungseinheit (CPU) sein. Wie erwähnt, können Ressourcen in derartigen Umgebungen jedoch GPUs nutzen, um Daten für mindestens bestimmte Arten von Anfragen zu verarbeiten. Mit Tausenden von Kernen sind GPUs, wie beispielsweise die PPU 300, ausgestaltet, um erhebliche parallele Arbeitslasten zu bewältigen, und wurden daher beim tiefen Lernen zum Trainieren neuronaler Netzwerke und Erzeugen von Vorhersagen populär. Während die Verwendung von GPUs für Offline-Builds ein schnelleres Training größerer und komplexerer Modelle ermöglicht hat, impliziert das Erzeugen von Vorhersagen offline, dass entweder Eingabemerkmale zur Anfragezeit nicht verwendet werden können oder Vorhersagen für alle Permutationen von Merkmalen erzeugt und in einer Lookup-Tabelle gespeichert sein müssen, um Echtzeit-Anfragen zu bedienen. Wenn ein Deep-Learning-Framework einen CPU-Modus unterstützt und ein Modell klein und einfach genug ist, um einen Feed-Forward auf einer CPU mit einer angemessenen Latenz durchzuführen, dann könnte ein Dienst auf einer CPU-Instanz ein Modell hosten. In diesem Fall kann das Training offline auf einer GPU und die Inferenz in Echtzeit auf einer CPU vorgenommen werden. Wenn eine CPU-Vorgehensweise nicht praktikabel ist, dann kann ein Dienst auf einer GPU-Instanz ausgeführt werden. Da GPUs jedoch andere Leistungs- und Kosteneigenschaften als CPUs aufweisen, kann das Ausführen eines Dienstes, der einen Laufzeitalgorithmus auf eine GPU auslagert, jedoch erfordern, dass dieser anders als ein CPU-basierter Dienst ausgestaltet ist.
  • In mindestens einer Ausführungsform können Videodaten von der Client-Vorrichtung 502 zur Verbesserung in der Anbieterumgebung 506 bereitgestellt werden. In mindestens einer Ausführungsform können Videodaten zur Verbesserung auf der Client-Vorrichtung 502 verarbeitet werden. In mindestens einer Ausführungsform können Videodaten von einem Drittanbieter 524 für Inhalte gestreamt und durch den Drittanbieter 524 für Inhalte, die Anbieterumgebung 506 oder die Client-Vorrichtung 502 verbessert werden. In mindestens einer Ausführungsform können Videodaten von der Client-Vorrichtung 502 zur Verwendung als Trainingsdaten in der Anbieterumgebung 506 bereitgestellt werden.
  • In mindestens einer Ausführungsform kann überwachtes und/oder unüberwachtes Training durch die Client-Vorrichtung 502 und/oder die Anbieterumgebung 506 durchgeführt werden. In mindestens einer Ausführungsform wird ein Satz von Trainingsdaten 514 (z.B. klassifizierte oder bezeichnete Daten) als Eingabe bereitgestellt, um als Trainingsdaten zu fungieren. In einer Ausführungsform kann der Satz von Trainingsdaten in einer generativen adversen Trainingskonfiguration verwendet werden, um ein neurales Generatornetzwerk zu trainieren. In mindestens einer Ausführungsform können Trainingsdaten Instanzen von mindestens einem Objekttyp sein, für das ein neuronales Netzwerk zu trainieren ist. In mindestens einer Ausführungsform können Trainingsdaten Instanzen mindestens eines Objekttyps umfassen, für den ein neuronales Netzwerk trainiert werden soll, sowie Informationen, die diesen Objekttyp identifizieren. In mindestens einer Ausführungsform könnten die Trainingsdaten einen Satz von Bildern umfassen, die jeweils eine Darstellung eines Objekttyps umfassen, wobei jedes Bild außerdem eine Bezeichnung, Metadaten, eine Klassifikation oder ein anderes Informationselement beinhaltet, die einen Objekttyp identifizieren, der in einem jeweiligen Bild dargestellt. Verschiedene andere Arten von Daten können ebenso als Trainingsdaten verwendet werden, die Textdaten, Audiodaten, Videodaten und so weiter umfassen können. In mindestens einer Ausführungsform werden Trainingsdaten 514 als Trainingseingabe in ein Trainingsmodul 512 bereitgestellt. In mindestens einer Ausführungsform kann das Trainingsmodul 512 ein System oder ein Dienst sein, das/der Hardware und Software beinhaltet, wie beispielsweise eine oder mehrere Rechenvorrichtungen, die eine Trainingsanwendung zum Trainieren eines neuronales Netzwerk (oder eines anderen Modells oder eines anderen Algorithmus usw.) ausführen. In mindestens einer Ausführungsform empfängt das Trainingsmodul 512 eine Anweisung oder Anfrage, die einen zum Training zu verwendenden Modelltyp angibt, in mindestens einer Ausführungsform kann ein Modell ein beliebiges geeignetes statistisches Modell, ein geeignetes Netzwerk oder ein geeigneter Algorithmus sein, die für derartige Zwecke nützlich sind, die ein künstliches neuronales Netzwerk, einen Deep-Learning-Algorithmus, einen lernenden Klassifikator, ein Bayes-Netzwerk und so weiter umfassen können. In mindestens einer Ausführungsform kann das Trainingsmodul 512 ein Anfangsmodell oder ein anderes nicht trainiertes Modell aus einem geeigneten Repositorium 516 auswählen und Trainingsdaten 514 nutzen, um ein Modell zu trainieren, um dadurch ein trainiertes Modell (z.B. trainiertes tiefes neuronales Netzwerk ) zu erzeugen, das verwendet werden kann, um ähnliche Datentypen zu klassifizieren oder andere derartige Inferenzen zu erzeugen. In mindestens einer Ausführungsform, bei der Trainingsdaten nicht verwendet werden, kann dennoch ein geeignetes Anfangsmodell für das Training an Eingabedaten pro Trainingsmodul 512 ausgewählt werden.
  • In mindestens einer Ausführungsform kann ein Modell in einer Anzahl von unterschiedlichen Weisen trainiert werden, was teilweise von einem ausgewählten Modelltyp abhängen kann. In mindestens einer Ausführungsform kann einem Algorithmus für maschinelles Lernen ein Satz von Trainingsdaten bereitgestellt werden, wobei ein Modell ein Modellartefakt ist, das durch einen Trainingsprozess erzeugt wird. In mindestens einer Ausführungsform enthält jede Instanz von Trainingsdaten eine richtige Antwort (z.B. eine Klassifizierung), die als Ziel oder Zielattribut bezeichnet werden kann. In mindestens einer Ausführungsform findet ein Lernalgorithmus Muster in Trainingsdaten, die Eingabedatenattribute auf ein Ziel abbilden, eine vorherzusagende Antwort, und ein Modell für maschinelles Lernen, das diese Muster erfasst, wird ausgegeben. In mindestens einer Ausführungsform kann dann ein Modell für maschinelles Lernen verwendet werden, um Vorhersagen über neue Daten zu erhalten, für die kein Ziel festgelegt ist.
  • In mindestens einer Ausführungsform kann der Trainings- und Inferenzmanager 532 aus einem Satz von Modellen für maschinelles Lernen auswählen, die binäre Klassifikation, Mehrklassenklassifikation, generative und Regressionsmodellen umfassen. In mindestens einer Ausführungsform kann ein zu verwendender Modelltyp mindestens teilweise von einem vorherzusagenden Zieltyp abhängen.
  • Graphikverarbeitungs-Pipeline
  • In einer Ausführungsform umfasst die PPU 300 eine Graphikverarbeitungseinheit (GPU). Die PPU 300 ist konfiguriert, um Befehle zu empfangen, die Shader-Programme zur Verarbeitung von Graphikdaten spezifizieren. Graphikdaten können als ein Satz von Primitiven, wie beispielsweise Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen und dergleichen definiert sein. Typischerweise umfasst eine Primitive Daten, die eine Anzahl von Vertices für die Primitive (z.B., in einem Modellraum-Koordinatensystem) sowie auch Attribute spezifizieren, die jedem Vertex der Primitiven zugeordnet sind. Die PPU 300 kann konfiguriert sein, um die Graphikprimitive zu verarbeiten, um ein Frame-Puffer zu erzeugen (z.B. Pixeldaten für jedes der Pixel der Anzeige).
  • Eine Anwendung schreibt Modelldaten für eine Szene (z.B. eine Sammlung von Vertices und Attributen) in einen Speicher, wie beispielsweise einen Systemspeicher oder Speicher 304. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an dem Treiber-Kernel aus, der die Modelldaten anfragt, die zu rendern und anzuzeigen sind. Der Treiber-Kernel liest die Modelldaten und schreibt Befehle an den einen oder mehrere Ströme, um Operationen durchzuführen, um die Modelldaten zu verarbeiten. Die Befehle können unterschiedliche Shader-Programme referenzieren, die auf den SMs 440 der PPU 300 zu implementieren sind, die einen oder mehrere eines Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader und eines Pixel-Shader umfassen können. Beispielsweise können eine oder mehrere der SMs 440 konfiguriert sein, um ein Vertex-Shader-Programm auszuführen, das eine Anzahl von Vertices verarbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die unterschiedlichen SMs 440 konfiguriert sein, um unterschiedliche Shader-Programme nebenläufig auszuführen. Beispielsweise kann eine erste Untermenge von SMs 440 konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Untermenge von SMs 440 konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Untermenge von SMs 440 verarbeitet Vertexdaten, um verarbeitete Vertexdaten zu erzeugen, und schreibt die verarbeiteten Vertexdaten in den L2-Cache-Speicher 460 und/oder den Speicher 304. Nachdem die verarbeiteten Vertexdaten gerastert sind (z.B. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert sind), um Fragmentdaten zu erzeugen, führt die zweite Untermenge von SMs 440 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt werden und in den Frame-Puffer im Speicher 304 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können nebenläufig ausgeführt werden, wobei unterschiedliche Daten von der gleichen Szene in einem Pipeline-Verfahren verarbeitet werden, bis alle der Modelldaten für die Szene gerenderten zu dem Frame-Puffer gerendert wurden. Dann wird der Inhalt des Frame-Puffers an einen Anzeigencontroller zur Anzeige auf einer Anzeigevorrichtung übertragen.
  • Bilder, die durch Anwenden einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, können auf einem Monitor oder einer anderen Anzeigevorrichtung angezeigt werden. In einigen Ausführungsformen kann die Anzeigevorrichtung direkt mit dem System oder Prozessor gekoppelt sein, das/der die Bilder erzeugt oder rendert. In anderen Ausführungsformen kann die Anzeigevorrichtung indirekt mit dem System oder Prozessor gekoppelt sein, wie beispielsweise über ein Netzwerk. Beispiele derartiger Netzwerks umfassen das Internet, mobile Telekommunikationsnetzwerke, ein WIFI-Netzwerk, sowie auch jedes andere verdrahtete und/oder drahtlose Netzwerksystem. Wenn die Anzeigevorrichtung indirekt gekoppelt ist, können die Bilder von dem System oder von dem Prozessor erzeugte Bilder über das Netzwerk zu der Anzeigevorrichtung gestreamt werden. Derartiges Streaming ermöglicht beispielsweise Videospielen oder anderen Anwendungen, die Bilder rendern, auf einem Server, einem Rechenzentrum oder in einer Cloudbasierten Rechenumgebung ausgeführt zu werden, und die gerenderten Bilder gesendet und auf einer oder mehreren Benutzervorrichtungen (wie beispielsweise einem Computer, Videospielekonsole, Smartphone, andere mobile Vorrichtung usw.) angezeigt zu werden, die physisch von dem Server oder Rechenzentrum getrennt sind. Folglich können die hier offenbarten Techniken angewandt werden, um die Bilder zu verbessern, die gestreamt werden, und um Dienste zu verbessern, die Bilder streamen, wie beispielsweise NVIDIA GeForce Now (GFN), Google Stadia und dergleichen.
  • Beispiel für ein Spiele-Streaming-System
  • 6B ist ein beispielhaftes Systemdiagramm für ein Spiele-Streaming-System 605 gemäß einigen Ausführungsformen der vorliegenden Offenbarung. 6B beinhaltet (einen) Spieleserver 603 (der/die ähnliche Komponenten, Merkmale und/oder Funktionalität wie die beispielhafte Verarbeitungssystem 500 von 5A aufweisen kann/können), (eine) Client-Einrichtung(en) 604 (die ähnliche Komponenten, Merkmale und/oder Funktionalität wie die beispielhafte Verarbeitungssystem 500 von 5A aufweisen kann/können) und (ein) Netzwerk(e) 606 (das/die ähnlich wie das/die hier beschriebene(n) Netzwerk(e) sein kann/können). In einigen Ausführungsformen der vorliegenden Offenbarung kann das System 605 implementiert werden.
  • In dem System 605 können die Client-Einrichtung(en) 604 für eine Spielesitzung nur Eingabedaten als Reaktion auf Eingaben an die Eingabeeinrichtung(en) empfangen, die Eingabedaten an den/die Spieleserver 603 übertragen, codierte Anzeigedaten von dem/den Spieleserver(n) 603 empfangen und die Anzeigedaten auf der Anzeige 624 anzeigen. So werden die rechenintensiveren Berechnungen und Verarbeitungen an den/die Spieleserver 603 ausgelagert (z. B. wird das Rendering - insbesondere Ray- oder Path-Tracing - für die graphische Ausgabe der Spielesitzung von der/den GPU(s) des/der Spieleserver(s) 603 ausgeführt). Mit anderen Worten: Die Spielesitzung wird von dem/den Spieleserver(n) 603 zu der/den Client-Einrichtung(en) 604 gestreamt, wodurch die Anforderungen an die Client-Einrichtung(en) 604 für die Graphikverarbeitung und das Rendering reduziert werden.
  • Zum Beispiel kann eine Client-Einrichtung 604 in Bezug auf eine Instanziierung einer Spielesitzung einen Rahmen der Spielesitzung auf der Anzeige 624 basierend auf dem Empfang der Anzeigedaten von dem/den Spieleserver(n) 603 anzeigen. Die Client-Einrichtung 604 kann eine Eingabe an einer der Eingabeeinrichtung(en) empfangen und als Antwort Eingabedaten erzeugen. Die Client-Einrichtung 604 kann die Eingabedaten über die Kommunikationsschnittstelle 621 und über das/die Netzwerk(e) 606 (z. B. das Internet) an den/die Spielserver 603 übertragen, und der/die Spielserver 603 kann/können die Eingabedaten über die Kommunikationsschnittstelle 618 empfangen. Die CPU(s) kann/können die Eingabedaten empfangen, die Eingabedaten verarbeiten und Daten an die GPU(s) übertragen, die die GPU(s) veranlassen, ein Rendering der Spielesitzung zu erzeugen. Die Eingabedaten können z. B. eine Bewegung einer Figur des Benutzers in einem Spiel, das Abfeuern einer Waffe, das Nachladen, das Passen eines Balls, das Wenden eines Fahrzeugs usw. darstellen. Die Rendering-Komponente 612 kann die Spielsitzung rendern (z. B. repräsentativ für das Ergebnis der Eingabedaten), und die Render-Capture-Komponente 614 kann das Rendering der Spielsitzung als Anzeigedaten erfassen (z. B. als Bilddaten, die den gerenderten Frame der Spielsitzung erfassen). Das Rendering der Spielsitzung kann Beleuchtungs- und/oder Schatteneffekte mit Strahlen- oder Pfadverfolgung bzw. Ray- oder Path-Tracing aufweisen, die unter Verwendung einer oder mehrerer paralleler Verarbeitungseinheiten - wie GPUs, die darüber hinaus die Verwendung eines oder mehrerer dedizierter Hardwarebeschleuniger oder Verarbeitungskerne zur Durchführung von Strahlen- oder Pfadverfolgungstechniken nutzen können - des/der Spieleserver(s) 603 berechnet werden. Der Codierer 616 kann dann die Anzeigedaten codieren, um codierte Anzeigedaten zu erzeugen, und die codierten Anzeigedaten können über das/die Netzwerk(e) 606 über die Kommunikationsschnittstelle 618 an die Client-Einrichtung 604 übertragen werden. Die Client-Einrichtung 604 kann die codierten Anzeigedaten über die Kommunikationsschnittstelle 621 empfangen und der Decoder 622 kann die codierten Anzeigedaten decodieren, um die Anzeigedaten zu erzeugen. Die Client-Einrichtung 604 kann dann die Anzeigedaten über die Anzeige 624 anzeigen.
  • Es versteht sich, dass die in den beigefügten Figuren dargestellte Anordnung von Komponenten zu Veranschaulichungszwecken dient und dass andere Anordnungen möglich sind. Beispielsweise können ein oder mehrere der hier beschriebenen Elemente ganz oder teilweise als eine elektronische Hardwarekomponente realisiert sein. Andere Elemente können in Software, Hardware oder einer Kombination aus Software und Hardware implementiert sein. Außerdem können einige oder alle dieser anderen Elemente kombiniert werden, einige können ganz weggelassen werden und zusätzliche Komponenten können hinzugefügt werden, während die hier beschriebene Funktionalität noch immer erreicht wird. Folglich kann der hier beschriebene Gegenstand in vielen verschiedenen Variationen verkörpert sein und es wird davon ausgegangen, dass alle solche Variationen in den Geltungsbereich der Ansprüche fallen.
  • Um ein Verständnis des hier beschriebenen Gegenstands zu erleichtern, sind viele Aspekte im Hinblick auf Sequenzen von Aktionen beschrieben. Es versteht sich für den Fachmann, dass die verschiedenen Aktionen durch spezialisierte Schaltungen oder Schaltkreise, durch Programmanweisungen, die von einem oder mehreren Prozessoren ausgeführt werden, oder durch eine Kombination von beidem ausgeführt werden können. Die hier dargelegte Beschreibung einer beliebigen Sequenz von Aktionen soll nicht implizieren, dass der für die Ausführung dieser Sequenz beschriebenen spezifischen Reihenfolge gefolgt werden muss. Alle hier beschriebenen Verfahren können in jeder beliebigen geeigneten Reihenfolge durchgeführt werden, sofern es hier nicht anders angegeben ist oder anderweitig durch den Kontext klar widersprochen wird.
  • Die Verwendung der Begriffe „ein“ und „der“ und ähnliche Bezugnahmen im Kontext der Beschreibung des Gegenstands (insbesondere im Kontext der folgenden Ansprüche) sind so auszulegen, dass sie sowohl den Singular als auch den Plural abdecken, sofern dies hier nicht anders angegeben ist oder durch Kontext eindeutig im Widerspruch steht. Die Verwendung des Begriffs „zumindest ein“, gefolgt von einer Liste eines oder mehrerer Elemente (z. B. „zumindest einer von A und B“) ist so auszulegen, dass eines der aufgelisteten Elemente (A oder B) oder eine beliebige Kombination zweier oder mehrerer der aufgelisteten Elemente (A und B) ausgewählt wird, sofern dies hier nicht anders angegeben ist oder durch den Kontext klar widersprochen wird. Ferner dient die vorangehende Beschreibung lediglich der Zweck der Veranschaulichung und nicht dem Zweck der Beschränkung dient, da der angestrebte Schutzumfang durch die nachstehenden Ansprüche und deren Äquivalente definiert wird. Die Verwendung beliebiger und aller Beispiele, oder hier bereitgestellter beispielhafter Formulierungen (z.B. „wie beispielsweise“), dient lediglich der besseren Veranschaulichung des Gegenstands und stellt keine Beschränkung des Schutzumfangs des Gegenstands dar, sofern dies nicht anders beansprucht wird. Die Verwendung des Begriffs „basierend auf“ und anderer ähnlicher Ausdrücke, die eine Bedingung für die Herbeiführung eines Ergebnisses angeben, sowohl in den Ansprüchen als auch in der schriftlichen Beschreibung, soll keine wie auch immer anderen Bedingungen ausschließen, die dieses Ergebnis herbeiführen. Keine Formulierung in der Spezifikation sollte so ausgelegt werden, dass sie ein beliebiges nicht beanspruchtes Element als wesentlich für die praktische Umsetzung der beanspruchten Erfindung anzeigt.

Claims (20)

  1. Computerimplementiertes Verfahren, umfassend: Verarbeiten von komprimierten Daten innerhalb eines Prozessors, um Fehlerkorrektur-Prüfbits zu berechnen; Bestimmen einer Anzahl von Speichereinheiten fester Größe, die benötigt werden, um eine Kombination der komprimierten Daten und Prüfbits zu speichern; Kombinieren der komprimierten Daten und der Prüfbits in der Anzahl von Speichereinheiten fester Größe, um eine Kombination zu erzeugen; und Übertragen der Kombination innerhalb des Prozessors oder an eine zusätzlichen Vorrichtung, die sich außerhalb des Prozessors befindet.
  2. Computerimplementiertes Verfahren gemäß Anspruch 1, ferner umfassend Bestimmen, dass die Anzahl eine maximale Anzahl der Speichereinheiten fester Größe überschreitet; Entfernen der Prüfbits aus der Kombination; und getrenntes Transferieren der Prüfbits innerhalb des Prozessors oder an die zusätzliche Vorrichtung.
  3. Computerimplementiertes Verfahren gemäß Anspruch 1 oder 2, ferner umfassend Verwerfen der Prüfbits an einer Schnittstelle mit der zusätzlichen Vorrichtung und Übertragen lediglich der komprimierten Daten von dem Prozessor an die zusätzliche Vorrichtung.
  4. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, ferner umfassend Speichern der Kombination in einer Speichervorrichtung an einem Ort, auf den durch eine Adresse zugegriffen werden kann, die unter Verwendung einer einzelnen Zugriffsanfrage gelesen oder beschrieben wird.
  5. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, ferner umfassend Speichern der komprimierten Daten in einem ersten Abschnitt einer Speichervorrichtung und Speichern der Prüfbits in einem zweiten Abschnitt der Speichervorrichtung, die von dem ersten Abschnitt getrennt ist.
  6. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei die Kombination von dem Prozessor an die zusätzliche Vorrichtung über eine Zwischenverbindung übertragen wird.
  7. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei die Kombination durch eine Kreuzschienenverbindung innerhalb des Prozessors übertragen wird.
  8. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei eine zweite Anzahl der Speichereinheiten fester Größe benötigt wird, um die komprimierten Daten ohne die Prüfbits zu speichern und die zweite Anzahl ist kleiner als die Anzahl der Speichereinheiten fester Größe ist, die benötigt werden, um die Kombination zu speichern.
  9. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei die Fehlerkorrektur-Prüfbits für einen Abschnitt der komprimierten Daten in jeder Speichereinheit fester Größe getrennt berechnet und in der Speichereinheit fester Größe mit dem Abschnitt der komprimierten Daten kombiniert werden.
  10. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei die Kombination an eine Speicherungsressource innerhalb des Prozessors übertragen wird und ferner umfasst: Bestimmen, basierend auf den Prüfbits, ob die komprimierten Daten beschädigt sind; und Speichern der Kombination in der Speicherungsressource, wobei, reagierend auf das Bestimmen, dass die komprimierten Daten beschädigt sind, Korrigieren der komprimierten Daten unter Verwendung der Prüfbits vor dem Speichern der Kombination.
  11. Computerimplementiertes Verfahren gemäß Anspruch 10, wobei die Kombination an die Speicherungsressource durch eine Kreuzschienenverbindung innerhalb der Prozessor übertragen wird.
  12. Computerimplementiertes Verfahren gemäß Anspruch 10 oder 11, ferner umfassend: Empfangen, durch einen Ausführungskern innerhalb des Prozessors, der Kombination von der Speicherungsressource; Bestimmen, durch den Ausführungskern, dass die komprimierten Daten beschädigt sind, basierend auf den Prüfbits; und Korrigieren der komprimierten Daten unter Verwendung der Prüfbits vor dem Verarbeiten der komprimierten Daten durch der Ausführungskern.
  13. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, ferner umfassend: Bestimmen, durch die zusätzliche Vorrichtung, dass die komprimierten Daten beschädigt sind; und Korrigieren der komprimierten Daten unter Verwendung der Prüfbits vor dem Verarbeiten der Kombination innerhalb der zusätzlichen Vorrichtung.
  14. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei mindestens einer der Schritte des Verarbeitens, Bestimmens und Kombinierens auf einem Server oder in einer Rechenzentrum durchgeführt wird, um ein Bild zu erzeugen, und das Bild auf einer Benutzervorrichtung gestreamt wird.
  15. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei mindestens einer der Schritte des Verarbeitens, Bestimmens und Kombinierens innerhalb einer Cloud-Rechenumgebung durchgeführt wird.
  16. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei mindestens einer der Schritte des Verarbeitens, Bestimmens und Kombinierens zum Trainieren, Prüfen oder Zertifizieren eines neuronalen Netzwerks durchgeführt wird, das in einer Maschine, einem Roboter oder einem autonomen Fahrzeug eingesetzt wird.
  17. Computerimplementiertes Verfahren gemäß einem vorangehenden Anspruch, wobei mindestens einer der Schritte das Verarbeitens, Bestimmens und Kombinierens auf einer virtuellen Maschine durchgeführt wird, die einen Abschnitt einer Graphikverarbeitungseinheit umfasst.
  18. System, umfassend: einen Prozessor, der eine Schnittstelle umfasst; und eine zusätzliche Vorrichtung, die sich außerhalb des Prozessors befindet und mit der Schnittstelle verbunden ist, wobei der Prozessor konfiguriert ist, um komprimierte Daten zu schützen durch: Verarbeiten der komprimierten Daten, um Fehlerkorrektur-Prüfbits zu berechnen; Bestimmen einer Anzahl von Speichereinheiten fester Größe, die benötigt werden, um eine Kombination der komprimierten Daten und Prüfbits zu speichern; und Kombinieren der komprimierten Daten und der Prüfbits in der Anzahl von Speichereinheiten fester Größe für einen Transfer innerhalb des Prozessors oder an die zusätzliche Vorrichtung, die sich außerhalb des Prozessors befindet.
  19. System gemäß Anspruch 18, ferner umfassend das Übertragen der Kombination durch eine Kreuzschienenverbindung innerhalb des Prozessors.
  20. Nichttransitorische computerlesbare Medien, die Computeranweisungen speichern, die, wenn durch einen oder mehrere Prozessoren ausgeführt, den einen oder mehrere Prozessoren veranlassen, die folgenden Schritte durchzuführen: Verarbeiten komprimierter Daten, um Fehlerkorrektur-Prüfbits zu berechnen; Bestimmen einer Anzahl von Speichereinheiten fester Größe, die benötigt werden, um eine Kombination der komprimierten Daten und Prüfbits zu speichern; und Kombinieren der komprimierten Daten und der Prüfbits in der Anzahl von Speichereinheiten fester Größe für einen Transfer innerhalb eines ersten Prozessors des einen oder mehrerer Prozessoren oder an eine zusätzlichen Vorrichtung, die sich außerhalb des ersten Prozessors befindet.
DE102022107232.0A 2021-04-07 2022-03-28 Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz Pending DE102022107232A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/224,434 US11522565B2 (en) 2021-04-07 2021-04-07 Packed error correction code (ECC) for compressed data protection
US17/224,434 2021-04-07

Publications (1)

Publication Number Publication Date
DE102022107232A1 true DE102022107232A1 (de) 2022-10-13

Family

ID=83361975

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022107232.0A Pending DE102022107232A1 (de) 2021-04-07 2022-03-28 Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz

Country Status (3)

Country Link
US (1) US11522565B2 (de)
CN (1) CN115202922A (de)
DE (1) DE102022107232A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220076714A1 (en) * 2020-09-08 2022-03-10 Rambus Inc. Methods and Circuits for Streaming Data to Processing Elements in Stacked Processor-Plus-Memory Architecture

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116343890B (zh) * 2023-05-31 2023-07-25 深圳大普微电子科技有限公司 纠错单元管理方法、存储控制芯片及闪存设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510518B2 (en) * 2010-06-22 2013-08-13 Advanced Micro Devices, Inc. Bandwidth adaptive memory compression
US8495464B2 (en) 2010-06-28 2013-07-23 Intel Corporation Reliability support in memory systems without error correcting code support

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220076714A1 (en) * 2020-09-08 2022-03-10 Rambus Inc. Methods and Circuits for Streaming Data to Processing Elements in Stacked Processor-Plus-Memory Architecture
US11960438B2 (en) * 2020-09-08 2024-04-16 Rambus Inc. Methods and circuits for streaming data to processing elements in stacked processor-plus-memory architecture

Also Published As

Publication number Publication date
US11522565B2 (en) 2022-12-06
US20220329265A1 (en) 2022-10-13
CN115202922A (zh) 2022-10-18

Similar Documents

Publication Publication Date Title
DE102021119726A1 (de) Dreidimensionale objektrekonstruktion aus einem video
DE112020004702T5 (de) Bildgenerierung unter verwendung eines oder mehrerer neuronaler netze
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE102019106123A1 (de) Dreidimensionale (3D) Posenschätzung von Seiten einer monokularen Kamera
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102021119722A1 (de) Feingranulare pro-vektor-skalierung für neuronale netzwerkquantisierung
DE112020003165T5 (de) Videointerpolation unter Verwendung eines oder mehrerer neuronaler Netze
DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
DE102018124211A1 (de) Lernbasierte Kameraposenschätzung von Bildern einer Umgebung
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE102022118651A1 (de) Mehrfachauflösung-hash-codierung für neuronale netzwerke
DE102022107232A1 (de) Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz
DE102022100360A1 (de) Framework für maschinelles lernen angewandt bei einer halbüberwachten einstellung, um instanzenverfolgung in einer sequenz von bildframes durchzuführen
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
DE102021130031A1 (de) Erscheinungsbildgesteuerte automatische dreidimensionale modellierung
DE102022104142A1 (de) Strahldichte-caching in echtzeit durch ein neuronales netz für pfadverfolgungszwecke
DE102021111335A1 (de) Techniken zum dynamischen komprimieren von speicherregionen, die einen einheitlichen wert haben
DE102021121332A1 (de) Bewertung von qualitativer streaming-erfahrung unter verwendung von sitzungsleistungsmetadaten
DE102022113244A1 (de) Gemeinsame Form- und Erscheinungsbildoptimierung durch Topologieabtastung
DE102021104310A1 (de) Reservoir-basiertes räumlich-zeitliches resampling nach wichtigkeit unter verwendung einer globalen beleuchtungsdatenstruktur
DE102023104326A1 (de) Hierarchisches netzwerk für gestapeltes speichersystem

Legal Events

Date Code Title Description
R012 Request for examination validly filed