DE102021110598A1 - Schätzen von produktintegralen unter verwendung einer zusammensetzung von verzerrungen - Google Patents

Schätzen von produktintegralen unter verwendung einer zusammensetzung von verzerrungen Download PDF

Info

Publication number
DE102021110598A1
DE102021110598A1 DE102021110598.6A DE102021110598A DE102021110598A1 DE 102021110598 A1 DE102021110598 A1 DE 102021110598A1 DE 102021110598 A DE102021110598 A DE 102021110598A DE 102021110598 A1 DE102021110598 A1 DE 102021110598A1
Authority
DE
Germany
Prior art keywords
function
warping function
warping
product
implemented method
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
DE102021110598.6A
Other languages
English (en)
Inventor
David Augustus Hart
Matthew Milton Pharr
Thomas Müller
Ward Lopes
Morgan McGuire
Peter Schuyler Shirley
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102021110598A1 publication Critical patent/DE102021110598A1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/17Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/18Image warping, e.g. rearranging pixels individually
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/50Depth or shape recovery

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Operations Research (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Processing (AREA)

Abstract

Das Sampling einer Funktion wird für viele Anwendungen verwendet, wie etwa zum Rendern von Bildern. Die Herausforderung besteht darin, die besten Stichproben auszuwählen, um die Berechnungen zu minimieren und genaue Ergebnisse zu erzielen. Eine Alternative besteht darin, eine größere Anzahl von Stichproben zu verwenden, die möglicherweise nicht sorgfältig ausgewählt werden, um die Genauigkeit zu erhöhen. Für eine Funktion, die ein Integral ist, wie etwa Funktionen, die zum Rendern von Bildern verwendet werden, kann eine Stichprobenverteilung durch Invertieren des Integrals berechnet werden. Leider ist es für viele Integrale weder einfach noch praktisch, das invertierte Integral zu berechnen. Stattdessen können Warp-Funktionen kombiniert werden, um eine Probenverteilung bereitzustellen, die die Faktoren des zu integrierenden Produkts genau approximiert. Jede Warp-Funktion approximiert einen invertierten Term des Produkts, während die Auswirkungen von Warp-Funktionen berücksichtigt werden, die sich anderen Faktoren im Produkt annähern. Die ausgewählten Warping-Funktionen werden individualisiert oder „angepasst“, um das Importance Sampling für das approximierte Produkt umzusetzen.

Description

  • GEBIET DER TECHNIK
  • Die vorliegende Offenbarung betrifft das Schätzen von Produktintegralen und insbesondere das Schätzen von Produktintegralen unter Verwendung einer Zusammensetzung von Verzerrungen.
  • ALLGEMEINER STAND DER TECHNIK
  • Das Sampling einer Funktion wird für viele Anwendungen verwendet, wie etwa zum Rendern von Bildern. Die Herausforderung besteht darin, die besten Stichproben auszuwählen, um die Anzahl der verarbeiteten Stichproben zu minimieren und genaue Ergebnisse zu erzielen. Eine Alternative besteht darin, eine größere Anzahl von Stichproben zu verwenden, die möglicherweise nicht sorgfältig ausgewählt werden, um die Genauigkeit zu erhöhen. Für eine Funktion, die ein Integral ist, kann eine Stichprobenverteilung durch Umkehren des Integrals berechnet werden. Der herkömmliche Ansatz zum Umkehren des Integrals kann als „das Umkehrungsverfahren“ bezeichnet werden. Leider ist es für viele Integrale weder einfach noch praktisch, das umgekehrte Integral unter Verwendung des Umkehrungsverfahrens zu berechnen. Es besteht ein Bedarf, diese Probleme und/oder andere Probleme, die mit dem Stand der Technik zusammenhängen, anzugehen.
  • KURZDARSTELLUNG
  • Ein Verfahren, ein computerlesbares Medium und ein System sind offenbart, um ein Integralprodukt unter Verwendung einer Zusammensetzung von Verzerrungen einem Sampling zu unterziehen. Die Samplingtechnik kann verwendet werden, um ein Integralprodukt zum Rendern von Bildern einem Sampling zu unterziehen. Für eine Funktion, die ein Integralprodukt ist, wie etwa die Rendering-Gleichung, kann eine Stichprobenverteilung berechnet werden, indem Warping-Funktionen kombiniert werden, um eine Stichprobenverteilung bereitzustellen, die die Faktoren des zu integrierenden Produkts genau approximiert. Jede Warping-Funktion approximiert eine Umkehrungsfunktion. Die ausgewählten Warping-Funktionen werden individualisiert oder „angepasst“, um das Importance Sampling für das approximierte Produkt umzusetzen.
  • Eine erste Warping-Funktion, die einen ersten Faktor eines Produktintegrals approximiert, und eine zweite Warping-Funktion, die einen zweiten Faktor des Produktintegrals approximiert, werden ausgewählt. Parameter der zweiten Warping-Funktion werden an die zweite Warping-Funktion angepasst, um eine angepasste erste Warping-Funktion zu erzeugen. Die angepasste erste Warping-Funktion und die zweite Warping-Funktion werden kombiniert, um eine Stichprobenverteilung zu erzeugen, und die Stichprobenverteilung wird auf ein Produkt des ersten Faktors und des zweiten Faktors angewendet, um das Produktintegral zu approximieren.
  • Figurenliste
    • 1A veranschaulicht eine gleichmäßige Funktion mit zufälligem Sampling.
    • 1B veranschaulicht eine nicht gleichmäßige Funktion mit zufälligem Sampling.
    • 1C veranschaulicht das Importance Sampling einer Produktfunktion.
    • 1D veranschaulicht das Importance Sampling für Produktfaktoren und die resultierende Stichprobenverteilung für die Produktfunktion.
    • 1E veranschaulicht ein Bild, einschließlich eines Bereichs, an dem unter Verwendung von abgebildeten gleichmäßigen Stichproben Raytracing durchgeführt wird.
    • 1F veranschaulicht ein Bild, einschließlich eines Bereichs, an dem unter Verwendung von abgebildeten verzerrten gleichmäßigen Stichproben Raytracing durchgeführt wird, gemäß einer Ausführungsform.
    • 2A veranschaulicht eine Verzerrungszusammensetzung, um eine optimale Produktverzerrung gemäß einer Ausführungsform zu erzeugen.
    • 2B veranschaulicht das Anpassen zusammengesetzter Verzerrungen gemäß einer Ausführungsform.
    • 2C veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Schätzen eines Produktintegrals unter Verwendung einer Zusammensetzung von Verzerrungen gemäß einer Ausführungsform.
    • 3 veranschaulicht eine parallele Verarbeitungseinheit, gemäß an Ausführungsform.
    • 4A veranschaulicht einen allgemeinen Verarbeitungscluster innerhalb der parallelen Verarbeitungseinheit aus 3, gemäß einer Ausführungsform.
    • 4B veranschaulicht eine Speicherpartitionseinheit der parallelen Verarbeitungseinheit aus 3, gemäß einer Ausführungsform.
    • 5A veranschaulicht den Streaming-Multiprozessor aus 4A gemäß einer Ausführungsform.
    • 5B ist ein konzeptionelles Diagramm eines Verarbeitungssystems, das unter Verwendung der PPU aus 3 gemäß einer Ausführungsform umgesetzt ist.
    • 5C veranschaulicht ein beispielhaftes System, in dem die verschiedenen Architekturen und/oder die Funktionalität der verschiedenen vorherigen Ausführungsformen umgesetzt sein können.
    • 6 ist ein konzeptionelles Diagramm einer Grafikverarbeitungspipeline, die unter Verwendung der PPU aus 3 gemäß einer Ausführungsform umgesetzt ist.
  • DETAILLIERTE BESCHREIBUNG
  • Wenn eine Integralfunktion schwer zu bewerten ist, wie etwa wenn eine geschlossene Lösung nicht berechnet werden kann, kann die Monte-Carlo-Integration verwendet werden, um die Funktion unter Verwendung von Zufallszahlen näherungsweise zu integrieren. Insbesondere kann das Integral einer Funktion fix) durch eine Summe von Stichprobenwerten an Stellen xi approximiert werden, die N Zufallszahlen entsprechen. [ 0,1 ) n ƒ ( x ) d x 1 N i = 1 N ƒ ( x i )
    Figure DE102021110598A1_0001
  • Die Funktion wird an jeder Stichprobenstelle xi = (u1; u2, ..., un)für n-dimensionale einheitliche Punkte ui ∈ [0,1) bewertet. Die Genauigkeit der Integralapproximation nimmt zu, wenn die Anzahl der Stichprobenwerte N innerhalb des Bereichs [0,1) zunimmt.
  • 1A veranschaulicht eine gleichmäßige Funktion mit zufälligem Sampling ƒ(xi). Eine gleichmäßige Zufallssamplingverteilung wird verwendet, um die Funktion derart einem Sampling zu unterziehen, dass jede Stichprobe die gleiche Wahrscheinlichkeit hat, ausgewählt zu werden. Jeder ausgefüllte Kreis repräsentiert eine Stelle xi, an der die Funktion einem Sampling unterzogen wird. Um die Funktion ƒ(xi) am genauesten zu integrieren, sollte eine gleichmäßige Zufallssamplingfunktion eine Verteilung von Stichproben aufweisen, die mit der Funktion ƒ(xi) übereinstimmen. Anders ausgedrückt sollten mehr Stichprobenwerte existieren, bei denen die Werte (auf der y-Achse) von ƒ(xi) am höchsten sind, wie etwa in der Nähe des zwischen x=0 und x=1 zentrierten Spitzenwerts. Wie in 1A gezeigt, stellt die gleichmäßige Zufallssamplingverteilung eine gleichmäßige Verteilung von Zufallsstichprobenstellen xi bereit. Viele Stichprobenstellen liegen jedoch außerhalb des Spitzenwerts der Funktion, sodass das Ergebnis (d. h. die Schätzung der integrierten Funktion) einen Fehler aufweist.
  • Unterschiede oder Fehler zwischen der integrierten Funktion und der unter Verwendung der Monte-Carlo-Approximation berechneten Schätzung werden als Varianz bezeichnet. Die Varianz kann unter Verwendung einer herkömmlichen Samplingtechnik von Importance Sampling verringert werden. Anstatt N einheitliche Zufallsstichproben zu nehmen, wird die Anzahl der Stichproben in den Teilen der Funktion erhöht, die am meisten zum Endergebnis beitragen. Insbesondere werden für die in 1A gezeigte Funktion ƒ(xi) mehr Stichproben in der Mitte des Bereichs [0,1) in der Nähe des Spitzenwerts benötigt als im Vergleich zu Bereichen, die näher an Null oder Eins liegen.
  • 1B veranschaulicht eine nicht gleichmäßige Funktion mit zufälligem Sampling. Eine ungleichmäßige Zufallssamplingverteilung wird zum Sampling der Funktion verwendet, sodass mehr Stichproben in den „wichtigen“ Bereichen der Funktion ausgewählt werden. Um die Funktion ƒ(xi) am genauesten zu integrieren, sollte eine Samplingfunktion eine Verteilung aufweisen, die mit der Funktion ƒ(xi) übereinstimmt, wie etwa die nicht gleichmäßige Zufallssamplingverteilung. Die nicht gleichmäßige Zufallssamplingverteilung kann eine Wahrscheinlichkeitsdichtefunktion (probability density function - PDF) p(x) sein, die zur Durchführung von Importance Sampling verwendet wird. Gleichung (1) wird modifiziert, um die nicht gleichmäßige Verteilung der N Stichproben zu berücksichtigen: ƒ ( x ) d x = E [ 1 N i = 1 N ƒ ( x i ) p ( x i ) ] x i p ( x )
    Figure DE102021110598A1_0002
  • Die Division durch die Verteilungswahrscheinlichkeit für jeden Wert berücksichtigt die erhöhte Anzahl von Stichproben in Bereichen mit hohem Sampling. Während die unter Verwendung des Importance Sampling erzeugte Schätzung eine Approximation ist, ist sie im Vergleich zur Verwendung der in 1A gezeigten gleichmäßigen Zufallssamplingverteilung genauer. Wenn zum Rendern von Bildern ein gleichmäßiges oder Importance Sampling verwendet wird, manifestiert sich die Varianz als Rauschen.
  • 1C veranschaulicht das Importance Sampling einer Funktion, die das Produkt der Funktionen A und B ist. Das Multiplizieren der Funktionen A und B erzeugt die Produktfunktion. Im Kontext der folgenden Beschreibung ist ein Produkt eine Funktion, die mehrere Funktionen, Faktoren, Ausdrücke oder Begriffe beinhaltet, die zur Berechnung des Produkts miteinander multipliziert werden. Eine Stichprobenverteilung 101 kann verwendet werden, um das Integral des Produkts unter Verwendung von Importance Sampling zu approximieren. Die Stichprobenverteilung 101 beinhaltet mehr Stichproben nahe dem Spitzenwert des Produkts, wo das Produkt die höchsten Werte aufweist, und weniger Stichproben, wo die Werte am niedrigsten sind. Die Dichte der Stichprobenverteilung 101 stimmt eng mit der Form des Produkts überein, wodurch die Varianz im Vergleich zur Verwendung einer gleichmäßigen Zufallsstichprobenverteilung reduziert wird.
  • 1D veranschaulicht das Importance Sampling für Funktionen und die resultierende Stichprobenverteilung für die Produktfunktion. Eine Stichprobenverteilung 102 ist eine Importance-Sampling-Verteilung zur Approximation eines Integrals der Funktion A. Eine Stichprobenverteilung 103 ist eine Importance-Sampling-Verteilung zur Approximation eines Integrals der Funktion B. Die Dichten der Stichprobenverteilungen 102 und 103 stimmen eng mit der Form der Funktionen A bzw. B überein, wobei sie genaue Approximationen für die Integrale von A und B bereitstellen. Die kombinierten Stichprobenverteilungen 102 und 103 erzeugen eine Stichprobenverteilung 104, die die Verteilung des geschätzten Integrals für das Produkt darstellt. Das geschätzte Integral des Produkts wird berechnet, indem die Funktionen A und B gemäß den Stichprobenverteilungen 102 bzw. 103 geschätzt und die Schätzungen multipliziert werden. Da die kombinierten Stichprobenverteilungen, nämlich die Stichprobenverteilung 104, schlecht mit der Form des Produkts übereinstimmen, weist das geschätzte Integral des Produkts im Vergleich zur Verwendung der Stichprobenverteilung 101 eine höhere Varianz auf.
  • Wie in 1D gezeigt, stellt das Monte-Carlo-Importance-Sampling nicht für alle Funktionen eine genaue Schätzung bereit. Wie hierin weiter beschrieben, kann eine Stichprobenverteilung zum Schätzen von Faktoren bestimmt werden, die, wenn sie kombiniert wird, enger mit der Stichprobenverteilung für das Produkt der Faktoren übereinstimmt. Die Technik kann zum Beispiel verwendet werden, um Stichprobenverteilungen für die Funktionen A und B zu bestimmen, die, wenn sie kombiniert werden, der Stichprobenverteilung 101 ähnlich sind, wodurch ein Importance Sampling für genauere Schätzungen ermöglicht wird.
  • Insbesondere kann eine verbesserte Monte-Carlo-Importance-Sampling-Technik für Integranden, die aus Produkten bestehen, auf Computergrafik-Rendering angewendet werden, bei dem ein direktes Sampling in der Praxis häufig schwierig ist. Für das Raytracing werden Pfade von einer Lichtquelle zu einer Kamera (z. B. einem Blickwinkel) verfolgt. Wenn ein im Pfad beinhalteter Strahl eine Oberfläche in einer Szene schneidet oder darauf trifft, wird der Strahl in eine Richtung von der Oberfläche nach außen umgeleitet oder reflektiert. Wichtiges Sampling kann verwendet werden, um die Richtung des Strahls durch Sampling einer Halbkugel zu wählen, die um die Oberflächennormale ausgerichtet ist, die sich am Schnittpunkt befindet. Eine bidirektionale Streuverteilungsfunktion (bidirectional scattering distribution function - BSDF) kann definieren, wie das Licht von der Oberfläche gestreut wird. Die BSDF ist als ein Faktor eines integrierten Produkts in der Rendering-Gleichung beinhaltet. Die verbesserte Monte-Carlo-Importance-Sampling-Technik kann verwendet werden, um die BSDF und einen oder mehrere andere Faktoren in der Rendering-Gleichung zu schätzen, um die Qualität von Bildern aus Raytracing zu verbessern.
  • Es werden nun anschaulichere Informationen zu verschiedenen optionalen Architekturen und Merkmalen gegeben, mit denen Produktstichproben unter Verwendung einer Zusammensetzung von Verzerrungen gemäß den Wünschen des Benutzers umgesetzt werden können. Es sollte unbedingt beachtet werden, dass die folgenden Informationen zur Veranschaulichung dienen und in keiner Weise als einschränkend ausgelegt werden sollten. Jedes der folgenden Merkmale kann wahlweise mit oder ohne Ausschluss anderer beschriebener Merkmale integriert werden.
  • 1E veranschaulicht ein Bild 115, einschließlich eines Bereichs 110, an dem unter Verwendung von abgebildeten gleichmäßig verteilten Stichproben Raytracing durchgeführt wird. Jedes Pixel kann unter Verwendung eines Satzes gleichmäßiger (z. B. gleichmäßig verteilter) Stichproben 112 in einem Primärstichprobenraum (primary sample space - PSS) erzeugt werden. Wie in 1E gezeigt, ist der PSS für ein Pixel das zweidimensionale Einheitsquadrat [0,1)2, das den Satz gleichmäßiger Stichproben 112 beinhaltet. Es ist zu beachten, dass die Stichproben nicht zufällig innerhalb des PSS verteilt sind, sondern dass die Stichproben innerhalb des PSS gemäß einer gleichmäßigen Wahrscheinlichkeitsdichtefunktion gleichmäßig verteilt sind. Gleichermaßen sind nicht gleichmäßige Stichproben Stichproben, die gemäß einer nicht gleichmäßigen PDF verteilt werden.
  • Der Satz von uneinheitlichen Stichproben 112 wird von dem PSS in einer n-dimensionalen Mannigfaltigkeit
    Figure DE102021110598A1_0003
    (z. B. die Oberfläche einer Form oder einer BSDF) unter Verwendung einer Abbildung [0,1)n
    Figure DE102021110598A1_0003
    abgebildet, wobei
    Figure DE102021110598A1_0003
    als Funktionsraum bezeichnet wird. Die Abbildung erzeugt Stichproben, die in den Funktionsraum 114 abgebildet sind. Der Bildbereich 110 wird unter Verwendung der einheitlichen Stichproben gerendert, die in den Funktionsraum 114 abgebildet sind. Andere Bereiche des Bildes 115 werden unter Verwendung derselben oder anderer einheitlicher Stichproben gerendert, die auf ähnliche Weise in den Funktionsraum abgebildet werden.
  • Bei einer gegebenen PDF p(x) kann eine Abbildung des PSS auf den Funktionsraum durch umgekehrtes Transformationssampling gefunden werden, wobei p als das Produkt von eindimensionalen PDFs geschrieben wird und die kumulativen Verteilungsfunktionen (cumulative distribution functions - CDFs) jeder eindimensionalen PDF abgeleitet und anschließend umgekehrt sind. Dieser Ansatz ermöglicht die Verwendung von geschichteten PSS-Punkten mit geringer Diskrepanz, wodurch Fehler im Allgemeinen reduziert werden. Für viele Größen, die für das Rendern von Interesse sind, ist es jedoch nicht möglich, die geschlossene Form einer oder mehrerer der PDF, der eindimensionalen CDFs oder der Umkehrung der eindimensionalen CDFs zu berechnen. Funktionen, für die eine geschlossene Form nicht berechnet werden kann, können unter Verwendung von Importance Sampling approximiert werden, wie etwa der Monte-Carlo-Importance-Sampling-Technik unter Verwendung einer Zusammensetzung von Verzerrungen, wie hierin weiter beschrieben.
  • Die offenbarte Technik wird im Kontext einer Rendering-Anwendung und insbesondere im Kontext eines Raytracing-Algorithmus erläutert, der ein direktes Beleuchtungsintegral berechnet. Es versteht sich, dass die Technik nicht auf diese spezifische Anwendung beschränkt ist und umgesetzt werden kann, um andere Integrale von Produktfunktionen zu schätzen. Das zum Rendern von Bildern verwendete direkte Beleuchtungsintegral ist ein Produkt von drei Faktorfunktionen, die über eine Halbkugel integriert sind, die die Strahlrichtung relativ zu einem Ort auf einer Oberfläche darstellt. Das direkte Beleuchtungsintegral berechnet eine Farbe an einem Punkt, wie definiert durch: S 2 ƒ r ( ω i ω o ) L i ( ω i ) | cos θ i | d ω i
    Figure DE102021110598A1_0004
  • Ein erster Faktor berücksichtigt das Material (BSDF) an dem Punkt, ein zweiter Faktor ist die Lichtmenge, die den Punkt aus der Richtung ωi beleuchtet, und ein dritter Faktor ist der Kosinus-Term, der die anderen Faktoren durch den Kosinus der Lichteinfallsrichtung und der Oberflächennormale abschwächt. Wenn das Monte-Carlo-Importance-Sampling zur Berechnung des direkten Beleuchtungsintegrals verwendet wird, erscheint die Varianz als Rauschen in den Bildern aus Raytracing. Die Anzahl der Stichproben N , die für jeden Punkt erhoben sind, kann erhöht werden, um das Rauschen zu verringern.
  • Oft können wichtige Terme in der zu integrierenden Funktion praktisch nicht in die Samplingverteilungen einbezogen werden. Zum Beispiel gibt es keine bekannte Analysetechnik zum gleichmäßigen Sampling von kosinusgewichteten Dreiecksprimitiven einer sphärischen Oberfläche. Der Kosinus-Term kann über die Oberfläche eines Dreiecks erheblich variieren. Die Variation des Cosinus-Terms führt wiederum zu einer erhöhten Varianz bei Monte-Carlo-Schätzungen von Integralen, die den Cosinus-Term beinhalten, da dies in der Importance-Sampling-Verteilung nicht berücksichtigt wird. Die fehlenden Faktoren g (x) im PSS werden ausgedrückt als: g P S S ( u ) : = g ( x ) p ( x ) = g ( P 1 ( u ) ) p ( P 1 ( u ) ) .
    Figure DE102021110598A1_0005
  • Die fehlenden Faktoren können bis zu einem gewissen Grad einbezogen werden, indem die Importance-Sampling-Verteilung auf Grundlage von gPSS geändert wird. Wie hierin ferner beschrieben kann eine Warping-Funktion im PSS angewendet werden, um die Importance-Sampling-Verteilung zu modifizieren und die Varianz zu verringern.
  • 1F veranschaulicht ein Bild 120, einschließlich eines Bereichs 125, an dem unter Verwendung von abgebildeten verzerrten gleichmäßigen Stichproben Raytracing durchgeführt wird, gemäß einer Ausführungsform. Die Menge an Rauschen in dem Bild 120 ist im Vergleich zu dem Rauschen in dem in 1E gezeigten Bild 115 verringert. Somit ist die Varianz für die Monte-Carlo-Schätzung ebenfalls für das Bild 120 im Vergleich zum Bild 115 verringert. Anstatt den Satz von Stichproben 112 in dem PSS direkt in den Funktionsraum abzubilden, wird der Satz von Stichproben 112 innerhalb des PSS vor der Abbildungsoperation verzerrt.
  • Eine umgekehrte CDF, Q(x) = P-1(x), bei der es sich um eine eindimensionale Verzerrung handelt, wird in der Statistik als Quantilfunktion bezeichnet. „Verzerrung“ beschreibt den Prozess des ungleichmäßigen Verschiebens gleichmäßiger Zufallsstichproben, um eine gewünschte Wahrscheinlichkeitsverteilung zu erreichen. Eine Verzerrung verteilt Punkte entsprechend ihrer zugehörigen Wahrscheinlichkeitsdichte, verklumpt oder streckt gleichmäßig verteilte Punkte, ohne die relative Reihenfolge der Punkte zu ändern. Die relevante Terminologie ist in der folgenden Tabelle 1 zusammengefasst. Tabelle 1
    Symbol Definition
    u Uniform n-dimensional PSS point in [0, 1)n.
    Figure DE102021110598A1_0003
    General n-dimensional domain.
    x Point in
    Figure DE102021110598A1_0003
    .
    p(x) Probability density function (PDF).
    P(x) Probability measure. In 1D, the cumulative distribution function (CDF).
    w(x) Warp: a bijection from ℝn to itself used to warp samples x.
    Jw Reciprocal of the absolute determinant of the Jacobian matrix, | det ( w i ( x ) / x T ) | 1 ,
    Figure DE102021110598A1_0006
    , of a warp w.
  • Eine Warping-Funktion w(u) ist in den PSS eingepasst, um eine umgekehrte Jacobische Determinante Jw(u) aufzuweisen, die die Verteilung von gPSS(u) approximiert. Die Warping-Funktion wird auf den Satz von gleichmäßigen Stichproben 112 angewendet, um einen Satz von verzerrten Stichproben 126 mit einer nicht gleichmäßigen Verteilung in dem PSS zu erzeugen. Das Verzerren des Satzes gleichmäßiger Stichproben 112 vor der Transformation durch P-1 erzeugt eine resultierende Stichprobenverteilung, die die gewünschte Stichprobenverteilung approximiert, die die fehlenden Faktoren beinhaltet und die Varianz reduziert. Die Verteilung der verzerrten Stichproben, die in den Funktionsraum 128 abgebildet sind, verringert die Varianz im Vergleich zu den Stichproben, die in den in 1E gezeigten Funktionsraum 114 abgebildet sind.
  • Wenn die Verzerrung genau ist, was Jw(u) ∝ gPSS(u) bedeutet, dann ist die resultierende Verteilung genau gleich der gewünschten Verteilung zur Approximation eines Faktors des Produkts, wie etwa eines der Faktoren in Gleichung (3). Während exakte Verzerrungen im Allgemeinen nicht möglich sind, können sich ungefähre Verzerrungen der gewünschten Verteilung nähern, Fehler erheblich reduzieren und nur begrenzte Rechenkosten hinzufügen. Einige vorhandene Verzerrungen, die verwendet werden können, um einen oder mehrere Faktoren anzupassen und die Varianz eines Produktintegralsamplings zu verringern, beinhalten bilineare, biquadratische Bezier- und trennbare Cauchy-Fensterfunktionen. Diese Warping-Funktionen sind effizient, einfach umzusetzen und lassen sich problemlos in vorhandene Rendering-Systeme integrieren. Varianzreduzierungen von bis zu 6X können mit Warping-Funktionen für eine Reihe von Rendering-Problemen bei minimaler Erhöhung der Laufzeit erreicht werden.
  • Zusätzlich können mehrere Faktoren im Produktintegral berücksichtigt werden, indem Verzerrungen wi(...w2(w1(u))) zusammengesetzt werden. Wenn zum Beispiel das umgekehrte Transformationssampling eine Verzerrung Q(x) = W(Z(x)) erzeugt, können die beiden Verzerrungen W und Z als eine Zusammensetzung in Reihe geschaltet werden, sodass W(Z(x)) ≡ (W ◦ Z)(x). Da die Verzerrung für das Importance Sampling verwendet wird, wird immer ein unvoreingenommener Monte-Carlo-Schätzer beibehalten.
  • Auswertung der PDF aus zusammengesetzten Verzerrungen
  • Im Zusammenhang mit der folgenden Beschreibung wird eine Verzerrung als kontinuierliche, bijektive Abbildung definiert - auf die Wahrscheinlichkeitsdichte von n-dimensionalen Punkten x ∈ ℝn, die gemäß der Wahrscheinlichkeitsdichte p(x) verteilt sind. Anders ausgedrückt wird die Wahrscheinlichkeitsdichte p(x) in Bezug auf eine Verzerrung ausgedrückt, wobei x'= w(x). Eine zusammengesetzte Verzerrung ist definiert als w=wm ◦ ... ◦ w1. Nach der Kettenregel ist die Jacobische Matrix der Zusammensetzung von m Verzerrungen das Produkt der Jacobischen Matrizen der einzelnen Verzerrungen. Weil einheitliche Proben in dem PSS verwendet werden (d. h. p(x)=1), ist der absolute Wert der Jacobischen Determinante selbst die PDF der verzerrten Stichproben: p w ( x m ) = i = 1 m J w i ( x i ) = J w ( x ) .
    Figure DE102021110598A1_0007
  • Bestehende Samplingtechniken, die auf dem Umkehrungsverfahren beruhen, können mithilfe der PSS-Verzerrungen erweitert werden. Daher wird eine vorhandene Samplingtechnik (z. B. BSDF-Sampling oder gleichmäßiges Emittersampling) verwendet, um die erweiterte Technik unter der Annahme von x ' = P s 1 ( x )
    Figure DE102021110598A1_0008
    mit zusammenhängender PDF ps(x) zu veranschaulichen. Die letzte Verzerrung der zusammengesetzten Verzerrung wird für die vorhandene Samplingtechnik eingestellt, d. h. w m = P s 1
    Figure DE102021110598A1_0009
    und Jw m = ps. Alle früheren Verzerrungen sind die PSS-Verzerrungen, die auf [0,1)n arbeiten. Wie nachstehend beschrieben, sind die Verzerrungen so angepasst, dass die gesamte PDF pw(xm) das Rendering-Integranden approximiert.
  • Bei einer Reihe von Verzerrungen wi ist der Algorithmus zum Erzeugen verzerrter Stichproben und zum Berechnen ihrer PDF in Algorithmus 1 in Tabelle 2 nachstehend angegeben. Es ist zu beachten, dass die endgültige PDF während des Samplings leicht unter Verwendung der aufeinanderfolgenden verzerrten Werte von xi und des Produkts von Jw i . Werten berechnet werden kann.
    Figure DE102021110598A1_0010
  • Um die PDF für einen beliebigen Wert x ∈
    Figure DE102021110598A1_0003
    zu berechnen (z. B. für das Multiple Importance Sampling), werden die umgekehrten Verzerrungen w i 1
    Figure DE102021110598A1_0011
    in umgekehrter Reihenfolge auf x angewendet, wobei ihre Werte der Jacobischen Determinanten währenddessen miteinander multipliziert werden. Dieser Ansatz ist in Algorithmus 2 in der folgenden Tabelle 3 gezeigt.
    Figure DE102021110598A1_0012
    Es ist zu beachten, dass es zum Anwenden von Algorithmus 2 erforderlich ist, wm invertieren zu können. Bei Sampling-Techniken, die auf dem Umkehrungsverfahren beruhen, ist die Umkehrung von wm in jeder Dimension die eindimensionale CDF, die dieser Dimension entspricht, die zusammen mit dem Sampling-Algorithmus abgeleitet wird. Die Umkehrungen von Sampling-Algorithmen, die auf einem gleichmäßigen Oberflächensampling von Formen beruhen, sind unkompliziert, aber die Umkehrung einiger Sampling-Algorithmen des Standes der Technik ist nicht bekannt.
  • Der Monte-Carlo-Schätzer des Integrals einer Funktion f unter Verwendung von verzerrten Stichproben ƒ(xm)/pw(xm) erreicht eine minimale Varianz (das Ziel), wenn die PDF der verzerrten Stichproben proportional zu ƒ ist: p w ( x m ) = i = 1 m J w i ( x i ) ƒ ( x m )
    Figure DE102021110598A1_0013
  • Unter Prüfung des Falls, dass eine oder mehrere vorhandene Verzerrungen vorhanden sind (z. B. w i = P s 1
    Figure DE102021110598A1_0014
    und möglicherweise eine oder mehrere PSS-Verzerrungen) sollte eine zusätzliche Verzerrung wi zusammengesetzt werden, die proportional zu ƒ ist. Einfache Algebra, die auf Gleichung (6) durchgeführt wird, ergibt die Optimalitätsbedingung für wi: .3 J w i ( x i ) ƒ ( x m ) j i J w j ( x j ) .
    Figure DE102021110598A1_0015
  • Somit kann eine zusätzliche i-te Verzerrung - die an jeder Position i in die Kette von Verzerrungen eingefügt werden kann - theoretisch jede verbleibende Diskrepanz bezüglich ƒ perfekt korrigieren, indem sie die korrekte umgekehrte Jacobische Determinante aufweist.
  • Benutzerdefinierte Warping-Funktionen können kombiniert werden, um eine Stichprobenverteilung bereitzustellen, die die Faktoren des zu integrierenden Produkts genau approximiert. Jede Warping-Funktion approximiert eine Umkehrungsfunktion. In einer Ausführungsform werden die Warping-Funktionen aus einem Satz definierter Warping-Funktionen ausgewählt. Die ausgewählten Warping-Funktionen werden dann individualisiert oder „angepasst“, um das Importance Sampling für das approximierte Produkt umzusetzen. Im Prinzip kann unter Verwendung der Verzerrungszusammensetzung eine optimale Produktverzerrung erzeugt werden, indem eine Korrekturverzerrung w2 gefunden wird, deren PDF proportional zum Verhältnis der Zielproduktverteilung und des Produkts der Wahrscheinlichkeiten (umgekehrte Jacobische Determinanten) der eingegebenen PDFs ist.
  • 2A veranschaulicht eine Verzerrungszusammensetzung, um eine optimale Produktverzerrung gemäß einer Ausführungsform zu erzeugen. Ein eindimensionales Beispiel wird verwendet, um den Prozess der Anpassung zusammengesetzter Verzerrungen zu veranschaulichen. Angenommen, auf einem Produkt ƒ(x)=p1(x) p2(x) wird Sampling durchgeführt, aber p1(x) p2(x) kann nicht analytisch invertiert werden, um P-1 zu finden. Um P-1 zu approximieren, werden Verzerrungen der einzelnen Terme w1 215 und w2 216 zusammengesetzt, und eine neue Verteilung, die p(x) approximiert, wird einem Sampling aus der Zusammensetzung von w1 215 und w2 216 unterzogen.
  • Erste und zweite Wahrscheinlichkeitsverteilungsfunktionen PDFs 205 und 206 (p1 und p2) werden multipliziert, um die PDF 210 zu erzeugen. Die PDF 205 wird umgekehrt transformiert, um eine erste Verzerrung (w1) 215 zu erzeugen. Die erste Verzerrung 215 ist die Umkehrung des Integrals für die PDF 205 und die PDF 205 ist die Umkehrung der Ableitung der ersten Verzerrung 215. Die PDF 206 ist die umgekehrte Ableitung der Korrekturverzerrung 216 (w2). Die Herausforderung besteht darin, die Korrekturverzerrung 216 durch Anpassen zu berechnen. Eine optimale Produktverzerrung 217 ist eine Zusammensetzung der ersten Verzerrung 215 und der Korrekturverzerrung 216. Bei umgekehrter Transformation entspricht die optimale Produktverzerrung 217 der PDF 218, die im Idealfall ungefähr der Ziel-PDF 210 entspricht.
  • Warping-Funktionen anpassen
  • Die Anpassung erfolgt in zwei Phasen; die erste Phase wird zum Zweck des Aufbaus einer einzelnen Verzerrung angepasst. Das Sampling der Funktion und das Konstruieren einer bilinearen oder biquadratischen Approximation aus diesen Stichproben ist ein Beispiel für die Anpassung der ersten Phase. Die zweite Phase des Anpassens bedeutet Einstellen der Anpassungsparameter aus der ersten Phase, um die anderen Verzerrungen zu berücksichtigen, falls und wenn mehrere Verzerrungen zusammengesetzt werden.
  • Während des Renderns können an jedem Punkt, der schattiert wird, benutzerdefinierte Warping-Funktionen von Grund auf neu angepasst werden. Dadurch entfällt die Notwendigkeit, zusätzliche Datenstrukturen aufrechtzuerhalten, und die Komplexität und der Rechenaufwand des Online-Lernens während des Renderns werden vermieden; es eignet sich besonders gut für hochparallele Architekturen wie GPUs. Die Warping-Funktionen sollten wiederum effizient angepasst und bewertet werden können. Die für das Anpassen und Auswerten von Verzerrungen aufgewendete Zeit könnte stattdessen dazu verwendet werden, mehr Stichproben ohne Warping zu entnehmen, weshalb das Warping insgesamt effizienter sein muss, um sich zu lohnen.
  • Um die Anpassung so einfach wie möglich zu gestalten, wird die optimale invertierte Jacobische Determinante direkt auf einen konstanten Faktor (rechte Seite von Gleichung 7) approximiert, anstatt zu versuchen, in einem einzigen Schritt eine gute Verzerrung abzuleiten. Zur Durchführung der Anpassung können einfache parametrische Funktionen verwendet werden, die Integrale in geschlossener Form zulassen. Die einfachen parametrischen Funktionen können normalisiert und eine gültige approximierte umgekehrte Jacobische Determinante kann erlangt werden, sowie das Inversionsverfahren angewendet werden, um eine entsprechende Verzerrung zu finden.
  • Verzerrungen können mit mehreren einfachen Parameterfunktionen a(x) angepasst werden. Die einfachste parametrische Funktion, eine bilineare Funktion, wird durch 2×2 Werte v{0,1}×{0,1} an den Ecken der parametrischen Domäne definiert. Die biquadratische Bezier ist ausdrucksvoller; sie verwendet 3×3 Kontrollpunkte, erfordert jedoch das Lösen von zwei kubischen Gleichungen, um die Verzerrung anzuwenden. Die Cauchy-Fensterfunktion ermöglicht das Platzieren eines Spitzenwerts an einem bestimmten Punkt in ℝ2, nicht unbedingt innerhalb von [0, 1)2.
  • Nachdem eine der Approximationsfunktionen a(x) an den RHS von Gleichung 7 angepasst wurde, wird die angepasste Funktion über [0, 1)2 normalisiert, um die entsprechende umgekehrte Jacobische Determinante Jw zu erlangen. In einer Dimension kann bei Jw die Verzerrung mithilfe des Umkehrungsverfahrens gefunden werden: Integrieren von Jw und dann Invertieren des Ergebnisses. Für eine mehrdimensionale Verzerrung kann eine unendliche Anzahl von Verzerrungen Jw aufweisen. In diesem Fall wird nur eine einzige gültige Verzerrung benötigt, die abgeleitet werden kann, indem alle Dimensionen außer einer marginalisiert werden und das Umkehrungsverfahren angewendet wird, um eine eindimensionale Verzerrung in der Dimension zu finden. Nach dem Anwenden der neu gefundenen Verzerrung entlang der ausgewählten Dimension kann die Verzerrung über den verbleibenden Dimensionen durch denselben Ansatz rekursiv gefunden werden, wobei alle zuvor verzerrten Dimensionen ignoriert werden, bis alle Dimensionen verzerrt wurden.
  • Der Versuch, die gesamte rechte Seite von Gleichung 7 mit einer einzigen Verzerrung genau zu approximieren, ist oft erfolglos. Tatsächlich kann dies kontraproduktiv sein, da glatte parametrische Funktionen an eine hochfrequente Variation von Gleichung 7 angepasst werden können, die möglicherweise nur in einigen der Faktoren vorhanden ist. Zum Beispiel kann beim Lichttransport der Sichtbarkeitsterm von fhochfrequent und diskontinuierlich sein, während der Verkürzungsterm ein glatter niederfrequenter Kosinus ist.
  • Glücklicherweise vermeidet eine einfache Problemumgehung eine problematische Überanpassung weitgehend. Eine Anzahl von gut verhaltenen Faktoren von ƒ kann ausgewählt werden - wie etwa die BSDF und der Verkürzungsterm (aber nicht der Sichtbarkeitsterm) - und jedem der Faktoren wird eine Verzerrung angepasst. Wenn bei dieser Technik die vernachlässigten Faktoren ignoriert werden und alle Verzerrungen perfekt zu ihren entsprechenden Faktoren passen, wird eine Proportionalität zur Zielverteilung (RHS aus Gleichung 7) erreicht, und somit ergibt sich eine Varianz von Null. Wenn einige Verzerrungen nicht optimal angepasst sind, behindern ihre Restfehler, die möglicherweise hohe Frequenzen enthalten, nicht die Fähigkeit, Funktionen an die anderen Verzerrungen anzupassen. Im Folgenden repräsentiert f entweder die rechte Seite von Gleichung 7 oder eine Approximation an die rechte Seite von Gleichung 7, die einzelne Faktoren vernachlässigt.
  • Es ist möglich, die umgekehrte Jacobischen Determinanten ausgehend von dem PSS von wi oder ausgehend von der Integrationsdomäne anzupassen. Beide Möglichkeiten können je nach der Verzerrung, die angepasst wird, effektiv sein. Die bilinearen und biquadratischen Verzerrungen können ausgehend von der PSS der wi punktuell angepasst werden: für die Verzerrungsparameter v Nehmen von xi = v, Berechnen des entsprechenden xm und Bewerten von ƒ. ƒ ^ ( x m ) = ƒ ^ ( ( w m w i + 1 ) ( x i ) )
    Figure DE102021110598A1_0016
  • Es ist zu beachten, dass die parametrischen Warping-Funktionen a(x) die Ecken von [0,1)2 an Ort und Stelle lassen: somit kann die bilineare Approximationsfunktion an den Ecken angepasst werden, während alle nachfolgenden Verzerrungen außer wm ignoriert werden.
  • Für die Cauchy-Verzerrung kann es effektiver sein, von xm rückwärts zu arbeiten. Wenn zum Beispiel bekannt ist, dass der Spitzenwert von f̂ bei xm, liegt und der entsprechende Punkt xi = ( w i + 1 1 w m 1 ) ( x m )
    Figure DE102021110598A1_0017
    für die Platzierung des Spitzenwerts der Cauchy-Verzerrung µ gefunden werden kann.
  • In Anbetracht des Spitzenwerts der Cauchy-Verteilung können die σi Parameter unter Berücksichtigung jeder Dimension unabhängig angepasst werden. In einer einzelnen Dimension ist, damit die Cauchy-Verteilung proportional zu einem Spitzenwert a ist und proportional zu einem Wert b um eine Entfernung d von dem Spitzenwert ist, σ Folgendes: σ = d b a b .
    Figure DE102021110598A1_0018
  • Daher wird / an einem oder mehreren zusätzlichen PSS-Punkten ausgewertet, die in jeder Dimension von µ versetzt sind, und Gleichung (9) wird angewendet, wobei das Maximum σ verwendet wird, wenn mehrere Punkte verwendet werden.
  • 2B veranschaulicht das Anpassen zusammengesetzter Verzerrungen gemäß einer Ausführungsform. Wie vorstehend in Verbindung mit 2A erläutert, wird auf einem Produkt ƒ(x)=p1(x) p2(x) Sampling durchgeführt, aber p1(x) p2(x) kann nicht analytisch invertiert werden, um P-1 zu finden. Um P-1 zu approximieren, werden Verzerrungen der einzelnen Terme w1 und w2 zusammengesetzt, und eine neue Verteilung, die p(x) approximiert, wird einem Sampling aus der Zusammensetzung von w1 und w2 unterzogen.
  • Wie in 2B gezeigt, wird der Spitzenwert des Terms p1(x) 205 nach links vorgespannt (verschoben), wenn der zweite Term angewendet wird. Daher wird für die Zusammensetzung von Verzerrungen zuerst die Verzerrung w2 für den zweiten Faktor p2(x) angewendet, sodass die Stichprobenverteilung links dichter ist als rechts und wenn die Verzerrung w1 für den ersten Faktor p1(x) 205 angewendet wird, wird die Stichprobenverteilung nach links vorgespannt und stimmt nicht mit der Produkt-PDF 210 überein. In diesem Fall wird ein Ersatz für p1(x) 205 verwendet, der als p1fit(x) 224 bezeichnet wird und einen Spitzenwert 225 aufweist, um sicherzustellen, dass der Spitzenwert des Terms p1(x) 205an der richtigen Stelle endet. Eine Verzerrung w1fit für p1fit(x) 224 ersetzt die Verzerrung w1 in der Zusammensetzung der Verzerrungen. Um die Vorspannung zu korrigieren und p1fit(x) 224 zu berechnen, wird eine umgekehrte Verzerrung für den zweiten Faktor, die inverse Verzerrung w 2 1
    Figure DE102021110598A1_0019
    220, auf den Spitzenwert im ersten Faktor 205 angewendet. Anders ausgedrückt sollte die Samplingfunktion für den ersten Term die Verteilung des zweiten Terms berücksichtigen. Daher erzeugt die zusammengesetzte Verzerrung, w1fit ◦ w2, ein genaueres Ergebnis im Vergleich zu der zusammengesetzten Verzerrung w1 ◦ w2.
  • Die PDF 206 ist integriert, um die umgekehrte Verzerrung w 2 1
    Figure DE102021110598A1_0020
    220 zu erzeugen. P2 ist die CDF des Terms p2(x)-die umgekehrte Verzerrung w 2 1
    Figure DE102021110598A1_0021
    220, die der Verteilung P2(x) entspricht. Das p1fit(x) 224 weist eine Mitte bei µfit= P2 (µ) auf, wobei µ der Parameter des Spitzenwerts des Cauchy-Terms p1(x) und P2 der CDF des linearen Terms p2(x) ist. P2 ist die umgekehrte Verzerrung w 2 1
    Figure DE102021110598A1_0022
    220, die der Verteilung P2(x) entspricht.
  • Um die Breite des Spitzenwerts 225 .für p1fit anzupassen, wird J2(µ) - die umgekehrte Jacobische Determinante von P2(µ) ausgewertet. Alternativ kann, solange p2 eine normalisierte PDF ist, p2(µ) direkt ausgewertet werden, um der Breite zu entsprechen. Das Anpassen der Breite des Spitzenwerts 225 zeigt, wie stark die Verteilung nach dem Durchlaufen der Verzerrung w2 ω 2 P 2 1
    Figure DE102021110598A1_0023
    zusammengedrückt oder gedehnt wurde, und es ist möglich, dies durch Dehnen oder Zusammendrücken des Spitzenwerts 225 der Anpassungsverteilung um ein gegenseitiges Ausmaß zu kompensieren. Alternativ könnte man Punkte auf beiden Seiten von µ bis P2 abbilden und dann ihre Differenz berechnen.
  • Wie die Zusammensetzung von w1 und w2 zeigt, können die Ergebnisse eine hohe Varianz aufweisen, wenn sie mit der Zusammensetzung W1fit und w2 verglichen werden, wenn die Importance-Sampling-Verteilung für einen Faktor schlecht mit den anderen Faktoren übereinstimmt. In der Praxis ist es normalerweise unmöglich, alle Diskrepanzen perfekt zu korrigieren, aber das Anpassen jeder Verzerrung, die in einer Zusammensetzung von Verzerrung beinhaltet ist, an nachfolgende Verzerrungen in der Zusammensetzung kann die Diskrepanzen erheblich verringern. Wenn zum Beispiel bereits vorhandene Verzerrungen einige Faktoren von ƒ abdecken, wie etwa die BSDF in der Rendering-Gleichung, können zusätzliche Verzerrungen für die verbleibenden Faktoren eingeführt werden - zum Beispiel der Verkürzungsterm. Jede Verzerrung wird durch Anpassen von Parametern angepasst, die für die Warping-Funktion spezifisch sind. Die Parameter werden verwendet, um 2D-Funktionen a(x) anzupassen, wie etwa die in Tabelle 4 aufgeführten bilinearen, biquadratischen Bezier- und trennbaren Cauchy-Warping-Fensterfunktionen. Tabelle 4
    a(x) Parameters
    Bilinear g(x1,g(x2,v0,0,v1,0), g(x2, v0,1, v1,1)), with g(x,a,b) = (1 - x)a + xb. vi,j
    Biquadratic Bezier b(x1,b(x2, v0,0, v1,0, v2,0), b(x2, v0,1, v1,1 , v2,1), b(x2, v0,2 v1,2, v2,2)), with b(x, a, b, c) = (1 - x)2a + 2(1 - x)xb + x2c. vi,j
    Windowed separable Cauchy with c ( x 1 ) c ( x 2 ) , c ( x i ) = 1 π γ i [ 1 + ( ( u i μ i ) / γ i ) 2 ]
    Figure DE102021110598A1_0024
    γi and µi
  • Die PSS-Verzerrungen können auf drei Probleme im Zusammenhang mit direkter Beleuchtung angewendet werden: kosinusgewichtetes Raumwinkelsampling von Lichtquellen, gleichmäßiges Oberflächensampling von bilinearen Patches und Sampling des Produkts von BSDFs und Lichtquellen. Bei der Schätzung der direkten Beleuchtung aus der Emissionsgeometrie mit Monte-Carlo-Integration ist es effizienter, an dem vom Emitter eingeschlossenen Raumwinkel ein gleichmäßiges Sampling durchzuführen, als ein gleichmäßiges Sampling an seiner Oberfläche durchzuführen. Dadurch werden Variationen im Integranden aufgrund des umgekehrten quadratischen Abstandsfaktors und des Kosinus zwischen dem Normalenvektor des Lichts und der Richtung des ausgehenden Lichts eliminiert, was wiederum die Varianz verringert.
  • Noch besser ist es, auch den Kosinus der Einfallsrichtung am Schattierungspunkt in die Lichtsamplingverteilung einzubeziehen. Die PSS-Verzerrungen können angewendet werden, um den zusätzlichen Kosinusfaktor aufzunehmen, ihn in PSS umzuwandeln und eine Verzerrung anzupassen, um den Kosinusfaktor zu approximieren. In einer Ausführungsform ergibt ein Verzerrungskosinus-gewichtetes Raumwinkelsampling eine Verringerung des mittleren quadratischen Fehlers (mean square error - MSE) von bis zu 2,88× im Vergleich zu einem gleichmäßigen Raumwinkelsampling mit einer minimalen Erhöhung der Laufzeit.
  • Warping-Funktionen werden auf die Primärstichproben in [0,1)'' angewendet, wobei jede Verzerrung ein Sampling eines einzelnen Faktors der Produktverteilung approximiert. Die wichtigste Erkenntnis ist, dass sich einzelne Faktoren im Primärstichprobenraum häufig gut verhalten und kostengünstig Sampling unterzogen werden können - selbst durch die Verformung vorhandener Verzerrungen, die andere Faktoren Sampling unterziehen - was zu einem praktischen, effizienten Samplingalgorithmus führt. Der Samplingansatz ist unvoreingenommen, einfach umzusetzen und mit Multiple Importance Sampling kompatibel. Die Verzerrung kann zum projizierten Raumwinkelsampling von sphärischen Oberflächen, die aus Dreiecken und Vierecken bestehen, zum flächengleichen und projizierten Raumwinkelsampling von bilinearen Patches und zum Produktsampling von glänzenden BSDFs und Flächenlichtquellen verwendet werden. Für einige reale Szenen können Effizienzverbesserungen von über 1,6× erzielt werden.
  • 2C veranschaulicht ein Ablaufdiagramm eines Verfahrens 250, das eine Zusammensetzung von Verzerrungen zum Sampling eines Produkts gemäß einer Ausführungsform verwendet. Obwohl das Verfahren 250 im Zusammenhang mit einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 250 auch von einem Programm, einer benutzerdefinierten Schaltung oder einer Kombination aus einer benutzerdefinierten Schaltung und einem Programm ausgeführt werden. Zum Beispiel kann das Verfahren 250 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der dazu in der Lage ist, Sampling an einem Produkt unter Verwendung mindestens einer Verzerrung durchzuführen, wie etwa der Parallelverarbeitungseinheit 300. Darüber hinaus versteht ein Durchschnittsfachmann, dass jedes System, das das Verfahren 250 ausführt, im Umfang und Geist von Ausführungsformen der vorliegenden Offenbarung liegt.
  • In Schritt 255 wird eine erste Warping-Funktion ausgewählt, die einen ersten Faktor eines Produktintegrals approximiert. In einer Ausführungsform ist die erste Warping-Funktion eine invertierte Wahrscheinlichkeits- oder Quantilfunktion. In einer Ausführungsform ist das Produktintegral die direkte Beleuchtungsgleichung (3). In Schritt 260 wird eine zweite Warping-Funktion ausgewählt, die einen zweiten Faktor des Produktintegrals approximiert. In Schritt 265 werden Parameter der ersten Warping-Funktion an die zweite Warping-Funktion angepasst. In Schritt 270 werden die angepasste erste Warping-Funktion und die zweite Warping-Funktion kombiniert, um eine Stichprobenverteilung zu erzeugen. In einer Ausführungsform werden die angepasste erste Warping-Funktion und die zweite Warping-Funktion als eine Zusammensetzung von Verzerrungen kombiniert. In Schritt 275 wird die Stichprobenverteilung auf ein Produkt des ersten Faktors und des zweiten Faktors angewendet, um das Produktintegral zu approximieren.
  • Die Verwendung einer Zusammensetzung von Verzerrungen zur Berechnung einer Samplingverteilung kann verwendet werden, um Produktintegrale genau zu approximieren, wobei jede Verzerrung mindestens einem Faktor im Produkt entspricht. Die Samplingverteilung ist mit vorhandenen Techniken kompatibel, die auf Multiple Importance Sampling beruhen. Die Verwendung von Anpassungsparametern vorhandener Warping-Funktionen, die jeweils bekannte umgekehrte Jacobische Determinanten und umgekehrte Verzerrungen aufweisen, kann eine Echtzeitausführung ermöglichen, um genaue Approximationen der Produktintegrale zu erzeugen. Insbesondere kann die Verwendung der Zusammensetzung von Verzerrungen die Effizienz von Raytracing-Techniken zur Erzeugung realistischer Szenen verbessern, z. B. Szenen, bei denen Bereichsleuchten, komplexe Materialien, globale Beleuchtung usw. verwendet werden.
  • Parallelverarbeitungsarchitektur
  • 3 veranschaulicht eine parallele Verarbeitungseinheit (parallel processing unit - PPU) 300, gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 300 ein Multithread-Prozessor, der auf einer oder mehreren Vorrichtungen mit integrierter Schaltung umgesetzt ist. Die PPU 300 ist eine Architektur zum Ausblenden der Latenz, mit der viele Threads parallel verarbeitet werden können. Ein Thread (z. B. ein Ausführungsthread) ist eine Instanziierung eines Satzes von Anweisungen, die für die Ausführung durch die PPU 300 konfiguriert sind. In einer Ausführungsform ist die PPU 300 eine Grafikverarbeitungseinheit (GPU), die dazu konfiguriert ist, eine Grafik-Rendering-Pipeline zum Verarbeiten dreidimensionaler (3D-) Grafikdaten umzusetzen, um zweidimensionale (2D-) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie etwa einer Flüssigkristallanzeigevorrichtung (LCD-Vorrichtung), zu erzeugen. In anderen Ausführungsformen kann die PPU 300 zum Durchführen von Allzweckberechnungen verwendet werden. Während hierin ein beispielhafter Parallelprozessor zur Veranschaulichung bereitgestellt wird, ist unbedingt zu beachten, dass ein derartiger Prozessor nur zu Veranschaulichungszwecken angegeben ist und dass ein beliebiger Prozessor zur Ergänzung und/oder als Ersatz desselben verwendet werden kann.
  • Eine oder mehrere PPUs 300 können dazu konfiguriert sein, Tausende von HPC- (high performance computing), Rechenzentrums- und maschinellen Lernanwendungen zu beschleunigen. Die PPU 300 kann dazu konfiguriert sein, zahlreiche Deep-Learning-Systeme und -Anwendungen zu beschleunigen, einschließlich autonomer Fahrzeugplattformen, Deep-Learning, hochgenauer Sprach-, Bild- und Texterkennungssysteme, intelligenter Videoanalyse, molekularer Simulationen, Wirkstoffentdeckung, Krankheitsdiagnose, Wettervorhersage, Big-Data-Analyse, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomation, Sprachübersetzung in Echtzeit, Online-Suchoptimierungen und personalisierter Benutzerempfehlungen und dergleichen.
  • Wie in 3 gezeigt, beinhaltet die PPU 300 eine Eingabe/Ausgabe- (E/A-) Einheit 305, eine Front-End-Einheit 315, eine Scheduler-Einheit 320, eine Arbeitsverteilungseinheit 325, einen Hub 330, eine Kreuzschiene (Xbar) 370, einen oder mehrere allgemeine Verarbeitungscluster (general processing clusters - GPCs) 350 und eine oder mehrere Speicherpartitionseinheiten 380. Die PPU 300 kann über eine oder mehrere Zwischenverbindungen eines Hochgeschwindigkeits-NVLinks 310 mit einem Host-Prozessor oder anderen PPUs 300 verbunden sein. Die PPU 300 kann über eine Zwischenverbindung 302 mit einem Host-Prozessor oder anderen Peripherievorrichtungen verbunden sein. Die PPU 300 kann auch mit einem lokalen Speicher 304 verbunden sein, der eine Anzahl von Speichervorrichtungen umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von DRAM-Vorrichtungen (dynamic random access memory) umfassen. Die DRAM-Vorrichtungen können als HBM-Teilsystem (high bandwidth memory) konfiguriert sein, wobei mehrere DRAM-Chips in jeder Vorrichtung gestapelt sind.
  • Die Zwischenverbindung des NVLinks 310 ermöglicht es Systemen, eine oder mehrere PPUs 300 in Kombination mit einer oder mehreren CPUs zu skalieren und zu beinhalten, unterstützt die Cache-Kohärenz zwischen den PPUs 300 und den CPUs sowie das CPU-Mastering. Daten und/oder Befehle können vom NVLink 310 über den Hub 330 zu/von anderen Einheiten der PPU 300 übertragen werden, wie etwa einer oder mehreren Copy-Engines, einem Videocodierer, einem Videodecoder, einer Energieverwaltungseinheit usw. (nicht explizit gezeigt). Der NVLink 310 wird in Verbindung mit 5B ausführlicher beschrieben.
  • Die E/A-Einheit 305 ist dazu konfiguriert, Kommunikationen (z. B. Befehle, Daten usw.) von einem Host-Prozessor (nicht gezeigt) über die Zwischenverbindung 302 zu senden und zu empfangen. Die E/A-Einheit 305 kann mit dem Host-Prozessor direkt über die Zwischenverbindung 302 oder über eine oder mehrere Zwischenvorrichtungen wie etwa eine Speicherbrücke kommunizieren. In einer Ausführungsform kann die E/A-Einheit 305 mit einem oder mehreren anderen Prozessoren, wie etwa einer oder mehreren der PPUs 300, über die Zwischenverbindung 302 kommunizieren. In einer Ausführungsform setzt die E/A-Einheit 305 eine PCIe-Schnittstelle (peripheral component interconnect express) für die Kommunikation über einen PCIe-Bus um und die Zwischenverbindung 302 ist ein PCIe-Bus. In alternativen Ausführungsformen kann die E/A-Einheit 305 andere Arten bekannter Schnittstellen zur Kommunikation mit externen Vorrichtungen umsetzen.
  • Die E/A-Einheit 305 decodiert Pakete, die über die Zwischenverbindung 302 empfangen wurden. In einer Ausführungsform stellen die Pakete Befehle dar, die dazu konfiguriert sind, die PPU 300 dazu zu veranlassen, verschiedene Vorgänge auszuführen. Die E/A-Einheit 305 überträgt die decodierten Befehle an verschiedene andere Einheiten der PPU 300, wie die Befehle spezifizieren können. Zum Beispiel können einige Befehle an die Front-End-Einheit 315 übertragen werden. Andere Befehle können an den Hub 330 oder andere Einheiten der PPU 300 übertragen werden, wie etwa eine oder mehrere Copy-Engines, einen Videocodierer, einen Videodecoder, eine Energieverwaltungseinheit usw. (nicht explizit gezeigt). Anders ausgedrückt ist die E/A-Einheit 305 dazu konfiguriert, die Kommunikation zwischen und unter den verschiedenen logischen Einheiten der PPU 300 weiterzuleiten.
  • In einer Ausführungsform codiert ein vom Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der der PPU 300 Workloads zur Verarbeitung bereitstellt. Eine Arbeitslast kann mehrere Anweisungen und Daten umfassen, die von diesen Anweisungen verarbeitet werden sollen. Der Puffer ist ein Bereich in einem Speicher, auf den sowohl vom Host-Prozessor als auch von der PPU 300 zugegriffen werden kann (z. B. lesen/schreiben). Zum Beispiel kann die E/A-Einheit 305 dazu konfiguriert sein, auf den Puffer in einem Systemspeicher zuzugreifen, der mit der Zwischenverbindung 302 über Speicheranforderungen verbunden ist, die über die Zwischenverbindung 302 übertragen werden. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und sendet dann einen Zeiger auf den Start des Befehlsstroms an die PPU 300. Die Front-End-Einheit 315 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Front-End-Einheit 315 verwaltet den einen oder die mehreren Streams, liest Befehle aus den Streams und leitet Befehle an die verschiedenen Einheiten der PPU 300 weiter.
  • Die Front-End-Einheit 315 ist an eine Scheduler-Einheit 320 gekoppelt, die die verschiedenen GPCs 350 dazu konfiguriert, Aufgaben zu verarbeiten, die durch den einen oder die mehreren Ströme definiert sind. Die Scheduler-Einheit 320 ist dazu konfiguriert, Statusinformationen zu verfolgen, die sich auf die verschiedenen Aufgaben beziehen, die von der Scheduler-Einheit 320 verwaltet werden. Der Status kann angeben, welcher GPC 350 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, eine der Aufgabe zugeordnete Prioritätsstufe usw. Die Scheduler-Einheit 320 verwaltet die Ausführung mehrerer Aufgaben an dem einen oder den mehreren GPCs 350.
  • Die Scheduler-Einheit 320 ist an eine Arbeitsverteilungseinheit 325 gekoppelt, die dazu konfiguriert ist, Aufgaben zur Ausführung an den GPCs 350 zu versenden. Die Arbeitsverteilungseinheit 325 kann eine Anzahl von geplanten Aufgaben verfolgen, die von der Planungseinheit 320 empfangen wurden. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 325 einen Pool von ausstehenden Aufgaben und einen Pool von aktiven Aufgaben für jeden der GPCs 350. Der Pool von ausstehenden Aufgaben kann eine Anzahl von Slots (z. B. 32 Slots) umfassen, die Aufgaben enthalten, die zugewiesen sind, um von einem bestimmten GPC 350 verarbeitet zu werden. Der Pool von aktiven Aufgaben kann eine Anzahl von Slots (z. B. 4 Slots) für Aufgaben umfassen, die von den GPCs 350 aktiv verarbeitet werden. Wenn ein GPC 350 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem Pool von aktiven Aufgaben für den GPC 350 entfernt und eine der anderen Aufgaben aus dem Pool von ausstehenden Aufgaben wird ausgewählt und für die Ausführung auf dem GPC 350 geplant. Wenn eine aktive Aufgabe auf dem GPC 350 inaktiv war, z. B. während auf die Auflösung einer Datenabhängigkeit gewartet wurde, kann die aktive Aufgabe aus dem GPC 350 entfernt und in den Pool von ausstehenden Aufgaben zurückgeführt werden, während eine andere Aufgabe im Pool von ausstehenden Aufgaben ausgewählt wird und für die Ausführung auf dem GPC 350 geplant wird.
  • Die Arbeitsverteilungseinheit 325 kommuniziert mit dem einen oder den mehreren GPCs 350 über die XBar 370. Die XBar 370 ist ein Zwischenverbindungsnetzwerk, das viele der Einheiten der PPU 300 an andere Einheiten der PPU 300 koppelt. Zum Beispiel kann die XBar 370 dazu konfiguriert sein, die Arbeitsverteilungseinheit 325 an einen bestimmten GPC 350 zu koppeln. Obwohl dies nicht explizit gezeigt ist, können eine oder mehrere andere Einheiten der PPU 300 auch über den Hub 330 mit der XBar 370 verbunden sein.
  • Die Aufgaben werden von der Scheduler-Einheit 320 verwaltet und von der Arbeitsverteilungseinheit 325 an einen GPC 350 gesendet. Der GPC 350 ist dazu konfiguriert, die Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 350 verbraucht, über die XBar 370 an einen anderen GPC 350 weitergeleitet oder im Speicher 304 gespeichert werden. Die Ergebnisse können über die Speicherpartitionseinheiten 380, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in den/aus dem Speicher 304 umsetzen, in den Speicher 304 geschrieben werden. Die Ergebnisse können über den NVLink 310 an eine andere PPU 300 oder CPU übertragen werden. In einer Ausführungsform beinhaltet die PPU 300 eine Anzahl U von Speicherpartitionseinheiten 380, die gleich der Anzahl von getrennten und unterschiedlichen Speichervorrichtungen des Speichers 304 ist, die an die PPU 300 gekoppelt sind. Eine Speicherpartitionseinheit 380 wird nachstehend in Verbindung mit 4B ausführlicher beschrieben.
  • In einer Ausführungsform führt ein Hostprozessor einen Treiberkernel aus, der eine Anwendungsprogrammierschnittstelle (application programming interface - API) umsetzt, die es einer oder mehreren auf dem Hostprozessor ausgeführten Anwendungen ermöglicht, Vorgänge zur Ausführung auf der PPU 300 zu planen. In einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 300 ausgeführt und die PPU 300 stellt Isolation, Dienstqualität (quality of service - QoS) und unabhängige Adressräume für die Mehrfachberechnungsanwendungen bereit. Eine Anwendung kann Anweisungen (z. B. API-Aufrufe) erzeugen, die den Treiberkernel dazu veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 300 zu erzeugen. Der Treiberkernel gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 300 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen verwandter Threads umfassen, die hier als Thread-Satz bezeichnet werden. In einer Ausführungsform umfasst ein Thread-Satz 32 verwandte Threads, die parallel ausgeführt werden können. Zusammenwirkende Threads können sich auf mehrere Threads beziehen, die Anweisungen zum Ausführen der Aufgabe beinhalten und die Daten über den gemeinsam genutzten Speicher austauschen können. Threads und zusammenwirkende Threads werden in Verbindung mit 5A ausführlicher beschrieben.
  • 4A veranschaulicht einen GPC 350 der PPU 300 aus 3, gemäß einer Ausführungsform. Wie in 4A gezeigt, beinhaltet jeder GPC 350 eine Anzahl von Hardwareeinheiten für Verarbeitungsaufgaben. In einer Ausführungsform beinhaltet jeder GPC 350 einen Pipeline-Manager 410, eine Vor-Rasteroperationseinheit (pre-raster operations unit - PROP) 415, eine Raster-Engine 425, eine Arbeitsverteilungskreuzschiene (word distribution cross bar - WDX) 480, eine Speicherverwaltungseinheit (memory management unit - MMU) 490 und einen oder mehrere Datenverarbeitungscluster (DPCs) 420. Es versteht sich, dass der GPC 350 aus 4A andere Hardwareeinheiten anstelle oder zusätzlich zu den in 4A gezeigten Einheiten beinhalten kann.
  • In einer Ausführungsform wird der Betrieb des GPC 350 durch den Pipeline-Manager 410 gesteuert. Der Pipeline-Manager 410 verwaltet die Konfiguration des einen oder der mehreren DPCs 420 für Verarbeitungsaufgaben, die dem GPC 350 zugeordnet sind. In einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen des einen oder der mehreren DPCs 420 dazu konfigurieren, mindestens einen Teil einer Grafik-Rendering-Pipeline umzusetzen. Zum Beispiel kann ein DPC 420 dazu konfiguriert sein, ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 440 auszuführen. Der Pipeline-Manager 410 kann auch dazu konfiguriert sein, von der Arbeitsverteilungseinheit 325 empfangene Pakete an die entsprechenden logischen Einheiten innerhalb des GPC 350 weiterzuleiten. Zum Beispiel können einige Pakete an Hardwareeinheiten mit fester Funktion im PROP 415 und/oder der Raster-Engine 425 geleitet werden, während andere Pakete zur Verarbeitung durch die Primitive Engine 435 oder den SM 440 an die DPCs 420 weitergeleitet werden können. In einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen der einen oder mehreren DPCs 420 dazu konfigurieren, ein Modell eines neuronalen Netzwerks und/oder eine Rechenpipeline umzusetzen.
  • Die PROP-Einheit 415 ist dazu konfiguriert, von der Raster-Engine 425 und den DPCs 420 erzeugte Daten an eine Rasteroperationseinheit (ROP-Einheit) weiterzuleiten, die in Verbindung mit 4B ausführlicher beschrieben wird. Die PROP-Einheit 415 kann auch dazu konfiguriert sein, Optimierungen für die Farbmischung durchzuführen, Pixeldaten zu organisieren, Adressübersetzungen durchzuführen und dergleichen.
  • Die Raster-Engine 425 beinhaltet eine Anzahl von Hardwareeinheiten mit fester Funktion, die dazu konfiguriert sind, verschiedene Rasteroperationen durchzuführen. In einer Ausführungsform beinhaltet die Raster-Engine 425 eine Setup-Engine, eine Grobraster-Engine, eine Culling-Engine, eine Clipping-Engine, eine Feinraster-Engine und eine Tile-Coalescing-Engine. Die Setup-Engine empfängt transformierte Scheitelpunkte und erzeugt Ebenengleichungen, die mit dem durch die Scheitelpunkte definierten geometrischen Primitiven zusammenhängen. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformationen (z. B. eine x-, y-Abdeckungsmaske für eine Kachel) für die Primitive zu erzeugen. Die Ausgabe der Grobraster-Engine wird an die Culling-Engine übertragen, wo Fragmente, die mit der Primitive zusammenhängen und einen Z-Test nicht bestehen, ausgesondert werden, und an eine Clipping-Engine übertragen, bei der Fragmente, die außerhalb eines Betrachtungsfrustum liegen, abgeschnitten werden. Jene Fragmente, die das Abschneiden und Aussondern überleben, können an die Feinraster-Engine übergeben werden, um Attribute für die Pixelfragmente auf Grundlage der von der Setup-Engine erzeugten Ebenengleichungen zu erzeugen. Die Ausgabe der Raster-Engine 425 umfasst Fragmente, die zum Beispiel von einem innerhalb eines DPC 420 umgesetzten Fragment-Shader verarbeitet werden sollen.
  • Jeder im GPC 350 beinhaltete DPC 420 beinhaltet eine M-Pipe-Steuerung (M-Pipe Controller - MPC) 430, eine Primitive-Engine 435 und einen oder mehrere SMs 440. Der MPC 430 steuert den Betrieb des DPC 420 und leitet von dem Pipeline-Manager 410 empfangene Pakete an die entsprechenden Einheiten im DPC 420 weiter. Zum Beispiel können Pakete, die mit einem Scheitelpunkt zusammenhängen, an die Primitive-Engine 435 weitergeleitet werden, die dazu konfiguriert ist, Scheitelpunktattribute, die dem Scheitelpunkt zugeordnet sind, aus dem Speicher 304 abzurufen. Im Gegensatz dazu können Pakete, die mit einem Shader-Programm zusammenhängen, an den SM 440 übertragen werden.
  • Der SM 440 umfasst einen programmierbaren Streaming-Prozessor, der zum Verarbeiten von Aufgaben konfiguriert ist, die durch eine Anzahl von Threads dargestellt sind. Jeder SM 440 weist mehrere Threads auf und ist dazu konfiguriert, eine Vielzahl von Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig auszuführen. In einer Ausführungsform setzt der SM 440 eine SIMD-Architektur (Single-Instruction, Multiple-Data) um, bei der jeder Thread in einer Gruppe von Threads (z. B. einem Thread-Satz) dazu konfiguriert ist, einen anderen Datensatz auf Grundlage desselben Satzes von Anweisungen zu verarbeiten. Alle Threads in der Gruppe von Threads führen dieselben Anweisungen aus. In einer anderen Ausführungsform setzt der SM 440 eine SIMT-Architektur (Single-Instruction, Multiple Thread) um, bei der jeder Thread in einer Gruppe von Threads dazu konfiguriert ist, einen anderen Datensatz auf Grundlage desselben Satzes von Anweisungen zu verarbeiten, wo jedoch einzelnen Threads in der Gruppe von Threads ermöglicht wird, während der Ausführung abzuweichen. In einer Ausführungsform werden ein Programmzähler, ein Call-Stack und ein Ausführungsstatus für jeden Thread-Satz beibehalten, wodurch die Parallelität zwischen Thread-Sätzen und die serielle Ausführung innerhalb von Thread-Sätzen ermöglicht werden, wenn Threads innerhalb des Thread-Satzes abweichen. In einer anderen Ausführungsform werden ein Programmzähler, ein Call-Stack und ein Ausführungsstatus für jeden einzelnen Thread beibehalten, wodurch gleiche Parallelität zwischen allen Threads innerhalb und zwischen Thread-Sätzen ermöglicht wird. Wenn der Ausführungsstatus für jeden einzelnen Thread beibehalten wird, können Threads, die dieselben Anweisungen ausführen, konvergiert und parallel ausgeführt werden, um maximale Effizienz zu erzielen. Der SM 440 wird nachstehend in Verbindung mit 5A ausführlicher beschrieben.
  • Die MMU 490 stellt eine Schnittstelle zwischen dem GPC 350 und der Speicherpartitionseinheit 380 bereit. Die MMU 490 kann die Übersetzung virtueller Adressen in physische Adressen, den Speicherschutz und die Arbitrierung von Speicheranforderungen bereitstellen. In einer Ausführungsform stellt die MMU 490 einen oder mehrere Adressenumsetzpuffer (translation lookaside buffer - TLBs) zum Durchführen einer Übersetzung von virtuellen Adressen in physische Adressen in dem Speicher 304 bereit.
  • 4B veranschaulicht eine Speicherpartitionseinheit 380 der PPU 300 aus 3, gemäß einer Ausführungsform. Wie in 4B gezeigt, beinhaltet die Speicherpartitionseinheit 380 eine Rasteroperationseinheit (ROP-Einheit) 450, einen Level-zwei-Cache 460 (L2-Cache) und eine Speicherschnittstelle 470. Die Speicherschnittstelle 470 ist an den Speicher 304 gekoppelt. Die Speicherschnittstelle 470 kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder dergleichen für eine Hochgeschwindigkeitsdatenübertragung umsetzen. In einer Ausführungsform schließt die PPU 300 U Speicherschnittstellen 470, jeweils eine Speicherschnittstelle 470 pro Paar Speicherpartitionseinheiten 380, ein, wobei jedes Paar Speicherpartitionseinheiten 380 mit einer entsprechenden Speichervorrichtung des Speichers 304 verbunden ist. Zum Beispiel kann die PPU 300 mit bis zu Y Speichervorrichtungen verbunden sein, wie etwa Speicherstapeln mit hoher Bandbreite oder Grafikdoppeldatenrate, Version 5, synchronem dynamischem Direktzugriffsspeicher oder anderen Arten von persistentem Massenspeicher.
  • In einer Ausführungsform setzt die Speicherschnittstelle 470 eine HBM2-Speicherschnittstelle um und ist Y gleich der Hälfte von U. In einer Ausführungsform befinden sich die HBM2-Speicherstapel auf demselben physischen Paket wie die PPU 300, was im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen erhebliche Energie- und Flächeneinsparungen bietet. In einer Ausführungsform beinhaltet jeder HBM2-Stapel vier Speicherchips und ist Y gleich 4, wobei der HBM2-Stapel zwei 128-Bit-Kanäle pro Chip für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit beinhaltet.
  • In einer Ausführungsform unterstützt der Speicher 304 den Fehlerkorrekturcode (error correction code - ECC) für Einzelfehlerkorrektur und Doppelfehlerdetektion (single error correcting double error detecting - SECDED), um Daten zu schützen. Der ECC bietet eine höhere Zuverlässigkeit für Computeranwendungen, die empfindlich auf Datenkorruption reagieren. Zuverlässigkeit ist besonders wichtig in großen Cluster-Rechenumgebungen, in denen PPUs 300 sehr große Datenmengen verarbeiten und/oder Anwendungen über einen längeren Zeitraum ausführen.
  • In einer Ausführungsform setzt die PPU 300 eine mehrstufige Speicherhierarchie um. In einer Ausführungsform unterstützt die Speicherpartitionseinheit 380 einen einheitlichen Speicher, um einen einzelnen einheitlichen virtuellen Adressraum für den Speicher der CPU und PPU 300 bereitzustellen, wodurch die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen ermöglicht wird. In einer Ausführungsform wird die Häufigkeit von Zugriffen einer PPU 300 auf Speicher, der sich auf anderen Prozessoren befindet, verfolgt, um sicherzustellen, dass Speicherseiten in den physischen Speicher der PPU 300 verschoben werden, die häufiger auf die Seiten zugreift. In einer Ausführungsform unterstützt der NVLink 310 Adressübersetzungsdienste, die der PPU 300 ermöglichen, direkt damit auf CPU-Seitentabellen zuzugreifen, und vollen Zugriff durch die PPU 300 auf CPU-Speicher breitstellen.
  • In einer Ausführungsform übertragen Copy-Engines Daten zwischen mehreren PPUs 300 oder zwischen PPUs 300 und CPUs. Die Copy-Engines können Seitenfehler für Adressen generieren, die nicht den Seitentabellen zugeordnet sind. Die Speicherpartitionseinheit 380 kann dann die Seitenfehler warten und die Adressen in die Seitentabelle abbilden, wonach die Copy-Engine die Übertragung durchführen kann. In einem herkömmlichen System wird der Speicher für mehrere Copy-Engine-Vorgänge zwischen mehreren Prozessoren fixiert (z. B. nicht seitenwechselbar), wodurch der verfügbare Speicher erheblich reduziert wird. Bei Hardwarefehlern können Adressen an die Copy-Engines übergeben werden, ohne sich Sorgen machen zu müssen, ob die Speicherseiten resident sind und die Kopieroperation transparent ist.
  • Daten aus dem Speicher 304 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 380 abgerufen und in dem L2-Cache 460 gespeichert werden, der sich auf dem Chip befindet und von den verschiedenen GPCs 350 gemeinsam genutzt wird. Wie gezeigt, beinhaltet jede Speicherpartitionseinheit 380 einen Teil des L2-Cache 460, der mit einem entsprechenden Speicher 304 zusammenhängt. Caches niedrigerer Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 350 umgesetzt werden. Zum Beispiel kann jeder der SMs 440 einen Level-eins-Cache (L1-Cache) umsetzen. Der L1-Cache ist ein privater Speicher, der auf einen bestimmten SM 440 dediziert ist. Daten aus dem L2-Cache 460 können abgerufen und in jedem der L 1 -Caches zur Verarbeitung in den Funktionseinheiten der SMs 440 gespeichert werden. Der L2-Cache 460 ist an die Speicherschnittstelle 470 und der XBar 370 gekoppelt.
  • Die ROP-Einheit 450 führt Grafik-Rasteroperationen aus, die sich auf Pixelfarben beziehen, wie etwa Farbkomprimierung, Pixelmischung und dergleichen. Die ROP-Einheit 450 setzt auch Tiefentests in Verbindung mit der Raster-Engine 425 ein und empfängt eine Tiefe für eine Stichprobenstelle, die mit einem Pixelfragment zusammenhängt, von der Culling-Engine der Raster-Engine 425. Die Tiefe wird gegen eine entsprechende Tiefe in einem Tiefenpuffer für eine dem Fragment zugeordneten Stichprobenstelle getestet. Wenn das Fragment den Tiefentest für die Stichprobenstelle besteht, aktualisiert die ROP-Einheit 450 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 425. Es versteht sich, dass die Anzahl der Speicherpartitionseinheiten 380 unterschiedlich zu der Anzahl der GPCs 350 sein kann und daher jede ROP-Einheit 450 an jede der GPCs 350 gekoppelt sein kann. Die ROP-Einheit 450 verfolgt Pakete, die von den verschiedenen GPCs 350 empfangen wurden, und bestimmt, zu welchem GPC 350 ein von der ROP-Einheit 450 erzeugtes Ergebnis durch die Xbar 370 geleitet wird. Obwohl die ROP-Einheit 450 in der Speicherpartitionseinheit 380 in 4B beinhaltet ist, kann sich in einer anderen Ausführungsform die ROP-Einheit 450 außerhalb der Speicherpartitionseinheit 380 befinden. Zum Beispiel kann sich die ROP-Einheit 450 in der GPC 350 oder einer anderen Einheit befinden.
  • 5A veranschaulicht den Streaming-Multiprozessor 440 aus 4A gemäß einer Ausführungsform. Wie in 5A gezeigt, beinhaltet der SM 440 einen Befehls-Cache 505, eine oder mehrere Scheduler-Einheiten 510, eine Registerdatei 520, einen oder mehrere Verarbeitungskerne 550, eine oder mehrere Sonderfunktionseinheiten (special function unit - SFUs) 552, eine oder mehrere Lade/Speicher-Einheiten (load/store units - LSUs) 554, ein Zwischenverbindungsnetzwerk 580, einen gemeinsam genutzten Speicher/L1-Cache 570.
  • Wie vorstehend beschrieben, sendet die Arbeitsverteilungseinheit 325 Aufgaben zur Ausführung auf den GPCs 350 der PPU 300. Die Aufgaben werden einem bestimmten DPC 420 innerhalb eines GPC 350 zugewiesen, und wenn die Aufgabe mit einem Shader-Programm zusammenhängt, kann die Aufgabe einem SM 440 zugewiesen werden. Die Scheduler-Einheit 510 empfängt die Aufgaben von der Arbeitsverteilungseinheit 325 und verwaltet die Befehlsplanung für einen oder mehrere Thread-Blöcke, die dem SM 440 zugewiesen sind. Die Scheduler-Einheit 510 plant Thread-Blöcke zur Ausführung als Thread-Sätze von parallelen Threads, wobei jedem Thread-Block mindestens ein Thread-Satz zugewiesen ist. In einer Ausführungsform führt jeder Thread-Satz 32 Threads aus. Die Scheduler-Einheit 510 kann mehrere verschiedene Thread-Blöcke verwalten, die Thread-Sätze den verschiedenen Thread-Blöcken zuweisen und dann Anweisungen aus der Vielzahl verschiedener zusammenwirkender Gruppen an die verschiedenen Funktionseinheiten (z. B. Kerne 550, SFUs 552 und LSUs 554) während jedes Taktzyklus aussenden.
  • Zusammenwirkende Gruppen ist ein Programmiermodell zum Organisieren von Gruppen kommunizierender Threads, mit dem Entwickler die Granularität der Kommunikation von Threads ausdrücken und so umfassendere, effizientere parallele Zerlegungen ausdrücken können. Zusammenwirkende Start-APIs unterstützen die Synchronisation zwischen Thread-Blöcken für die Ausführung paralleler Algorithmen. Herkömmliche Programmiermodelle stellen ein einziges einfaches Konstrukt zum Synchronisieren zusammenwirkender Threads bereit: eine Barriere über alle Threads eines Threadblocks (z. B. die Funktion syncthreads()). Programmierer möchten jedoch häufig Gruppen von Threads mit einer Granularität von weniger als Threadblöcken definieren und innerhalb der definierten Gruppen synchronisieren, um eine höhere Leistung, Entwurfsflexibilität und Wiederverwendung von Software in Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen.
  • Mit zusammenwirkenden Gruppen können Programmierer Gruppen von Threads explizit in Unterblöcken (z. B. so klein wie ein einzelner Thread) und Granularitäten mit mehreren Blöcken definieren und kollektive Vorgänge wie etwa die Synchronisierung der Threads in einer zusammenwirkenden Gruppe ausführen. Das Programmiermodell unterstützt eine saubere Komposition über Softwaregrenzen hinweg, sodass Bibliotheken und Dienstprogrammfunktionen sicher in ihrem lokalen Kontext synchronisiert werden können, ohne Annahmen über die Konvergenz treffen zu müssen. Die Primitiven der zusammenwirkenden Gruppen ermöglichen neue Muster der zusammenwirkenden Parallelität, einschließlich der Parallelität zwischen Produzent und Verbraucher, der opportunistischen Parallelität und der globalen Synchronisation über ein ganzes Raster von Thread-Blöcken.
  • Eine Aussendeeinheit 515 ist dazu konfiguriert, Anweisungen an eine oder mehrere der Funktionseinheiten zu übermitteln. In der Ausführungsform beinhaltet die Scheduler-Einheit 510 zwei Aussendeeinheiten 515, die es ermöglichen, zwei verschiedene Anweisungen aus demselben Thread-Satz während jedes Taktzyklus zu versenden. In alternativen Ausführungsformen kann jede Scheduler-Einheit 510 eine einzelne Aussendeeinheit 515 oder zusätzliche Aussendeeinheiten 515 beinhalten.
  • Jeder SM 440 beinhaltet eine Registerdatei 520, die einen Satz von Registern für die Funktionseinheiten des SM 440 bereitstellt. In einer Ausführungsform wird die Registerdatei 520 auf jede der Funktionseinheiten aufgeteilt, sodass jeder Funktionseinheit ein dedizierter Teil der Registerdatei 520 zugewiesen ist. In einer anderen Ausführungsform wird die Registerdatei 520 zwischen den verschiedenen Thread-Sätzen aufgeteilt, die von dem SM 440 ausgeführt wird. Die Registerdatei 520 stellt einen temporären Massenspeicher für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten verbunden sind.
  • Jeder SM 440 umfasst L Verarbeitungskerne 550. In einer Ausführungsform umfasst der SM 440 eine große Anzahl (z. B. 128 usw.) unterschiedlicher Verarbeitungskerne 550. Jeder Kern 550 kann eine Verarbeitungseinheit mit vollständiger Pipelineumsetzung, einfacher Genauigkeit, doppelter Genauigkeit und/oder gemischter Genauigkeit beinhalten, die eine Gleitkomma-Arithmetikeinheit und eine Ganzzahl-Arithmetikeinheit beinhaltet. In einer Ausführungsform setzen die Gleitkomma-Arithmetiklogikeinheiten den IEEE 754-2008-Standard für Gleitkomma-Arithmetik um. In einer Ausführungsform beinhalten die Kerne 550 64 Gleitkommakeme mit einfacher Genauigkeit (32 Bit), 64 Ganzzahlkerne, 32 Gleitkommakeme mit doppelter Genauigkeit (64 Bit) und 8 Tensorkerne.
  • Tensorkerne, die dazu konfiguriert sind, Matrixvorgänge durchzuführen, und, in einer Ausführungsform, ein oder mehrere Tensorkerne sind in den Kernen 550 beinhaltet. Insbesondere sind die Tensorkerne dazu konfiguriert, eine Deep-Learning-Matrix-Arithmetik auszuführen, wie etwa Faltungsoperationen für das Training und die Inferenz neuronaler Netze. In einer Ausführungsform arbeitet jeder Tensorkern auf einer 4x4-Matrix und führt eine Matrixmultiplikations- und -akkumulationsoperation D=A×B+C durch, wobei A, B, C und D 4x4-Matrizen sind.
  • In einer Ausführungsform sind die Matrixmultiplikationseingänge A und B 16-Bit-Gleitkomma-Matrizen, während die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkomma-Matrizen sein können. Tensorkerne arbeiten mit 16-Bit-Gleitkomma-Eingangsdaten mit 32-Bit-Gleitkomma-Akkumulation. Die 16-Bit-Gleitkomma-Multiplikation erfordert 64 Operationen und führt zu einem Produkt mit voller Genauigkeit, das dann unter Verwendung einer 32-Bit-Gleitkomma-Addition mit den anderen Zwischenprodukten für eine 4x4x4-Matrix-Multiplikation akkumuliert wird. In der Praxis werden Tensorkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen auszuführen, die aus diesen kleineren Elementen aufgebaut sind. Eine API, wie etwa CUDA 9 C++ API, stellt spezielle Matrixlast-, Matrixmultiplikations- und -akkumulations- und Matrixspeicheroperationen bereit, um Tensorkerne von einem CUDA-C++-Programm effizient zu verwenden. Auf CUDA-Ebene nimmt die Schnittstelle auf Thread-Satz-Ebene Matrizen mit einer Größe von 16x16 an, die sich über alle 32 Threads des Thread-Satzes erstrecken.
  • Jeder SM 440 umfasst auch M SFUs 552, die spezielle Funktionen ausführen (z. B. Attributbewertung, reziproke Quadratwurzel und dergleichen). In einer Ausführungsform können die SFUs 552 eine Baumtraversiereinheit beinhalten, die dazu konfiguriert ist, eine hierarchische Baumdatenstruktur zu traversieren. In einer Ausführungsform können die SFUs 552 eine Textureinheit beinhalten, die dazu konfiguriert ist, Texturabbildungsfilteroperationen durchzuführen. In einer Ausführungsform sind die Textureinheiten dazu konfiguriert, Texturabbildungen (z. B. ein 2D-Array von Texeln) aus dem Speicher 304 zu laden und die Texturabbildungen einem Sampling zu unterziehen, um gezogene Texturwerte zur Verwendung in Shader-Programmen zu erzeugen, die vom SM 440 ausgeführt werden. In einer Ausführungsform werden die Texturabbildungen in dem gemeinsam genutzten Speicher/L1-Cache 470 gespeichert. Die Textureinheiten setzen Texturoperationen wie etwa Filteroperationen unter Verwendung von Mip-Maps (z. B. Texturabbildungen mit unterschiedlichen Detaillierungsgraden) ein. In einer Ausführungsform beinhaltet jeder SM 340 zwei Textureinheiten.
  • Jeder SM 440 umfasst auch N LSUs 554, die Lade- und Speicheroperationen zwischen den gemeinsam genutzten Speicher/L1-Cache 570 und der Registerdatei 520 umsetzen. Jeder SM 440 beinhaltet ein Zwischenverbindungsnetzwerk 580, das jede der Funktionseinheiten mit der Registerdatei 520 und die LSU 554 mit der Registerdatei 520, gemeinsam genutztem Speicher/L1-Cache 570, verbindet. In einer Ausführungsform ist das Zwischenverbindungsnetzwerk 580 eine Kreuzschiene, die dazu konfiguriert sein kann, eine der Funktionseinheiten mit einem beliebigen der Register in der Registerdatei 520 zu verbinden und die LSUs 554 mit der Registerdatei und den Speicherstellen in gemeinsam genutztem Speicher/L1-Cache 570 zu verbinden.
  • Der geteilte Speicher/L1-Cache 570 ist ein Array von On-Chip-Speicher, der die Datenspeicherung und Kommunikation zwischen dem SM 440 und der Primitive-Engine 435 und zwischen Threads im SM 440 ermöglicht. In einer Ausführungsform umfasst der gemeinsam genutzte Speicher/L1-Cache 570 128 KB Speicherkapazität und befindet sich in dem Pfad vom SM 440 zur Speicherpartitionseinheit 380. Der gemeinsam genutzte Speicher/L1-Cache 570 kann zum Zwischenspeichern von Lese- und Schreibvorgängen verwendet werden. Einer oder mehrere des gemeinsam genutzten Spichers/L1-Cache 570, des L2-Cache 460 und Speichers 304 sind Sicherungsspeicher.
  • Die Kombination von Datencache- und gemeinsam genutzter Speicherfunktionen in einem einzigen Speicherblock bietet die beste Gesamtleistung für beide Arten von Speicherzugriffen. Die Kapazität kann von Programmen, die keinen gemeinsam genutzten Speicher verwenden, als Cache verwendet werden. Wenn zum Beispiel der gemeinsam genutzte Speicher dazu konfiguriert ist, die Hälfte der Kapazität zu verwenden, können Textur- und Lade-/Speicheroperationen die verbleibende Kapazität nutzen. Integration in den gemeinsam genutzten Speicher/L1-Cache 570 ermöglicht, dass der gemeinsam genutzte Speicher/L1-Cache 570 als Hochdurchsatz-Conduit für das Streaming von Daten fungiert und gleichzeitig Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und geringer Latenz aufweist.
  • Bei der Konfiguration für die allgemeine parallele Berechnung kann im Vergleich zur Grafikverarbeitung eine einfachere Konfiguration verwendet werden. Insbesondere werden die in 3 gezeigten Grafikverarbeitungseinheiten mit fester Funktion umgangen, wodurch ein viel einfacheres Programmiermodell entsteht. In der Allzweckkonfiguration für parallele Berechnungen weist die Arbeitsverteilungseinheit 325 Thread-Blöcke direkt den DPCs 420 zu und verteilt sie. Die Threads in einem Block führen dasselbe Programm aus und verwenden eine eindeutige Thread-ID in der Berechnung, um sicherzustellen, dass jeder Thread einzigartige Ergebnisse generiert, und zwar unter Verwendung des SM 440 zum Ausführen des Programms und Durchführen von Berechnungen, des gemeinsam genutzten Speichers/L1-Cache 570 zum Kommunizieren zwischen Threads und der LSU 554 zum Lesen und Schreiben des globalen Speichers über den gemeinsam genutzten Speicher/L1-Cache 570 und die Speicherpartitionseinheit 380. Wenn er für die allgemeine parallele Berechnung konfiguriert ist, kann der SM 440 auch Befehle schreiben, mit die die Scheduler-Einheit 320 verwendet werden kann, um neue Arbeiten an den DPCs 420 zu starten.
  • Die PPU 300 kann in einem Desktop-Computer, einem Laptop, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einer drahtlosen tragbaren Vorrichtung), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einem Fahrzeug, einer am Kopf montierten Anzeige, einer tragbaren elektronischen Vorrichtung und dergleichen beinhaltet sein. In einer Ausführungsform ist die PPU 300 auf einem einzelnen Halbleitersubstrat umgesetzt. In einer anderen Ausführungsform ist die PPU 300 zusammen mit einer oder mehreren anderen Vorrichtung wie etwa zusätzlichen PPUs 300, dem Speicher 304, einer RISC-CPU (reduced instruction set computer), einer Speicherverwaltungseinheit (memory management unit - MMU), einem Digital-Analog-Wandler (DAC) und dergleichen in einem System-on-a-Chip (SoC) beinhaltet.
  • In einer Ausführungsform kann die PPU 300 auf einer Grafikkarte beinhaltet sein, die eine oder mehrere Speichervorrichtungen beinhaltet. Die Grafikkarte kann dazu konfiguriert sein, mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden zu sein. In einer weiteren Ausführungsform kann die PPU 300 eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein Parallelprozessor sein, der in dem Chipsatz der Hauptplatine beinhaltet ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Branchen eingesetzt, da Entwickler mehr Parallelität in Anwendungen wie etwa der Künstliche-Intelligenz-Computertechnik offenlegen und nutzen. Hochleistungs-GPU-beschleunigte Systeme mit Zehntausenden von Rechenknoten werden in Rechenzentren, Forschungseinrichtungen und Supercomputern eingesetzt, um immer größere Probleme zu lösen. Mit zunehmender Anzahl von Verarbeitungsvorrichtungen in den Hochleistungssystemen müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 5B ist ein konzeptionelles Diagramm eines Verarbeitungssystems 500, das unter Verwendung der PPU 300 aus 3 gemäß einer Ausführungsform umgesetzt ist. Das beispielhafte System 565 kann dazu konfiguriert sein, das in 2C gezeigte Verfahren 250 umzusetzen. Das Verarbeitungssystem 500 beinhaltet eine CPU 530, einen Schalter 510 und mehrere PPUs 300 und entsprechende Speicher 304. Der NVLink 310 stellt Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 300 bereit. Obwohl eine bestimmte Anzahl von Verbindungen von NVLink 310 und Zwischenverbindungen 302 in 5B dargestellt sind, kann die Anzahl der Verbindungen zu jeder der PPU 300 und der CPU 530 variieren. Der Schalter 510 bildet eine Schnittstelle zwischen der Zwischenverbindung 302 und der CPU 530. Die PPUs 300, die Speicher 304 und die NVLinks 310 können auf einer einzelnen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 525 zu bilden. In einer Ausführungsform unterstützt der Schalter 510 zwei oder mehr Protokolle, um eine Schnittstelle zwischen vielfältigen unterschiedlichen Verbindungen und/oder Links herzustellen.
  • In einer anderen Ausführungsform (nicht gezeigt) stellt der NVLink 310 eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 300 und der CPU 530 und den Schnittstellen des Schalters 510 zwischen der Zwischenverbindung 302 und jeder der PPUs 300 bereit. Die PPUs 300, die Speicher 304 und die Zwischenverbindung 302 können auf einer einzelnen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 525 zu bilden. In einer anderen Ausführungsform (nicht gezeigt) stellt die Zwischenverbindung 302 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 300 und der CPU 530 und den Schnittstellen des Schalters 510 zwischen jeder der PPUs 300 unter Verwendung des NVLinks 310 bereit, um eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 300 bereitzustellen. In einer anderen Ausführungsform (nicht gezeigt) stellt der NVLink 310 eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 300 und der CPU 530 durch den Schalter 510 bereit. In einer weiteren Ausführungsform (nicht gezeigt) stellt die Zwischenverbindung 302 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 300 direkt bereit. Eine oder mehrere der Hochgeschwindigkeitskommunikationsverbindungen des NVLinks 310 können als physische NVLink-Zwischenverbindung oder entweder als On-Chip- oder On-Die-Verbindung unter Verwendung des gleichen Protokolls wie der NVLink 310 umgesetzt werden.
  • Im Zusammenhang mit der vorliegenden Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche integrierte Schaltung auf Halbleiterbasis beziehen, die auf einer Matrize oder einem Chip hergestellt ist. Es ist anzumerken, dass sich der Begriff Einzelhalbleiterplattform auch auf Mehrchipmodule mit erhöhter Konnektivität beziehen kann, die den Betrieb auf dem Chip simulieren und wesentliche Verbesserungen gegenüber der Verwendung einer herkömmlichen Busumsetzung erzielen. Natürlich können die verschiedenen Schaltungen oder Vorrichtungen auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen angeordnet sein, je nach den Wünschen des Benutzers. Alternativ kann das Parallelverarbeitungsmodul 525 als Leiterplattensubstrat umgesetzt sein und jede(r) der PPUs 300 und/oder der Speicher 304 können verpackte Vorrichtungen sein. In einer Ausführungsform befinden sich die CPU 530, der Schalter 510 und das Parallelverarbeitungsmodul 525 auf einer einzelnen Halbleiterplattform.
  • In einer Ausführungsform beträgt die Signalisierungsrate jedes NVLinks 310 20 bis 25 Gigabits/Sekunde und jede PPU 300 beinhaltet sechs Schnittstellen mit NVLinks 310 (wie in 5B gezeigt, sind fünf Schnittstellen mit NVLinks 310 für jede PPU 300 beinhaltet). Jeder NVLink 310 bietet eine Datenübertragungsrate von 25 Gigabytes/Sekunde in jede Richtung, mit sechs Verbindungen, die 300 Gigabytes/Sekunde bereitstellen. Die NVLinks 310 können ausschließlich für die Kommunikation von PPU zu PPU verwendet werden, wie in 5B gezeigt, oder für eine Kombination von PPU zu PPU und PPU zu CPU, wenn die CPU 530 auch eine oder mehrere Schnittstellen mit NVLinks 310 beinhaltet.
  • In einer Ausführungsform ermöglicht der NVLink 310 direkten Lade-/Speicher-/unteilbaren Zugriff von der CPU 530 auf den Speicher 304 jeder PPU 300. In einer Ausführungsform unterstützt der NVLink 310 Kohärenzoperationen, wodurch Daten, die aus den Speichern 304 gelesen werden, in der Cache-Hierarchie der CPU 530 gespeichert werden können, wodurch die Cache-Zugriffslatenz für die CPU 530 verringert wird. In einer Ausführungsform beinhaltet der NVLink 310 Unterstützung von Adressenübersetzungsdiensten (address translation services - ATS), was der PPU 300 ermöglicht, direkt auf Seitentabellen innerhalb der CPU 530 zuzugreifen. Einer oder mehrere der NVLinks 310 können auch dazu konfiguriert sein, in einem Energiesparmodus zu arbeiten.
  • 5C veranschaulicht ein beispielhaftes System 565 in dem die verschiedenen Architekturen und/oder die Funktionalität der verschiedenen vorherigen Ausführungsformen umgesetzt sein können. Das beispielhafte System 565 kann dazu konfiguriert sein, das in 2C gezeigte Verfahren 250 umzusetzen.
  • Wie gezeigt ist ein System 565 bereitgestellt, das mindestens eine Zentraleinheit 530 beinhaltet, die mit einem Kommunikationsbus 575 verbunden ist. Der Kommunikationsbus 575 kann unter Verwendung eines beliebigen geeigneten Protokolls umgesetzt werden, wie etwa PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport oder ein anderes Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll. Das System 565 beinhaltet ebenfalls einen Hauptspeicher 540. Steuerlogik (Software) und Daten werden in dem Hauptspeicher 540 gespeichert, der die Form eines Direktzugriffsspeichers (RAM) annehmen kann.
  • Das System 565 beinhaltet ebenfalls Eingangsvorrichtungen 560, das Parallelverarbeitungssystem 525 und Anzeigevorrichtungen 545, z. B. eine herkömmliche CRT (Kathodenstrahlröhre), LCD (Flüssigkristallanzeige), LED (Leuchtdiode), Plasmaanzeige oder dergleichen. Benutzereingaben können von den Eingabevorrichtungen 560 empfangen werden, z. B. Tastatur, Maus, Touchpad, Mikrofon und dergleichen. Jedes der vorgenannten Module und/oder der Vorrichtungen können sogar auf einer einzelnen Halbleiterplattform angeordnet sein, um das System 565 zu bilden. Alternativ können die verschiedenen Module auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen angeordnet sein, je nach den Wünschen des Benutzers.
  • Ferner kann das System 565 zu Kommunikationszwecken über eine Netzwerkschnittstelle 535 an ein Netzwerk (z. B. einem Telekommunikationsnetzwerk, einem lokalen Netzwerk (LAN), einem drahtlosen Netzwerk, einem Weitverkehrsnetzwerk (WAN) wie etwa dem Internet, einem Peer-to-Peer-Netzwerk, einem Kabelnetzwerk oder einem Netzwerk oder dergleichen) gekoppelt sein.
  • Das System 565 kann auch einen Sekundärmassenspeicher (nicht gezeigt) beinhalten. Der Sekundärmassenspeicher 610 beinhaltet zum Beispiel ein Festplattenlaufwerk und/oder ein Wechseldatenträgerlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein CD-Laufwerk, ein DVD-Laufwerk (Digital Versatile Disk), eine Aufnahmevorrichtung und einen USB-Flash-Speicher (Universal Serial Bus) darstellt. Das Wechseldatenträgerlaufwerk liest von und/oder schreibt auf bekannte Weise in eine Wechselspeichereinheit.
  • Computerprogramme oder Computersteuerlogikalgorithmen können in dem Hauptspeicher 540 und/oder dem Sekundärmassenspeicher gespeichert sein. Derartige Computerprogramme ermöglichen es dem System 565, verschiedene Funktionen auszuführen, wenn sie ausgeführt werden. Der Speicher 540, der Massenspeicher und/oder jeder andere Massenspeicher ist ein mögliches Beispiel für computerlesbare Medien.
  • Die Architektur und/oder die Funktionalität der verschiedenen vorhergehenden Figuren kann im Zusammenhang mit einem allgemeinen Computersystem, einem Leiterplattensystem, einem für Unterhaltungszwecke bestimmten Spielkonsolensystem, einem anwendungsspezifischen System und/oder jedem anderen gewünschten System umgesetzt sein. Zum Beispiel kann das System 565 die Form eines Desktop-Computers, eines Laptops, eines Tablet-Computers, Servern, Supercomputern, eines Smartphones (z. B. einer drahtlosen tragbaren Vorrichtung), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, einer am Kopf montierten Anzeige, einer tragbaren elektronischen Vorrichtung, einer Mobiltelefonvorrichtung, eines Fernsehers, Spielkonsolen, eines Embedded-Systems und/oder einer anderen Art von Logik annehmen.
  • Wenngleich vorstehend verschiedene Ausführungsformen beschrieben wurden, versteht es sich, dass diese lediglich als Beispiele und nicht der Einschränkung dienen. Daher sollen die Breite und der Umfang einer bevorzugten Ausführungsform durch keines der vorstehend beschriebenen Ausführungsbeispiele eingeschränkt werden, sondern sollen lediglich in Übereinstimmung mit den folgenden Patentansprüchen und ihren Äquivalenten definiert sein.
  • Grafikverarbeitungspipeline
  • In einer Ausführungsform, umfasst die PPU 300 eine Grafikverarbeitungseinheit (GPU). Die PPU 300 ist dazu konfiguriert, Befehle zu empfangen, die Shader-Programme zum Verarbeiten von Grafikdaten angeben. Grafikdaten können als eine Reihe von Primitiven wie etwa Punkte, Linien, Dreiecke, Quader, Dreiecksstreifen und dergleichen definiert werden. In der Regel beinhaltet eine Primitive Daten, die eine Anzahl von Scheitelpunkten für die Primitive angeben (z. B. in einem Modellraum-Koordinatensystem), sowie Attribute, die jedem Scheitelpunkt der Primitive zugeordnet sind. Die PPU 300 kann dazu konfiguriert sein, die Grafikprimitive zu verarbeiten, um einen Bildpuffer zu erzeugen (z. B. Pixeldaten für jedes der Pixel der Anzeige).
  • Eine Anwendung schreibt Modelldaten für eine Szene (z. B. eine Sammlung von Eckpunkten und Attributen) in einen Speicher wie etwa einen Systemspeicher oder einen Speicher 304. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an den Treiberkernel durch, der das Rendern und Anzeigen der Modelldaten anfordert. Der Treiberkernel liest die Modelldaten und schreibt Befehle in den einen oder die mehreren Streams, um Operationen zum Verarbeiten der Modelldaten auszuführen. Die Befehle können auf verschiedene Shader-Programme verweisen, die auf den SMs 440 der PPU 300 umgesetzt werden sollen, einschließlich eines oder mehrerer Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader und Pixel-Shader. Zum Beispiel können einer oder mehrere der SMs 440 dazu konfiguriert sein, ein Vertex-Shader-Programm auszuführen, das eine Anzahl von durch die Modelldaten definierten Vertices verarbeitet. In einer Ausführungsform können die verschiedenen SMs 440 dazu konfiguriert sein, verschiedene Shader-Programme gleichzeitig auszuführen. Zum Beispiel kann eine erste Teilmenge von SMs 440 dazu konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Teilmenge von SMs 440 dazu konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Teilmenge von SMs 440 verarbeitet Scheitelpunktdaten, um verarbeitete Scheitelpunktdaten zu erzeugen, und schreibt die verarbeiteten Scheitelpunktdaten in den L2-Cache 460 und/oder den Speicher 304. Nachdem die verarbeiteten Scheitelpunktdaten gerastert wurden (z. B. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert wurden), um Fragmentdaten zu erzeugen, führt die zweite Teilmenge der SMs 440 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt und in den Rahmenpuffer im Speicher 304 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden und unterschiedliche Daten aus derselben Szene in einer Pipeline-Weise verarbeiten, bis alle Modelldaten für die Szene in den Bildpuffer gerendert wurden. Dann wird der Inhalt des Bildpuffers zur Anzeige auf einer Anzeigevorrichtung an eine Anzeigesteuerung übertragen.
  • 6 ist ein konzeptionelles Diagramm einer Grafikverarbeitungspipeline 600, die unter Verwendung der PPU 300 aus 3 gemäß einer Ausführungsform umgesetzt ist. Die Grafikverarbeitungspipeline 600 ist ein abstraktes Ablaufdiagramm der Verarbeitungsschritte, die umgesetzt sind, um computergenerierte 2D-Bilder aus 3D-Geometriedaten zu erzeugen. Bekanntlich können Pipeline-Architekturen Operationen mit langer Latenz effizienter ausführen, indem sie die Operation in mehrere Stufen aufteilen, wobei die Ausgabe jeder Stufe an die Eingabe der nächsten aufeinanderfolgenden Stufe gekoppelt ist. Somit empfängt die Grafikverarbeitungspipeline 600 Eingangsdaten 601, die von einer Stufe zur nächsten Stufe der Grafikverarbeitungspipeline 600 übertragen werden, um Ausgangsdaten 602 zu erzeugen. In einer Ausführungsform kann die Grafikverarbeitungspipeline 600 eine Grafikverarbeitungspipeline darstellen, die durch die OpenGL®-API definiert ist. Wahlweise kann die Grafikverarbeitungspipeline 600 im Kontext der Funktionalität und Architektur der vorhergehenden Figuren und/oder aller nachfolgenden Figuren umgesetzt sein.
  • Wie in 6 gezeigt, umfasst die Grafikverarbeitungspipeline 600 eine Pipeline-Architektur, die eine Anzahl von Stufen beinhaltet. Die Stufen beinhalten unter anderem eine Datensammelstufe 610, eine Scheitelpunktschattierungsstufe 620, eine Primitivensammelstufe 630, eine Geometrieschattierungsstufe 640, eine Viewport-Skalierungs-, Cull- und Clip-(VSCC-)Stufe 650, eine Rasterisierungsstufe 660, eine Fragmentschattierungsstufe 670 und eine Rasteroperationsstufe 680. In einer Ausführungsform umfassen die Eingabedaten 601 Befehle, die die Verarbeitungseinheiten dazu konfigurieren, die Stufen der Grafikverarbeitungspipeline 600 und die durch die Stufen zu verarbeitenden geometrischen Primitiven (z. B. Punkte, Linien, Dreiecke, Quader, Dreiecksstreifen oder Lüfter usw.) umzusetzen. Die Ausgabedaten 602 können Pixeldaten (z. B. Farbdaten) umfassen, die in einen Bildpuffer oder eine andere Art von Oberflächendatenstruktur in einem Speicher kopiert werden.
  • Die Datensammelstufe 610 empfängt die Eingabedaten 601, die Scheitelpunktdaten für Oberflächen höherer Ordnung, Grundelemente oder dergleichen spezifizieren. Die Datensammelstufe 610 sammelt die Scheitelpunktdaten in einem temporären Massenspeicher oder einer Warteschleife, wie etwa durch Empfangen eines Befehls vom Hostprozessor, der einen Zeiger auf einen Puffer im Speicher beinhaltet, und Lesen der Scheitelpunktdaten aus dem Puffer. Die Scheitelpunktdaten werden dann zur Verarbeitung an die Scheitelpunktschattierungsstufe 620 übertragen.
  • Die Scheitelpunktschattierungsstufe 620 verarbeitet Scheitelpunktdaten, indem eine Reihe von Operationen (z. B. ein Scheitelpunkt-Shader oder ein Programm) einmal für jeden der Scheitelpunkte ausgeführt wird. Scheitelpunkte können z. B. als 4-Koordinaten-Vektor angegeben werden (z. B. <x, y, z, w>), der mit einem oder mehreren Scheitelpunktattributen zusammenhängt (z. B. Farbe, Texturkoordinaten, Oberflächennormale usw.). Die Scheitelpunktschattierungsstufe 620 kann einzelne Scheitelpunktattribute wie etwa Position, Farbe, Texturkoordinaten und dergleichen manipulieren. Anders ausgedrückt führt die Scheitelpunktschattierungsstufe 620 Operationen an den Scheitelpunktkoordinaten oder anderen Scheitelpunktattributen aus, die einem Scheitelpunkt zugeordnet sind. Derartige Operationen beinhalten üblicherweise Beleuchtungsoperationen (z. B. Ändern von Farbattributen für einen Scheitelpunkt) und Transformationsoperationen (z. B. Ändern des Koordinatenraums für einen Scheitelpunkt). Zum Beispiel können Scheitelpunkte unter Verwendung von Koordinaten in einem Objektkoordinatenraum spezifiziert werden, die durch Multiplizieren der Koordinaten mit einer Matrix transformiert werden, die die Koordinaten aus dem Objektkoordinatenraum in einen Weltkoordinatenraum oder einen Raum der normalisierten Gerätekoordinate (normalized device coordinate - NCD) übersetzt. Die Scheitelpunktschattierungsstufe 620 erzeugt transformierte Scheitelpunktdaten, die an die Primitivensammelstufe 630 übertragen werden.
  • Die Primitivensammelstufe 630 sammelt Scheitelpunkte, die von der Scheitelpunktschattierungsstufe 620 ausgegeben werden, und gruppiert die Scheitelpunkte in geometrische Primitive zur Verarbeitung durch die Geometrieschattierungsstufe 640. Zum Beispiel kann die Primitivensammelsstufe 630 dazu konfiguriert sein, alle drei aufeinanderfolgenden Scheitelpunkte als geometrische Primitive (z. B. ein Dreieck) zur Übertragung an die Geometrieschattierungsstufe 640 zu gruppieren. In einigen Ausführungsformen können bestimmte Scheitelpunkte für aufeinanderfolgende geometrische Primitiven wiederverwendet werden (z. B. können zwei aufeinanderfolgende Dreiecke in einem Dreiecksstreifen zwei Scheitelpunkte teilen). Die Primitivensammelstufe 630 überträgt geometrische Grundelemente (z. B. eine Sammlung zugehöriger Eckpunkte) an die Geometrieschattierungsstufe 640.
  • Die Geometrieschattierungsstufe 640 verarbeitet geometrische Grundelemente durch Ausführen einer Reihe von Operationen (z. B. eines Geometrie-Shaders oder -Programms) an den geometrischen Primitiven. Tessellationsoperationen können aus jedem geometrischen Grundelement ein oder mehrere geometrische Grundelemente erzeugen. Anders ausgedrückt kann die Geometrieschattierungsstufe 640 jede geometrische Primitive in ein feineres Netz von zwei oder mehr geometrischen Primitiven zur Verarbeitung durch den Rest der Grafikverarbeitungspipeline 600 unterteilen. Die Geometrieschattierungsstufe 640 überträgt geometrische Primitiven an die Viewport-SCC-Stufe 650.
  • In einer Ausführungsform kann die Grafikverarbeitungspipeline 600 innerhalb eines Streaming-Multiprozessors arbeiten und die Scheitelpunktschattierungsstufe 620, die Pimitivesammelstufe 630, die Geometrieschattierungsstufe 640, die Fragmentschattierungsstufe 670 und/oder damit zusammenhängende Hardware/Software können nacheinander Verarbeitungsvorgänge ausführen. Sobald die sequentiellen Verarbeitungsvorgänge abgeschlossen sind, kann in einer Ausführungsform die Viewport-SCC-Stufe 650 die Daten verwenden. In einer Ausführungsform können Primitivdaten, die von einer oder mehreren der Stufen in der Grafikverarbeitungspipeline 600 verarbeitet werden, in einen Cache geschrieben werden (z. B. Ll-Cache, Vertex-Cache usw.). In diesem Fall kann in einer Ausführungsform die Viewport-SCC-Stufe 650 auf die Daten im Cache zugreifen. In einer Ausführungsform sind die Viewport-SCC-Stufe 650 und die Rasterungsstufe 660 als Schaltung mit fester Funktion umgesetzt.
  • Die Viewport-SCC-Stufe 650 führt das Skalieren, Aussondern und Abschneiden des Ansichtsfensters der geometrischen Grundelemente durch. Jede Fläche, die gerendert ist, hängt mit einer abstrakten Kameraposition zusammen. Die Kameraposition stellt einen Ort eines Betrachters dar, der die Szene betrachtet, und definiert ein Betrachtungsfrustum, das die Objekte der Szene einschließt. Das Betrachtungsfrustum kann eine Betrachtungsebene, eine hintere Ebene und vier Schnittebenen beinhalten. Jede geometrische Primitive, die sich vollständig außerhalb des Betrachtungsfrustums befindet, kann ausgesondert (z. B. verworfen) werden, da die geometrische Primitive nicht zur endgültigen gerenderten Szene beiträgt. Jedes geometrische Grundelement, das sich teilweise innerhalb des Betrachtungsfrustums und teilweise außerhalb des Betrachtungsfrustums befindet, kann abgeschnitten werden (z. B. in ein neues geometrisches Grundelement umgewandelt werden, das innerhalb des Betrachtungsfrustums eingeschlossen ist. Darüber hinaus können geometrische Primitiven jeweils auf Grundlage einer Tiefe des Betrachtungsfrustums skaliert werden. Alle potentiell sichtbaren geometrischen Primitiven werden dann an die Rasterisierungsstufe 660 übertragen.
  • Die Rasterisierungsstufe 660 wandelt die geometrischen 3D-Grundelemente in 2D-Fragmente um (z. B. zur Anzeige verwendbar usw.). Die Rasterisierungsstufe 660 kann dazu konfiguriert sein, die Scheitelpunkte der geometrischen Primitiven zu verwenden, um einen Satz von Ebenengleichungen aufzustellen, aus denen verschiedene Attribute interpoliert werden können. Die Rasterisierungsstufe 660 kann auch eine Abdeckungsmaske für mehrere Pixel berechnen, die angibt, ob eine oder mehrere Stichprobenstellen für das Pixel die geometrische Primitive abfangen. In einer Ausführungsform kann auch ein Z-Test durchgeführt werden, um zu bestimmen, ob das geometrische Grundelement durch andere geometrische Grundelemente verdeckt ist, die bereits gerastert wurden. Die Rasterisierungsstufe 660 erzeugt Fragmentdaten (z. B. interpolierte Scheitelpunktattribute, die einer bestimmten Stichprobenstelle für jedes abgedeckte Pixel zugeordnet sind), die an die Fragmentschattierungsstufe 670 übertragen werden.
  • Die Fragmentschattierungsstufe 670 verarbeitet Fragmentdaten durch Durchführen eines Satzes von Operationen (z. B. ein Fragment-Shader oder ein Programm) an jedem der Fragmente. Die Fragmentschattierungsstufe 670 kann Pixeldaten (z. B. Farbwerte) für das Fragment erzeugen, wie etwa durch Ausführen von Beleuchtungsoperationen oder Stichprobentexturabbildungen unter Verwendung interpolierter Texturkoordinaten für das Fragment. Die Fragmentschattierungsstufe 670 erzeugt Pixeldaten, die an die Rasteroperationsstufe 680 übertragen werden.
  • Die Rasteroperationsstufe 680 kann verschiedene Operationen an den Pixeldaten ausführen, wie etwa Alpha-Tests, Stencil-Tests und das Mischen der Pixeldaten mit anderen Pixeldaten, die anderen mit dem Pixel zusammenhängenden Fragmenten entsprechen. Wenn die Rasteroperationsstufe 680 die Verarbeitung der Pixeldaten (z. B. der Ausgabedaten 602) beendet hat, können die Pixeldaten in ein Renderziel wie einen Bildpuffer, einen Farbpuffer oder dergleichen geschrieben werden.
  • Es versteht sich, dass eine oder mehrere zusätzliche Stufen zusätzlich zu oder anstelle einer oder mehrerer der vorstehend beschriebenen Stufen in der Grafikverarbeitungspipeline 600 beinhaltet sein können. Verschiedene Umsetzungen der abstrakten Grafikverarbeitungspipeline können verschiedene Stufen umsetzen. Darüber hinaus können in einigen Ausführungsformen (wie etwa der Geometrieschattierungsstufe 640) eine oder mehrere der vorstehend beschriebenen Stufen aus der Grafikverarbeitungspipeline ausgeschlossen werden. Andere Arten von Grafikverarbeitungspipelines werden als im Umfang der vorliegenden Offenbarung liegend angesehen. Darüber hinaus kann jede der Stufen der Grafikverarbeitungspipeline 600 von einer oder mehreren dedizierten Hardwareeinheiten innerhalb eines Grafikprozessors wie etwa der PPU 300 umgesetzt werden. Andere Stufen der Grafikverarbeitungspipeline 600 können durch programmierbare Hardwareeinheiten wie etwa die SM 440 der PPU 300 umgesetzt werden.
  • Die Grafikverarbeitungspipeline 600 kann über eine Anwendung umgesetzt werden, die von einem Host-Prozessor wie einer CPU ausgeführt wird. In einer Ausführungsform kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (API) umsetzen, die verschiedene Funktionen definiert, die von einer Anwendung verwendet werden können, um grafische Daten zur Anzeige zu erzeugen. Der Gerätetreiber ist ein Softwareprogramm, das mehrere Anweisungen beinhaltet, die den Betrieb der PPU 300 steuern. Die API bietet eine Abstraktion für einen Programmierer, mit der ein Programmierer spezielle Grafikhardware wie etwa die PPU 300 verwenden kann, um die grafischen Daten zu erzeugen, ohne dass der Programmierer den spezifischen Befehlssatz für die PPU 300 verwenden muss. Die Anwendung kann einen API-Aufruf beinhalten, der an den Gerätetreiber für die PPU 300 weitergeleitet wird. Der Gerätetreiber interpretiert den API-Aufruf und führt verschiedene Vorgänge aus, um auf den API-Aufruf zu antworten. In einigen Fällen kann der Gerätetreiber Operationen ausführen, indem er Anweisungen auf der CPU ausführt. In anderen Fällen kann der Gerätetreiber zumindest teilweise Operationen ausführen, indem er Operationen an der PPU 300 unter Verwendung von einer Eingabe/Ausgabe-Schnittstelle zwischen der CPU und der PPU 300 verwendet. In einer Ausführungsform ist der Gerätetreiber dazu konfiguriert, die Grafikverarbeitungspipeline 600 unter Verwendung der Hardware der PPU 300 umzusetzen.
  • Innerhalb der PPU 300 können verschiedene Programme ausgeführt werden, um die verschiedenen Stufen der Grafikverarbeitungspipeline 600 umzusetzen. Zum Beispiel kann der Gerätetreiber einen Kernel auf der PPU 300 starten, um die Scheitelpunktschattierungsstufe 620 auf einem SM 440 (oder mehreren SMs 440) durchzuführen. Der Gerätetreiber (oder der von der PPU 300 ausgeführte anfängliche Kernel) kann auch andere Kernel auf der PPU 300 starten, um andere Stufen der Grafikverarbeitungspipeline 600 auszuführen, wie etwa die Geometrieschattierungsstufe 640 und die Fragmentschattierungsstufe 670. Zusätzlich können einige der Stufen der Grafikverarbeitungspipeline 600 auf Hardware mit fester Einheit umgesetzt sein, wie etwa einem Rasterisierer oder einem Datensammler, der innerhalb der PPU 300 umgesetzt ist. Es versteht sich, dass Ergebnisse von einem Kernel von einer oder mehreren dazwischenliegenden Hardwareeinheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 440 verarbeitet werden.
  • Bilder, die unter Verwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, können auf einem Monitor oder einer anderen Anzeigevorrichtung angezeigt werden. In einigen Ausführungsformen kann die Anzeigevorrichtung direkt an das System oder Prozessor gekoppelt sein, der die Bilder erzeugt oder rendert. In anderen Ausführungsformen kann die Anzeigevorrichtung indirekt an das System oder Prozessor gekoppelt sein, zum Beispiel über ein Netzwerk. Beispiele für derartige Netzwerke beinhalten das Internet, mobile Telekommunikationsnetzwerke, ein WIFI-Netzwerk sowie ein beliebiges anderes verkabeltes Netzwerk und/oder drahtloses Netzwerksystem. Wenn die Anzeigevorrichtung indirekt gekoppelt ist, können die vom System oder Prozessor erzeugten Bilder über das Netzwerk zur Anzeigevorrichtung gestreamt werden. Ein derartiges Streaming ermöglicht es zum Beispiel, Videospiele oder andere Anwendungen, die Bilder rendern, auf einem Server oder in einem Rechenzentrum auszuführen und die gerenderten Bilder auf einer oder mehreren Benutzervorrichtungen (wie etwa einem Computer, einer Videospielkonsole, einem Smartphone, einer anderen mobilen Vorrichtung usw.) zu übertragen und darauf anzuzeigen, die physisch vom Server oder Rechenzentrum getrennt sind. Daher können die hier offenbarten Techniken angewendet werden, um die gestreamten Bilder zu verbessern und um Dienste zu verbessern, die Bilder wie NVIDIA GeForce Now (GFN), Google Stadia und dergleichen streamen.
  • Maschinenlernen
  • Auf Prozessoren wie etwa der PPU 300 entwickelte Deep Neural Networks (DNNs) wurden für verschiedene Anwendungsfälle verwendet, von selbstfahrenden Autos bis hin zu einer schnelleren Arzneimittelentwicklung, von der automatischen Bildunterschrift in Online-Bilddatenbanken bis zur intelligenten Echtzeit-Sprachübersetzung in Videos Chat-Anwendungen. Deep Learning ist eine Technik, die den neuronalen Lernprozess des menschlichen Gehirns modelliert, kontinuierlich lernt, immer intelligenter wird und im Laufe der Zeit schneller genauere Ergebnisse liefert. Einem Kind wird zunächst von einem Erwachsenen beigebracht, verschiedene Formen korrekt zu identifizieren und zu klassifizieren, um schließlich Formen ohne Hilfe identifizieren zu können. Gleichermaßen muss ein Deep-Learning- oder neuronales Lernsystem in der Objekterkennung und -klassifizierung geschult werden, damit es bei der Identifizierung grundlegender Objekte, verdeckter Objekte usw. intelligenter und effizienter wird und Objekten gleichzeitig Kontext zuweist.
  • Auf der einfachsten Ebene betrachten Neuronen im menschlichen Gehirn verschiedene empfangene Eingaben, jeder dieser Eingaben werden Wichtigkeitsebenen zugewiesen und die Ausgabe wird an andere Neuronen weitergegeben, um darauf zu reagieren. Ein künstliches Neuron oder Perzeptron ist das grundlegendste Modell eines neuronalen Netzwerks. In einem Beispiel kann ein Perzeptron eine oder mehrere Eingaben empfangen, die verschiedene Merkmale eines Objekts darstellen, das das Perzeptron zum Erkennen und Klassifizieren trainiert, und jedem dieser Merkmale wird ein bestimmtes Gewicht zugewiesen, auf Grundlage der Wichtigkeit dieses Merkmals bei der Definition des Form eines Objekts.
  • Ein DNN-Modell (Deep Neural Network) beinhaltet mehrere Schichten vieler verbundener Knoten (z. B. Perzeptrone, Boltzmann-Maschinen, radiale Basisfunktionen, Faltungsschichten usw.), die mit enormen Mengen an Eingabedaten trainiert werden können, um komplexe Probleme mit hoher Genauigkeit schnell zu lösen. In einem Beispiel zerlegt eine erste Schicht des DNN-Modells ein Eingabebild eines Automobils in verschiedene Abschnitte und sucht nach grundlegenden Mustern wie etwa Linien und Winkeln. Die zweite Schicht setzt die Linien zusammen, um nach Mustern höherer Ebenen wie etwa Rädern, Windschutzscheiben und Spiegeln zu suchen. Die nächste Schicht identifiziert den Fahrzeugtyp, und die letzten Schichten erzeugen eine Beschriftung für das Eingabebild, die das Modell einer bestimmten Automarke identifiziert.
  • Sobald das DNN trainiert ist, kann das DNN bereitgestellt und verwendet werden, um Objekte oder Muster in einem als Inferenz bekannten Prozess zu identifizieren und zu klassifizieren. Beispiele für Inferenz (der Prozess, durch den ein DNN nützliche Informationen aus einer bestimmten Eingabe extrahiert) beinhalten das Identifizieren handgeschriebener Nummern auf Schecks, die an Geldautomaten hinterlegt sind, das Identifizieren von Bildern von Freunden auf Fotos, das Liefern von Filmempfehlungen an über fünfzig Millionen Benutzer, das Identifizieren und Klassifizieren verschiedener Typen von Autos, Fußgängern und Straßengefahren in fahrerlosen Autos oder die Übersetzung menschlicher Sprache in Echtzeit.
  • Während des Trainings fließen Daten in einer Vorwärtsausbreitungsphase durch das DNN, bis eine Vorhersage erstellt wird, die eine der Eingabe entsprechende Bezeichnung anzeigt. Wenn das neuronale Netzwerk die Eingabe nicht korrekt beschriftet, werden Fehler zwischen der korrekten Beschriftung und der vorhergesagten Beschriftung analysiert und die Gewichte für jedes Merkmal während einer Rückwärtsausbreitungsphase angepasst, bis das DNN die Eingabe und andere Eingaben in einem Trainingsdatensatz korrekt beschriftet. Das Training komplexer neuronaler Netze erfordert eine enorme Menge an paralleler Rechenleistung, einschließlich Gleitkommamultiplikationen und -additionen, die von der PPU 300 unterstützt werden. Inferenz ist weniger rechenintensiv als Training, da es sich um einen latenzempfindlichen Prozess handelt, bei dem ein trainiertes neuronales Netzwerk auf neue Eingaben angewendet wird, die es zuvor noch nicht gesehen hat, um Bilder zu klassifizieren, Sprache zu übersetzen und im Allgemeinen neue Informationen abzuleiten.
  • Neuronale Netzwerke stützen sich stark auf mathematische Matrixoperationen, und komplexe mehrschichtige Netzwerke erfordern enorme Mengen an Gleitkomma-Leistung und Bandbreite für Effizienz und Geschwindigkeit. Mit Tausenden von Prozessorkernen, die für Matrixmathematikoperationen optimiert sind und eine Leistung von zehn bis Hunderten von TFLOPS liefern, ist die PPU 300 eine Computerplattform, die die Leistung liefert, die für Anwendungen mit künstlicher Intelligenz und Maschinenlernen auf der Basis eines tiefen neuronalen Netzwerks erforderlich ist.
  • Darüber hinaus können Bilder, die unter Verwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die zum Erkennen von Objekten und Umgebungen in der realen Welt verwendet werden. Derartige Bilder können Szenen von Straßen, Fabriken, Gebäuden, städtischen Umgebungen, ländlichen Umgebungen, Menschen, Tieren und anderen physischen Objekten oder realen Umgebungen beinhalten. Derartige Bilder können verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die in Maschinen oder Robotern verwendet werden, um physische Objekte in der realen Welt zu manipulieren, zu handhaben oder zu modifizieren. Darüber hinaus können derartige Bilder verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die in autonomen Fahrzeugen verwendet werden, um die Fahrzeuge durch die reale Welt zu navigieren und zu bewegen. Zusätzlich können Bilder, die unter Verwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, verwendet werden, um Informationen an Benutzer derartiger Maschinen, Roboter und Fahrzeuge zu übermitteln.
  • Es wird angemerkt, dass die hier beschriebenen Techniken in ausführbaren Befehlen beinhaltet sein können, die in einem computerlesbaren Medium zur Verwendung durch oder in Verbindung mit einer prozessorbasierten Befehlsausführungsmaschine, einem System, einer Vorrichtung oder einer Vorrichtung gespeichert sind. Der Fachmann wird zu schätzen wissen, dass für einige Ausführungsformen verschiedene Arten von computerlesbaren Medien zum Speichern von Daten beinhaltet sein können. Wie hierin verwendet, umfasst ein „computerlesbares Medium“ eines oder mehrere geeignete Medien zum Speichern der ausführbaren Anweisungen eines Computerprogramms, so dass die Befehlsausführungsmaschine, das System, die Einrichtung oder die Vorrichtung die Anweisungen von dem computerlesbaren Medium lesen (oder abrufen) können und die Anweisungen zum Ausführen der beschriebenen Ausführungsformen ausführen. Geeignete Massenspeicherformate beinhalten eines oder mehrere elektronische, magnetische, optische und elektromagnetische Formate. Eine nicht erschöpfende Liste herkömmlicher beispielhafter computerlesbarer Medien beinhaltet Folgendes: eine tragbare Computerdiskette; einen Direktzugriffsspeicher (RAM); einen Nur-Lese-Speicher (ROM); einen löschbaren programmierbaren Nur-Lese-Speicher (EPROM); eine Flash-Speichervorrichtung; und optische Speichervorrichtungen, einschließlich einer tragbaren CD (CD), einer tragbaren digitalen Videodisk (DVD) und dergleichen.
  • Es versteht sich, dass die Anordnung der in den beigefügten Figuren dargestellten Komponenten zur Veranschaulichung dient und dass andere Anordnungen möglich sind. Zum Beispiel können eines oder mehrere der hier beschriebenen Elemente ganz oder teilweise als elektronische Hardwarekomponente realisiert werden. Andere Elemente können in Software, Hardware oder einer Kombination aus Software und Hardware umgesetzt sein. Darüber hinaus können einige oder alle dieser anderen Elemente kombiniert werden, einige können ganz weggelassen werden und zusätzliche Komponenten können hinzugefügt werden, während die hierin beschriebene Funktionalität weiterhin erreicht wird. Somit kann der hier beschriebene Gegenstand in vielen verschiedenen Variationen ausgeführt sein, und alle derartigen Variationen werden als im Umfang der Ansprüche liegend angesehen.
  • Um das Verständnis des hier beschriebenen Themas zu erleichtern, werden viele Aspekte in Form von Handlungsabläufen beschrieben. Der Fachmann wird erkennen, dass die verschiedenen Aktionen von speziellen Schaltkreisen oder Schaltungen, von Programmanweisungen, die von einem oder mehreren Prozessoren ausgeführt werden, oder von einer Kombination von beiden ausgeführt werden können. Die Beschreibung einer Abfolge von Aktionen in diesem Dokument soll nicht bedeuten, dass die für die Durchführung dieser Abfolge beschriebene spezifische Reihenfolge eingehalten werden muss. Alle hier beschriebenen Verfahren können in jeder geeigneten Reihenfolge durchgeführt werden, sofern es hier nicht anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht.
  • Die Verwendung der Begriffe „ein“ und „eine“ und „der/die/das“ und ähnlicher Referenzen in dem Zusammenhang der Beschreibung des Gegenstands (insbesondere in dem Zusammenhang der folgenden Patentansprüche) soll so ausgelegt werden, dass sie sowohl den Singular als auch den Plural abdeckt, sofern hierin nicht anderweitig angegeben oder im eindeutigen Widerspruch zum Kontext. Die Verwendung des Begriffs „mindestens eines“ gefolgt von einer Liste von einem oder mehreren Elementen (z. B. „mindestens eines von A und B“) ist so auszulegen, dass ein Element aus den aufgelisteten Elementen (A oder B) oder eine beliebige Kombination von zwei oder mehr der aufgelisteten Elemente (A und B) ausgewählt wird, sofern hierin nicht anders angegeben oder durch den Kontext eindeutig widersprochen. Darüber hinaus dient die vorstehende Beschreibung nur zur Veranschaulichung und nicht zum Zweck der Einschränkung, da der angestrebte Schutzumfang durch die nachstehend dargelegten Ansprüche zusammen mit etwaigen Äquivalenten davon definiert wird. Die Verwendung von beliebigen und allen Beispielen oder beispielhafter Sprache (z. B. „wie etwa“), die hierin verwendet wird, soll den Gegenstand lediglich besser veranschaulichen und stellt keine Einschränkung hinsichtlich des Umfangs des Gegenstands dar, sofern nicht anders beansprucht. Die Verwendung des Begriffs „auf Grundlage von“ und anderer ähnlicher Ausdrücke, die eine Bedingung für die Erzielung eines Ergebnisses sowohl in den Ansprüchen als auch in der schriftlichen Beschreibung angeben, soll keine anderen Bedingungen ausschließen, die dieses Ergebnis bewirken. Keinerlei Formulierung in der Beschreibung sollte so ausgelegt werden, dass sie ein beliebiges nicht beanspruchtes Element als für die Umsetzung der beanspruchten Erfindung wesentlich angibt.

Claims (15)

  1. Computerumgesetztes Verfahren, das Folgendes umfasst: Auswählen einer ersten Warping-Funktion, die einen ersten Faktor eines Produktintegrals approximiert; Auswählen einer zweiten Warping-Funktion, die einen zweiten Faktor des Produktintegrals approximiert; Anpassen von Parametern der zweiten Warping-Funktion an die zweite Warping-Funktion, um eine angepasste erste Warping-Funktion zu erzeugen; Kombinieren der angepassten ersten Warping-Funktion und der zweiten Warping-Funktion, um eine angepasste Stichprobenverteilung zu erzeugen; und Anwenden der Stichprobenverteilung auf ein Produkt des ersten Faktors und des zweiten Faktors, um das Produktintegral zu approximieren.
  2. Computerumgesetztes Verfahren nach Anspruch 1, wobei Kombinieren der angepassten ersten Warping-Funktion und der zweiten Warping-Funktion Folgendes umfasst: Berechnen einer Zusammensetzung der angepassten ersten Warping-Funktion und der zweiten Warping-Funktion; und Berechnen einer umgekehrten Ableitung der Zusammensetzung, um die Stichprobenverteilung zu erzeugen.
  3. Computerumgesetztes Verfahren nach Anspruch 2, wobei die angepasste erste Warping-Funktion und die zweite Warping-Funktion und die Zusammensetzung in primärem Stichprobenraum dargestellt sind.
  4. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei die Parameter mehrere Stichprobenwerte der ersten Warping-Funktion beinhalten.
  5. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei die Parameter eine Spitze und eine Breite der ersten Warping-Funktion sind.
  6. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei der erste Faktor eine Kosinusfunktion ist und das Produktintegral ein direktes Beleuchtungsintegral ist.
  7. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, das ferner Verwenden der Probenverteilung zum Schattieren eines Pixels eines Bilds umfasst.
  8. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, das ferner Verwenden der Probenverteilung zum Schattieren einer Halbkugel umfasst, die um eine Flächennormale ausgerichtet ist, wenn ein Pixel eines Bilds unter Verwendung von Raytracing schattiert wird.
  9. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei die erste Warping-Funktion und die zweite Warping-Funktion aus einem Satz von Warping-Funktionen ausgewählt sind, die jeweils eine Wahrscheinlichkeitsdichtefunktion aufweisen, die in eindimensionale Wahrscheinlichkeitsdichtefunktionen mit einer definierten kumulativen Dichtefunktion und einer umgekehrten kumulativen Dichtefunktion faktorisiert.
  10. Computerumgesetztes Verfahren nach Anspruch 9, wobei der Satz von Warping-Funktionen bilineare, biquadratische Bezier- und trennbare Cauchy-Fensterfunktionen beinhaltet.
  11. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei das Anpassen von Parametern der ersten Warping-Funktion das Anwenden einer Umkehrfunktion der zweiten Warping-Funktion auf die Parameter der ersten Warping-Funktion umfasst.
  12. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei die Schritte zum Auswählen, Auswählen, Anpassen, Kombinieren und Anwenden auf einem Server oder in einem Datenzentrum ausgeführt werden, um ein Bild zu erzeugen, und das Bild zu einem Benutzergerät gestreamt wird.
  13. Computerumgesetztes Verfahren nach einem der vorhergehenden Ansprüche, wobei die Schritte zum Auswählen, Auswählen, Anpassen, Kombinieren und Anwenden ausgeführt werden, um ein Bild zu erzeugen, das zum Trainieren, Testen oder Zertifizieren eines neuronalen Netzwerks verwendet wird, das in einer Maschine, einem Roboter, oder einem autonomen Fahrzeug eingesetzt wird.
  14. System, das Folgendes umfasst: einen Speicher, der eine erste Warping-Funktion und eine zweite Warping-Funktion speichert; und einen an den Speicher gekoppelten Prozessor, der zu Folgendem konfiguriert ist: Auswählen der ersten Warping-Funktion, die einen ersten Faktor eines Produktintegrals approximiert; Auswählen der zweiten Warping-Funktion, die einen zweiten Faktor des Produktintegrals approximiert; Anpassen von Parametern der zweiten Warping-Funktion an die zweite Warping-Funktion, um eine angepasste erste Warping-Funktion zu erzeugen; Kombinieren der angepassten ersten Warping-Funktion und der zweiten Warping-Funktion, um eine angepasste Verteilung von Stichproben zu erzeugen; und Anwenden der Verteilung von Stichproben auf ein Produkt des ersten Faktors und des zweiten Faktors, um das Produktintegral zu approximieren.
  15. System nach Anspruch 14, das ferner dazu konfiguriert ist, ein Verfahren auszuführen, wie es in einem der Ansprüche 1 bis 13 erwähnt ist.
DE102021110598.6A 2020-06-12 2021-04-26 Schätzen von produktintegralen unter verwendung einer zusammensetzung von verzerrungen Pending DE102021110598A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/900,046 2020-06-12
US16/900,046 US11055381B1 (en) 2020-06-12 2020-06-12 Estimating product integrals using a composition of warps

Publications (1)

Publication Number Publication Date
DE102021110598A1 true DE102021110598A1 (de) 2021-12-16

Family

ID=76657902

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021110598.6A Pending DE102021110598A1 (de) 2020-06-12 2021-04-26 Schätzen von produktintegralen unter verwendung einer zusammensetzung von verzerrungen

Country Status (3)

Country Link
US (1) US11055381B1 (de)
CN (1) CN113808183B (de)
DE (1) DE102021110598A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109903217B (zh) * 2019-01-25 2023-05-02 北京百度网讯科技有限公司 图像变形方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8102394B2 (en) * 2006-12-14 2012-01-24 Mental Images Gmbh Computer graphics using meshless finite elements for light transport
US9665974B2 (en) * 2013-08-02 2017-05-30 Disney Enterprises, Inc. Methods and systems of joint path importance sampling
EP3206190A1 (de) * 2016-02-15 2017-08-16 Thomson Licensing Vorrichtung und verfahren zur verbesserung der effizienz von bildwiedergabe
WO2018014018A1 (en) * 2016-07-15 2018-01-18 University Of Central Florida Research Foundation, Inc. Synthetic data generation of time series data
US10388059B2 (en) * 2016-10-03 2019-08-20 Nvidia Corporation Stable ray tracing
US10600152B1 (en) * 2017-05-10 2020-03-24 Gopro, Inc. Systems and methods for parallax compensation
US11557022B2 (en) * 2017-07-27 2023-01-17 Nvidia Corporation Neural network system with temporal feedback for denoising of rendered sequences

Also Published As

Publication number Publication date
CN113808183B (zh) 2023-12-12
CN113808183A (zh) 2021-12-17
US11055381B1 (en) 2021-07-06

Similar Documents

Publication Publication Date Title
DE102019103059B4 (de) Hieb- und stichfester Strahl-Dreieck-Schnittpunkt
DE102019130889A1 (de) Schätzung der tiefe eines mit einer monokularen rgb-kamera aufgenommenen videodatenstroms
DE102018121282A1 (de) Differenzierbare rendering-pipeline für inverse graphik
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE102021119726A1 (de) Dreidimensionale objektrekonstruktion aus einem video
DE102019106123A1 (de) Dreidimensionale (3D) Posenschätzung von Seiten einer monokularen Kamera
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102018113845A1 (de) Systeme und Verfahren zum Trainieren von neuronalen Netzwerken mit dünnbesetzten Daten
DE102019128750A1 (de) Reduzierung des detailgrades eines polygonnetzes, um eine komplexität einer bildlich wiedergegebenen geometrie innerhalb einer szene zu verringern
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102018116552A1 (de) Sakkadische umleitung zur fortbewegung von virtueller realität
DE102019106996A1 (de) Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks
DE102021130031A1 (de) Erscheinungsbildgesteuerte automatische dreidimensionale modellierung
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE102021205690A1 (de) Trainieren neuronaler Netze mit begrenzten Daten unter Verwendung invertierbarer Augmentationsoperatoren
DE102021104310A1 (de) Reservoir-basiertes räumlich-zeitliches resampling nach wichtigkeit unter verwendung einer globalen beleuchtungsdatenstruktur
DE102021111335A1 (de) Techniken zum dynamischen komprimieren von speicherregionen, die einen einheitlichen wert haben
DE102022104142A1 (de) Strahldichte-caching in echtzeit durch ein neuronales netz für pfadverfolgungszwecke
DE102022121509A1 (de) Einzelbild-inversrendering
DE102020108526A1 (de) Adaptive pixelabtastreihenfolge für zeitlich dichtes rendern
DE112019001978T5 (de) Verbesserung des realismus von szenen mit wasseroberflächen beim rendern

Legal Events

Date Code Title Description
R012 Request for examination validly filed