DE102018101030A1 - Filterung von Bilddaten unter Verwendung eines neutralen Netzwerks - Google Patents

Filterung von Bilddaten unter Verwendung eines neutralen Netzwerks Download PDF

Info

Publication number
DE102018101030A1
DE102018101030A1 DE102018101030.3A DE102018101030A DE102018101030A1 DE 102018101030 A1 DE102018101030 A1 DE 102018101030A1 DE 102018101030 A DE102018101030 A DE 102018101030A DE 102018101030 A1 DE102018101030 A1 DE 102018101030A1
Authority
DE
Germany
Prior art keywords
image data
neural network
data
unit
recurrent
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
DE102018101030.3A
Other languages
English (en)
Inventor
Chakravarty Reddy Alla Chaitanya
Anton S. Kaplanyan
Timo Oskari Aila
Aaron Eliot Lefohn
Christoph H. Schied
Marco Salvi
John Matthew Burgess
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
Priority claimed from US15/872,838 external-priority patent/US11113800B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102018101030A1 publication Critical patent/DE102018101030A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration by the use of local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • G06T5/70
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2413Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
    • G06F18/24133Distances to prototypes
    • G06F18/24137Distances to cluster centroïds
    • G06F18/2414Smoothing the distance, e.g. radial basis function networks [RBFN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/60Editing figures and text; Combining figures or text
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/506Illumination models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • G06T5/60
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/19Recognition using electronic means
    • G06V30/192Recognition using electronic means using simultaneous comparisons or correlations of the image signals with a plurality of references
    • G06V30/194References adjustable by an adaptive method, e.g. learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10016Video; Image sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10024Color image
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10028Range image; Depth image; 3D point clouds
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20081Training; Learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20172Image enhancement details
    • G06T2207/20182Noise reduction or smoothing in the temporal domain; Spatio-temporal filtering

Abstract

Ein Verfahren, ein computerlesbares Medium und ein System werden zum Durchführen einer räumlich-zeitlichen Filterung offenbart. Das Verfahren umfasst Kennzeichnen von zu rendernden Bilddaten, Rekonstruieren der Bilddaten, um rekonstruierte Bilddaten zu erzeugen, Benutzung eines Filters, das ein neurales Netzwerk umfasst, das eine oder mehrere Übersprungverbindungen und eine oder mehrere rekurrente Schichten aufweist, und Zurückgeben der rekonstruierten Bilddaten.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft Bild-Rendering und insbesondere das Durchführen einer Rekonstruktion an abgetasteten Bildern während eines Rendering-Prozesses.
  • HINTERGRUND
  • Das Rekonstruieren von verrauschten Bilddaten erwies sich unter Benutzung aktueller Techniken als Herausforderung. Beispielsweise sind aktuelle Implementierungen zum Durchführen einer Rekonstruktion von verrauschten Bilddaten zeitintensiv, stützen sich auf Bilder mit einem relativen hohen Abtastzählwert und erzeugen kein zeitlich stabiles Ergebnis. Keine aktuellen Lösungen bieten ein Rekonstruktionsverfahren, das zeiteffizient ist, das anfängliche Bilddaten mit einem kleinen Abtastzählwert handhaben kann und das zeitlich stabile Ergebnisse erzeugt.
  • Somit gibt es ist ein Bedürfnis, sich diesen Problemen und/oder anderen Problemen zu widmen, die dem Stand der Technik zugeordnet sind.
  • ZUSAMMENFASSUNG
  • Ein Verfahren, ein computerlesbares Medium und ein System werden zum Durchführen einer räumlich-zeitlichen Filterung offenbart. Das Verfahren umfasst ein Kennzeichnen von zu rendernden Bilddaten, ein Rekonstruieren der Bilddaten, um rekonstruierte Bilddaten zu erzeugen, eine Benutzung eines Filters, das ein neurales Netzwerk umfasst, das eine oder mehrere Übersprungverbindungen und eine oder mehrere rekurrente Schichten aufweist, und ein Zurückgeben der rekonstruierten Bilddaten.
  • Figurenliste
    • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Filtern von Bilddaten unter Verwendung eines neuralen Netzwerks gemäß einer Ausführungsform;
    • 2 veranschaulicht eine Parallelverarbeitungseinheit gemäß einer Ausführungsform;
    • 3A veranschaulicht einen allgemeinen Verarbeitungscluster der Parallelverarbeitungseinheit von 2 gemäß einer Ausführungsform;
    • 3B veranschaulicht eine Partitions-Einheit der Parallelverarbeitungseinheit von 2 gemäß einer Ausführungsform;
    • 4 veranschaulicht den Streaming-Multiprozessor von 3A gemäß einer Ausführungsform;
    • 5 veranschaulicht ein System-on-Chip, das die Parallelverarbeitungseinheit von 2 umfasst, gemäß einer Ausführungsform;
    • 6 ist ein Konzeptdiagramm einer Graphikverarbeitungs-Pipeline, die von der Parallelverarbeitungseinheit von 2 implementiert wird, gemäß einer Ausführungsform;
    • 7 veranschaulicht ein beispielhaftes System, in dem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert werden kann.
    • 8 veranschaulicht ein Ablaufdiagramm eines beispielhaften Verfahrens zum Rekonstruieren von Bilddaten unter Verwendung eines neuralen Netzwerks gemäß einer Ausführungsform; und
    • 9 veranschaulicht eine beispielhafte interne Struktur einer rekurrenten RCNN Verbindung gemäß einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens 100 zum Filtern von Bilddaten unter Verwendung eines neurales Netzwerks gemäß einer Ausführungsform. Wie in Operation 102 gezeigt, werden zu rendernde Bilddaten gekennzeichnet. In einer Ausführungsform können die Bilddaten ein einziges Bild umfassen. In einer anderen Ausführungsform können die Bilddaten eine von einer Mehrzahl von Bildframes (z.B. von Videodaten usw.) umfassen. In noch einer anderen Ausführungsform können die Bilddaten als Ergebnis eines vorbestimmten Prozesses erzeugt werden. Beispielsweise kann der vorbestimmte Prozess eine oder mehrere von Schwachlicht-Photographie, Schwachlicht-Videoaufzeichnung, einem Monte-Carlo-Abtastverfahren, Photographie und/oder Videoerzeugung, die RGB und Tiefeninformation erzeugen, Bilderzeugung unter Verwendung Nur-Tiefenkameras (z.B. Flugzeitkameras, die verrauschte Bilder/Videos erzeugen) usw. umfassen. In noch einer anderen Ausführungsform können die Bilddaten durch eine oder mehrere Fahrzeugbildgebungsvorrichtungen (z.B. Tageszeitkameras, Nachtsichtkameras usw.) erzeugt werden.
  • Außerdem können in einer Ausführungsform die Bilddaten eine Anzahl von Abtastungen pro Pixel (spp) unterhalb einer vorbestimmten Schwelle aufweisen. Beispielsweise können die Bilddaten ein Niveau eines Rauschens aufweisen, das größer als eine vorbestimmte Schwelle ist. In einer anderen Ausführungsform können die Bilddaten Farbdaten (z.B. RGB-Daten usw.) umfassen. In noch einer anderen Ausführungsform können die Bilddaten Hilfsinformation umfassen. Beispielsweise kann die Hilfsinformation eine oder mehrere Sichtraum-Schattierungsnormale (z.B. einen 2D-Vektor usw.) umfassen. In einem anderen Beispiel kann die Hilfsinformation einen oder mehrere Tiefenwerte umfassen. In noch einem anderen Beispiel kann die Hilfsinformation einen oder mehrere Rauigkeitswerte umfassen. In noch einer anderen Ausführungsform kann ein Rendering der Bilddaten ein Erzeugen eines betrachtbaren Bildes unter Benutzung der Bilddaten umfassen.
  • Des Weiteren werden, wie in Operation 104 gezeigt, die Bilddaten rekonstruiert, um rekonstruierte Bilddaten unter Benutzung eines Filters zu erzeugen, das ein neurales Netzwerk umfasst, das eine oder mehrere Übersprungverbindungen und eine oder mehrere rekurrente Schichten aufweist. In einer Ausführungsform kann das Rekonstruieren der Bilddaten ein Entrauschen der Bilddaten (z.B. Verringern des Rauschens innerhalb der Bilddaten usw.) umfassen, um die rekonstruierten Bilddaten zu erzeugen. In einer anderen Ausführungsform kann das Rekonstruieren der Bilddaten ein Vervollständigen und/oder Korrigieren der Bilddaten umfassen, um die rekonstruierten Bilddaten zu erzeugen. Beispielsweise kann das neurale Netzwerk unter Verwendung einer vorbestimmten Anzahl von natürlichen Bildern trainiert werden und kann die Bilddaten als Eingabe nehmen und die Bilddaten vervollständigen und/oder korrigieren, um die rekonstruierten Bilddaten zu erzeugen, um lokal wie Abschnitte der Trainingsbilder auszusehen.
  • In noch einer anderen Ausführungsform kann das neurale Netzwerk eine Mehrzahl von Faltungsschichten (z.B. Stufen, usw.) umfassen. In noch einer anderen Ausführungsform kann das neurale Netzwerk einen Autocodierer umfassen. Beispielsweise kann das neurale Netzwerk einen Autocodierer umfassen, der lernt, seine Eingaben zu rekonstruieren. In einer anderen Ausführungsform kann die Hilfsinformation durch den Autocodierer unverändert weitergeleitet werden.
  • Des Weiteren können in einer Ausführungsform die eine oder mehrere Übersprungverbindungen die Vermeidung einer oder mehrerer Schichten des neuralen Netzwerks während des Rekonstruierens ermöglichen. Beispielsweise kann das neurale Netzwerk eine Mehrzahl von Codiererschichten und entsprechende Decodiererschichten umfassen. In einem anderen Beispiel kann eine Übersprungverbindung innerhalb des neuralen Netzwerks einem Rekonstruktionsprozess ermöglichen, von einer Codiererschicht direkt zu einer entsprechender Decodiererschicht zu springen, um dadurch über eine oder mehrere Codierer- und Decodiererschichten innerhalb des neuralen Netzwerks zu springen.
  • In einer Ausführungsform können die eine oder mehreren rekurrenten Schichten ebenfalls ein rekurrentes faltungstechnisches neurales Netzwerk (RCNN) umfassen. Beispielsweise können eine oder mehrere Rückkopplungsschleifen über eine oder mehrere rekurrente Schichten implementiert werden, die eine Ausgabe von vorherigen Zuständen (z.B. frühere Frames von Bilddaten, usw.) in aktuelle Zustände verbinden. In einem anderen Beispiel kann dies die Beibehaltung von Information (z.B. Hilfsinformation, usw.) zwischen eingegebenen Bilddaten (z.B. zwischen Frames von Bilddaten usw.) ermöglichen.
  • Beispielsweise kann Information (z.B. Hilfsinformation, Farbinformation, Zustandsinformation, usw.), die während einer Rekonstruktion von einem ersten Frame einer Sequenz von Frames der Bilddaten verwendet wird, als ein verborgener, rekurrenter Zustand gespeichert werden. Auf diesen Zustand kann dann während einer Rekonstruktion eines zweiten Frames der Sequenz von Frames der Bilddaten innerhalb der RCNN unter Benutzung einer Rückkopplungsschleife des RCNN zugegriffen werden.
  • Außerdem können in einer Ausführungsform die eine oder mehreren rekurrenten Schichten eine Schicht mit sich selbst innerhalb des neuralen Netzwerks verknüpfen. Beispielsweise kann dies einen Kurzzeitspeicher innerhalb des neuralen Netzwerks implementieren (z.B. in dem das neuralen Netzwerk ermöglicht wird, Zustandsinformation zwischen Bildframes usw. beizubehalten). In einem anderen Beispiel kann dies eine zeitlich Stabilität/Konsistenz der rekonstruierten Bilddaten (z.B. durch Verringern von zeitlichen Problemen, wie beispielsweise Flackern usw.) erhöhen.
  • Des Weiteren kann in einer Ausführungsform das neurale Netzwerk unter Benutzung eines Datensatzes trainiert werden, der eine Mehrzahl von Eingabe/Ausgabe-Paaren umfasst. Beispielsweise kann das Training das Lernen einer Abbildung von verrauschten eingegebenen Bilddaten in rauschfreie ausgegebene Bilddaten umfassen. In einem anderen Beispiel kann jedes Eingabe/Ausgabe-Paar eingegebene Bilddaten (z.B. Bilddaten niedriger Qualität (z.B. verrauschte Bilddaten, die eine Anzahl von Abtastungen pro Pixel unterhalb einer vorbestimmten Schwelle aufweisen, usw.), deren Konvertierung gewünscht wird), sowie auch vorgerenderte Ausgabedaten umfassen (ein Referenzbild hoher Qualität, das unter Verwendung eines kostspieligen Rendering-Prozesses erhalten wird (z.B. unter Benutzung einer Anzahl von Abtastungen pro Pixel oberhalb einer vorbestimmten Schwelle, usw.). In noch einem anderen Beispiel kann das Training eine Gewichtung jeder Schicht innerhalb des neuralen Netzwerks umfassen, um eine Funktion zu finden, die die Eingabe eines Eingabe/Ausgabe-Paares in die Ausgabe des Eingabe/Ausgabe-Paares konsequent abbildet.
  • Des Weiteren kann in einer Ausführungsform eine Verlustfunktion während des Trainings des neuralen Netzwerks benutzt werden.
  • In einer Ausführungsform kann die Verlustfunktion definieren, wie ein Fehler zwischen tatsächlichen neuralen Netzwerkausgaben und Trainingsausgaben während des Trainings berechnet wird.
  • Als Ergebnis können die rekonstruierten Bilddaten weniger Rauschen als die eingegebenen Bilddaten aufweisen.
  • Ferner werden, wie in Operation 106 gezeigt, die rekonstruierten Bilddaten zurückgegeben. In einer Ausführungsform können die rekonstruierten Bilddaten ausgegeben werden (z.B. als ein betrachtbares Bild angezeigt, usw.). In einer anderen Ausführungsform können die rekonstruierten Bilddaten an ein oder mehrere zusätzliche Filter geleitet werden (z.B. innerhalb eines Rendering-Prozesses usw.).
  • Auf diese Weise können Bilddaten während eines Rendering unter Verwendung eines Autocodierers rekonstruiert werden, der Übersprungverbindungen und rekurrente Schichten aufweist. Außerdem können Monte-Carlo-Abtastdaten unter Verwendung eines neuralen Netzwerks rekonstruiert werden.
  • Veranschaulichendere Information wird nun hinsichtlich verschiedener optionaler Architekturen und Merkmale eingestellt, mit denen das vorhergehende Framework gemäß den Wünschen des Benutzers implementiert oder nicht implementiert werden kann. Es sei nachdrücklich bemerkt, dass die folgende Information für veranschaulichende Zwecke dargelegt wird und nicht auf irgendeine Art und Weise als beschränkend ausgelegt werden sollte. Jedes der folgenden Merkmale kann optional mit oder ohne den Ausschluss von anderen beschriebenen Merkmalen aufgenommen werden.
  • Parallelverarbeitungsarchitektur
  • 2 veranschaulicht eine Parallelverarbeitungseinheit (PPU) 200 gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 200 ein Multi-Threaded-Prozessor bzw. mehrsträngiger Prozessor, der auf einer oder mehreren integrierten Schaltung Vorrichtungen implementiert ist. Die PPU 200 ist eine Latenzverbergende Architektur, die ausgestaltet ist, um eine große Anzahl von Threads bzw. Strängen parallel zu verarbeiten. Ein Thread bzw. Strang (d.h. ein Ausführungsthread) ist eine Instanziierung eines Satzes von Anweisungen, die konfiguriert sind, um von der PPU 200 ausgeführt zu werden. In einer Ausführungsform ist die PPU 200 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 200 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.
  • Wie in 2 gezeigt, umfasst die PPU 200 eine Eingabe/Ausgabe(E/A)-Einheit 205, eine Host-Schnittstelleneinheit 210, eine Frontend-Einheit 215, eine Planer-Einheit 220, eine Arbeitsverteilungs-Einheit 225, einen Hub 230, eine Kreuzschiene (Xbar) 270, einen oder mehrere allgemeine Verarbeitungscluster (GPCs) 250 und eine oder mehrere Partitions-Einheiten 280. Die PPU 200 kann mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über einen Systembus 202 verbunden werden. Die PPU 200 kann ebenfalls mit einem lokalen Speicher verbunden werden, der eine Anzahl von Speichervorrichtungen 204 umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von Direktzugriffsspeicher(DRAM)-Vorrichtungen umfassen.
  • Die E/A-Einheit 205 ist konfiguriert, um Kommunikationen (d.h. Befehle, Daten, usw.) von einem Host-Prozessor (nicht gezeigt) über den Systembus 202 zu übertragen und zu empfangen. Die E/A-Einheit 205 kann mit dem Host-Prozessor direkt über den Systembus 202 oder durch eine oder mehrere Zwischenvorrichtungen, wie beispielsweise einer Speicherbrücke, kommunizieren. In einer Ausführungsform implementiert die E/A-Einheit 205 eine Umfangskomponenten-Zwischenverbindungsexpress(PCIe)-Schnittstelle für Kommunikationen über einen PCIe-Bus. In alternativen Ausführungsformen kann die E/A-Einheit 205 andere Arten von bekannten Schnittstellen zum Kommunizieren mit externen Vorrichtungen implementieren.
  • Die E/A-Einheit 205 ist mit einer Host-Schnittstelleneinheit 210 gekoppelt, die Pakete decodiert, die über den Systembus 202 empfangen wurden. In einer Ausführungsform stellen die Pakete Befehle dar, die konfiguriert sind, um die PPU 200 zu veranlassen, verschiedene Operationen durchzuführen. Die Host-Schnittstelleneinheit 210 überträgt die decodierten Befehle an verschiedene andere Einheiten der PPU 200, wie es die Befehle spezifizieren können. Beispielsweise können einige Befehle an die Frontend-Einheit 215 übertragen werden. Andere Befehle können an den Hub 230 oder andere Einheiten der PPU 200, 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 Host-Schnittstelleneinheit 210 konfiguriert, um Kommunikationen zwischen und unter den verschiedenen logischen Einheiten der PPU 200 weiterzuleiten.
  • In einer Ausführungsform codiert ein Programm, das von dem Host-Prozessor ausgeführt wird, einen Befehlsstrom in einem Puffer, welcher der PPU 200 Arbeitslasten zur Verarbeitung bereitstellt. Eine Arbeitslast kann eine Anzahl von Anweisungen und Daten umfassen, die von diesen Anweisungen zu verarbeiten sind. Der Puffer ist eine Region in einem Speicher, der von sowohl dem Host-Prozessor als auch der PPU 200 zugänglich ist (d.h. Lesen/Schreiben). Beispielsweise kann die Host-Schnittstelleneinheit 210 konfiguriert sein, um auf den Puffer in einem Systemspeicher, der mit dem Systembus 202 verbunden ist, über Speicheranfragen, die über den Systembus 202 übertragen werden, durch die E/A-Einheit 205 zuzugreifen. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und überträgt dann einen Zeiger an den Start des Befehlsstroms zu der PPU 200. Die Host-Schnittstelleneinheit 210 stellt der Frontend-Einheit 215 Zeiger auf einen oder mehrere Befehlsströme bereit. Die Frontend-Einheit 215 verwaltet den einen oder mehrere Ströme, wobei Befehle aus den Strömen gelesen und Befehle an die verschiedenen Einheiten der PPU 200 weitergeleitet werden.
  • Die Frontend-Einheit 215 ist mit eine Planer-Einheit 220 gekoppelt, welche die verschiedenen GPCs 250 konfiguriert, um Aufgaben zu verarbeiten, die durch den einen oder mehrere Ströme definiert sind. Die Planer-Einheit 220 ist konfiguriert, um Zustandsinformation zu verfolgen, die verschiedene Aufgaben betrifft, die von der Planer-Einheit 220 verwaltet werden. Der Zustand kann angeben, welchem GPC 250 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, ob eine Prioritätsebene der Aufgabe zugeordnet ist und so weiter. Die Planer-Einheit 220 verwaltet die Ausführung einer Mehrzahl von Aufgaben auf dem einen oder mehreren GPCs 250.
  • Die Planer-Einheit 220 ist mit einer Arbeitsverteilungs-Einheit 225 gekoppelt, die konfiguriert ist, um Aufgaben zur Ausführung auf den GPCs 250 zu versenden. Die Arbeitsverteilungs-Einheit 225 kann eine Anzahl von eingeplanten Aufgaben verfolgen, die von der Planer-Einheit 220 empfangen werden. In einer Ausführungsform verwaltet die Arbeitsverteilungs-Einheit 225 einen Pool für anhängige Aufgaben und einen Pool für aktive Aufgaben für jeden der GPCs 250. Der Pool für anhängige Aufgaben kann eine Anzahl von Schlitzen (z.B. 32 Schlitze) umfassen, die Aufgaben enthalten, die zugewiesen sind, von einem bestimmten GPC 250 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 250 aktiv verarbeitet werden. Wenn ein GPC 250 die Ausführung einer Aufgabe abschließt, wird diese Aufgabe aus dem Pool für aktive Aufgaben für den GPC 250 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 250 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 250 inaktiv war, wie beispielsweise während darauf gewartet wird, dass eine Datenabhängigkeit behoben wird, dann kann die aktive Aufgabe aus dem GPC 250 geräumt und zu dem Pool für anhängige Aufgaben zurückgeführt werden, während eine andere Aufgabe in dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant wird.
  • Die Arbeitsverteilungs-Einheit 225 kommuniziert mit dem einen oder mehreren GPCs 250 über eine Kreuzschiene bzw. XBar 270. Die XBar 270 ist ein Zwischenverbindungs-Netzwerk, das viele der Einheiten der PPU 200 mit anderen Einheiten der PPU 200 koppelt. Beispielsweise kann die XBar 270 konfiguriert sein, um die Arbeitsverteilungs-Einheit 225 mit einem bestimmten GPC 250 zu koppeln. Obwohl nicht explizit gezeigt, sind eine oder mehrere andere Einheiten der PPU 200 mit der Host-Einheit 210 gekoppelt. Die anderen Einheiten können ebenfalls mit der XBar 270 über einen Hub 230 verbunden sein.
  • Die Aufgaben werden von der Planer-Einheit 220 verwaltet und an einen GPC 250 durch die Arbeitsverteilungs-Einheit 225 versendet. Der GPC 250 ist konfiguriert, um die Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 250 verbraucht werden, an einen unterschiedlichen GPC 250 über die XBar 270 weitergeleitet oder im Speicher 204 gespeichert werden. Die Ergebnisse können in den Speicher 204 über die Partitions-Einheiten 280 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 204 implementieren. In einer Ausführungsform umfasst die PPU 200 eine Anzahl U von Partitions-Einheiten 280, die gleich der Anzahl von separaten und unterschiedlichen Speichervorrichtungen 204 ist, die mit der PPU 200 gekoppelt sind. Eine Partitions-Einheit 280 wird nachstehend ausführlicher in Verbindung mit 3B beschrieben.
  • In einer Ausführungsform führt ein Host-Prozessor einen Treiber-Kernel aus, der eine AnwendungsprogrammierSchnittstelle (API) implementiert, die ermöglicht einer oder mehreren Anwendungen ermöglicht, die auf dem Host-Prozessor ausgeführt werden, Operationen zur Ausführung auf der PPU 200 einzuplanen. Eine Anwendung kann Anweisungen (d.h. API-Aufrufe) erzeugen, welche den Treiber-Kernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 200 zu erzeugen. Der Treiber-Kernel gibt Aufgaben an einen oder mehrere Ströme aus, die von der PPU 200 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von in Beziehung stehenden Threads umfassen, die hier als ein Warp bezeichnet werden. Ein Thread-Block kann sich auf eine Mehrzahl von Gruppen von Threads beziehen, die Anweisungen umfassen, um die Aufgabe durchzuführen. Threads in der gleichen Gruppe von Threads können Daten durch einen gemeinsam benutzten Speicher austauschen. In einer Ausführungsform umfasst eine Gruppe von Threads 32 in Beziehung stehende Threads.
  • 3A veranschaulicht einen GPC 250 der PPU 200 von 2 gemäß einer Ausführungsform. Wie in 3A gezeigt, umfasst jeder GPC 250 eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform umfasst jeder GPC 250 einen Pipeline-Manager 310, eine Vor-Raster-Operationen-Einheit (PROP) 315, eine Raster-Engine 325, eine Arbeitsverteilungs-Kreuzschiene (WDX) 380, eine Speicherverwaltungseinheit (MMU) 390 und einen oder mehrere Texturverarbeitungscluster (TPCs) 320. Es wird anerkannt, dass der GPC 250 von 3A andere Hardwareeinheiten anstatt von oder zusätzlich zu in 3A gezeigten Einheiten umfassen kann.
  • In einer Ausführungsform wird der Betrieb des GPC 250 durch den Pipeline-Manager 310 gesteuert. Der Pipeline-Manager 310 verwaltet die Konfiguration des einen oder mehrerer TPCs 320 zur Verarbeitung von Aufgaben, die dem GPC 250 zugeteilt sind. In einer Ausführungsform kann der Pipeline-Manager 310 mindestens einen des einen oder mehrerer TPCs 320 konfigurieren, um mindestens einen Abschnitt einer Graphik-Rendering-Pipeline zu implementieren. Beispielsweise kann ein TPC 320 konfiguriert sein, um ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 340 auszuführen. Der Pipeline-Manager 310 kann ebenfalls konfiguriert sein, um Pakete, die von der Arbeitsverteilungs-Einheit 225 empfangen werden, an die geeigneten logischen Einheiten innerhalb des GPC 250 weiterzuleiten. Beispielsweise können einige Pakete an Festfunktions-Hardwareeinheiten in der PROP 315 und/oder der Raster-Engine 325 weitergeleitet werden, während andere Pakete an die TPCs 320 zur Verarbeitung durch die Primitiven-Engine 335 oder den SM 340 weitergeleitet werden können.
  • Die PROP-Einheit 315 ist konfiguriert, um Daten, die von der Raster-Engine 325 und den TPCs 320 erzeugt werden, an eine Raster-Operationen-Einheit (ROP-Einheit) in der Partitions-Einheit 280 weiterzuleiten, die nachstehend ausführlicher beschrieben wird. Die PROP-Einheit 315 kann ebenfalls konfiguriert sein, um Optimierungen zur Farbenmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen und dergleichen durchzuführen.
  • Die Raster-Engine 325 umfasst eine Anzahl von Festfunktions-Hardwareeinheiten, die konfiguriert sind, um verschiedene Raster-Operationen durchzuführen. In einer Ausführungsform umfasst die Raster-Engine 325 eine Setup-Engine, eine Grobraster-Engine, eine Aussonderungs-Engine, eine Abschneide-Engine, eine Feinraster-Engine und eine Kachel-verschmelzende-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 kann an die Aussonderungs-Engine übertragen werden, wo Fragmente, die 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, 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 325 umfasst Fragmente, die beispielsweise von einem Fragment-Shader zu verarbeiten sind, der innerhalb eines TPC 320 implementiert ist.
  • Jeder TPC 320, der in dem GPC 250 umfasst ist, umfasst einen M-Pipe-Controller (MPC) 330, eine Primitiven-Engine 335, einen oder mehrere SMs 340 und eine oder mehrere Textureinheiten 345. Der MPC 330 steuert den Betrieb des TPC 320, der von dem Pipeline-Manager 310 empfangene Pakete an die geeigneten Einheiten im TPC 320 weiterleitet. Beispielsweise können einem Vertex zugeordnete Pakete an die Primitiven-Engine 335 weitergeleitet werden, die konfiguriert ist, um der Vertex zugeordnete Vertexattribute aus dem Speicher 204 zu holen. Im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den SM 340 übertragen werden.
  • In einer Ausführungsform sind die Textureinheiten 345 konfiguriert, um Texturabbildungen (z.B., ein 2D-Array von Texeln) aus dem Speicher 204 zu laden und die Texturabbildungen abzutasten, um abgetastete Texturwerte zur Verwendung in Shader-Programme zu erzeugen, die von dem SM 340 ausgeführt werden. Die Textureinheiten 345 implementieren Textur-Operationen, wie beispielsweise Filter-Operationen unter Verwendung von Mip-Abbildungen (d.h. Texturabbildungen mit einem unterschiedlichen Grad an Detail). Die Textureinheit 345 wird ebenfalls als der Lade/Speicher-Weg für den SM 340 zu der MMU 390 verwendet. In einer Ausführungsform umfasst jeder TPC 320 zwei (2) Textureinheiten 345.
  • Der SM 340 umfasst einen programmierbaren Streaming-Prozessor, der konfiguriert ist, um Aufgaben zu verarbeiten, die durch eine Anzahl von Threads dargestellt werden. Jeder SM 340 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 340 eine SIMD(Einzelne-Anweisung, Mehrere-Daten)-Architektur, wobei jeder Thread in einer Gruppe von Threads (d.h. 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 340 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. Mit anderen Worten können, wenn eine Anweisung für die Gruppe von Threads zur Ausführung versandt wird, einige Threads in der Gruppe von Threads aktiv sein, wodurch die Anweisung ausgeführt wird, während andere Threads in der Gruppe von Threads inaktiv sein können, wodurch keine Operation (NOP) durchgeführt wird, anstatt die Anweisung auszuführen. Der SM 340 kann ausführlicher nachstehend in Verbindung mit 4 beschrieben werden.
  • Die MMU 390 stellt eine Schnittstelle zwischen dem GPC 250 und der Partitions-Einheit 280 bereit. Die MMU 390 kann Übersetzung von virtuellen Adressen in physikalische Adressen, Speicherschutz und Arbitrierung von Speicheranfragen bereitstellen. In einer Ausführungsform stellt die MMU 390 einen oder mehrere Adressenübersetzungspuffer (TLBs = translation lookaside buffers) zum Verbessern der Übersetzung von virtuellen Adressen in physikalische Adressen in dem Speicher 204 bereit.
  • 3B veranschaulicht eine Partitions-Einheit 280 der PPU 200 von 2 gemäß einer Ausführungsform. Wie in 3B gezeigt, umfasst die Partitions-Einheit 280 eine Raster-Operationen(ROP)-Einheit 350, einen L2-Cache-Speicher 360, eine Speicherschnittstelle 370 und eine L2-Kreuzschiene (XBar) 365. Die Speicherschnittstelle 370 ist mit dem Speicher 204 gekoppelt. Die Speicherschnittstelle 370 kann 16-, 32-, 64-, 128-Bit-Datenbusse oder dergleichen für Hochgeschwindigkeits-Datentransfer implementieren. In einer Ausführungsform umfasst die PPU 200 U Speicherschnittstellen 370, eine Speicherschnittstelle 370 pro Partitions-Einheit 280, wobei jede Partitions-Einheit 280 mit einer entsprechenden Speichervorrichtung 204 verbunden ist. Beispielsweise kann die PPU 200 mit bis zu U Speichervorrichtungen 204, wie beispielsweise einem synchronen dynamischen Speicher mit wahlweisem Zugriff mit Graphikdoppeldatenrate der Version 5 (GDDR5 SDRAM) verbunden sein. In einer Ausführungsform implementiert die Speicherschnittstelle 370 eine DRAM-Schnittstelle und U ist gleich 8.
  • In einer Ausführungsform implementiert die PPU 200 eine Mehrebenen-Speicherhierarchie. Der Speicher 204 ist außerhalb des Chips im SDRAM lokalisiert, der mit der PPU 200 verbunden ist. Daten aus dem Speicher 204 können geholt und in dem L2-Cache-Speicher 360 gespeichert werden, der innerhalb des Chips lokalisiert ist und zwischen den verschiedenen GPCs 250 gemeinsam benutzt wird. Wie gezeigt, umfasst jede Partitions-Einheit 280 einen Abschnitt des L2-Cache-Speichers 360, der einer entsprechenden Speichervorrichtung 204 zugeordnet ist. Cache-Speicher niedrigerer Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 250 implementiert werden. Beispielsweise kann jeder der SMs 340 einen L1-Cache-Speicher implementieren. Der L1-Cache-Speicher ist ein privater Speicher, der für einen bestimmten SM 340 dediziert ist. Daten von dem L2-Cache-Speicher 360 können geholt und in jedem der L1-Cache-Speicher zur Verarbeitung in den Funktionseinheiten der SMs 340 gespeichert werden. Der L2-Cache-Speicher 360 ist mit der Speicherschnittstelle 370 und der XBar 270 gekoppelt.
  • Die ROP-Einheit 350 umfasst einen ROP-Manager 355, eine Farbeneinheit ROP (CROP-Einheit) 352 und eine Z ROP (ZROP) Einheit 354. Die CROP-Einheit 352 führt Raster-Operationen durch, welche die Pixelfarbe betreffen, wie beispielsweise Farbenkomprimierung, Pixelmischung und dergleichen. Die ZROP-Einheit 354 implementiert Tiefentesten in Verbindung mit der Raster-Engine 325. Die ZROP-Einheit 354 empfängt eine Tiefe für einen Abtastort, der einem Pixelfragment zugeordnet ist, von der Aussonderungs-Engine der Raster-Engine 325. Die ZROP-Einheit 354 prüft die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen Abtastort, der dem Fragment zugeordnet ist. Wenn das Fragment den Tiefentest für den Abtastort besteht, dann aktualisiert die ZROP-Einheit 354 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 325. Der ROP-Manager 355 steuert den Betrieb der ROP-Einheit 350. Es wird anerkannt, dass sich die Anzahl von Partitions-Einheiten 280 von der Anzahl von GPCs 250 unterscheiden kann, und daher jede ROP-Einheit 350 mit jedem der GPCs 250 gekoppelt werden kann. Daher verfolgt der ROP-Manager 355 Pakete, die von den unterschiedlichen GPCs 250 empfangen werden, und bestimmt, zu welchem GPC 250 ein Ergebnis weitergeleitet wird, das durch die ROP-Einheit 350 erzeugt wurde. Die CROP-Einheit 352 und die ZROP-Einheit 354 sind mit dem L2-Cache-Speicher 360 über eine L2-XBar 365 gekoppelt.
  • 4 veranschaulicht den Streaming-Multiprozessor 340 von 3A gemäß einer Ausführungsform. Wie in 4 gezeigt, umfasst der SM 340 einen Anweisungs-Cache-Speicher 405, eine oder mehrere Planer-Einheiten 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 480, einen gemeinsam benutzten Speicher 470 und einen L1-Cache-Speicher 490.
  • Wie oben beschrieben, versendet die Arbeitsverteilungs-Einheit 225 Aufgaben zur Ausführung auf den GPCs 250 der PPU 200. Die Aufgaben werden einem bestimmten TPC 320 innerhalb eines GPC 250 zugeteilt, und, wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 340 zugeteilt werden. Die Planer-Einheit 410 empfängt die Aufgaben von der Arbeitsverteilungs-Einheit 225 und verwaltet die Anweisungs-Planung (instruction scheduling) für eine oder mehrere Gruppen von Threads (d.h. Warps), die dem SM 340 zugewiesen sind. Die Planer-Einheit 410 plant Threads zur Ausführung in Gruppen von parallelen Threads, wobei jede Gruppe ein Warp genannt wird. In einer Ausführungsform umfasst jeder Warp 32 Threads. Die Planer-Einheit 410 kann eine Mehrzahl von unterschiedlichen Warps verwalten, wobei die Warps zur Ausführung geplant und dann Anweisungen von der Mehrzahl von unterschiedlichen Warps an die verschiedenen Funktionseinheiten (d.h. Kerne 350, SFUs 352 und LSUs 354) während jeden Taktzyklus versandt werden.
  • In einer Ausführungsform umfasst jede Planer-Einheit 410 eine oder mehrere Anweisungs-Versandeinheiten 415. Jede Versandeinheit 415 ist konfiguriert, um Anweisungen an eine oder mehrere der Funktionseinheiten zu übertragen. In der in 4 gezeigten Ausführungsform umfasst die Planer-Einheit 410 zwei Versandeinheiten 415, die ermöglichen, dass zwei unterschiedliche Anweisungen von dem gleichen Warp während jedes Taktzyklus versandt werden. In alternativen Ausführungsformen kann jede Planer-Einheit 410 eine einzige Versandeinheit 415 oder zusätzliche Versandeinheiten 415 umfassen.
  • Jeder SM 340 umfasst eine Registerdatei 420, die einen Satz von Registern für die Funktionseinheiten des SM 340 bereitstellt. In einer Ausführungsform ist die Registerdatei 420 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein zugehöriger Abschnitt der Registerdatei 420 zugeteilt ist. In einer anderen Ausführungsform ist die Registerdatei 420 zwischen den unterschiedlichen Warps aufgeteilt, die von dem SM 340 ausgeführt werden. Die Registerdatei 420 stellt temporären Speicher für Operanden bereit, die mit den Datenwegen der Funktionseinheiten verbunden sind.
  • Jeder SM 340 umfasst L Verarbeitungskerne 450. In einer Ausführungsform umfasst der SM 340 eine große Anzahl (z.B., 128, usw.) von unterschiedlichen Verarbeitungskernen 450. Jeder Kern 450 kann eine vollständig in einer Pipeline angeordnete (fully-pipelined) Einfach-Präzisions- Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit umfasst. Der Kern 450 kann ebenfalls eine Doppel-Präzisions-Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit umfasst. In einer Ausführungsform implementieren die Gleitkommaarithmetik-Logikeinheiten den IEEE 754-2008 Standard für Gleitkommaarithmetik. Jeder SM 340 umfasst ebenfalls M SFUs 452, die Spezialfunktionen durchführen (z.B., Attributauswertung, reziproke Quadratwurzel und dergleichen), und N LSUs 454, die Lade- und Speicher-Operationen zwischen dem gemeinsam benutzten Speicher 470 oder dem L1-Cache-Speicher 490 und der Registerdatei 420 implementieren. In einer Ausführungsform umfasst der SM 340 128 Kerne 450, 32 SFUs 452 und 32 LSUs 454.
  • Jeder SM 340 umfasst ein Zwischenverbindungs-Netzwerk 480, das jede der Funktionseinheiten mit der Registerdatei 420 verbindet und die LSU 454 mit der Registerdatei 420, dem gemeinsam benutzten Speicher 470 und dem L1-Cache-Speicher 490 verbindet. In einer Ausführungsform ist das Zwischenverbindungs-Netzwerk 480 eine Kreuzschiene, die konfiguriert sein kann, um beliebige der Funktionseinheiten mit einem beliebigen der Register in der Registerdatei 420 zu verbinden und die LSUs 454 mit der Registerdatei und Speicherorten in dem gemeinsam benutzten Speicher 470 und L1-Cache-Speicher 490 zu verbinden.
  • Der gemeinsam benutzte Speicher 470 ist ein ArStrahl von auf dem Chip befindlicher Speicher, der Datenspeicherung und Kommunikation zwischen dem SM 340 und der Primitiven-Engine 335 und zwischen Threads in dem SM 340 ermöglicht. In einer Ausführungsform umfasst der gemeinsam benutzte Speicher 470 64KB von Speicherkapazität. Ein L1-Cache-Speicher 490 ist im Weg von dem SM 340 zu der Partitions-Einheit 280. Der L1-Cache-Speicher 490 kann verwendet werden, um Lese- und Schreibvorgänge zwischen zu speichern. In einer Ausführungsform umfasst der L1-Cache-Speicher 490 24KB von Speicherkapazität.
  • Die oben beschriebene PPU 200 kann konfiguriert sein, um hochparallele Berechnungen viel schneller als herkömmliche CPUs durchzuführen. Paralleles Berechnen weist Vorteile bei der Graphikverarbeitung, der Datenkomprimierung, der Biometrik, den Stromverarbeitungsalgorithmen und dergleichen auf.
  • Wenn für Allzweck-Parallelberechnung konfiguriert, kann eine einfachere Konfiguration verwendet werden. In diesem Modell werden, wie in 2 gezeigt, Festfunktions-Graphikverarbeitungseinheiten umgangen, wobei ein viel einfacheres Programmiermodell erzeugt wird. In dieser Konfiguration werden von der Arbeitsverteilungs-Einheit 225 Blöcke von Threads zugewiesen und direkt an die TPCs 320 verteilt. Die Threads in einem Block führen das gleiche Programm unter Verwendung einer eindeutigen Thread-ID in der Berechnung aus, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 340 verwendet wird, um das Programm auszuführen und Berechnungen durchzuführen, damit der gemeinsam benutzte Speicher 470 zwischen Threads kommuniziert, und die LSU 454 verwendet wird, um den globalen Speicher durch Partitionierung des L1-Cache-Speichers 490 und der Partitions-Einheit 280 zu lesen und zu beschreiben.
  • Wenn für Allzweck-Parallelberechnung konfiguriert, kann der SM 340 ebenfalls Befehle schreiben, welche die Planer-Einheit 220 verwenden kann, um neue Arbeit auf den TPCs 320 zu starten.
  • In einer Ausführungsform umfasst die PPU 200 eine Graphikverarbeitungseinheit (GPU). Die PPU 200 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 200 kann konfiguriert sein, um die Graphikprimitive zu verarbeiten, um ein Frame-Puffer zu erzeugen (d.h. Pixeldaten für jedes der Pixel der Anzeige).
  • Eine Anwendung schreibt Modelldaten für eine Szene (d.h. eine Sammlung von Vertices und Attributen) in einen Speicher, wie beispielsweise einen Systemspeicher oder Speicher 204. 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 340 der PPU 200 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 340 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 340 konfiguriert sein, um unterschiedliche Shader-Programme nebenläufig auszuführen. Beispielsweise kann eine erste Untermenge von SMs 340 konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Untermenge von SMs 340 konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Untermenge von SMs 340 verarbeitet Vertexdaten, um verarbeitete Vertexdaten zu erzeugen, und schreibt die verarbeiteten Vertexdaten in den L2-Cache-Speicher 360 und/oder den Speicher 204. Nachdem die verarbeiteten Vertexdaten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert sind), um Fragmentdaten zu erzeugen, führt die zweite Untermenge von SMs 340 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt werden und in den Frame-Puffer im Speicher 204 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.
  • Die PPU 200 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 200 auf einem einzelnen Halbleitersubstrat verkörpert. In einer anderen Ausführungsform ist die PPU 200 in einem System-on-Chip (SoC) zusammen mit einer oder mehreren anderen Logikeinheiten, wie beispielsweise 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 200 auf einer Graphikkarte umfasst sein, die eine oder mehrere Speichervorrichtungen 204, wie beispielsweise GDDR5 SDRAM, umfasst. Die Graphikkarte kann konfiguriert sein, um sich mit einem PCIe-Schlitz auf einer Hauptplatine eines Tischcomputers schnittstellenmäßig zu verbinden, der beispielsweise einen Northbridge-Chipsatz und einen Southbridge-Chipsatz umfasst. In noch einer anderen Ausführungsform kann die PPU 200 eine integrierte Graphikverarbeitungseinheit (iGPU) sein, die in dem Chipsatz (d.h. Northbridge) der Hauptplatine umfasst ist.
  • 5 veranschaulicht ein System-on-Chip (SoC) 500, das die PPU 200 von 2 umfasst, gemäß einer Ausführungsform. Wie in 5 gezeigt, umfasst das SoC 500 eine CPU 550 und eine PPU 200, wie oben beschrieben. Das SoC 500 kann ebenfalls einen Systembus 202 umfassen, um Kommunikation zwischen den verschiedenen Komponenten des SoC 500 zu ermöglichen. Speicheranfragen, die von der CPU 550 und der PPU 200 erzeugt werden, können durch eine System-MMU 590 weitergeleitet werden, die von mehreren Komponenten des SoC 500 gemeinsam benutzt werden. Das SoC 500 kann ebenfalls eine Speicherschnittstelle 595 umfassen, die mit einer oder mehreren Speichervorrichtungen 204 gekoppelt ist. Die Speicherschnittstelle 595 kann beispielsweise eine DRAM-Schnittstelle implementieren.
  • Obwohl nicht explizit gezeigt, kann das SoC 500 andere Komponenten zusätzlich zu den in 5 gezeigten Komponenten umfassen. Beispielsweise kann das SoC 500 mehrere PPUs 200 (z.B., vier PPUs 200), einen Video-Codierer/Decodierer und einen drahtlosen Breitband-Sendeempfänger sowie auch andere Komponenten umfassen. In einer Ausführungsform kann das SoC 500 mit dem Speicher 204 in einer Package-on-Package(PoP)-Konfiguration umfasst sein.
  • 6 ist ein Konzeptdiagramm einer von der PPU 200 implementierten Graphikverarbeitungs-Pipeline 600 gemäß einer Ausführungsform. Die Graphikverarbeitungs-Pipeline 600 ist ein abstraktes Ablaufdiagramm der Verarbeitungsschritte, die implementiert werden, um 2D-Computer-erzeugte Bilder aus 3D-Geometriedaten zu erzeugen. Wie bekannt ist, können Pipeline-Architekturen Operationen mit langer Latenz effizienter durch Aufteilen der Operation in eine Mehrzahl von Stufen durchführen, wobei die Ausgabe jeder Stufe mit dem Eingang der nächsten aufeinanderfolgenden Stufe gekoppelt ist. Somit empfängt die Graphikverarbeitungs-Pipeline 600 Eingabedaten 601, die von einer Stufe zu der nächsten Stufe der Graphikverarbeitungs-Pipeline 600 übertragen werden, um Ausgabedaten 602 zu erzeugen. In einer Ausführungsform kann die Graphikverarbeitungs-Pipeline 600 eine Graphikverarbeitungs-Pipeline darstellen, die durch die OpenGL® API definiert ist. Als eine Option kann die Graphikverarbeitungs-Pipeline 600 im Kontext der Funktionalität und Architektur der vorherigen Figuren und/oder etwaiger nachfolgenden Figur(en) implementiert werden.
  • Wie in 6 gezeigt, umfasst die Graphikverarbeitungs-Pipeline 600 eine Pipeline-Architektur, die eine Anzahl von Stufen umfasst. Die Stufen umfassen, sind jedoch nicht beschränkt auf, eine Daten-Zusammenstellungsstufe 610, eine Vertex-Shading-Stufe 620, eine Primitiven-Zusammenstellungsstufe 630, eine Geometrie-Shading-Stufe 640, eine Darstellungsfeld-Skalierungs-, Aussonderungs- und Abschneide-(VSCC)-Stufe 650, eine Rasterungsstufe 660, eine Fragment-Shading-Stufe 670 und eine Raster-Operationen-Stufe 680. In einer Ausführungsform umfassen die Eingabedaten 601 Befehle, welche die Verarbeitungseinheiten konfigurieren, um die Stufen der Graphikverarbeitungs-Pipeline 600 und geometrische Primitive (z.B., Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen oder Fächer, usw.) zu implementieren, die mittels der Stufen zu verarbeiten sind. Die Ausgabedaten 602 können Pixeldaten (d.h. Farbdaten) umfassen, die in einen Frame-Puffer oder einen anderen Typ von Oberflächen-Datenstruktur in einem Speicher kopiert werden.
  • Die Daten-Zusammenstellungsstufe 610 empfängt die Eingabedaten 601, die Vertexdaten für Oberflächen höherer Ordnung, Primitive oder dergleichen spezifizieren. Die Daten-Zusammenstellungsstufe 610 sammelt die Vertexdaten in einem temporären Speicher oder Queue, wie beispielsweise durch Empfangen eines Befehls von dem Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher umfasst und die Vertexdaten aus dem Puffer liest. Die Vertexdaten werden dann an die Vertex-Shading-Stufe 620 zur Verarbeitung übertragen.
  • Die Vertex-Shading-Stufe 620 verarbeitet Vertexdaten durch Durchführen eines Satzes von Operationen (d.h. eines Vertex-Shader oder eines Programms) einmal für jede der Vertices. Vertices können beispielsweise als ein 4-Koordinaten-Vektor (d.h. <x, y, z, w>) spezifiziert sein, der einem oder mehreren Vertexattributen (z.B., Farbe, Texturkoordinaten, Oberflächennormalen, usw.) zugeordnet ist. Die Vertex-Shading-Stufe 620 kann einzelne Vertexattribute, wie beispielsweise Position, Farbe, Texturkoordinaten und dergleichen, manipulieren. Mit anderen Worten führt die Vertex-Shading-Stufe 620 Operationen an den Vertex-Koordinaten oder anderen Vertexattributen durch, welche einer Vertex zugeordnet sind. Derartige Operationen umfassen gewöhnlicherweise Beleuchtungs-Operationen (d.h. Modifizieren von Farbattributen für einen Vertex) und Transformations-Operationen (d.h. Modifizieren des Koordinatenraums für einen Vertex). Beispielsweise können Vertices unter Verwendung von Koordinaten in einem Objekt-Koordinatenraum spezifiziert sein, die durch Multiplizieren der Koordinaten mittels einer Matrix transformiert werden, welche die Koordinaten aus dem Objekt-Koordinatenraum in einen Welt-Raum oder einen normierten Vorrichtungskoordinaten(NCD = Normalized Device Coordinates)-Raum übersetzt. Die Vertex-Shading-Stufe 620 erzeugt transformierte Vertexdaten, die an die Primitiven-Zusammenstellungsstufe 630 übertragen werden.
  • Die Primitiven-Zusammenstellungsstufe 630 sammelt Vertices, die mittels der Vertex-Shading-Stufe 620 ausgegeben werden, und gruppiert die Vertices in geometrischen Primitiven zur Verarbeitung durch die Geometrie-Shading-Stufe 640. Beispielsweise kann die Primitiven-Zusammenstellungsstufe 630 konfiguriert sein, um alle drei aufeinanderfolgenden Vertices als eine geometrische Primitive (d.h. ein Dreieck) zur Übertragung an die Geometrie-Shading-Stufe 640 zu gruppieren. In einigen Ausführungsformen können spezifische Vertices für aufeinanderfolgende geometrische Primitiven erneut verwendet werden (z.B. können zwei aufeinanderfolgende Dreiecke in einem Dreieckstreifen zwei Vertices gemeinsam benutzen). Die Primitiven-Zusammenstellungsstufe 630 überträgt geometrische Primitive (d.h. eine Sammlung von zugeordneten Vertices) an die Geometrie-Shading-Stufe 640.
  • Die Geometrie-Shading-Stufe 640 verarbeitet geometrische Primitiven durch Durchführen eines Satzes von Operationen (d.h. eines Geometrie-Shader oder Programms) an den geometrischen Primitiven. Tessellations-Operationen können eine oder mehrere geometrische Primitiven aus jeder geometrischen Primitive erzeugen. Mit anderen Worten kann die Geometrie-Shading-Stufe 640 jede geometrische Primitive in ein feineres Netz von zwei oder mehr geometrischen Primitiven zur Verarbeitung durch den Rest der Graphikverarbeitungs-Pipeline 600 unterteilen. Die Geometrie-Shading-Stufe 640 überträgt geometrische Primitive an die Darstellungsfeld-SCC-Stufe 650.
  • In einer Ausführungsform kann die Graphikverarbeitungs-Pipeline 600 innerhalb eines Streaming-Multiprozessors arbeiten und die Vertex-Shading-Stufe 620, die Primitiven-Zusammenstellungsstufe 630, die Geometrie-Shading-Stufe 640, die Fragment-Shading-Stufe 670 und/oder die damit zugeordnete Hardware/Software kann sequentiell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen in einer Ausführungsform abgeschlossen sind, kann die Darstellungsfeld-SCC-Stufe 650 die Daten benutzen. In einer Ausführungsform können Primitivendaten, die durch eine oder mehrere der Stufen in der Graphikverarbeitungs-Pipeline 600 verarbeitet wurden, in einen Cache-Speicher (z.B. einen L1-Cache-Speicher, einen Vertex-Cache-Speicher usw.) geschrieben werden. In diesem Fall kann in einer Ausführungsform die Darstellungsfeld-SCC-Stufe 650 auf die Daten in dem Cache-Speicher zugreifen. In einer Ausführungsform sind die Darstellungsfeld-SCC-Stufe 650 und die Rasterungsstufe 660 als Festfunktions-Schaltungen implementiert.
  • Die Darstellungsfeld-SCC-Stufe 650 führt Darstellungsfeld-Skalierung, Aussonderung und Abschneidung der geometrischen Primitiven durch. Jede Oberfläche, die gerendert wird, wird einer abstrakten Kameraposition zugeordnet. Die Kameraposition stellt einen Ort eines Betrachters dar, der die Szene betrachtet, und definiert einen Betrachtungsstumpf, der die Objekte der Szene einschließt. Der Betrachtungsstumpf kann eine Betrachtungs-Ebene, eine hintere Ebene und vier Abschneide-Ebenen umfassen. Jede geometrische Primitive, die vollständig außerhalb des Betrachtungsstumpfes ist, kann ausgesondert (d.h. verworfen) werden, weil die geometrische Primitive nicht zu der endgültigen gerenderten Szene beitragen wird. Jede geometrische Primitive, die innerhalb des Betrachtungsstumpfs und teilweise außerhalb des Betrachtungsstumpf ist, kann abgeschnitten werden (d.h. in ein neue geometrische Primitive transformiert werden, die innerhalb des Betrachtungsstumpf eingeschlossen ist). Des Weiteren können geometrische Primitiven jeweils basierend auf einer Tiefe des Betrachtungsstumpfes skaliert werden. Alle potentiell sichtbaren geometrischen Primitiven werden dann an die Rasterungsstufe 660 übertragen.
  • Die Rasterungsstufe 660 wandelt die 3D-geometrischen Primitiven in 2D-Fragmente um (die z.B. in der Lage sind, zur Anzeige benutzt zu werden, usw.). Die Rasterungsstufe 660 kann konfiguriert sein, um die Vertices der geometrischen Primitive zu benutzen, um einen Satz von Ebenengleichungen aufzustellen, von denen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 660 kann ebenfalls eine Abdeckungsmaske für eine Mehrzahl von Pixeln berechnen, die angibt, ob eine oder mehrere Abtastorte für das Pixel die geometrische Primitive schneiden. In einer Ausführungsform kann auch z-Testen durchgeführt werden, um zu bestimmen, ob die geometrische Primitive von anderen geometrischen Primitiven verdeckt wird, die bereits gerastert wurden. Die Rasterungsstufe 660 erzeugt Fragmentdaten (d.h. interpolierte Vertexattribute, die einem bestimmten Abtastort für jedes abgedeckte Pixel zugeordnet sind), die an die Fragment-Shading-Stufe 670 übertragen werden.
  • Die Fragment-Shading-Stufe 670 verarbeitet Fragmentdaten durch Durchführen eines Satzes von Operationen (d.h. eines Fragment-Shader oder eines Programms) an jedem der Fragmente. Die Fragment-Shading-Stufe 670 kann Pixeldaten (d.h. Farbenwerte) für das Fragment erzeugen, wie beispielsweise durch Durchführen von Beleuchtungs-Operationen oder Abtasten von Texturabbildungen unter Verwendung von interpolierten Texturkoordinaten für das Fragment. Die Fragment-Shading-Stufe 670 erzeugt Pixeldaten, die an die Raster-Operationen-Stufe 680 übertragen werden.
  • Die Raster-Operationen-Stufe 680 kann verschiedene Operationen an den Pixeldaten durchführen, wie beispielsweise Alpha-Tests, Stencil-Tests und Mischung der Pixeldaten mit anderen Pixeldaten, die anderen Fragmente entsprechen, die dem Pixel zugeordnet sind. Wenn die Raster-Operationen-Stufe 680 die Verarbeitung der Pixeldaten (d.h. der Ausgabedaten 602) beendet hat, können die Pixeldaten in ein Render-Ziel, wie beispielsweise einen Frame-Puffer, einen Farbenpuffer oder dergleichen, geschrieben werden.
  • Es wird anerkannt, dass eine oder mehrere zusätzliche Stufen in der Graphikverarbeitungs-Pipeline 600 zusätzlich zu oder anstatt einer oder mehrerer der oben beschriebenen Stufen umfasst sein können. Verschiedene Implementierungen der abstrakten Graphikverarbeitungs-Pipeline können unterschiedliche Stufen implementieren. Des Weiteren können eine oder mehrere der oben beschriebenen Stufen der Graphikverarbeitungs-Pipeline in einigen Ausführungsformen (wie beispielsweise der Geometrie-Shading-Stufe 640) ausgeschlossen sein. Andere Arten von Graphikverarbeitungs-Pipelines werden betrachtet, als innerhalb des Schutzumfangs der vorliegenden Offenbarung zu liegen. Des Weiteren können beliebige der Stufen der Graphikverarbeitungs-Pipeline 600 von einer oder mehreren dedizierten Hardwareeinheiten innerhalb eines Graphikprozessors, wie beispielsweise der PPU 200, implementiert werden. Andere Stufen der Graphikverarbeitungs-Pipeline 600 können durch programmierbare Hardwareeinheiten, wie beispielsweise dem SM 340 der PPU 200, implementiert werden.
  • Die Graphikverarbeitungs-Pipeline 600 kann über eine Anwendung implementiert werden, die von einem Host-Prozessor, wie beispielsweise einer CPU 550, ausgeführt wird. In einer Ausführungsform kann ein Vorrichtungstreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, die verschiedene Funktionen definiert, die von einer Anwendung benutzt werden können, um graphische Daten zur Anzeige zu erzeugen. Der Vorrichtungstreiber ist ein Softwareprogramm, das eine Mehrzahl von Anweisungen umfasst, die den Betrieb der PPU 200 steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die einem Programmierer erlaubt, spezialisierte Graphikhardware zu benutzen, wie beispielsweise die PPU 200, um die graphischen Daten zu erzeugen, ohne zu verlangen, dass der Programmierer den spezifischen Anweisungssatz für die PPU 200 benutzen muss. Die Anwendung kann einen API-Aufruf umfassen, der an den Vorrichtungstreiber für die PPU 200 weitergeleitet wird. Der Vorrichtungstreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu antworten. In einigen Fällen kann der Vorrichtungstreiber Operationen durch Ausführen von Anweisungen auf der CPU 550 durchführen. In anderen Fällen kann der Vorrichtungstreiber Operationen, zumindest teilweise, durch Starten von Operationen auf der PPU 200 durchführen, wobei eine Eingabe/Ausgabe-Schnittstelle zwischen der CPU 550 und der PPU 200 benutzt wird. In einer Ausführungsform ist der Vorrichtungstreiber konfiguriert, um die Graphikverarbeitungs-Pipeline 600 unter Benutzung der Hardware der PPU 200 zu implementieren.
  • Verschiedene Programme können innerhalb der PPU 200 ausgeführt werden, um die verschiedenen Stufen der Graphikverarbeitungs-Pipeline 600 zu implementieren. Beispielsweise kann der Vorrichtungstreiber ein Kernel auf der PPU 200 starten, um die Vertex-Shading-Stufe 620 auf einem SM 340 (oder mehreren SMs 340) durchzuführen. Der Vorrichtungstreiber (oder den von der PPU 200 ausgeführten Anfangskernel) kann ebenfalls andere Kernels auf der PPU 200 starten, um andere Stufen der Graphikverarbeitungs-Pipeline 600 durchzuführen, wie beispielsweise die Geometrie-Shading-Stufe 640 und die Fragment-Shading-Stufe 670. Außerdem können einige der Stufen der Graphikverarbeitungs-Pipeline 600 auf einer festen Hardwareeinheit implementiert werden, wie beispielsweise einem Rasterer oder einem Daten-Assembler, der innerhalb der PPU 200 implementiert ist. Es wird anerkannt, dass Ergebnisse von einem Kernel durch eine oder mehrere intervenierende Festfunktions-Hardwareeinheiten verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 340 verarbeitet werden.
  • 7 veranschaulicht ein beispielhaftes System 700, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorangehenden Ausführungsformen implementiert werden können. Wie gezeigt, wird ein System 700 bereitgestellt, das mindestens einen zentralen Prozessor 701 aufweist, der mit einem Kommunikationsbus 702 verbunden ist. Der Kommunikationsbus 702 kann unter Anwendung eines beliebigen geeigneten Protokolls, wie beispielsweise durch PCI (periphere Komponenten-Zwischenverbindung), PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Bus-Protokolle oder Punkt-Zu-Punkt-Kommunikationsprotokolle implementiert werden. Das System 700 kann ferner einen Hauptspeicher 704 aufweisen. Steuerlogik (Software) und Daten sind in dem Hauptspeicher 704 gespeichert, der die Form eines Speichers mit wahlfreiem Zugriff (RAM) aufweisen kann.
  • Das System 700 umfasst ferner Eingabevorrichtungen 712, einen Graphikprozessor 706 und eine Anzeige 708, d.h. eine herkömmliche CRT (Kathodenstrahlröhre), eine LCD (Flüssigkristallanzeige), eine LED (lichtemittierende Diode), eine Plasmaanzeige oder dergleichen. Eine Anwendereingabe kann über die Eingabevorrichtungen 712, beispielsweise Tastatur, Maus, berührungsempfindliche Auflage, Mikrophon und dergleichen, empfangen werden. In einer Ausführungsform kann der Graphikprozessor 706 eine Mehrzahl von Shading-Modulen, ein Rastermodul, usw. aufweisen. Jedes der vorangehenden Module kann in einer einzelnen Halbleiterplattform angeordnet sein, so dass eine graphische Verarbeitungseinheit (GPU) gebildet ist.
  • In der vorliegenden Beschreibung kann eine einzelne Halbleiterplattform eine einzelne alleinstehende halbleiterbasierte integrierte Schaltung oder einen Chip bezeichnen. Es sollte beachtet werden, dass der Begriff einzelne Halbleiterplattform auch Multi-Chip-Module mit vergrößerter Verbindungsstruktur bezeichnen kann, die einen chipinternen Betrieb simulieren, und die eine wesentliche Verbesserung gegenüber der Verwendung einer Realisierung mit herkömmlicher zentraler Recheneinheit (CPU) und einem Bus darstellen. Selbstverständlich können die verschiedenen Module auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen entsprechend den Bedürfnissen des Anwenders angeordnet sein.
  • Das System 700 kann ebenfalls einen sekundären Speicher 710 umfassen. Der sekundäre Speicher 710 umfasst beispielsweise eine Festplatte und/oder eine entfernbare Speicherplatte, die ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Kompaktdisketten-Laufwerk, ein Laufwerk für eine digitale Vielseitigkeitsdiskette (DVD), ein Aufzeichnungsgerät, einen Flash-Speicher mit universellem seriellen Bus (USB) repräsentieren kann. Die entfernbare Speichervorrichtung liest in eine und/oder schreibt aus einer entfernbaren Speichereinheit auf eine bekannte Art und Weise.
  • Computerprogramme oder Computer-Steuerlogikalgorithmen können in dem Hauptspeicher 704 und/oder in dem sekundären Speicher 710 gespeichert sein. Derartige Computerprogramme versetzen, wenn sie ausgeführt werden, das System 700 in die Lage, verschiedene Funktionen auszuführen. Der Hauptspeicher 704, der Speicher 710 und/oder ein beliebiger anderer Speicher sind mögliche Beispiele für computerlesbare Medien.
  • In einer Ausführungsform können die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren im Zusammenhang mit dem zentralen Prozessor 701, dem Graphikprozessor 706, einer integrierten Schaltung (nicht gezeigt), die zumindest einen Teil der Fähigkeiten sowohl des zentralen Prozessors 701 als auch des Graphikprozessors 706 aufweist, mit einem Chipsatz (das heißt, einer Gruppe aus integrierten Schaltungen, die so gestaltet ist, dass sie als Einheit zur Ausführung zugehöriger Funktionen arbeiten und als solche verkauft wird, usw.) und/oder mit einer anderen integrierten Schaltung für diese Angelegenheit implementiert werden.
  • Ferner können die Architektur und/oder Funktionalität der verschiedenen vorangehenden Figuren auch im Rahmen eines allgemeinen Computersystems, eines Systems aus Leiterplatten, eines Systems mit Spielekonsole, die für Unterhaltungszwecke gedacht ist, im Rahmen eines anwendungsspezifischen Systems und/oder im Rahmen eines anderen gewünschten Systems implementiert werden. Beispielsweise kann das System 700 die Form eines Tischrechners, eines Laptops, eines Dienstleister-Rechners, eines Arbeitsplatzrechners, von Spielekonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art von Logik annehmen. Des Weiteren kann das System 700 die Form verschiedener anderer Vorrichtungen annehmen, wozu gehören, ohne Einschränkung, eine Vorrichtung als persönlicher digitaler Assistent (PDA), eine Vorrichtung als Mobiltelefon, eine Vorrichtung als Fernsehgerät, usw.
  • Ferner kann, obwohl nicht gezeigt, das System 700 mit einem Netzwerk (z.B. einem Telekommunikationsnetzwerk, Lokalbereichsnetzwerk (LAN), drahtlosem Netzwerk, Weitbereichsnetzwerk (WAN), wie beispielsweise dem Internet, Peer-to-Peer-Netzwerk, Kabelnetzwerk oder dergleichen) für Kommunikationszwecke gekoppelt sein.
  • 8 veranschaulicht ein Ablaufdiagramm eines Verfahrens 800 zum Rekonstruieren von Bilddaten unter Verwendung eines neuralen Netzwerks gemäß einer Ausführungsform. Wie in Operation 802 gezeigt, werden zu rendernde Bilddaten gekennzeichnet, wobei sich die Bilddaten aus einem Monte-Carlo-Abtastverfahren ergeben. Außerdem wird, wie in Operation 804 gezeigt, ein Filter auf die Bilddaten angewendet, um rekonstruierte Bilddaten zu erzeugen, wobei das Filter ein neurales Netzwerk ist. Beispielsweise kann die Filterung und die Rekonstruktion der Bilddaten explizit unter Benutzung des neuralen Netzwerks durchgeführt werden (z.B. anstatt eines kreuz-bilateralen Filters usw.). Beispielsweise kann das neurales Netzwerk einen Autocodierer umfassen. In einem anderen Beispiel kann das neurale Netzwerk eine oder mehrere Übersprungverbindungen implementieren. In noch einem anderen Beispiel kann das neurale Netzwerk eine oder mehrere rekurrente Schichten implementieren. Ferner werden, wie in Operation 806 gezeigt, die rekonstruierten Bilddaten zurückgegeben.
  • Interaktiver Rekonstruktion von Verrauschte Monte-Carlo-Bildsequenzen unter Verwendung eines rekurrenten Autocodierers
  • Einführung
  • Strahl- und Pfadverfolgung sind kürzlich als die Rendering-Algorithmen der Wahl für visuelle Effekte entstanden. Dies regte die Entwicklung von Filterungs- und Rekonstruktionstechniken an, um in Monte-Carlo-Renderings inhärentes Rauschen zu verringern, wobei jedoch der Schwerpunkt auf Ergebnisse mit Filmqualität Hunderte bis Tausende von Abtastungen pro Pixel vor der Filterung ermöglicht.
  • Derweil haben sich Spiele neuerdings ebenfalls in Richtung physikalisch basierter Schattierung von mehreren empirischen Modellen bewegt, wobei jedoch ein großer Teil der potentiellen Zunahme in Realismus von diesem Übergang von der Möglichkeit des flexibleren Abtastens von Lichttransportpfaden abhängt, als Rasterung erlaubt. Leider können selbst die schnellsten Strahlverfolger lediglich einige Strahlen pro Pixel bei 1080p und 30Hz verfolgen. Während sich diese Anzahl alle paar Jahre verdoppelt, wird dem Trend (zumindest teilweise) durch die Bewegung in Richtung von Anzeigen mit höherer Auflösung und höheren Auffrischraten entgegengewirkt. Es scheint daher wahrscheinlich, dass ein realistisches Abtastbudget für Spiele und andere Echtzeitanwendungen etwa von einem (kurzen) Pfad pro Pixel für die vorhersehbare Zukunft bleiben werden. Eine neue allgemeine Rekonstruktionstechnik kann vorgestellt werden, die den Stand der Technik in diesem Regime bedeutend verbessern kann.
  • Das Rekonstruieren einer globalen Beleuchtung aus einem einzigen Pfad pro Pixel kann Herausforderungen darstellen. Eine Monte-Carlo-Integration von indirekter Beleuchtung kann zu verrauschten Bilder mit niedrigen Abtastraten führen, so dass ein großer Teil der Energie in einer kleinen Untermenge von Pfaden oder Pixeln konzentriert ist. Das Problem kann daher als eine Rekonstruktion des endgültigen Bildes (und nicht als Entrauschen) von diesen spärlichen Abtastungen umrahmt werden, da es bei verbietend niedrigen Abtastraten am Anfang fast nur Rauschen gibt. Dieses Problem kann sich verschlimmern, wenn versucht wird, ein zeitlich stabiles Ergebnis in Animation zu erhalten.
  • In einer Ausführungsform können signifikante Modifikationen an einem tiefen faltungstechnischen Netzwerk durchgeführt werden, um sich den besonderen Herausforderungen des Rekonstruierens von gerenderten Bildsequenzen mit extremen Monte-Carlo-Rauschen zu widmen. Genauer gesagt kann das Hinzufügen rekurrenter Verbindungen in einer tiefen Autocodiererstruktur zu einer erhöhten zeitlichen Stabilität führen und das Durchführen eines Ende-zu-Ende-Training kann dem Netzwerk ermöglichen, automatisch zu lernen, wie Hilfspixelkanäle, wie beispielsweise Tiefe und Normale, ohne Benutzerwechselwirkung oder Parametereinstellungen am besten zu nutzen sind.
  • Diese Fortschritte können ein interaktives Erzeugen plausibler Bildsequenzen mit globaler Beleuchtung bei extrem niedrigen Abtastbudgets ermöglichen.
  • Pfadverfolgung
  • In einer Ausführungsform kann das Erzeugen einer 1-Abtastung, unidirektionalen pfadverfolgten Schätzung verwendet werde, um die Eingabe in das neurale Netzwerk zu erzeugen.
  • Interaktiver Pfadverfolger
  • In einer Ausführungsform kann ein optimierter Pfadverfolger verwendet werden, um verrauschte eingegebene Bilder zu erzeugen. Herkömmliche Pfadverfolger können Strahlen durch jedes Pixel schießen, die sich gemäß dem Profil des Reflexionsvermögens des gekreuzten Objekts stochastisch streuen und rekursiv fortfahren, bis eine Lichtquelle getroffen wird. Als nächstes kann eine Ereignisschätzung verwendet werden, um die Konvergenz durch deterministisches Verbinden jeder Pfadvertex mit einem Licht zu verbessern.
  • Um die sichtbare Oberflächenbestimmung zu beschleunigen, können GPUs gehandhabt werden, um (statt einer Strahlverfolgung) den ersten Trefferpunkt der Kamera zu rastern und ihre zugeordneten Schattierungsattribute in einem G-Puffer zu speichern. Genauer gesagt können die Treffer-Mesh-ID, Mesh-Primitiven-ID, baryzentrische Koordinaten der Dreieckkreuzung, Material-ID, Welt-Raum-Position und Schattierungsnormale, diffuse und spiegelnde Albedo und Bewegungsvektoren gespeichert werden. Nach diesem Rasterungslauf kann der Pfad unter Verwendung eines GPU-Strahlverfolgers verfolgt werden. Die Tiefe des Feldes und die Bewegungsunschärfe kann während einer Pfadverfolgung nicht berücksichtigt werden, da diese Effekte gewöhnlicherweise als ergänzende Nachprozesses implementiert werden und sie Rauschen in den G-Puffer einführen können.
  • In einer anderen Ausführungsform können Sequenzen mit niedriger Diskrepanz (z.B. Halton oder Sobol) beim Abtasten der Lichtquelle und Streurichtungen verwendet werden, und eine Pfadraumregulierung kann auf glänzende und spiegelnde Materialien nach dem Streuen angewendet werden. Diese Regulierung kann die Anzahl von spärlichen Hochintensitätsausreißern in glänzenden Spiegelungen auf Kosten einer kleinen Vorspannung signifikant verringern.
  • Die Anzahl von indirekten Abprallungen kann auf eins für praktische Wechselwirkung begrenzt werden. Während es möglich ist, Bilder mit mehr Lichtabprallungen zu rendern, nimmt ihr Beitrag zu dem Bild typischerweise schnell ab, wobei ihre negative Auswirkung auf Renderingzeit und Bildvarianz bedeutender ist. Als solches kann ein Pfadverfolger lediglich einen direkten Beleuchtungspfad (Kamera-Oberflächen-Licht) und einen indirekten Pfad (Kamera-Oberflächen-Oberflächen-Licht) an jedem Pixel erzeugen. Die Gesamteingabe-Erzeugungskosten pro Pixel können Rasterung, drei Strahlen, zwei Materialbewertungen und eine Materialabtastung umfassen. In einer Ausführungsform kann das Bild ein Einzelabtastbild genannt werden, um hervorzuheben, dass ein Pfad verfolgt wird, obwohl es zwei nächste Ereignisschätzungen entlang seines Weges aufweist.
  • Hilfseingaben zur Rekonstruktion
  • In einer Ausführungsform kann der G-Puffer Information über Geometrie, Materialien und Lichtquellen der Szene enthalten. Eine Untermenge davon kann der Rekonstruktion durch Exportieren eines tiefen Bildes verfügbar gemacht werden, das aus mehreren Puffern bestehen kann. Außerdem kann das verrauschte, Hochdynamikbereich-RGB-Bild den folgende Satz von G-Puffer-Merkmalen von dem Rasterungslauf zu dem Rekonstruktionsalgorithmus exportieren: Sichtraum-Schattierungsnormale (ein 2D-Vektor), Tiefe und die Rauigkeit des Materials. In einer anderen Ausführungsform kann die Eingabe in den Rekonstruktionsalgorithmus aus 3 + 4 = 7 Skalarwerten pro Pixel bestehen.
  • Die Farbwerte können in einem linearen Raum als 16-bit Gleitkommawerte (FP16-Werte) mit halber Genauigkeit gespeichert werden, um den Hochdynamikbereich (HDR) beizubehalten. Die Tiefenwerte können für höhere Genauigkeit linearisiert werden und können als FP16 gespeichert werden. Die verbleibenden 3 Kanäle können jeweils als 8bpp gespeichert werden. Die Sichtraum-Schattierungsnormale kann unter Verwendung der Projektionsmatrix der Kamera berechnet und ihre x- und y-Komponenten können gespeichert werden.
  • Die Eingabe kann durch Demodulieren des verrauschten RGB-Bildes durch die Albedo des direkt sichtbaren Materials vereinfacht werden. Durch Speichern dieser untexturierten Beleuchtung kann das Meiste der Texturkomplexität von dem verrauschten Bild entfernt werden, was Training und Verringern der erforderlichen Netzwerkkapazität bedeutend erleichtern kann. Nachdem die untexturierte Beleuchtung rekonstruiert wurde, kann sie durch die Albedo neu moduliert werden, um die Textureinzelheiten in dem endgültigen Rendering zu umfassen.
  • In einer anderen Ausführungsform können, da direkt sichtbare Oberflächen lediglich einmal bei jedem Pixel abgetastet werden, sämtliche zuvor erwähnten Eingaben für Bildraum-Aliasing anfällig sein. Antialiasing dieser Eingaben kann eine höhere Abtastrate erforderlich machen, die interaktives Rendering ausschließen kann. Die Anwendung einer Schirmraum-zeitlichen Antialiasing-Technik (TAA) auf das rekonstruierte Ausgabebild kann stattdessen ein verbleibendes Aliasing mit vernachlässigbaren zusätzlichen Kosten beheben.
  • Bildsequenz-Rekonstruktion mit rekurrentem Autocodierer
  • In einer Ausführungsform kann der Bildrekonstruktionsalgorithmus ein datengetriebenes Verfahren umfassen, das eine Abbildung von verrauschten Eingabebildsequenzen in rauschfreie Ausgabebildsequenzen basierend auf einer großen Anzahl von Trainingspaaren lernt, die jeweils aus einer Beispieleingabesequenz und der gewünschten Ausgabesequenz (i.e. Trainingsziel) bestehen.
  • Das Rekonstruktionsverfahren kann auf einer Bildwiederherstellung unter Verwendung eines faltungstechnischen Netzwerks mit hierarchischen Übersprungverbindungen basieren. Diese Architektur kann modifiziert werden, um Unterabtast- und Aufabtaststufen sowie auch rekurrente Verbindungen zu umfassen. Trainingsdaten können erstellt und eine genaue Verlustfunktion kann während des Trainings optimiert werden.
  • Autocodierer mit Übersprungverbindungen
  • In einer Ausführungsform kann die Netzwerkarchitektur unterschiedliche Codierer- und Decodiererstufen umfassen, die an abnehmenden bzw. zunehmenden räumlichen Auflösungen arbeiten. Dies kann gute Ergebnisse bei einer optischen Strömungsschätzung bereitstellen und kann ebenfalls die Verbindung mit entrauschenden Autocodierern betonen. Da die Schichten, die an den höchsten räumlichen Auflösungen arbeiten, am zeitintensivsten sein können, kann diese Ausgestaltung schneller in der Ausführung bei Vergleich mit anderen Architekturen mit einer vernachlässigbaren Verringerung in der Qualität (für Gaußsches Rauschen) sein. Das empfangsfähige Feld aller tieferen Schichten kann mehrere Male größer in dem eingegebenen Bild sein, was die Berücksichtigung größerer Pixelnachbarschaften und daher eine verbesserte Handhabung von sehr spärlichen Eingaben ermöglicht. Weil das Netzwerk eine Abbildung von Eingaben in Ausgaben lernt, kann eine beliebige Anzahl von Hilfseingaben zusätzlich zu den Farbdaten bereitgestellt werden. Die Optimierung während des Trainings kann alle diese Eingaben berücksichtigen und kann automatisch den besten Weg finden, um sie zu verwenden, um die Farbdaten eindeutig zu machen.
  • Rekurrenter Autocodierer zum Videoentrauschen
  • Rekurrente neurale Netzwerke (RNN) können zur Verarbeitung von beliebig langen Eingabesequenzen verwendet werden. Ein RNN kann Rückkopplungsschleifen umfassen, welche die Ausgabe der vorherigen verborgenen Zustände mit den aktuellen Zuständen verbindet, womit bedeutende Information zwischen den Eingaben beibehalten wird. Dies kann eine gute Anpassung an die Anwendung aus zwei Gründen durchführen. Zuerst müssen, um einen kontinuierlichen Strom von Bildern zu entrauschen, zeitlich stabile Ergebnisse erhalten werden. Zweitens können, weil eingegebene Bilder sehr spärlich abgetastet werden, die rekurrenten Verbindungen das Sammeln von mehr Information über die Beleuchtung mit der Zeit ermöglichen.
  • Um zeitliche Merkmalen mit mehreren Maßstäben beizubehalten, können vollständig faltungstechnisch rekurrente Blöcke in jeder Codierstufe umfasst sein. In einer Ausführungsform kann die gesamte Architektur, einschließlich der rekurrenten Verbindungen, vollständig faltungstechnisch sein. Dies kann ein Training des Netzwerks mit kleinen Mengen fester Größe (z.B. 128x128 Pixel) und der späteren Anwendung auf Bilder von beliebiger Größe ermöglichen.
  • In einer Ausführungsform können die rekurrenten Blöcke im Codiererteil im Gegensatz zu dem Decodierer platziert werden. Die Begründung ist, dass das Signal in dem Codierer spärlicher sein kann. Beispielsweise kann ein rekurrenter Block an jeder Codierstufe direkt vor dem max pooling platziert werden.
  • Jeder rekurrenter Block kann aus drei Faltungsschichten mit einer 3x3-Pixel räumlichen Stütze bestehen. Eine Schicht kann die eingegebenen Merkmale der vorherigen Schicht des Codierers verarbeiten. Sie kann dann die Ergebnisse mit den Merkmalen des vorherigen verborgenen Zustands verketten und sie durch zwei verbleibende Faltungsschichten leiten. Das Ergebnis kann sowohl der neue verborgene Zustand als auch die Ausgabe des rekurrenten Blocks werden. Dies kann ein ausreichend zeitlich empfangsfähige Feld bereitstellen und zusammen mit der multiskaligen Kaskade von derartigen rekurrenten Blöcken ermöglichen, Merkmale effizient zeitlich zu verfolgen und beizubehalten. Die Faltungsschichten in einem rekurrenten Block können an der gleichen Bildauflösung arbeiten und der Anzahl von Merkmalen pro Pixel wie die Codierstufe arbeiten, der er zugeordnet ist.
  • In einer Ausführungsform können die Ausgabe und der verborgene Zustand unter Verwendung einer rekurrenten Gleichung dargestellt werden: h i = O i = C 3 × 3 ( C 3 × 3 ( C 3 × 3 ( I i ) h i 1 ) ) ,
    Figure DE102018101030A1_0001
    wobei C3x3 ein Faltungskern mit eine 3x3-Pixel räumlichen Stütze ist, Oi die Ausgabe ist, Ii die aktuelle Eingabe ist, hi der verborgene Zustand für die Eingabe i ist und ein Verkettungsoperator ist.
  • 9 veranschaulicht eine beispielhafte interne Struktur 900 einer rekurrenten RCNN-Verbindung gemäß einer Ausführungsform. Wie gezeigt, empfängt eine erste Mehrzahl von Faltungen 902A-C eine erste Eingabe 904 und eine zweite Mehrzahl von Faltungen 902D-F empfängt eine zweite Eingabe 910. Eine Rückkopplungsschleife 906 stellt einen verborgenen, rekurrenten Zustand 908 der ersten Mehrzahl von Faltungen 902A-C als Eingabe in eine zweite Mehrzahl von Faltungen 902E-F bereit. Auf diese Weise kann Information zwischen Eingaben des rekurrenten RCNN beibehalten werden.
  • Training
  • Eine beispielhafte Erstellung von Trainingsdaten für den rekurrenten Autocodierer und Einzelheiten über einen beispielhaften Trainingsprozess werden nachstehend beschrieben.
  • Datensatz
  • In einem Beispiel kann eine flüssige Kamera-Durchflug-Animation beispielsweise 1000 verfügbare Frames für jede Szene zum Training umfassen. Für jeden Frame können 10 unterschiedliche verrauschte Bilder bei 1 Abtastung pro Pixel sowie auch die Hilfsmerkmale und das Zielbild zum Training erzeugt werden. In dem mehreren verrauschte Bilder aufgewiesen werden, kann jeder dieser Fälle von Monte-Carlo-Rauschen aufgefordert werden, zu dem gleichen rekonstruierten Bild zu führen. Dies kann die Anzahl von Trainingspaaren bei vernachlässigbaren Kosten verglichen mit dem Erzeugen von zusätzlichen Zielbildern erhöhen. Es sei bemerkt, dass die verrauschten Bilder die Hilfsmerkmale gemeinsam nutzen können, weil primäre Strahlen gerastert werden.
  • In einem anderen Beispiel können 1024x1024 Bilder während eines Rendering erzeugt werden, während das Training unter Verwendung kleinerer 128x128 Mengen durchgeführt werden kann, die zufällig für jede Trainingssequenz von 7 Frames ausgewählt werden. Der Anfang jeder Trainingssequenz kann zufällig innerhalb einer Durchflug-Sequenz sowie auch der Durchflug-Sequenz selbst ausgewählt werden. Vorlauf- und Rücklaufwiedergabe kann zufällig abgewechselt werden, um das Netzwerk gemäß verschiedener Kamerabewegungen zu trainieren. Die Kamera kann ebenfalls in der Trainingssequenz durch Ändern des verrauschten Bildes in einen anderen Ursprung zufällig „blockiert“ werden, während der Frame und das Zielbild fixiert gehalten werden.
  • Außerdem können zufällige Drehungen der Trainingssequenz um 90=180=270 Grad verwendet werden, um an mehr Bewegungsrichtungen zu trainieren. Eine zufällige Modulation im Bereich [0, 2] kann getrennt auf jeden Farbkanal angewendet werden. Dies kann das Netzwerk dazu zwingen, die Lineareingabe-Zielfarbrelation sowie auch die Unabhängigkeit der Kanäle besser zu lernen.
  • Netzwerk
  • Wir trainieren für 500 Epochen mit Lernrate 0,001 und Verfallraten 1 = 0,9 und 2 = 0,99. Die Lernrate kann unter Verwendung einer geometrischen Progression während der ersten 10 Trainingsepochen zehnfach beschleunigt werden und dann gemäß 1 / t
    Figure DE102018101030A1_0002
    Planung vermindert werden, wobei t die Trainingszeit ist. Eine Minibatch-Größe von 4 Sequenzen kann verwendet werden und jede Epoche kann die Reihenfolge von Trainingsdaten zufällig anordnen. Alle Parameter können initialisiert werden und eine leckende Aktivierung der gleichgerichteten Lineareinheit (ReLU) mit α = 0,1 kann in allen Schichten mit Ausnahme der Letzten verwendet werden, die eine lineare Aktivierung verwenden kann. Max pooling kann zum Unterabtasten und für eine Nächste-Nachbar-Filterung zum Aufabtasten verwendet werden.
  • Insgesamt kann es 36 Faltungsschichten in dem Netzwerk geben: 18 in dem Vorwärtskopplungspfad und 3 innerhalb jedes der 6 RCNN-Blöcke. Sequenzen von 7 aufeinanderfolgenden Frames können verwendet werden, um ausreichenden zeitlichen Zusammenhang während des Trainings bereitzustellen. Die rekurrenten Blöcke können durch Rückpropagieren durch Zeit trainiert werden, wobei die Vorwärtskopplungssubteile des RNN repliziert werden, um die Rekurrenzschleifen zu entrollen.
  • Der Ausgabemerkmalszählwert kann auf 32 pro Pixel in der ersten Stufe des Codierers eingestellt werden und dann kann die Anzahl mit 4/3 nach jeder Unterabtastoperation multipliziert werden. Dies kann zu einer Kompression mit fester Rate um einen Faktor von 4/(4/3) = 3 nach jedem Unterabtasten führen. Daher kann die an jeder Stufe verlorene Information durch die Übersprungverbindungen erneut eingeführt werden. Der Decodiererteil kann dann die Datenmenge um das Dreifache nach jedem Aufabtasten verstärken.
  • Verlustfunktion
  • Eine Verlustfunktion kann definieren, wie der Fehler zwischen Netzwerkausgaben und Trainingszielen während des Trainings berechnet wird. Eine beispielhafte Verlustfunktion, die in der Bildwiederherstellung verwendet wird, ist L2, welche der mittlere quadratische Fehler zwischen dem vorhergesagten Bild P und dem Zielbild T ist. Das Verwenden des L1 Verlustes anstatt von L2 kann jedoch fleckige Artefakte von rekonstruierten Bildern verringern.
  • Ein anderer beispielhafter erster Verlustterm kann einen räumlichen Verlust L1, der als
    Figure DE102018101030A1_0003
    s für ein einziges Bild in der zeitlichen Trainingssequenz bezeichnet wird, umfassen: s = 1 N i N | P i T i | ,
    Figure DE102018101030A1_0004
    wobei Pi und Ti das i-te Pixel des vorhergesagten bzw. des Zielbildes sind. Das Bild kann ebenfalls durch Anheben aller Farbkanäle auf die Leistung vor dem Berechnen des Verlustes abgeflacht werden. Ein Wert von 1/2,2 kann nahe der wahrgenommenen Gammakorrektur sein, wobei jedoch ein aggressiverer Wert von 0,2 ermöglichen kann, den Fehler in den dunklen Regionen des Bildes noch effizienter zu ahnden.
  • Der räumliche Verlust L1 kann eine gute Gesamtbildmetrik bereitstellen, die gegen Ausreißer tolerant ist. Um die Unterschiede in feinen Einzelheiten außerdem zu ahnden, wie beispielsweise Rändern, kann ein L1-Verlust einer Gradienten-Domain ebenfalls verwendet werden: g = 1 N i N ( | P i x T i x | + | P i y T i y | ) ,
    Figure DE102018101030A1_0005
    wobei die Ableitungen mit finitem Differenzbilden unter Verwendung eines einzigen Pixelversatzes entlang x und y entsprechend berechnet werden können.
  • Diese Verluste können den Fehler für jedes Bild in Isolation minimieren. Sie können eine zeitliche Inkohärenz (z.B. Flackern zwischen Frames) jedoch nicht ahnden und können den Optimierer nicht ermutigen, die rekurrenten Verbindungen zu trainieren, um mehr Daten über Frames zu leiten. Daher kann ein zeitlicher Verlust
    Figure DE102018101030A1_0003
    t eingeführt werden: t = 1 N i N ( | P i t T i t | ) ,
    Figure DE102018101030A1_0006
    wobei eine zeitliche Ableitung ∂Pi/∂t für ein i-tes Bildpixel unter Verwendung von finiter Differenzbildung in der Zeit zwischen dem i-ten Pixel des aktuellen und des vorherigen Bildes in der zeitlichen Trainingssequenz berechnet werden kann. Eine gewichtete Kombination dieser drei Verluste kann als der endgültige Trainingsverlust verwendet werden: = w s s + w g g + w t t ,
    Figure DE102018101030A1_0007
    wobei ws/g/t die einstellbaren Gewichte sind, die den Beitrag von jedem Verlust steuern. Der gewichtete Verlust kann im Training mit Gewichten ws/g/t = 0,8/0,1/0,1 entsprechend verwendet werden.
  • In einer Ausführungsform können die Frames später in der Sequenz einem höheren Gewicht zugewiesen werden, um für das zeitliche Training von RNN-Blöcken einen Anreiz zu schaffen. Beispielsweise kann eine Gaußsche Kurve verwendet werden, um ws/g/t zu modulieren: für eine Sequenz von 7 Bildern kann (0,011; 0,044; 0,135; 0,325; 0,607; 0,882; 1) verwendet werden.
  • Um zu verifizieren, dass der kombinierte Verlust zu einer Verbesserung über den Nur-räumlichen-Verlust
    Figure DE102018101030A1_0003
    s führt, kann die strukturelle Ähnlichkeitsmetrik (SSIM) an einer Validierungssequenz nach 100 Epochen von Training gemessen werden. Die SSIM kann eine Verbesserung zeigen (z.B. von 0,7815 für
    Figure DE102018101030A1_0003
    s bis 0,7647 für den kombinierten Verlust).
  • Während verschiedene Ausführungsformen oben beschrieben wurden, sei zu verstehen, dass sie lediglich beispielhaft und nicht begrenzend präsentiert wurden. Somit sollte die Breite und der Umfang einer bevorzugten Ausführungsform nicht durch irgendeine der oben beschriebenen beispielhaften Ausführungsformen begrenzt werden, sondern sollte nur durch die folgende Ansprüche und ihrer Äquivalente definiert werden.

Claims (17)

  1. Verfahren zum Durchführen einer räumlich-zeitlichen Filterung, umfassend: Kennzeichnen von zu rendernden Bilddaten; Rekonstruieren der Bilddaten, um rekonstruierte Bilddaten zu erzeugen, unter Benutzung eines Filters, das ein neurales Netzwerk umfasst, das eine oder mehrere Übersprungverbindungen und eine oder mehrere rekurrenten Schichten aufweist; und Zurückgeben der rekonstruierten Bilddaten.
  2. Verfahren gemäß Anspruch 1, wobei die Bilddaten als Ergebnis eines vorbestimmten Prozesses erzeugt werden, wobei der vorbestimmte Prozess eine oder mehrere umfasst von: Schwachlicht-Photographie; Schwachlicht-Videoaufzeichnung; einem Monte-Carlo-Abtastverfahren; Photographie, die RGB und Tiefeninformation erzeugt; und Nur-Tiefenkameras.
  3. Verfahren gemäß Anspruch 1 oder 2, wobei die Bilddaten eine Anzahl von Abtastungen pro Pixel (spp) unterhalb einer vorbestimmten Schwelle umfassen.
  4. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei die Bilddaten Hilfsinformation umfassen.
  5. Verfahren gemäß Anspruch 4, wobei die Hilfsinformation eine oder mehrere Sichtraum-Schattierungsnormale umfasst.
  6. Verfahren gemäß Anspruch 4 oder 5, wobei die Hilfsinformation einen oder mehrere Tiefenwerte umfasst.
  7. Verfahren gemäß einem der Ansprüche 4 bis 6, wobei die Hilfsinformation eine oder mehrere Rauigkeitswerte umfasst.
  8. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei das neurale Netzwerk eine Mehrzahl von Faltungsschichten umfasst.
  9. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei das neurale Netzwerk eine Mehrzahl von Codiererschichten und entsprechende Decodiererschichten umfasst und eine erste Übersprungverbindung innerhalb des neuralen Netzwerke einem Rekonstruktionsprozess ermöglicht, von einer ersten Codiererschicht direkt zu einer entsprechenden Decodiererschicht zu springen, um dadurch über eine oder mehrere Codierer- und Decodiererschichten innerhalb des neuralen Netzwerks zu springen.
  10. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei die eine oder mehreren rekurrenten Schichten eine rekurrentes faltungstechnisches neurales Netzwerk (RCNN) umfassen.
  11. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei die eine oder mehreren rekurrenten Schichten eine Schicht mit sich selbst innerhalb des neuralen Netzwerks verknüpft.
  12. Verfahren gemäß einem der vorhergehenden Ansprüche, ferner umfassend Training des neuralen Netzwerks unter Benutzung eines Datensatzes, der eine Mehrzahl von Eingabe/Ausgabe-Paaren umfasst.
  13. Verfahren gemäß Anspruch 12, wobei eine Verlustfunktion während des Trainings des neuralen Netzwerks benutzt wird.
  14. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei Information, die während einer Rekonstruktion eines ersten Frames von einer Sequenz von Frames der Bilddaten verwendet wird, als ein verborgener, rekurrenter Zustand gespeichert wird, auf den dann während einer Rekonstruktion eines zweiten Frames der Sequenz von Frames der Bilddaten innerhalb eines RCNN unter Benutzung einer Rückkopplungsschleife des RCNN zugegriffen wird.
  15. System, umfassend: einen Prozessor, der konfiguriert ist, um: zu rendernde Bilddaten zu kennzeichnen; die Bilddaten zu rekonstruieren, um rekonstruierte Bilddaten unter Benutzung eines Filters zu erzeugen, das ein neurales Netzwerk umfasst, wobei das Netzwerk eine oder mehrere Übersprungverbindungen und eine oder mehrere rekurrente Schichten aufweist; und die rekonstruierten Bilddaten zurückzugeben.
  16. System gemäß Anspruch 15, wobei der Prozessor konfiguriert ist, um ein Verfahren gemäß einem der Ansprüche 2 bis 14 auszuführen.
  17. Verfahren zum Durchführen einer räumlich-zeitlichen Filterung, umfassend: Kennzeichnen der zu rendernden Bilddaten, wobei sich die Bilddaten aus einem Monte-Carlo-Abtastverfahren ergeben; Anwenden eines Filters auf die Bilddaten, um rekonstruierte Bilddaten zu erzeugen, wobei das Filter ein neurales Netzwerk ist; und Zurückgeben der rekonstruierten Bilddaten.
DE102018101030.3A 2017-01-18 2018-01-18 Filterung von Bilddaten unter Verwendung eines neutralen Netzwerks Pending DE102018101030A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762447859P 2017-01-18 2017-01-18
US62/447,859 2017-01-18
US15/872,838 US11113800B2 (en) 2017-01-18 2018-01-16 Filtering image data using a neural network
US15/872,838 2018-01-16

Publications (1)

Publication Number Publication Date
DE102018101030A1 true DE102018101030A1 (de) 2018-07-19

Family

ID=62716528

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018101030.3A Pending DE102018101030A1 (de) 2017-01-18 2018-01-18 Filterung von Bilddaten unter Verwendung eines neutralen Netzwerks

Country Status (2)

Country Link
CN (1) CN108335349B (de)
DE (1) DE102018101030A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11157414B2 (en) * 2018-08-10 2021-10-26 Nvidia Corporation Method for efficient grouping of cache requests for datapath scheduling
US10991079B2 (en) * 2018-08-14 2021-04-27 Nvidia Corporation Using previously rendered scene frames to reduce pixel noise
EP3850583A2 (de) * 2018-09-13 2021-07-21 Nvidia Corporation Mehrstufige bildrekonstruktion unter verwendung eines oder mehrerer neuronaler netzwerke
CN109919864A (zh) * 2019-02-20 2019-06-21 重庆邮电大学 一种基于稀疏去噪自编码网络的图像压缩感知方法
CN110363090A (zh) * 2019-06-14 2019-10-22 平安科技(深圳)有限公司 智能心脏疾病检测方法、装置及计算机可读存储介质
US20210142177A1 (en) * 2019-11-13 2021-05-13 Nvidia Corporation Synthesizing data for training one or more neural networks
CN110874816B (zh) * 2019-11-19 2023-07-04 抖音视界有限公司 一种图像处理方法、装置、移动终端及存储介质
CN111311507B (zh) * 2020-01-21 2022-09-23 山西大学 基于多粒度合作网络的极低光成像方法
CN111612878B (zh) * 2020-05-21 2023-04-07 广州光锥元信息科技有限公司 将静态照片制作成三维效果视频的方法及装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6313838B1 (en) * 1998-02-17 2001-11-06 Sun Microsystems, Inc. Estimating graphics system performance for polygons
US7952583B2 (en) * 2000-06-19 2011-05-31 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
EP1515270A1 (de) * 2003-09-09 2005-03-16 Semeion Künstliches neuronales Netz
CA2714235C (en) * 2010-04-27 2014-01-07 Centre De Recherche Industrielle Du Quebec Method and system for stabilizing dry-based density of wood chips to be fed to a chip refining process
CN104506162A (zh) * 2014-12-15 2015-04-08 西北工业大学 基于ls-svr建模的高阶粒子滤波器的故障预示方法
US11080587B2 (en) * 2015-02-06 2021-08-03 Deepmind Technologies Limited Recurrent neural networks for data item generation
US10628735B2 (en) * 2015-06-05 2020-04-21 Deepmind Technologies Limited Reading comprehension neural networks
CN105118082B (zh) * 2015-07-30 2019-05-28 科大讯飞股份有限公司 个性化视频生成方法及系统
CN106251303A (zh) * 2016-07-28 2016-12-21 同济大学 一种使用深度全卷积编码‑解码网络的图像降噪方法

Also Published As

Publication number Publication date
CN108335349B (zh) 2022-03-15
CN108335349A (zh) 2018-07-27

Similar Documents

Publication Publication Date Title
US11113800B2 (en) Filtering image data using a neural network
DE102018101030A1 (de) Filterung von Bilddaten unter Verwendung eines neutralen Netzwerks
DE102018127647A1 (de) Systeme und verfahren zum trainieren neuronaler netzwerke auf regression ohne referenzdaten-trainingsmuster
DE102018113845A1 (de) Systeme und Verfahren zum Trainieren von neuronalen Netzwerken mit dünnbesetzten Daten
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102018121282A1 (de) Differenzierbare rendering-pipeline für inverse graphik
DE102019103059A1 (de) Hieb- und stichfester Strahl-Dreieck-Schnittpunkt
DE102018114929B4 (de) System und verfahren für ein rendering eines lichtfeldes
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102013222685B4 (de) System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102013224046A1 (de) System, Verfahren und Computer-Programm-Produkt zum Debuggen von Grafik-Programmen lokal unter Benutzung eines Systems mit einer einzelnen GPU
US9305324B2 (en) System, method, and computer program product for tiled deferred shading
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE102016103854A1 (de) Graphikverarbeitung mit direktionalen Darstellungen der Beleuchtung an Sondenpositionen innerhalb einer Szene
DE102017109472A1 (de) Stereo-mehrfach-projektion implementiert unter verwendung einer graphikverarbeitungs-pipeline
DE102018116552A1 (de) Sakkadische umleitung zur fortbewegung von virtueller realität
DE102018128699A1 (de) Einstellen einer Winkelabtastrate während eines Renderings unter Verwendung von Blickinformationen
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102021127982A1 (de) Streaming eines lichtfeldes mit verlustfreier oder verlustbehafteter kompression
DE102020108526A1 (de) Adaptive pixelabtastreihenfolge für zeitlich dichtes rendern
DE102019121200A1 (de) Bewegungsadaptives rendern mittels shading mit variabler rate

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication