Querverweis auf verwandte Patente und AnmeldungenCross-reference to related patents and applications
Diese Anmeldung bezieht sich auf die folgenden gemeinsam übertragenen US-Patente und Patentanmeldungen, deren gesamter Inhalt durch Bezugnahme aufgenommen wird: US-Anmeldung Nr. 14/563,872 mit dem Titel „Short Stack Traversal of Tree Data Structures“, eingereicht am 8. Dezember 2014; US-Patent Nr. 9,582,607 mit dem Titel „Block-Based Bounding Volume Hierarchy“; US-Patent Nr. 9,552,664 mit dem Titel „Relative Encoding For A Block-Based Bounding Volume Hierarchy“; US-Patent Nr. 9,569,559 mit dem Titel „Beam Tracing“, eingereicht am 18. März 2015; US-Patent Nr. 10,025,879 mit dem Titel „Tree Data Structures Based on a Plurality of Local Coordinate Systems“; US-Anmeldung Nr. 14/737,343 mit dem Titel „Block-Based Lossless Compression of Geometrie Data“, eingereicht am 11. Juni 2015; und die folgenden gleichzeitig hiermit eingereichten US-Anmeldungen:
- • US 16/101,066 mit dem Titel „Method for Continued Bounding Volume Hierarchy Traversal on Intersection without Shader Intervention“;
- • US 16/101,247 mit dem Titel „A Robust, Efficient Multiprocessor-Coprocessor Interface“;
- • US 16/101,180 mit dem Titel „Query-Specific Behavioral Modification of Tree Traversal“;
- • US 16/101,148 mit dem Titel „Conservative Watertight Ray Triangle Intersection“;
- • US 16/101,196 mit dem Titel „Method for Handling Out-of-Order Opaque and Alpha Ray/Primitive Intersections“; und
- • US 16/101,232 mit dem Titel „Method for Forward Progress and Programmable Timeouts of Tree Traversal Mechanisms in Hardware“.
This application relates to the following commonly assigned U.S. patents and patent applications, the entire contents of which are incorporated by reference: U.S. Application No. 14 / 563,872 entitled "Short Stack Traversal of Tree Data Structures", filed on December 8, 2014; U.S. Patent No. 9,582,607 entitled “Block-Based Bounding Volume Hierarchy”; U.S. Patent No. 9,552,664 entitled "Relative Encoding For A Block-Based Bounding Volume Hierarchy"; U.S. Patent No. 9,569,559 entitled "Beam Tracing", filed on March 18, 2015; U.S. Patent No. 10,025,879 with the title "Tree Data Structures Based on a Plurality of Local Coordinate Systems"; U.S. Application No. 14 / 737,343 entitled "Block-Based Lossless Compression of Geometry Data", filed on June 11, 2015; and the following U.S. applications filed hereby concurrently: - • US 16 / 101,066 entitled “Method for Continued Bounding Volume Hierarchy Traversal on Intersection without Shader Intervention”;
- • US 16 / 101,247 with the title "A Robust, Efficient Multiprocessor-Coprocessor Interface";
- • US 16 / 101,180 entitled "Query-Specific Behavioral Modification of Tree Traversal";
- • US 16 / 101,148 entitled “Conservative Watertight Ray Triangle Intersection”;
- • US 16 / 101,196 with the title "Method for Handling Out-of-Order Opaque and Alpha Ray / Primitive Intersections"; and
- • US 16 / 101,232 with the title "Method for Forward Progress and Programmable Timeouts of Tree Traversal Mechanisms in Hardware".
Gebietarea
Die vorliegende Technik bezieht sich auf Computergrafik und insbesondere auf Strahlverfolger (engl. Raytracer). Insbesondere bezieht sich die Technik auf Hardwarebeschleunigung von Computergrafikverarbeitung, einschließlich, aber nicht beschränkt auf Strahlverfolgung (engl. Raytracing). Konkreter bezieht sich die nicht einschränkende Beispiel-Technik hierin auf einen hardwarebasierten Traversierungs-Koprozessor, der eine Beschleunigungsdatenstruktur effizient traversiert, z. B. für Echtzeit-Strahlverfolgung. Noch konkreter stellt die Technik hierin einen verbesserten hardwarebasierten Scheduling-(Zeitablaufsteuerungs)-Cache-Speicher für Strahlverfolgungs-Begrenzungsvolumenhierarchie-Traversierung bereit. Die Technik hierin hat den Vorteil, dass Strahl-Anforderungen und zugehörige Tests in Übereinstimmung mit der gleichen Adressengruppierung geplant werden, um die Zeit zu verkürzen, in der Daten in einem Daten-RAM resident sein müssen, so dass auch andere Daten über den Cache gestreamt werden können. Dies ermöglicht eine reduzierte Cache-Speicher-Größe. Kleinere Fläche mit hoher Leistungsfähigkeit ermöglicht es, mehr Fläche besser für Datenpfad-Verbesserungen und andere Verbesserungen der Leistungsfähigkeit und/oder des Speichermanagements zu nutzen.The present technology relates to computer graphics and in particular to ray tracers. In particular, the technique relates to hardware acceleration of computer graphics processing, including but not limited to ray tracing. More specifically, the non-limiting example technique herein relates to a hardware-based traversal coprocessor that efficiently traverses an acceleration data structure, e.g. B. for real-time beam tracking. More specifically, the technology herein provides an improved hardware-based scheduling cache for ray tracing bounding volume hierarchy traversal. The technique herein has the advantage that beam requests and associated tests are scheduled in accordance with the same address grouping to shorten the time that data must reside in a data RAM so that other data is streamed across the cache can be. This enables a reduced cache size. Smaller area with high performance enables more area to be better used for data path improvements and other improvements in performance and / or storage management.
Hintergrund & KurzdarstellungBackground & abstract
Wenn Sie sich in der visuellen Szene vor Ihnen umsehen, werden Sie feststellen, dass einige der interessantesten visuellen Effekte, die Sie sehen, durch Lichtstrahlen erzeugt werden, die mit Oberflächen wechselwirken. Denn Licht ist das Einzige, was wir sehen. Wir sehen keine Objekte - wir sehen das Licht, das von den Objekten reflektiert oder gebrochen wird. Die meisten der Objekte, die wir sehen können, reflektieren Licht (die Farbe eines Objekts wird dadurch bestimmt, welche Teile des Lichts das Objekt reflektiert und welche Teile es absorbiert). Glänzende Oberflächen wie z. B. metallische Oberflächen, glänzende Oberflächen, Keramik, Flüssigkeitsoberflächen und eine Vielzahl anderer (auch die Hornhäute der menschlichen Augen) wirken als Spiegel, die Licht spiegelnd reflektieren. So reflektiert zum Beispiel eine glänzende Metalloberfläche Licht im gleichen Winkel, in dem es auf die Oberfläche trifft. Ein Objekt kann auch Schatten werfen, indem es verhindert, dass Licht auf andere Oberflächen trifft, die sich relativ zu einer Lichtquelle hinter dem Objekt befinden. Wenn Sie sich umsehen, werden Sie feststellen, dass die Anzahl und Art der Reflexionen und die Anzahl, Art und Länge der Schatten von vielen Faktoren abhängen, einschließlich der Anzahl und Art der Beleuchtungen in der Szene. Ein einzelne Punktlichtquelle wie z. B. eine einzelne weit entfernte Glühbirne erzeugt einzelne Reflexionen und harte Schatten. Flächenlichtquellen wie z. B. Fenster oder Flächenleuchten erzeugen andere Arten von Reflexions-Schlaglichtern und weichere Schatten. Mehrere Lichtquellen erzeugen typischerweise mehrere Reflexionen und komplexere Schatten (z. B. erzeugen drei getrennte Punktlichtquellen drei Schatten, die sich je nach der Position der Lichtquellen relativ zu einem Objekt überlappen können).If you look around in the visual scene in front of you, you will find that some of the most interesting visual effects you see are created by rays of light that interact with surfaces. Because light is the only thing we see. We don't see objects - we see the light that is reflected or refracted by the objects. Most of the objects we can see reflect light (the color of an object is determined by which parts of the light the object reflects and which parts it absorbs). Shiny surfaces such as B. metallic surfaces, shiny surfaces, ceramics, liquid surfaces and a variety of others (including the corneas of the human eyes) act as mirrors that reflect light in a specular manner. For example, a shiny metal surface reflects light at the same angle as it hits the surface. An object can also cast shadows by preventing light from hitting other surfaces that are behind the object relative to a light source. If you look around, you will find that the number and type of reflections and the number, type and length of shadows depend on many factors, including the number and type of lights in the scene. A single point light source such as B. a single distant light bulb creates single reflections and hard shadows. Area light sources such as B. Windows or panel lights produce other types of reflection highlights and softer shadows. Multiple light sources typically produce multiple reflections and more complex shadows (e.g., three separate point light sources create three shadows, which may overlap depending on the position of the light sources relative to an object).
Wenn Sie Ihren Kopf bewegen, während Sie die Szene betrachten, werden Sie feststellen, dass sich die Reflexionen in Position und Form ändern (die Schatten machen dasselbe). Indem Sie Ihren Standpunkt ändern, ändern Sie die verschiedenen Winkel der Lichtstrahlen, die Ihre Augen erkennen. Dies geschieht sofort - Sie bewegen Ihren Kopf, und die visuelle Szene ändert sich sofort.If you move your head while looking at the scene, you will notice that the reflections change in position and shape (the shadows do the same). By changing your point of view, you are changing the different angles of the light rays that your eyes recognize. This happens instantly - you move your head and the visual scene changes instantly.
Die einfache Handlung, eine Tasse Tee zu trinken, ist eine komplexe visuelle Erfahrung. Die verschiedenen glänzenden Oberflächen der glänzenden Keramik-Tasse auf dem Tisch vor Ihnen reflektieren jedes Licht im Raum, und die Tasse wirft einen Schatten für jedes Licht. Die bewegliche Oberfläche des Tees in der Tasse ist selbst reflektierend. Sie können kleine reflektierte Bilder der Lichtquellen auf der Oberfläche des Tees sehen, und noch kleinere Reflexionen auf dem Teil der Oberfläche des Tees, wo die Flüssigkeit die Wände der Tasse trifft. Die Becherwände werfen außerdem Schatten auf die Oberfläche der Flüssigkeit im Becher. Anheben der Tasse an Ihren Mund bewirkt, dass sich diese Reflexionen und Schatten verschieben und schimmern, wenn sich Ihr Standpunkt ändert und die Oberfläche der Flüssigkeit durch Bewegung bewegt wird. The simple act of drinking a cup of tea is a complex visual experience. The various shiny surfaces of the shiny ceramic cup on the table in front of you reflect every light in the room, and the cup casts a shadow for every light. The moving surface of the tea in the cup is self-reflecting. You can see small reflected images of the light sources on the surface of the tea, and even smaller reflections on the part of the surface of the tea where the liquid hits the walls of the cup. The cup walls also cast shadows on the surface of the liquid in the cup. Lifting the cup to your mouth causes these reflections and shadows to shift and shimmer when your position changes and the surface of the liquid is moved by movement.
Wir betrachten diese Komplexität von Reflexionen und Schatten als selbstverständlich. Unser Gehirn ist versiert darin, die Positionen, Größen und Formen von Schatten und Reflexionen zu entschlüsseln und sie als visuelle Hinweise zu verwenden. Zum Teil erkennen wir so die Position von Objekten zueinander, wie wir ein Objekt von einem anderen unterscheiden, und wie wir lernen, woraus Objekte bestehen. Unterschiedliche Objektoberflächen reflektieren unterschiedlich. Spiegelnde (spiegelartige) Reflexion von hartem Metall erzeugt Bilder von reflektierten Objekten, während diffuse Reflexion an rauen Oberflächen für Farbe verantwortlich ist und Objekte weicher beleuchtet. Schatten können weich und diffus oder hart und deutlich sein, je nach Art der Beleuchtung, und die Länge und Richtung der Schatten hängt vom Winkel der Lichtstrahlen in Bezug auf das Objekt und unsere Augen ab.We take this complexity of reflections and shadows for granted. Our brains are adept at deciphering the positions, sizes, and shapes of shadows and reflections and using them as visual cues. In part, we recognize the position of objects, how we distinguish one object from another, and how we learn what objects are made of. Different object surfaces reflect differently. Specular (mirror-like) reflection from hard metal creates images of reflected objects, while diffuse reflection on rough surfaces is responsible for color and illuminates objects more softly. Shadows can be soft and diffuse or hard and clear depending on the type of lighting, and the length and direction of the shadows depends on the angle of the light rays in relation to the object and our eyes.
Anfänger-Künstler versuchen typischerweise nicht, Reflexionen oder Schatten zu zeigen. Sie neigen dazu, flache Szenen zu zeichnen, die keine Schatten und keine Reflexionen oder Schlaglichter haben. Dasselbe galt für Computergrafik der Vergangenheit.Beginner artists typically don't try to show reflections or shadows. They tend to draw flat scenes that have no shadows and no reflections or highlights. The same was true for computer graphics of the past.
Echtzeit-Computergrafik hat sich in den letzten 30 Jahren enorm weiterentwickelt. Mit der Entwicklung leistungsfähiger Grafikprozessoren (GPUs) in den 80er Jahren, die 3D-Hardware-Grafikpipelines bereitstellen, wurde es möglich, 3D-Grafikanzeigen auf Basis von texturabgebildeten Polygon-Primitiven in Echtzeit als Antwort auf Benutzereingaben zu erzeugen. Solche Echtzeit-Grafikprozessoren basierten auf einer Technik namens Abtastsignalwandlungs-Rasterung (engl. scan conversion rasterization), die ein Mittel zum Bestimmen der Sichtbarkeit von einem einzelnen Punkt oder einer einzelnen Perspektive ist. Mittels dieser Methode werden dreidimensionale Objekte aus Flächen modelliert, die aus geometrischen Primitiven aufgebaut sind, typischerweise Polygonen wie z. B. Dreiecken. Der Abtastsignalwandlungs-Prozess erstellt und projiziert Primitiv-Polygon-Vertices auf eine Ansichtsebene und füllt die Punkte innerhalb der Kanten der Primitive aus. Siehe z. B. Foley, Van Dam, Hughes et al, Computer Graphics: Principles and Practice (2. Ausgabe Addison-Wesley 1995 & 3. Ausgabe Addison-Wesley 2014).Real-time computer graphics has evolved enormously in the past 30 years. With the development of powerful graphics processors (GPUs) in the 1980s that provide 3D hardware graphics pipelines, it became possible to generate 3D graphics displays based on texture-mapped polygon primitives in real time in response to user input. Such real-time graphics processors were based on a technique called scan conversion rasterization, which is a means of determining visibility from a single point or perspective. Using this method, three-dimensional objects are modeled from surfaces that are made up of geometric primitives, typically polygons such as z. B. triangles. The scanning signal conversion process creates and projects primitive polygon vertices onto a view plane and fills the points within the edges of the primitive. See e.g. B. Foley, Van Dam, Hughes et al, Computer Graphics: Principles and Practice (2nd Edition Addison-Wesley 1995 & 3rd Edition Addison-Wesley 2014).
Hardware wird seit langem verwendet, um zu bestimmen, wie jede Polygonfläche zu schattieren und texturabzubilden ist, und um die schattierten, texturabgebildeten Polygonflächen für Anzeige zu rastern. Typische dreidimensionale Szenen sind oft aus Millionen von Polygonen konstruiert. Schnelle moderne GPU-Hardware kann viele Millionen von Grafik-Primitiven für jedes Anzeige-Einzelbild (alle 1/30 oder 1/60 Sekunde) in Echtzeit als Antwort auf Benutzereingaben effizient verarbeiten. Die resultierenden Grafikanzeigen hat man bei einer Vielzahl von grafischen Echtzeit-Benutzeroberflächen verwendet, einschließlich, aber nicht beschränkt auf Augmented Reality, Virtual Reality, Videospiele und medizinische Bildgebung. Traditionell war eine solche interaktive Grafikhardware aber nicht im Stande, Reflexionen und Schatten genau zu modellieren und darzustellen.Hardware has long been used to determine how to shade and texture map each polygon area, and to rasterize the shaded texture-mapped polygon areas for display. Typical three-dimensional scenes are often constructed from millions of polygons. Fast modern GPU hardware can efficiently process millions of graphics primitives for each display frame (every 1/30 or 1/60 second) in real time in response to user input. The resulting graphics displays have been used in a variety of real-time graphical user interfaces, including but not limited to augmented reality, virtual reality, video games, and medical imaging. Traditionally, such interactive graphics hardware has not been able to accurately model and display reflections and shadows.
Manche haben auf dieser grundlegenden Abtastsignalwandlungs-Rasterungs-Methode andere Techniken aufgebaut, um es Echtzeit-Grafiksystemen zu ermöglichen, ein gewisses Maß an Realismus beim Rendern von Schatten und Reflexionen zu erreichen. Zum Beispiel hat man manchmal Texturabbildung (engl. Texture Mapping) verwendet, um Reflexionen und Schatten in einer 3D-Szene zu simulieren. Eine Möglichkeit, dies zu erreichen, besteht darin, Objekte aus verschiedenen Perspektiven zu transformieren, zu projizieren und zu rastern, die gerasterten Ergebnisse in Texturabbildungen zu schreiben und die Texturabbildungen abzutasten, um Reflexionsabbildung, Umgebungsabbildung und Schattenbildung zu ermöglichen. Obwohl sich diese Techniken als nützlich und moderat erfolgreich erwiesen haben, arbeiten sie nicht in allen Situationen gut. Zum Beispiel kann oft so genannte „Umgebungsabbildung“ (eng. environment mapping) erforderlich sein, wenn die Umgebung unendlich weit vom Objekt entfernt ist. Darüber hinaus kann es sein, dass ein umgebungsabgebildetes Objekt typischerweise nicht im Stande ist, selbst zu reflektieren. Siehe z. B. http://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter07.html. Diese Einschränkungen resultieren daraus, dass konventionelle Computergrafik-Hardware - obwohl ausreichend schnell für hervorragendes Polygon-Rendern - nicht die Lichtvisualisierung durchführt, die für genaue und realistische Reflexionen und Schatten nötig ist. Manche haben Raster/Text-Approximationen von Reflexionen und Schatten als das visuelle Äquivalent von AM-Radio verglichen.Some have built other techniques on this basic scanning conversion method to enable real-time graphics systems to achieve some level of realism in rendering shadows and reflections. For example, texture mapping has sometimes been used to simulate reflections and shadows in a 3D scene. One way to accomplish this is to transform, project, and rasterize objects from different perspectives, write the rasterized results in texture maps, and sample the texture maps to allow reflection mapping, environment mapping, and shadow mapping. Although these techniques have proven useful and moderately successful, they do not work well in all situations. For example, so-called “environment mapping” can often be required if the environment is infinitely far from the object. In addition, an environment-mapped object may typically not be able to reflect itself. See e.g. B. http://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter07.html. These limitations result from the fact that conventional computer graphics hardware - although fast enough for excellent polygon rendering - does not perform the light visualization necessary for accurate and realistic reflections and shadows. Some have compared raster / text approximations of reflections and shadows as the visual equivalent of AM radio.
Es gibt eine andere Grafiktechnik, die physikalisch realistische Sichtbarkeitsbestimmungen für Reflexion und Schattenbildung durchführt. Sie wird als „Strahlverfolgung“ (engl. Raytracing) bezeichnet. Strahlverfolgung wurde Ende der 1960er Jahre entwickelt und in den 1980er Jahren verbessert. Siehe z. B. Apple, „Some Techniques for Shading Machine Renderings of Solids“ (SJCC 1968) S. 27-45; Whitted, „An Improved Illumination Model for Shaded Display“ S. 343-349 Communications of the ACM, Band 23, Ausgabe 6 (Juni 1980); und Kajiya, „The Rendering Equation“, Computer Graphics (SIGGRAPH 1986 Proceedings, Band 20, Seiten 143-150). Seitdem wird Strahlverfolgung bei Nicht-Echtzeit-Grafikanwendungen wie z. B. Design und Filmherstellung verwendet. Wer „Finding Dorie“ (2016) oder andere Pixar-Animationsfilme gesehen hat, hat das Ergebnis der Strahlverfolgungsmethode für Computergrafik gesehen - nämlich realistische Schatten und Reflexionen. Siehe z. B. Hery et al., „Towards Bidirectional Path Tracing at Pixar“ (2016) . There is another graphic technique that performs physically realistic visibility determinations for reflection and shadow formation. It is referred to as "ray tracing". Beam tracing was developed in the late 1960s and improved in the 1980s. See e.g. B. Apple, "Some Techniques for Shading Machine Renderings of Solids" (SJCC 1968) pp. 27-45; Whitted, "An Improved Illumination Model for Shaded Display" pp. 343-349 Communications of the ACM, Volume 23, Issue 6 (June 1980); and Kajiya, "The Rendering Equation", Computer Graphics (SIGGRAPH 1986 Proceedings, Volume 20, pages 143-150). Since then, beam tracing has been used in non-real-time graphics applications such as B. Design and film making used. Anyone who has seen “Finding Dorie” (2016) or other Pixar animated films has seen the result of the ray tracing method for computer graphics - namely realistic shadows and reflections. See e.g. B. Hery et al., Towards Bidirectional Path Tracing at Pixar (2016) ,
Strahlverfolgung ist ein Grundprinzip, das bei einer Vielzahl von Render-Algorithmen verwendet wird, einschließlich zum Beispiel Pfadverfolgung (engl. Path Tracing) und Metropolis Light Transport. Bei einem Beispiel-Algorithmus simuliert Strahlverfolgung die Physik von Licht, indem der Lichttransport durch die Szene modelliert wird, um alle globalen Effekte (einschließlich zum Beispiel Reflexionen von glänzenden Oberflächen) unter Verwendung von Strahlenoptik zu berechnen. Bei solchen Anwendungen von Strahlverfolgung kann versucht werden, jeden von vielen hundert oder tausend Lichtstrahlen zu verfolgen, während sie durch die dreidimensionale Szene von potenziell mehreren Lichtquellen zum Standpunkt wandern. Häufig werden solche Strahlen relativ zum Auge durch die Szene verfolgt und gegen eine Datenbank aller Geometrien in der Szene getestet. Die Strahlen können vorwärts von Lichtquellen zum Auge oder rückwärts vom Auge zu den Lichtquellen verfolgt werden, oder sie können verfolgt werden, um zu sehen, ob Pfade, die an der virtuellen Kamera beginnen und am Auge beginnen, eine klare Sichtlinie haben. Das Testen bestimmt entweder den nächstgelegenen Schnittpunkt (um zu bestimmen, was vom Auge aus sichtbar ist) oder verfolgt Strahlen von der Oberfläche eines Objekts zu einer Lichtquelle, um zu bestimmen, ob etwas dazwischen liegt, das die Übertragung von Licht zu diesem Punkt im Raum blockieren würde. Da die Strahlen den Lichtstrahlen in der Realität ähnlich sind, machen sie eine Reihe von realistischen Effekten verfügbar, die mit der rasterbasierten Echtzeit-3D-Grafiktechnik, die man in den letzten dreißig Jahren implementiert hat, nicht möglich sind. Da jeder beleuchtende Strahl von jeder Lichtquelle innerhalb der Szene bewertet wird, wenn er jedes Objekts in der Szene durchläuft, können die resultierenden Bilder so aussehen, als wären sie in der Realität fotografiert worden. Dementsprechend werden diese Strahlverfolgungsverfahren seit langem bei professionellen Grafikanwendungen wie z. B. Design und Film eingesetzt, wo sie inzwischen über rasterbasiertes Rendern dominieren.Ray tracing is a basic principle used in a variety of rendering algorithms, including path tracing and Metropolis Light Transport, for example. In an example algorithm, ray tracing simulates the physics of light by modeling the light transport through the scene to calculate all global effects (including, for example, reflections from shiny surfaces) using ray optics. In such beam tracking applications, one can try to track each of many hundreds or thousands of light rays as they travel through the three-dimensional scene from potentially multiple light sources to the viewpoint. Such rays are often tracked through the scene relative to the eye and tested against a database of all geometries in the scene. The rays can be traced forward from light sources to the eye, or backward from the eye to the light sources, or they can be traced to see if paths starting on the virtual camera and starting on the eye have a clear line of sight. Testing either determines the closest intersection (to determine what is visible to the eye) or tracks rays from the surface of an object to a light source to determine if there is anything in between that is the transmission of light to that point in space would block. Because the rays are similar to the rays of light in reality, they provide a number of realistic effects that are not possible with the raster-based real-time 3D graphics technology that has been implemented in the past thirty years. Because each illuminating beam is evaluated by every light source within the scene as it traverses every object in the scene, the resulting images can look as if they were photographed in reality. Accordingly, these beam tracing methods have long been used in professional graphics applications such as. B. Design and film used where they now dominate over raster-based rendering.
Die größte Herausforderung bei Strahlverfolgung war im Allgemeinen die Geschwindigkeit. Strahlverfolgung erfordert, dass das Grafiksystem für jedes Einzelbild jeden von vielen Millionen Lichtstrahlen berechnet und analysiert, die auf jede Oberfläche der Szene treffen (und möglicherweise davon reflektiert werden). In der Vergangenheit war es unmöglich, diese enorme Menge Berechnungskomplexität in Echtzeit durchzuführen.In general, the biggest challenge with ray tracing was speed. Beam tracking requires that the graphics system calculate and analyze for each frame each of millions of light rays that strike (and possibly reflect on) every surface of the scene. In the past, it was impossible to do this enormous amount of computational complexity in real time.
Ein Grund dafür, dass moderne GPU-3D-Grafikpipelines schattierte, texturabgebildete Oberflächen so schnell rendern, ist, dass sie effizient Kohärenz nutzen. Bei konventioneller Abtastsignalwandlung wird davon ausgegangen, dass alles durch ein gemeinsames Fenster in einer gemeinsamen Bildebene betrachtet und auf einen einzigen Blickwinkel hinab projiziert wird. Jedes Dreieck oder andere Primitiv wird durch die Grafikpipeline gesendet und deckt eine Anzahl von Pixeln ab. Alle zugehörigen Berechnungen können für alle Pixel, die aus diesem Dreieck gerendert werden, gemeinsam genutzt werden. Rechteckige Pixel-Kacheln, die kohärenten Sichtlinien entsprechen, die durch das Fenster hindurchgehen, können somit Gruppen von Threads entsprechen, die im gleichen Streaming-Prozessor im Gleichschritt laufen. Alle Pixel, die zwischen die Kanten des Dreiecks fallen, werden als das gleiche Material angenommen, das den gleichen Shader (auf Deutsch „Schattierer“) laufen lässt und benachbarte Gruppen von Texeln aus den gleichen Texturen abruft. Im Gegensatz dazu können bei Strahlverfolgung Strahlen an einem gemeinsamen Punkt (einer Lichtquelle oder einem virtuellen Kameraobjektiv) beginnen oder enden, doch da sie sich durch die Szene ausbreiten und mit verschiedenen Materialien wechselwirken, divergieren sie schnell. Zum Beispiel führt jeder Strahl eine Suche nach dem nächstgelegenen Objekt durch. Es kann Cache-Speicherung und gemeinsame Nutzung von Ergebnissen durchgeführt werden, doch da jeder Strahl potenziell andere Objekte treffen kann, ist die Art der Kohärenz, die GPUs traditionell in Verbindung mit texturabgebildeten schattierten Dreiecken genutzt haben, nicht vorhanden (z. B. ein gemeinsamer Blickwinkel, Fenster und Bildebene sind nicht für Strahlverfolgung vorhanden). Dies macht Strahlverfolgung viel rechenintensiver als andere Grafikmethoden - und daher viel schwieriger interaktiv durchführbar.One reason modern GPU 3D graphics pipelines render shaded, texture-mapped surfaces so quickly is that they use coherence efficiently. With conventional scanning signal conversion, it is assumed that everything is viewed through a common window in a common image plane and projected down to a single point of view. Each triangle or other primitive is sent through the graphics pipeline and covers a number of pixels. All related calculations can be shared across all pixels rendered from this triangle. Rectangular pixel tiles that correspond to coherent lines of sight that pass through the window can thus correspond to groups of threads that run in step in the same streaming processor. All pixels that fall between the edges of the triangle are assumed to be the same material that runs the same shader (in German "shader") and retrieves neighboring groups of texels from the same textures. In contrast, in ray tracing, rays can start or end at a common point (a light source or a virtual camera lens), but as they spread through the scene and interact with different materials, they quickly diverge. For example, each ray searches for the closest object. Caching and sharing of results can be done, but since each beam can potentially hit different objects, the type of coherence that GPUs have traditionally used in conjunction with texture-depicted shaded triangles is absent (e.g., a shared one View angle, window and image plane are not available for ray tracing). This makes beam tracing much more computationally intensive than other graphics methods - and therefore much more difficult to perform interactively.
Man hat viel Forschung betrieben, um den Prozess, Strahlen zu verfolgen, effizienter und zeitnaher zu gestalten. Siehe z. B. Glassner, An Introduction to Ray Tracing (Academic Press Inc., 1989). Da bei Strahlverfolgung jeder Strahl naturgemäß unabhängig von dem Rest bewertet wird, hat man Strahlverfolgung als „unangenehm parallel“ bezeichnet. Siehe z. B. Akenine-Möller et al., Real Time Rendering in Abschnitt 9.8.2, Seite 412 (Third Ed. CRC Press 2008). Wie oben erwähnt, beinhaltet Strahlverfolgung effektiv das Testen jedes Strahls gegen alle Objekte und Oberflächen in der Szene. Eine Optimierung namens „Beschleunigungsdatenstruktur“ und zugehörige Prozesse ermöglicht es dem Grafiksystem, eine „Teile-und-Herrsche“-Methode über die Beschleunigungsdatenstruktur hinweg zu verwenden, um festzustellen, welche Oberflächen der Strahl trifft und welche Oberflächen der Strahl nicht trifft. Jeder Strahl traversiert die Beschleunigungsdatenstruktur auf eine individualistische Weise. Dies bedeutet, dass das Widmen von mehr Prozessoren für Strahlverfolgung eine nahezu lineare Leistungssteigerung ermöglicht. Mit zunehmender Parallelität von Grafikverarbeitungssystemen haben manche begonnen, sich die Möglichkeit vorzustellen, dass Strahlverfolgung in Echtzeit durchgeführt werden könnte. Zum Beispiel hat man Mitte der 2000er Jahre an der Universität des Saarlandes ein frühes Spezialhardwaresystem für interaktive Strahlverfolgung entwickelt, das eine gewisse Programmierbarkeit für Verwendung von Geometrie-, Vertex- und Beleuchtungs-Shadern bot. Siehe Woop et al., „RPU: A Programmable Ray Processing Unit for Real Time Ray Tracing“ (ACM 2005). Als weiteres Beispiel entwickelte Advanced Rendering Technology „RenderDrive“ auf Basis eines Arrays von AR250/350-Render-Prozessoren, die von ARM1 abgeleitet und mit kundenspezifischen Pipelines für Strahl/Dreieck-Schnittpunkt- und SIMD-Vektor- und Textur-Mathematik erweitert worden sind, jedoch ohne Traversierungslogik mit fester Funktion. Siehe z. B. http://www.graphicshardware.org/previous/ www_2001/presentations/Hot3D_Daniel_Hall.pdfA lot of research has been done to make the process of tracking rays more efficient and timely. See e.g. B. Glassner, An Introduction to Ray Tracing (Academic Press Inc., 1989). Because every ray in ray tracing is naturally assessed independently of the rest, beam tracking has been described as "uncomfortably parallel". See e.g. B. Akenine-Möller et al., Real Time Rendering in Section 9.8.2, page 412 (Third Ed. CRC Press 2008). As mentioned above, beam tracing effectively involves testing each beam against all objects and surfaces in the scene. Optimization called "acceleration data structure" and associated processes enable the graphics system to use a "divide and conquer" method across the acceleration data structure to determine which surfaces the beam hits and which surfaces the beam does not. Each beam traverses the acceleration data structure in an individualistic way. This means that dedicating more processors to beam tracing enables an almost linear increase in performance. With the increasing parallelism of graphics processing systems, some have begun to imagine the possibility that ray tracing could be done in real time. For example, an early special hardware system for interactive beam tracing was developed at the Saarland University in the mid-2000s, which offered a certain programmability for the use of geometry, vertex and lighting shaders. See Woop et al., "RPU: A Programmable Ray Processing Unit for Real Time Ray Tracing" (ACM 2005). As another example, Advanced Rendering Technology developed “RenderDrive” based on an array of AR250 / 350 render processors derived from ARM1 and expanded with customer-specific pipelines for beam / triangle intersection and SIMD vector and texture mathematics , but without traversing logic with a fixed function. See e.g. B. http://www.graphicshardware.org/previous/ www_2001 / presentations / Hot3D_Daniel_Hall.pdf
Im Jahr 2010 nutzte NVIDIA dann den hohen Grad an Parallelität von NVIDIA-GPUs und anderen hochparallelen Architekturen für die Entwicklung der OptiX™ Strahlverfolgungs-Engine. Siehe Parker et al., „OptiX: A General Purpose Ray Tracing Engine“ (ACM Transactions on Graphics, Band 29, Nr. 4, Artikel 66, Juli 2010). Neben Verbesserungen bei APIs (Anwendungsprogrammierschnittstellen) war einer der Fortschritte von OptiX™ die Verbesserung der Beschleunigungsdatenstrukturen, die zum Finden eines Schnittpunkts zwischen einem Strahl und der Szenengeometrie verwendet werden. Solche Beschleunigungsdatenstrukturen sind gewöhnlich räumliche oder Objekt-Hierarchien, die vom Strahlverfolgungs-Traversierungsalgorithmus verwendet werden, um effizient nach Primitiven zu suchen, die einen gegebenen Strahl potentiell schneiden. OptiX™ stellt eine Reihe von verschiedenen Beschleunigungsstruktur-Typen zur Verfügung, aus denen die Anwendung wählen kann. Jede Beschleunigungsstruktur im Knotendiagramm kann ein anderer Typ sein, was Kombinationen von hochwertigen statischen Strukturen mit dynamisch aktualisierten Strukturen ermöglicht.In 2010, NVIDIA then used the high degree of parallelism of NVIDIA GPUs and other highly parallel architectures to develop the OptiX ™ ray tracing engine. See Parker et al., "OptiX: A General Purpose Ray Tracing Engine" (ACM Transactions on Graphics, Volume 29, No. 4, Article 66, July 2010). In addition to improvements to APIs (application programming interfaces), one of the advances in OptiX ™ has been the improvement of the acceleration data structures used to find an intersection between a beam and the scene geometry. Such acceleration data structures are typically spatial or object hierarchies that are used by the ray tracing traversal algorithm to efficiently search for primitives that potentially intersect a given ray. OptiX ™ provides a number of different types of acceleration structures that the application can choose from. Each acceleration structure in the node diagram can be a different type, which enables combinations of high-quality static structures with dynamically updated structures.
Die programmierbare Strahlverfolgungs-Pipeline OptiX™ brachte erhebliche Fortschritte, war aber an sich immer noch nicht im Stande, interaktive Echtzeit-Reaktionen auf Benutzereingaben auf relativ kostengünstigen Computerplattformen für komplexe 3D-Szenen zu liefern. Seitdem hat NVIDIA Hardwarebeschleunigungsfähigkeiten für Strahlverfolgung entwickelt. Siehe z. B. US 9,582,607 ; US 9,569,559 ; US 20160070820 ; und US 20160070767 .The OptiX ™ programmable ray tracing pipeline made significant progress, but was still not in itself able to provide real-time interactive responses to user input on relatively inexpensive computer platforms for complex 3D scenes. Since then, NVIDIA has developed hardware acceleration capabilities for beam tracing. See e.g. B. US 9,582,607 ; US 9,569,559 ; US 20160070820 ; and US 20160070767 ,
Angesichts des großen Potenzials eines wirklich interaktiven Echtzeit-Strahlverfolgungs-Grafikverarbeitungssystems zum Rendern hochwertiger Bilder beliebiger Komplexität als Antwort auf zum Beispiel Benutzereingaben ist weitere Arbeit möglich und wünschenswert.Given the great potential of a truly interactive, real-time ray tracing graphics processing system to render high quality images of any complexity in response to, for example, user input, further work is possible and desirable.
Figurenlistelist of figures
-
1 veranschaulicht ein Beispiel für ein nicht einschränkendes Strahlverfolgungs-Grafik system. 1 illustrates an example of a non-limiting ray tracing graphics system.
-
2A zeigt ein Beispiel für ein spiegelndes Objekt. 2A shows an example of a specular object.
-
2B zeigt das Beispiel-Objekt innerhalb eines Begrenzungsvolumens. 2 B shows the sample object within a bounding volume.
-
2C zeigt eine volumetrische Beispiel-Unterteilung des Begrenzungsvolumens von 2B. 2C shows a volumetric example subdivision of the bounding volume of 2 B ,
-
2D, 2E und 2F zeigen beispielhaft weitere Stufen von volumetrischer Unterteilung des Begrenzungsvolumens zum Erzeugen einer Begrenzungsvolumenhierarchie (BVH). 2D . 2E and 2F show examples of further levels of volumetric subdivision of the limitation volume to create a limitation volume hierarchy (BVH).
-
2G zeigt einen Beispiel-Teil des Objekts, das aus Primitiv-Oberflächen, in diesem Fall Dreiecken, besteht. 2G shows an example part of the object, which consists of primitive surfaces, in this case triangles.
-
3A-3C zeigen beispielhaft vereinfachte Strahlverfolgungs-Tests zum Bestimmen, ob der Strahl ein Begrenzungsvolumen, das Geometrie enthält, durchläuft und ob der Strahl Geometrie schneidet. 3A-3C show exemplary simplified ray tracing tests to determine whether the ray traverses a confinement volume containing geometry and whether the ray intersects geometry.
-
4 veranschaulicht ein Beispiel-Strahlverfolgungs-Flussdiagramm. 4 illustrates an example ray tracing flowchart.
-
5A-5C zeigen beispielhaft verschiedene Szenarien für Strahl-Primitiv-Schnittpunkte. 5A-5C show examples of different scenarios for beam-primitive intersections.
-
6A und 6B zeigen ein Beispiel dafür, wie sich Texturabbildung auf Strahl-Primitiv-Schnittpunkt-Ergebnisse auswirken kann. 6A and 6B show an example of how texture mapping can affect ray-primitive intersection results.
-
7A und 7B veranschaulichen Strahl-Instanz-Transformationen. 7A and 7B illustrate ray instance transformations.
-
8A veranschaulicht eine nicht einschränkende Beispiel-Begrenzungsvolumenhierarchie (BVH). 8A illustrates a non-limiting example limitation volume hierarchy (BVH).
-
8B zeigt eine Beispiel-Beschleunigungsdatenstruktur in Form eines Graphen oder Baums. 8B shows an example acceleration data structure in the form of a graph or tree.
-
9 zeigt einen nicht einschränkenden vereinfachten Beispiel-Traversierungs-Koprozessor, der eine Baumtraversierungseinheit (TTU) aufweist. 9 shows a non-limiting, simplified example traversal coprocessor having a tree traversal unit (TTU).
-
10 veranschaulicht ein Flussdiagramm einer nicht einschränkenden Beispiel-Strahlverfolgungs-Shading -Pipeline. 10 illustrates a flow diagram of a non-limiting example ray tracing shading pipeline.
-
11B und 11B veranschaulichen detailliertere Strahlverfolgungs-Pipelines. 11B and 11B illustrate more detailed ray tracing pipelines.
-
12 zeigt ein nicht einschränkendes Beispiel für Daten, die von dem Traversierungs-Koprozessor-L0-Cache unterhalten werden; 12 Figure 3 shows a non-limiting example of data maintained by the traversal coprocessor L0 cache;
-
13 ist ein Flussdiagramm von Beispiel-Operationen, die von dem Traversierungs-Koprozessor-L0-Cache durchgeführt werden; 13 Fig. 4 is a flow diagram of example operations performed by the traversal coprocessor L0 cache;
-
14 veranschaulicht ein Beispiel-Flussdiagramm zur Erzeugung eines Bildes. 14 illustrates an example flow diagram for generating an image.
-
15 veranschaulicht eine Beispiel-Parallelverarbeitungseinheit (PPU). 15 illustrates an example parallel processing unit (PPU).
-
16 veranschaulicht eine Beispiel-Speicherpartitionseinheit. 16 illustrates an example storage partition unit.
-
17 veranschaulicht einen Beispiel-Allgemeinverarbeitungscluster (GPC) innerhalb der Parallelverarbeitungseinheit von 15. 17 illustrates an example general processing cluster (GPC) within the parallel processing unit of FIG 15 ,
-
18 ist ein Konzeptdiagramm einer mittels des GPC von 17 implementierten Grafikverarbeitungs-Pipeline. eighteen is a conceptual diagram of one using the GPC of FIG 17 implemented graphics processing pipeline.
-
19 und 20 veranschaulichen einen Beispiel-Streaming-Multiprozessor. 19 and 20 illustrate an example streaming multiprocessor.
-
21 ist ein Konzeptdiagramm eines unter Verwendung von PPUs von 15 implementierten Verarbeitungssystems. 21 is a conceptual diagram of one using PPUs from 15 implemented processing system.
-
22 erweitert 21, um zusätzliche miteinander verbundene Geräte zu zeigen. 22 expanded 21 to show additional connected devices.
Detaillierte Beschreibung von nicht einschränkenden AusführungsformenDetailed description of non-limiting embodiments
Die Technik hierin stellt Hardwarefähigkeiten bereit, welche Strahlverfolgung so weit beschleunigen, dass sie Spielen und anderen interaktiven Echtzeit-Computergrafiken die Leistung der Strahlverfolgung beschert, wodurch zunächst hohe Effektqualität bei Schatten und Reflexionen und schließlich globale Beleuchtung ermöglicht wird. In der Praxis bedeutet dies, die Strahlverfolgung gegenüber dem, was in Software auf demselben Grafik-Render-System möglich wäre, um einen Faktor bis zu einer Größenordnung oder mehr zu beschleunigen.The technology herein provides hardware capabilities that accelerate ray tracing to the point that games and other real-time interactive computer graphics provide beam tracing performance, initially providing high quality shadow and reflection effects, and ultimately global lighting. In practice, this means beam tracing by up to an order of magnitude or more compared to what would be possible in software on the same graphics render system.
Insbesondere stellt die nicht einschränkende Beispiel-Technik dedizierte Hardware zum Beschleunigen von Strahlverfolgung bereit. In nicht einschränkenden Ausführungsformen beschleunigt ein Hardware-Koprozessor (hierin als „Traversierungs-Koprozessor“ oder in manchen Ausführungsformen als „Baumtraversierungseinheit“ oder „TTU“ bezeichnet) bestimmte Prozesse, die interaktive Strahlverfolgung unterstützen, einschließlich Strahlbegrenzungsvolumen-Schnittpunkttests, Strahl-Primitiv-Schnittpunkttests und Strahl-„Instanz“-Transformationen.In particular, the non-limiting example technique provides dedicated hardware for accelerating beam tracing. In non-limiting embodiments, a hardware coprocessor (referred to herein as a "traversing coprocessor" or in some embodiments a "tree traversing unit" or "TTU") speeds up certain processes that support interactive beam tracing, including beam confinement volume intersection tests, beam primitive intersection tests, and beam "instance" transformations.
In manchen nicht einschränkenden Ausführungsformen führt der Traversierungs-Koprozessor Abfragen auf einer Beschleunigungsdatenstruktur für Prozesse durch, die auf potenziell massiv-parallelen Streaming-Multiprozessoren (SMs) laufen. Der Traversierungs-Koprozessor traversiert die Beschleunigungsdatenstruktur, um Informationen darüber herauszufinden, wie ein gegebener Strahl mit einem Objekt wechselwirkt, das die Beschleunigungsdatenstruktur beschreibt oder darstellt. Für Strahlverfolgung sind die Traversierungs-Koprozessoren aufrufbar, im Gegensatz zu z. B. Einheiten mit fester Funktion, die eine Operation einmal zwischen logischen Pipeline-Stufen durchführen, die verschiedene Typen von Threads (z. B. Vertex-Threads und Pixel-Threads) laufen lassen.In some non-limiting embodiments, the traversal coprocessor queries an acceleration data structure for processes that run on potentially massively parallel streaming multiprocessors (SMs). The traversal coprocessor traverses the acceleration data structure to find information about how a given beam interacts with an object that describes or represents the acceleration data structure. The traversing coprocessors can be called up for beam tracking. B. Fixed function units that perform an operation once between logical pipeline stages that run different types of threads (e.g., vertex threads and pixel threads).
In manchen nicht einschränkenden Ausführungsformen umfasst die Beschleunigungsdatenstruktur eine Hierarchie von Begrenzungsvolumina (Begrenzungsvolumenhierarchie oder BVH), die rekursiv immer kleiner werdende Begrenzungsvolumen-Unterteilungen einkapselt. Das größte Begrenzungsvolumen kann als „Wurzelknoten“ bezeichnet werden. Die kleinsten Unterteilungen einer solchen Hierarchie von Begrenzungsvolumina („Blattknoten“) enthalten Elemente. Die Elemente könnten Primitive (z. B. Polygone wie z. B. Dreiecke) sein, die Oberflächen des Objekts definieren. Oder ein Element könnte ein Bereich sein, der eine ganz neue Ebene der Welt enthält, die als ein Element existiert, da sie der BVH nicht hinzugefügt worden ist (denken Sie an den Halsbandanhänger an der Katze aus „Men in Black“, der eine ganze Miniaturgalaxie darin enthielt). Wenn das Element Primitive umfasst, testet der Traversierungs-Koprozessor Strahlen gegen die Primitive, um zu bestimmen, welche Objektoberflächen die Strahlen schneiden und welche Objektoberflächen entlang des Strahls sichtbar sind.In some non-limiting embodiments, the acceleration data structure includes a hierarchy of delimitation volumes (delimitation volume hierarchy or BVH) that encapsulates delimitation volume subdivisions that become smaller and smaller recursively. The largest boundary volume can be referred to as the "root node". The smallest subdivisions of such a hierarchy of delimitation volumes ("leaf nodes") contain elements. The elements could be primitives (e.g. polygons such as triangles) that define surfaces of the object. Or an element could be an area that contains a whole new level of the world that exists as an element since it has not been added to the BVH (think of the collar pendant on the cat from "Men in Black", which is a whole Miniature galaxy contained therein). If the element includes primitives, the traversal coprocessor tests rays against the primitives to determine which object surfaces intersect the rays and which object surfaces are visible along the ray.
Der Traversierungs-Koprozessor führt einen Test eines jeden Strahls gegen einen weiten Bereich von Begrenzungsvolumina durch und kann irgendwelche Begrenzungsvolumina, die sich nicht mit diesem Strahl schneiden, aussondern (einem Culling unterziehen). Beginnend an einem Wurzelknoten, der alles in der Szene begrenzt, testet der Traversierungs-Koprozessor jeden Strahl gegen kleinere (potenziell überlappende) Kind-Begrenzungsvolumina, die wiederum die nachkommenden Zweige der BVH begrenzen. Der Strahl folgt den Kind-Zeigern für die Begrenzungsvolumina, die der Strahl trifft, zu anderen Knoten, bis die Blätter oder Endknoten (Volumina) der BVH erreicht sind. Sobald der Traversierungs-Koprozessor die Beschleunigungsdatenstruktur traversiert, um einen End- oder „Blatt“-Knoten zu erreichen, der ein geometrisches Primitiv enthält, führt er einen beschleunigten Strahl-Primitiv-Schnittpunkttest durch, der bestimmt, ob der Strahl dieses Primitiv (und somit die von diesem Primitiv definierte Objektoberfläche) schneidet. Der Strahl-Primitiv-Test kann zusätzliche Informationen über Primitive liefern, die der Strahl schneidet, mit denen die Materialeigenschaften der Oberfläche bestimmt werden können, die für Shading und Visualisierung erforderlich sind. Rekursive Traversierung durch die Beschleunigungsdatenstruktur ermöglicht es dem Traversierungs-Koprozessor, alle Objekt-Primitive zu entdecken, die der Strahl schneidet, oder das nächstgelegene (aus der Perspektive des Standpunkts) Primitiv, das der Strahl schneidet (welches in manchen Fällen das einzige Primitiv ist, das von dem Standpunkt aus entlang des Strahls sichtbar ist).The traversal coprocessor tests each beam against a wide range of confinement volumes and can discard any confinement volumes that do not intersect with that beam (one Undergo culling). Starting at a root node that delimits everything in the scene, the traversing coprocessor tests each beam against smaller (potentially overlapping) child delimitation volumes, which in turn delimit the subsequent branches of the BVH. The beam follows the child pointers for the boundary volumes that the beam strikes to other nodes until the leaves or end nodes (volumes) of the BVH are reached. Once the traversal coprocessor traverses the acceleration data structure to reach an end or "leaf" node that contains a geometric primitive, it performs an accelerated beam-primitive intersection test that determines whether the beam is that primitive (and thus intersects the object surface defined by this primitive). The beam primitive test can provide additional information about primitives that the beam intersects, which can be used to determine the material properties of the surface that are required for shading and visualization. Recursive traversal through the acceleration data structure allows the traversal coprocessor to discover all of the object primitives that the beam intersects, or the closest (from the point of view perspective) primitive that the beam intersects (which in some cases is the only primitive, that is visible from the viewpoint along the beam).
Der Traversierungs-Koprozessor beschleunigt auch die Transformation jedes Strahls aus dem Welt-Raum in den Objekt-Raum, um immer feiner werdende Begrenzungskasten-Einkapselungen der Primitive zu erhalten und die Duplikation dieser Primitive in der gesamten Szene zu reduzieren. Objekte, die viele Male in der Szene in verschiedenen Positionen, Orientierungen und Maßstäben repliziert werden, können in der Szene als Instanzknoten, die einem Begrenzungskasten und Blattknoten in der Welt-Raum-BVH eine Transformation zuordnen, die auf den Welt-Raum-Strahl angewendet werden kann, um ihn in einen Objektkoordinatenraum zu transformieren, und ein Zeiger auf eine Objekt-Raum-BVH dargestellt werden. Dadurch wird vermieden, dass die Objekt-Raum-BVH-Daten mehrere Male im Welt-Raum repliziert werden, was Speicher und zugehörige Speicherzugriffe spart. Die Instanztransformation erhöht die Effizienz, indem sie den Strahl in den Objekt-Raum transformiert, statt die Geometrie oder die Begrenzungsvolumenhierarchie in den Welt-Raum (Strahl-Raum) transformieren zu müssen, und ist außerdem mit zusätzlichen, konventionellen Rasterungsprozessen kompatibel, welche die Grafikverarbeitung zur Visualisierung der Primitive durchführt.The traversal coprocessor also accelerates the transformation of each ray from world space to object space to keep the primitive bounding box encapsulations becoming finer and to reduce the duplication of these primitives throughout the scene. Objects that are replicated many times in the scene in various positions, orientations, and scales can act as instance nodes in the scene that map a transformation to a bounding box and leaf nodes in the World Space BVH that apply to the World Space ray can be transformed to an object coordinate space and a pointer to an object-space BVH can be displayed. This prevents the object-space BVH data from being replicated multiple times in the world space, which saves memory and associated memory access. Instance transformation increases efficiency by transforming the beam into the object space instead of having to transform the geometry or the bounding volume hierarchy into the world space (beam space), and is also compatible with additional, conventional screening processes that graphics processing to visualize the primitives.
Die vorliegend offenbarten nicht einschränkenden Ausführungsformen stellen somit einen Traversierungs-Koprozessor, eine neue Untereinheit eines oder einer Gruppe von Streaming-Multiprozessoren SM einer 3D-Grafikverarbeitungs-Pipeline bereit. Um zu verstehen, wo der Traversierungs-Koprozessor in das Gesamtbild passt, kann es hilfreich sein, einige Grundlagen des Algorithmus zu verstehen, der von den meisten oder allen modernen Strahl verfolgern verwendet wird. Man beachte jedoch, dass die Technik hierin eine generische Fähigkeit bietet, für einen Thread, der in einer GPU läuft, zu bestimmen, was das nächst sichtbare Ding von einem gegebenen Punkt entlang einer spezifizierten Richtung ist oder ob irgendetwas zwischen zwei Punkten liegt. Ein häufiger Anwendungsfall für eine solche Fähigkeit wird in Prozessen liegen, die beginnen, Strahlen von Punkten zu verfolgen, die bereits mittels konventioneller Abtastsignalwandlungs-Techniken auf Dreiecken gerastert worden sind. Die offenbarte Technik kann, muss aber nicht notwendigerweise die Abtastsignalwandlungs-Technik ersetzen oder substituieren, und kann sie sie oft ergänzen und kann in Verbindung mit Abtastsignalwandlungs-Techniken verwendet werden, um Bilder mit fotorealistischen Reflexionen, Schatten und anderen Effekten zu verbessern.The non-limiting embodiments disclosed herein thus provide a traversal coprocessor, a new subunit of one or a group of streaming multiprocessors SM of a 3D graphics processing pipeline. To understand where the traversal coprocessor fits into the big picture, it can be helpful to understand some basics of the algorithm used by most or all modern ray trackers. Note, however, that the technique herein provides a generic ability to determine what is the closest visible thing from a given point along a specified direction to a thread running in a GPU, or whether anything is between two points. A common use for such a capability will be in processes that are beginning to track rays from points that have already been scanned onto triangles using conventional scanning signal conversion techniques. The disclosed technique can, but does not necessarily have to, replace and substitute the scan signal conversion technique, and can often supplement it, and can be used in conjunction with scan signal conversion techniques to enhance images with photo-realistic reflections, shadows, and other effects.
Strahlverfolgungs-TechnikenRay tracing techniques
Im Allgemeinen ist Strahlverfolgung ein Render-Verfahren, bei dem Strahlen verwendet werden, um die Sichtbarkeit verschiedener Elemente in der Szene zu bestimmen. Strahlverfolgung kann verwendet werden, um zu bestimmen, ob entlang eines Strahls irgendetwas sichtbar ist (zum Beispiel Testen auf Verdeckungen zwischen einem abgeschatteten Punkt auf einem geometrischen Primitiv und einem Punkt auf einer Lichtquelle) und kann auch zum Bewerten von Reflexionen verwendet werden (was zum Beispiel die Durchführung einer Traversierung zum Bestimmen der nächstgelegenen sichtbaren Oberfläche entlang einer Sichtlinie umfassen kann, so dass Software, die auf einem Streaming-Prozessor läuft, eine Materialschattierungsfunktion entsprechend dem, was getroffen worden ist, bewerten kann - was wiederum einen oder mehrere zusätzliche Strahlen in die Szene entsprechend den Materialeigenschaften des Objekts, das geschnitten worden ist, starten kann), um das Licht zu bestimmen, das entlang des Strahls zurück zum Auge gelangt. Bei Strahlverfolgung im klassischen Whitted-Stil werden Strahlen vom Standpunkt durch das Pixelraster in die Szene geschossen, doch sind auch andere Pfadtraversierungen möglich. Typischerweise wird für jeden Strahl das nächstgelegene Objekt gefunden. Dieser Schnittpunkt kann dann als beleuchtet oder im Schatten bestimmt werden, indem ein Strahl von ihm zu jeder Lichtquelle in der Szene geschossen wird und festgestellt wird, ob sich dazwischen irgendwelche Objekte befinden. Opake Objekte blockieren das Licht, während transparente Objekte es abschwächen. Andere Strahlen können von einem Schnittpunkt aus erzeugt werden. Wenn zum Beispiel die schneidende Oberfläche glänzend oder spiegelnd ist, werden Strahlen in der Reflexionsrichtung erzeugt. Der Strahl kann die Farbe des ersten geschnittenen Objekts annehmen, dessen Schnittpunkt wiederum auf Schatten getestet worden ist. Dieser Reflexionsprozess wird rekursiv wiederholt, bis eine Rekursionsgrenze erreicht ist oder der potenzielle Beitrag nachfolgender Aufpralle unter einen Schwellenwert fällt. Strahlen können auch in der Brechungsrichtung für transparente massive Objekte erzeugt werden und wieder rekursiv bewertet werden. Siehe Akenine-Möller et al., oben zitiert. Die Strahlverfolgungs-Technik ermöglicht es einem Grafiksystem somit, physikalisch korrekte Reflexionen und Schatten zu entwickeln, die nicht den Einschränkungen und Artefakten von Abtastsignalwandlungs-Techniken unterliegen.Generally, ray tracing is a rendering technique that uses rays to determine the visibility of various elements in the scene. Ray tracing can be used to determine if anything is visible along a ray (for example, testing for obscurations between a shadowed point on a geometric primitive and a point on a light source) and can also be used to evaluate reflections (for example performing traversal to determine the closest visible surface along a line of sight so that software running on a streaming processor can evaluate a material shading function according to what has been hit - which in turn adds one or more additional rays into the Scene according to the material properties of the object that has been cut) to determine the light that comes back to the eye along the beam. In classic whitted-style ray tracing, rays are shot into the scene from the viewpoint through the pixel grid, but other path traversals are also possible. The closest object is typically found for each beam. This intersection can then be determined to be illuminated or in the shade by shooting a beam from it to each light source in the scene and determining if there are any objects in between. Opaque objects block the light, while transparent objects dim it. Other rays can be created from an intersection. For example, if the cutting surface is shiny or reflective rays are generated in the reflection direction. The beam can take on the color of the first cut object, the intersection of which has again been tested for shadows. This reflection process is repeated recursively until a recursion limit is reached or the potential contribution of subsequent impacts falls below a threshold. Rays can also be generated in the direction of refraction for transparent solid objects and can be evaluated recursively. See Akenine-Möller et al., Cited above. The ray tracing technique thus enables a graphics system to develop physically correct reflections and shadows that are not subject to the limitations and artifacts of scanning signal conversion techniques.
Traversierungs-KoprozessorTraversierungs coprocessor
Die grundlegende Aufgabe, die der Traversierungs-Koprozessor durchführt, besteht darin, einen Strahl gegen alle Primitive (in einer Ausführungsform gewöhnlich Dreiecke) in der Szene zu testen und je nach Anwendungsfall entweder den nächstgelegenen Treffer (entsprechend der entlang des Strahls gemessenen Entfernung) oder einfach den ersten (nicht notwendigerweise nächstgelegenen) angetroffenen Treffer zu melden. Der natürliche Algorithmus wäre eine O(n)-Brute-Force-Suche. Durch Vorverarbeiten der Szenengeometrie und Aufbauen einer geeigneten Beschleunigungsdatenstruktur im Voraus ist es jedoch möglich, die Komplexität im Durchschnittsfall auf O(log n) zu reduzieren. Bei Strahlverfolgung liegt die Zeit für das Finden des nächstgelegenen (oder für Schatten beliebigen) Schnittpunkts für einen Strahl typischerweise in der Größenordnung O(log n) für n Objekte, wenn eine Beschleunigungsdatenstruktur verwendet wird. Zum Beispiel haben Begrenzungsvolumenhierarchien (BVHs) von dem für moderne Strahlverfolgungs-Beschleunigungsdatenstrukturen gewöhnlich verwendeten Typ typischerweise ein O(log n)-Suchverhalten.The basic task that the traversal coprocessor performs is to test a beam against all primitives (usually triangles in one embodiment) in the scene and, depending on the application, either the closest hit (corresponding to the distance measured along the beam) or simple report the first (not necessarily closest) hit. The natural algorithm would be an O (n) brute force search. However, by preprocessing the scene geometry and building a suitable acceleration data structure in advance, it is possible to reduce the complexity to O (log n) on average. For ray tracing, the time to find the closest (or any shadow) intersection for a ray is typically on the order of O (log n) for n objects using an acceleration data structure. For example, bounding volume hierarchies (BVHs) of the type commonly used for modern beam tracking acceleration data structures typically have an O (log n) search behavior.
BegrenzungsvolumenhierarchienBounding volume hierarchies
Die von modernen Strahlverfolgern am häufigsten verwendete Beschleunigungsdatenstruktur ist eine Begrenzungsvolumenhierarchie (BVH), die verschachtelte, achsenausgerichtete Begrenzungskästen (AABBs) aufweist. Die Blattknoten der BVH enthalten die Primitive (z. B. Dreiecke), die auf Schnittpunkte zu testen sind. Die BVH wird am häufigsten durch eine Graph- oder Baumstruktur-Datendarstellung dargestellt. In solchen Fällen kann der Traversierungs-Koprozessor als „Baumtraversierungseinheit“ oder „TTU“ bezeichnet werden.The most commonly used acceleration data structure by modern beam trackers is a bounding volume hierarchy (BVH), which has nested, axis-aligned bounding boxes (AABBs). The leaf nodes of the BVH contain the primitives (e.g. triangles) that are to be tested for intersections. The BVH is most often represented by a graph or tree structure data representation. In such cases, the traversing coprocessor can be referred to as a "tree traversing unit" or "TTU".
Bei einer BVH entsprechen Strahlverfolgungsmengen einer Baumsuche, bei der jeder von dem Strahl besuchte Knoten im Baum ein Begrenzungsvolumen für jeden nachkommenden Zweig oder Blatt aufweist und der Strahl nur die nachkommenden Zweige oder Blätter besucht, deren entsprechendes Begrenzungsvolumen er schneidet. Auf diese Weise muss nur eine kleine Anzahl von Primitiven explizit auf Schnittpunkte getestet werden, nämlich diejenigen, die sich in Blattknoten befinden, die von dem Strahl geschnitten werden. In dem nicht einschränkenden Ausführungsbeispiel beschleunigt der Traversierungs-Koprozessor sowohl Baumtraversierungs- (einschließlich der Strahl-Volumen-Tests) als auch Strahl-Primitiv-Tests. Als Teil der Traversierung kann der Traversierungs-Koprozessor auch „Instanztransformationen“ handhaben - Transformieren eines Strahls von Welt-Raum-Koordinaten in das Koordinatensystem eines instanzierten Maschennetzes (Objekt-Raum), z. B. um die Rechenkomplexität des Transformierens der Primitiv-Vertices in den Welt-Raum zu vermeiden. Dies kann auf eine MIMD (Multiple Instruction, Multiple Data) Weise geschehen, was bedeutet, dass die Strahlen unabhängig behandelt werden, sobald sie sich im Traversierungs-Koprozessor befinden.In a BVH, ray tracing amounts correspond to a tree search, in which each node in the tree visited by the ray has a bounding volume for each subsequent branch or leaf and the ray only visits the subsequent branches or leaves whose corresponding limiting volume it intersects. In this way, only a small number of primitives need to be explicitly tested for intersections, namely those that are in leaf nodes that are intersected by the beam. In the non-limiting embodiment, the traversal coprocessor speeds both tree traversal (including beam volume tests) and beam primitive tests. As part of the traversal, the traversal coprocessor can also handle "instance transformations" - transforming a beam from world-space coordinates into the coordinate system of an instanced mesh (object-space), e.g. B. to avoid the computational complexity of transforming the primitive vertices into space. This can be done in a MIMD (Multiple Instruction, Multiple Data) manner, which means that the beams are treated independently once they are in the traversing coprocessor.
Nicht einschränkendes Beispiel für interaktives Echtzeit-StrahlverfolgungssystemNon-limiting example of real-time interactive ray tracing system
1 veranschaulicht ein Beispiel für ein interaktives Echtzeit-Strahlverfolgungsgrafiksystem 100 zum Erzeugen von Bildern unter Verwendung dreidimensionaler (3D) Daten einer Szene oder eines oder mehrerer Objekte. Das System 100 enthält ein Eingabegerät 110, einen oder mehrere Prozessoren 120, eine oder mehrere Grafikverarbeitungseinheiten (GPUs) 130, Speicher 140 und ein oder mehrere Displays 150. Das in 1 gezeigte System kann irgendeinen Formfaktor annehmen, einschließlich, aber nicht beschränkt auf einen PC, ein Smartphone oder ein anderes smartes Gerät, ein Videospielsystem, ein tragbares Virtual- oder Augmented-Reality-System, ein Cloud-basiertes Computersystem, ein fahrzeugmontiertes Grafiksystem, ein System auf einem Chip (SoC; System-on-a-Chip), usw. 1 illustrates an example of a real-time interactive ray tracing graphics system 100 for generating images using three-dimensional (3D) data of a scene or one or more objects. The system 100 contains an input device 110 , one or more processors 120 , one or more graphics processing units (GPUs) 130 , Storage 140 and one or more displays 150 , This in 1 The system shown may take any form factor, including but not limited to a PC, smartphone, or other smart device, video game system, portable virtual or augmented reality system, cloud-based computer system, vehicle-mounted graphics system, one system on a chip (SoC; system-on-a-chip), etc.
Der Prozessor 120 kann eine Mehrkern-Zentralverarbeitungseinheit (CPU) sein, die betriebsfähig ist, um eine Anwendung in Echtzeit interaktiv als Antwort auf das Eingabegerät 110 auszuführen, und deren Ausgabe Bilder zur Anzeige auf dem Display 150 enthält. Das Display 50 kann irgendeine Art von Display sein, wie z. B. ein stationäres Display, ein am Kopf angebrachtes Display wie z. B. eine Display-Brille oder - Schutzbrille, andere Typen von tragbaren Displays, ein Hand-Display, ein fahrzeugmontiertes Display, usw. Zum Beispiel kann der Prozessor 120 eine Anwendung auf Basis von Eingaben ausführen, die von dem Eingabegerät 110 (z. B. einem Joystick, einem Trägheitssensor, einem Umgebungslichtsensor usw.) empfangen worden sind, und die GPU 130 anweisen, Bilder, die den Anwendungsfortschritt zeigen, für Anzeige auf dem Display 150 zu erzeugen.The processor 120 can be a multi-core central processing unit (CPU) operable to interact with an application in real time in response to the input device 110 execute, and their output images for display on the display 150 contains. the display 50 can be any type of display, such as B. a stationary display, a display attached to the head such. B. a display glasses or - safety glasses, other types of portable displays, a hand-held display, a vehicle-mounted display, etc. For example, the processor 120 run an application based on input from the input device 110 (e.g., a joystick, an inertial sensor, an ambient light sensor, etc.) and the GPU 130 Instruct images showing application progress for display on the display 150 to create.
Auf Basis der Ausführung der Anwendung auf dem Prozessor 120 kann der Prozessor Anweisungen für die GPU 130 ausgeben, um Bilder unter Verwendung von im Speicher 140 gespeicherten 3D-Daten zu erzeugen. Die GPU 130 enthält spezialisierte Hardware zum Beschleunigen der Erzeugung von Bildern in Echtzeit. Zum Beispiel ist die GPU 130 im Stande, Informationen für Tausende oder Millionen von Grafik-Primitiven (Polygonen) in Echtzeit zu verarbeiten, wegen der Fähigkeit der GPU, wiederholte und hochparallele spezialisierte Rechenaufgaben wie z. B. Polygon-Abtastsignalwandlung viel schneller durchzuführen als konventionelle softwaregesteuerte CPUs. Anders als der Prozessor 120, der mehrere Kerne mit einer Menge Cache-Speicher aufweisen kann, die ein paar Software-Threads gleichzeitig handhaben können, kann die GPU 130 zum Beispiel Hunderte oder Tausende von Verarbeitungskernen oder „Streaming-Multiprozessoren“ (SMs) 132 enthalten, die parallel laufen.Based on the execution of the application on the processor 120 the processor can provide instructions for the GPU 130 output to images using in memory 140 generate saved 3D data. The GPU 130 contains specialized hardware to accelerate the generation of images in real time. For example, the GPU 130 able to process information for thousands or millions of graphics primitives (polygons) in real time because of the GPU's ability to perform repetitive and highly parallel specialized computing tasks such as B. Perform polygon scan signal conversion much faster than conventional software controlled CPUs. Different from the processor 120 , which can have multiple cores with a lot of cache memory that can handle a few software threads at the same time, the GPU 130 for example hundreds or thousands of processing cores or "streaming multiprocessors" (SMs) 132 included that run in parallel.
In einem Ausführungsbeispiel enthält die GPU 130 eine Mehrzahl von programmierbaren Streaming-Multiprozessoren (SMs) 132 und eine hardwarebasierte Grafikpipeline mit einer Grafik-Primitiv-Engine 134 und einer Raster-Engine 136. Diese Komponenten der GPU 130 sind konfiguriert, um Echtzeit-Bildrendern unter Verwendung einer Technik namens „Abtastsignalwandlungs-Rasterung“ durchzuführen, um dreidimensionale Szenen auf einem zweidimensionalen Display 150 anzuzeigen. Bei der Rasterung werden geometrische Bausteine (z. B. Punkte, Linien, Dreiecke, Vierecke, Maschennetze, usw.) einer 3D-Szene auf Pixel des Displays abgebildet (oft über einen Bildpufferspeicher).In one embodiment, the GPU contains 130 a plurality of programmable streaming multiprocessors (SMs) 132 and a hardware-based graphics pipeline with a graphics primitive engine 134 and a raster engine 136 , These components of the GPU 130 are configured to perform real-time image rendering using a technique called "scan conversion" to render three-dimensional scenes on a two-dimensional display 150 display. During rasterization, geometric building blocks (e.g. dots, lines, triangles, quadrilaterals, mesh networks, etc.) of a 3D scene are mapped onto pixels of the display (often via an image buffer memory).
Die GPU 130 wandelt die geometrischen Bausteine (d. h. Polygon-Primitive wie z. B. Dreiecke) des 3D-Modells in Pixel des 2D-Bildes um und weist jedem Pixel einen Anfangs-Farbwert zu. Die Grafikpipeline kann Schattierungs-, Transparenz-, Textur- und/oder Farbeffekte auf Teile des Bildes anwenden, indem sie die Farbwerte der Pixel definiert oder anpasst. Die endgültigen Pixelwerte können einem Anti-Aliasing unterzogen, gefiltert und dem Display 150 zur Anzeige zugeführt werden. Viele Software- und Hardware-Fortschritte im Laufe der Jahre haben die subjektive Bildqualität verbessert, indem sie Rasterungstechniken mit Bildraten verwendet haben, die für Echtzeit-Grafik (d. h. 30 bis 60 Einzelbilder pro Sekunde) bei hohen Bildschirmauflösungen wie z. B. 4096 x 2160 Pixel oder mehr auf einem oder mehreren Displays 150 erforderlich sind.The GPU 130 converts the geometric building blocks (ie polygon primitives such as triangles) of the 3D model into pixels of the 2D image and assigns an initial color value to each pixel. The graphics pipeline can apply shading, transparency, texture, and / or color effects to portions of the image by defining or adjusting the color values of the pixels. The final pixel values can be anti-aliased, filtered and displayed 150 can be fed for display. Many advances in software and hardware over the years have improved subjective image quality by using rasterization techniques with frame rates that are suitable for real-time graphics (ie 30 to 60 frames per second) at high screen resolutions such as. B. 4096 x 2160 pixels or more on one or more displays 150 required are.
Traversierungs-Koprozessor Erweiterung der ArchitekturTraversal coprocessor Extension of the architecture
Damit die GPU 130 Strahlverfolgung in Echtzeit auf eine effiziente Weise durchführen kann, ist die GPU mit einem Traversierungs-Koprozessor 138 ausgestattet, der mit einem oder mehreren SMs 132 gekoppelt ist. Der Traversierungs-Koprozessor 138 enthält Hardwarekomponenten, die konfiguriert sind, um in Strahlverfolgungs-Algorithmen häufig verwendete Operationen durchzuführen. Ein Ziel des Traversierungs-Koprozessors 138 ist es, die bei Strahlverfolgung verwendeten Operationen so weit zu beschleunigen, dass er Echtzeit-Grafikanwendungen (z. B. Spielen) die Leistung der Strahlverfolgung beschert und so hochwertige Schatten, Reflexionen und globale Beleuchtung ermöglicht. Der Traversierungs-Koprozessor 138 enthält in manchen Ausführungsbeispielen Abfragespezifische-Traversierung-Hardware 139, die eine abfragespezifische Programmierung des Verhaltens des Traversierungs-Koprozessors ermöglicht, um z. B. die Flexibilität und Reaktionsfähigkeit von Strahlverfolgungs-Operationen auf dynamische Änderungen und dergleichen in einer gerade gerenderten Szene zu erhöhen. Wie im Folgenden näher erläutert, kann das Ergebnis des Traversierungs-Koprozessors 138 zusammen mit oder als Alternative zu anderen grafikbezogenen Operationen, die in der GPU 130 durchgeführt werden, verwendet werden.So that the GPU 130 Can perform beam tracing in real time in an efficient manner, is the GPU with a traversing coprocessor 138 equipped with one or more SMs 132 is coupled. The traversal coprocessor 138 contains hardware components that are configured to perform operations commonly used in ray tracing algorithms. A target of the traversal coprocessor 138 is to speed up the operations used in ray tracing to the point where real-time graphics applications (e.g. games) bring the performance of ray tracing to high quality shadows, reflections and global lighting. The traversal coprocessor 138 includes query-specific traversal hardware in some embodiments 139 , which enables a query-specific programming of the behavior of the traversing coprocessor in order to e.g. B. Increase the flexibility and responsiveness of beam tracking operations to dynamic changes and the like in a scene being rendered. As explained in more detail below, the result of the traversal coprocessor 138 together with or as an alternative to other graphics related operations performed in the GPU 130 be carried out, used.
Bei der gezeigten Beispiel-Architektur wird die neue Hardwarekomponente „Traversierungs-Koprozessor“ 138 verwendet, um bestimmte Aufgaben zu beschleunigen, einschließlich, aber nicht beschränkt auf Strahlverfolgung. Strahlverfolgung bezieht sich darauf, einen Strahl in eine Szene zu werfen und zu bestimmen, ob und wo dieser Strahl die Geometrie der Szene schneidet. Dieser grundlegende Strahlverfolgungs-Sichtbarkeitstest ist das fundamentale Grundprinzip, das einer Vielzahl von Render-Algorithmen und -Techniken bei Computergrafik zugrunde liegt. Zum Beispiel kann Strahlverfolgung zusammen mit oder als Alternative zu Rasterung und Z-Pufferung für Abtastung der Szenengeometrie eingesetzt werden. Sie kann auch als Alternative zu (oder in Kombination mit) Umgebungsabbildung und Schattentexturierung verwendet werden, um realistischere Reflexions-, Brechungs- und Schattenbildungseffekte zu erzielen als es mittels Texturierungstechniken oder anderen Raster-„Hacks“ erreicht werden kann. Um Einschränkungen der Bildqualität, die mit Rasterung erreicht werden können, zu überwinden, kann das System 100 auch ganze Bilder oder Teile von Bildern unter Verwendung von Strahlverfolgungs-Techniken erzeugen. Strahlverfolgung kann auch als das Basis-Grundprinzip verwendet werden, um Lichttransport bei physikalisch basierten Render-Algorithmen wie z. B. Pfadverfolgung, Photon Mapping, Metropolis Light Transport und anderen Lichttransport-Algorithmen genau zu simulieren.In the example architecture shown, the new hardware component "traversing coprocessor" 138 used to speed up certain tasks, including but not limited to ray tracing. Ray tracing refers to throwing a ray into a scene and determining if and where that ray intersects the scene's geometry. This basic ray tracing visibility test is the fundamental principle that underpins a variety of rendering algorithms and techniques in computer graphics. For example, beam tracing can be used together with or as an alternative to screening and Z-buffering for scanning the scene geometry. It can also be used as an alternative to (or in combination with) environmental imaging and shadow texturing to achieve more realistic reflection, refraction, and shadow effects than can be achieved using texturing techniques or other raster “hacks”. In order to overcome image quality restrictions that can be achieved with screening, the system can 100 also generate whole images or parts of images using ray tracing techniques. Beam tracing can also be used as the basic principle to transport light in physically based rendering algorithms such as B. Path Tracking, Photon Mapping, Metropolis Light Transport and precisely simulate other light transport algorithms.
Insbesondere können SMs 132 und der Traversierungs-Koprozessor 138 zusammenarbeiten, um Strahlen in ein 3D-Modell zu werfen und zu bestimmen, ob und wo dieser Strahl die Geometrie des Modells schneidet. Strahlverfolgung simuliert direkt, wie sich Licht durch eine virtuelle Umgebung oder Szene bewegt. Die Ergebnisse der Strahlschnittpunkte zusammen mit der Oberflächenstruktur, der Blickrichtung und/oder den Lichtverhältnissen werden verwendet, um Pixelfarbwerte zu bestimmen. Von SMs 132 in Zusammenarbeit mit dem Traversierungs-Koprozessor 138 durchgeführte Strahlverfolgung ermöglicht es computergenerierten Bildern, Schatten, Reflexionen und Brechungen in einer Weise einzufangen, die von Fotos oder Videos der realen Welt nicht unterscheidbar ist. Da Strahlverfolgungs-Techniken teils aufgrund der großen Anzahl von zu verfolgenden Strahlen noch rechenintensiver sind als Rasterung, ist der Traversierungs-Koprozessor 138 im Stande, einige der rechenintensiveren Aspekte dieses Prozesses in Hardware zu beschleunigen.In particular, SMs 132 and the traversal coprocessor 138 work together to throw rays into a 3D model and determine if and where that ray intersects the geometry of the model. Beam tracing directly simulates how light moves through a virtual environment or scene. The results of the beam intersections together with the surface structure, the direction of view and / or the lighting conditions are used to determine pixel color values. By SMs 132 in collaboration with the traversal coprocessor 138 ray tracing performed enables computer-generated images to capture shadows, reflections, and refractions in a way that is indistinguishable from real-world photos or videos. Since beam tracing techniques are even more computationally intensive than screening due to the large number of beams to be traced, the traversing coprocessor is 138 able to accelerate some of the more compute-intensive aspects of this process in hardware.
Bei der nicht einschränkenden Beispiel-Technik hierin beschleunigt der Traversierungs-Koprozessor 138 sowohl Strahl-Kasten-Tests als auch Strahl-Primitiv-Tests. Als Teil der Traversierung kann er auch mindestens eine Ebene der Instanztransformation handhaben und einen Strahl von Welt-Raum-Koordinaten in das Koordinatensystem eines instanzierten Maschennetzes transformieren. In dem nicht einschränkenden Ausführungsbeispiel vollbringt der Traversierungs-Koprozessor 138 all dies auf MIMD-Weise, was bedeutet, dass Strahlen unabhängig einmal innerhalb des Traversierungs-Koprozessors behandelt werden.In the non-limiting example technique herein, the traversal coprocessor speeds up 138 both beam box tests and beam primitive tests. As part of the traversal, it can also handle at least one level of the instance transformation and transform a beam of world-space coordinates into the coordinate system of an instanced mesh. In the non-limiting embodiment, the traversal coprocessor accomplishes 138 all in a MIMD manner, which means that rays are treated independently once within the traversal coprocessor.
In nicht einschränkenden Ausführungsbeispielen arbeitet der Traversierungs-Koprozessor 138 als ein Diener (Koprozessor) der SMs (Streaming-Multiprozessoren) 132. Mit anderen Worten, der Traversierungs-Koprozessor 138 in nicht einschränkenden Ausführungsbeispielen arbeitet nicht unabhängig, sondern folgt den Befehlen der SMs 132, um bestimmte rechenintensive auf Strahlverfolgung bezogene Aufgaben wesentlich effizienter durchzuführen als es die SMs 132 selbst tun könnten.In non-limiting embodiments, the traversal coprocessor operates 138 as a servant (coprocessor) of the SMs (streaming multiprocessors) 132 , In other words, the traversal coprocessor 138 in non-limiting embodiments, does not work independently, but follows the commands of the SMs 132 to perform certain computationally intensive tasks related to ray tracing much more efficiently than SMs 132 could do it yourself.
In den gezeigten Beispielen empfängt der Traversierungs-Koprozessor 138 Befehle über Anweisungen des SM 132 und schreibt Ergebnisse zurück in eine SM-Registerdatei. Für viele übliche Anwendungsfälle (z. B. opake Dreiecke mit maximal einer Instanzierungsebene) kann der Traversierungs-Koprozessor 138 die Strahlverfolgungs-Abfrage ohne weitere Interaktion mit dem SM 132 bedienen. Komplexere Abfragen (z. B. mit Alpha-getesteten Dreiecken, anderen Primitiven als Dreiecken oder mehreren Instanzierungsebenen) erfordern möglicherweise mehrere Rundgänge. Zusätzlich zum Verfolgen von Strahlen ist der Traversierungs-Koprozessor 138 im Stande, allgemeinere räumliche Abfragen durchzuführen, bei denen ein AABB oder das ausgeweitete Volumen zwischen zwei AABBs (was wir ein „Strahlenbündel“ nennen) an die Stelle des Strahls tritt. Somit ist der Traversierungs-Koprozessor 138 zwar besonders für Beschleunigung von Strahlverfolgungs-Aufgaben geeignet, kann aber auch für andere Aufgaben als Strahlverfolgung verwendet werden.In the examples shown, the traversal coprocessor receives 138 Commands via instructions from the SM 132 and writes results back to an SM register file. The traversing coprocessor can be used for many common applications (e.g. opaque triangles with a maximum of one instance level) 138 the ray tracing query without further interaction with the SM 132 serve. More complex queries (e.g. with alpha-tested triangles, primitives other than triangles or multiple levels of instantiation) may require multiple tours. In addition to tracking rays, the traversing coprocessor is 138 able to perform more general spatial queries where an AABB or the expanded volume between two AABBs (what we call a "beam") takes the place of the beam. This is the traversal coprocessor 138 Although particularly suitable for accelerating beam tracing tasks, it can also be used for tasks other than beam tracing.
Zusätzlich zu dem Traversierungs-Koprozessor 138 stellt die zur Unterstützung des Systems 100 von 1 verwendete nicht einschränkende Beispiel-Technik zusätzliche Verbesserungen der beschleunigten Strahlverfolgung für eine Anzahl von Einheiten sowie eine wesentliche der BVH-Konstruktion gewidmete Leistung bereit. Die BVH-Konstruktion muss nicht hardwarebeschleunigt sein (obwohl sie es in manchen nicht einschränkenden Ausführungsformen sein kann), sondern könnte stattdessen mittels hochoptimierter Softwareroutinen implementiert werden, die auf SMs 132 und/oder der CPU 120 und/oder anderen Entwicklungssystemen laufen, z. B. während der Entwicklung einer Anwendung. Die folgende Darstellung beschreibt unter anderem software-sichtbares Verhalten des Traversierungs-Koprozessors 138, Schnittstellen zu umgebenden Einheiten (SMs 132 und das Speicher-Subsystem) und zusätzliche Merkmale, die Teil einer vollständigen Strahlverfolgungs-Lösung sind, wie z. B. bestimmte Erweiterungen der Gruppe von SMs 132 und des Speicher-Cache-Systems.In addition to the traversal coprocessor 138 provides the to support the system 100 of 1 Non-limiting example technique used additional improvements in accelerated beam tracing for a number of units, as well as substantial performance dedicated to BVH construction. The BVH construction need not be hardware accelerated (although it may be in some non-limiting embodiments), but instead could be implemented using highly optimized software routines that are based on SMs 132 and / or the CPU 120 and / or other development systems are running, e.g. B. during the development of an application. The following illustration describes, among other things, the software-visible behavior of the traversing coprocessor 138 , Interfaces to surrounding units (SMs 132 and the storage subsystem) and additional features that are part of a complete beam tracking solution, such as. B. certain extensions of the group of SMs 132 and the memory cache system.
Traversieren einer BeschleunigungsdatenstrukturTraversing an acceleration data structure
Eine gute Möglichkeit, Strahlverfolgung zu beschleunigen, ist die Verwendung einer Beschleunigungsdatenstruktur. Die Beschleunigungsdatenstruktur stellt das 3D-Modell eines Objekts oder einer Szene in einer Weise dar, die dabei hilft, schnell zu entscheiden, welchen Teil des Objekts ein bestimmter Strahl wahrscheinlich schneiden wird, und große Teile der Szene, die der Strahl nicht schneiden wird, schnell zu verwerfen. Eine Begrenzungsvolumenhierarchie-Datenstruktur (BVH-Datenstruktur) ist ein Typ von Beschleunigungsdatenstruktur, der dazu beitragen kann, die Anzahl der zu testenden Schnittpunkte zu reduzieren. Die BVH-Datenstruktur stellt eine Szene oder ein Objekt mit einem Begrenzungsvolumen dar und unterteilt das Begrenzungsvolumen in immer kleiner werdende Begrenzungsvolumina, die in Blattknoten enden, die geometrische Primitive enthalten. Die Begrenzungsvolumina sind hierarchisch, was bedeutet, dass die oberste Ebene die Ebene darunter einschließt, diese Ebene die nächste Ebene darunter einschließt, und so weiter. In einer Ausführungsform können Blattknoten andere Blattknoten in der Begrenzungsvolumenhierarchie potentiell überlappen.A good way to speed up beam tracing is to use an acceleration data structure. The acceleration data structure represents the 3D model of an object or scene in a manner that helps to quickly decide which part of the object a particular ray is likely to intersect and large parts of the scene that the ray will not intersect quickly to discard. A bounding volume hierarchy data structure (BVH data structure) is a type of acceleration data structure that can help reduce the number of intersection points to be tested. The BVH data structure represents a scene or an object with a boundary volume and divides the boundary volume into ever smaller boundary volumes that end in leaf nodes that contain geometric primitives. The bounding volumes are hierarchical, meaning that the top level includes the level below, this level includes the next level below, and so on. In one embodiment, leaf nodes can be others Potentially overlap leaf nodes in the bounding volume hierarchy.
Um zu veranschaulichen, wie eine Begrenzungsvolumenhierarchie arbeitet, zeigen 2A-2G eine Teekanne, die rekursiv in immer kleiner werdende hierarchische Begrenzungsvolumina unterteilt ist. 2A zeigt ein Teekanne-Objekt, und 2B zeigt ein Begrenzungsvolumen 202 (in diesem Fall ein Kasten, Würfel oder rechteckiger Quader), das die gesamte Teekanne einschließt. Das Begrenzungsvolumen 202, das durch seine Vertices effizient definiert werden kann, liefert eine Angabe der räumlichen Lage des Objekts und ist typischerweise so bemessen, dass es nur geringfügig größer als das Objekt ist.To illustrate how a bounding volume hierarchy works, show 2A-2G a teapot that is recursively subdivided into increasingly smaller hierarchical bounding volumes. 2A shows a teapot object, and 2 B shows a limit volume 202 (in this case a box, cube or rectangular cuboid) that encloses the entire teapot. The limit volume 202 , which can be defined efficiently by its vertices, provides an indication of the spatial position of the object and is typically dimensioned such that it is only slightly larger than the object.
Die erste Stufe der Beschleunigungsstruktur-Konstruktion erfasst die Begrenzungskästen der referenzierten Geometrie. Dies wird erreicht, indem für jedes geometrische Primitiv in einem Objekt eine Begrenzungskasten-Prozedur durchgeführt wird, die einen konservativen achsenausgerichteten Begrenzungskasten für ihr Eingangs-Primitiv wie z. B. den in 2B gezeigten Kasten 202 zurückgibt. Die Verwendung dieser Begrenzungskästen als elementare Primitive für die Beschleunigungsstrukturen bietet die notwendige Abstraktion, um Strahlen gegen beliebige benutzerdefinierte Geometrien (einschließlich mehrerer Geometrietypen innerhalb einer einzelnen Struktur) zu verfolgen. Da in 2B das Begrenzungsvolumen 202 größer ist als die Teekanne und sie vollständig enthält, kann ein Strahl, der das Begrenzungsvolumen nicht schneidet, die Teekanne nicht schneiden, obwohl ein Strahl, der das Begrenzungsvolumen schneidet, die Teekanne schneiden kann oder nicht. Da das Begrenzungsvolumen 202 leicht durch die x,y,z-Koordinaten seiner Vertices im 3D-Raum definiert ist und ein Strahl durch seine x,y,z-Koordinaten im 3D-Raum definiert ist, ist der Strahl-Begrenzungsvolumen-Test zum Bestimmen, ob ein Strahl das Begrenzungsvolumen 202 schneidet, unkompliziert (obwohl eine Transformation zur Anpassung an unterschiedliche Koordinatensysteme verwendet werden kann, wie im Folgenden erläutert wird).The first stage of the acceleration structure design captures the bounding boxes of the referenced geometry. This is achieved by performing a bounding box procedure for each geometric primitive in an object, which procedure uses a conservative, axis-aligned bounding box for its input primitive, e.g. B. the in 2 B shown box 202 returns. Using these bounding boxes as elementary primitives for the acceleration structures provides the abstraction necessary to trace rays against any user-defined geometry (including multiple geometry types within a single structure). There in 2 B the limit volume 202 is larger than the teapot and contains it completely, a beam that does not cut the confinement volume cannot cut the teapot, although a beam that cuts the confinement volume may or may not cut the teapot. Because the limit volume 202 Easily defined by the x, y, z coordinates of its vertices in 3D space and a ray is defined by its x, y, z coordinates in 3D space, the ray confinement volume test is to determine whether a ray the limit volume 202 cuts, uncomplicated (although a transformation can be used to adapt to different coordinate systems, as explained below).
2C zeigt das Begrenzungsvolumen 202 unterteilt in kleinere, enthaltene Begrenzungsvolumina. Während das hier zur Veranschaulichung gezeigte Unterteilungsschema eine so genannte oktäre Unterteilung oder ein „Oktbaum“ ist, wobei jedes Volumen in acht kleinere Volumen einheitlicher Größe unterteilt ist, sind viele andere räumliche Hierarchien und Unterteilungsschemata bekannt, wie z. B. ein binärer Baum, ein quartärer Baum, ein k-d-Baum, ein Binärraumteilerbaum (BSP-Baum) und ein Begrenzungsvolumenhierarchie-Baum (BVH-Baum). Siehe z. B. US-Patent 9,582,607. 2C shows the limitation volume 202 divided into smaller, contained limitation volumes. While the subdivision scheme shown here for illustration is a so-called octal subdivision or an "oct tree", with each volume divided into eight smaller volumes of uniform size, many other spatial hierarchies and subdivision schemes are known, such as e.g. B. a binary tree, a quaternary tree, a kd tree, a binary space divider tree (BSP tree) and a bounding volume hierarchy tree (BVH tree). See e.g. B. U.S. Patent 9,582,607.
Jedes der in 2C gezeigten unterteilten Begrenzungsvolumina kann noch weiter unterteilt werden. 2D zeigt eines der unterteilten Volumina 204 von 2C, das weiter unterteilt wird, um zusätzliche unterteilte, eingekapselte Begrenzungsvolumina zu erzeugen. Wie in 2D gezeigt, enthalten einige der unterteilten Begrenzungsvolumina Teile der Teekanne und andere nicht. Volumina, die keinen Teil der Teekanne enthalten, werden nicht weiter unterteilt, da die weiteren Unterteilungen keine weiteren räumlichen Informationen über die Teekanne liefern. Bereits unterteilte Begrenzungsvolumina, die mindestens einen Teil der Teekanne enthalten, können noch weiter rekursiv unterteilt werden - wie das Auftauchen einer jeden aus einer Folge von immer kleiner werdenden Katzen aus den Hüten von Dr. Seuss' The Cat In The Hat Comes Back (1958). Die Teile des Raums innerhalb des Begrenzungsvolumens 202, die Geometrie enthalten, werden rekursiv unterteilt, um es dem Traversierungs-Koprozessor 138 zu ermöglichen, die volumetrischen Unterteilungen zu nutzen, um effizient herauszufinden, wo sich die Geometrie in Bezug auf irgendeinen gegebenen Strahl befindet. Man beachte, dass zwar eine räumliche oder aktive Unterteilung des Volumens möglich ist, viele Implementierungen aber die hierarchische Struktur, die Volumina und Subvolumina definiert, im Voraus erzeugen werden. In solchen Fällen kann der Erbauer die Hierarchie oft aus einzelnen Dreiecken und nicht aus der gesamten Szene herab aufbauen. Aufbauen bedeutet, dass Sie nicht bestimmen müssen, ob ein unterteiltes Volumen irgendetwas enthält, da es per Definition enthält, was in einer Hierarchie von volumetrischen Unterteilungen darunter liegt.Each of the in 2C The subdivided limitation volumes shown can be further subdivided. 2D shows one of the divided volumes 204 of 2C which is further subdivided to create additional subdivided, encapsulated bounding volumes. As in 2D shown, some of the partitioned containment volumes contain portions of the teapot and others do not. Volumes that do not contain any part of the teapot are not further subdivided, since the further subdivisions do not provide any further spatial information about the teapot. Limiting volumes that have already been subdivided and that contain at least part of the teapot can be subdivided even more recursively - such as the emergence of each of a sequence of ever smaller cats from the hats of Dr. Seuss' The Cat In The Hat Comes Back (1958). The parts of the space within the bounding volume 202 that contain geometry are recursively subdivided to the traversal coprocessor 138 to allow the volumetric divisions to be used to efficiently find out where the geometry is with respect to any given ray. Note that while spatial or active volume subdivision is possible, many implementations will create the hierarchical structure that defines volumes and subvolumes in advance. In such cases, the builder can often build the hierarchy from individual triangles and not from the entire scene. Building means that you don't have to determine whether a subdivided volume contains anything, because by definition it contains what is below it in a hierarchy of volumetric subdivisions.
2E zeigt eine weitere derartige Unterteilung des Begrenzungsvolumens 204 in ein weiteres kleineres enthaltenes Begrenzungsvolumen 206, das in diesem Beispiel nur den Ausguss der Teekanne plus eine weitere Oberfläche an der Wand der Teekanne enthält, und 2F zeigt eine zusätzliche Unterteilung des Begrenzungsvolumens 206 in eine noch kleinere enthaltene Unterteilung 208, die das Ende des Ausgusses der Teekanne einkapselt. In Abhängigkeit von der Art und Weise, in der das BVH konstruiert ist, kann das Begrenzungsvolumen 208 nach Wunsch immer weiter unterteilt werden - und der Traversierungs-Koprozessor 138 ermöglicht es dem System 100 von 1, die BVH effizient hinab bis zu einer beliebigen Unterteilungsebene zu traversieren. Die Anzahl und Konfigurationen der rekursiven Unterteilungen hängen von der Komplexität und Konfiguration des gerade modellierten 3D-Objekts sowie anderen Faktoren wie z. B. gewünschten Auflösung, der Entfernung des Objekts vom Standpunkt, usw. ab. 2E shows another such subdivision of the bounding volume 204 into another smaller contained containment volume 206 , which in this example only contains the spout of the teapot plus another surface on the wall of the teapot, and 2F shows an additional subdivision of the limitation volume 206 into an even smaller subdivision included 208 that encapsulates the end of the spout of the teapot. Depending on the way in which the BVH is constructed, the limitation volume may vary 208 can be subdivided as required - and the traversing coprocessor 138 enables the system 100 of 1 to efficiently traverse the BVH down to any subdivision level. The number and configurations of the recursive subdivisions depend on the complexity and configuration of the 3D object being modeled, as well as other factors such as B. desired resolution, the distance of the object from the point of view, etc.
Auf irgendeiner Ebene der Unterteilung (die für unterschiedliche Teile der BVH unterschiedliche Ebenen sein kann) trifft der Traversierungs-Koprozessor 138 auf Geometrie, die das gerade modellierte eingekapselte Objekt bildet. In Analogie zu einem Baum sind die aufeinanderfolgenden volumetrischen Unterteilungen Stamm, Verzweigungen, Äste und Zweige, und die Geometrie zeigt sich schließlich an den ganzen Spitzen des Baums, nämlich den Blättern. In diesem Fall zeigt 2G die Oberfläche des Ausgusses der Teekanne, die durch ein Beispiel-Maschennetz von geometrischen Primitiven definiert ist. Die gezeigten geometrischen Primitive sind Dreiecke, doch können auch andere geometrische Primitive wie z. B. Vierecke, Linien, Rechtecke, Quadriken, Flecken oder andere geometrische Primitive verwendet werden, die Fachleuten vertraut sind (in einer Ausführungsform können solche anderen Typen von Primitiven als Dreiecke ausgedrückt oder in Dreiecke umgewandelt werden). Die geometrischen Primitive in dem Maschennetz stellen die Form der 3D-Oberfläche des gerade modellierten Objekts dar. Das hier gezeigte Beispiel ist ein Maschennetz, doch kann die begrenzte Geometrie eine diskontinuierliche Geometrie enthalten, wie z. B. Partikel, die möglicherweise nicht verbunden sind. In den nicht einschränkenden Ausführungsbeispielen beschleunigt der Traversierungs-Koprozessor 138 auch Strahl-Schnittpunkttests mit dieser Geometrie, um schnell zu bestimmen, welche Dreiecke von einem gegebenen Strahl getroffen werden. Das Bestimmen von Strahl-Primitiv-Schnittpunkten umfasst das Vergleichen der räumlichen xyz-Koordinaten der Vertices jedes Primitivs mit den xyz-Koordinaten des Strahls, um zu bestimmen, ob der Strahl und die Oberfläche, die das Primitiv definiert, den gleichen Raum einnehmen. Der Strahl-Primitiv-Schnittpunkttest kann rechenintensiv sein, da möglicherweise viele Dreiecke zu testen sind. Zum Beispiel ist bei dem in 2G gezeigten Maschennetz der Ausguss der Teekanne allein aus über hundert Dreiecken zusammengesetzt - obwohl es in manchen Implementierungen effizienter sein kann, weiter volumetrisch zu unterteilen und dadurch die Anzahl der Dreiecke in einem solchen „Blattknoten“ auf etwas wie 16 oder weniger zu begrenzen.At some level of subdivision (which is different for different parts of the BVH The traversing coprocessor 138 on geometry that forms the encapsulated object just modeled. Analogous to a tree, the successive volumetric subdivisions are trunk, branches, branches and twigs, and the geometry is finally shown on the entire tips of the tree, namely the leaves. In this case it shows 2G the surface of the spout of the teapot, which is defined by a sample mesh of geometric primitives. The geometric primitives shown are triangles, but other geometric primitives such as e.g. For example, quadrilaterals, lines, rectangles, quadrics, spots, or other geometric primitives known to those skilled in the art (in one embodiment, such other types of primitives can be expressed as triangles or converted to triangles). The geometric primitives in the mesh represent the shape of the 3D surface of the object being modeled. The example shown here is a mesh, but the limited geometry may include a discontinuous geometry, such as B. Particles that may not be connected. In the non-limiting embodiments, the traversing coprocessor speeds up 138 also beam intersection tests with this geometry to quickly determine which triangles are hit by a given beam. Determining ray-primitive intersections involves comparing the spatial xyz coordinates of the vertices of each primitive with the xyz coordinates of the ray to determine whether the ray and the surface defining the primitive occupy the same space. The beam-primitive intersection test can be computationally intensive because there may be many triangles to test. For example, in the 2G mesh network the spout of the teapot alone is composed of over a hundred triangles - although in some implementations it can be more efficient to further subdivide volumetrically and thereby the number of triangles in such a "leaf knot" to something like 16 or less limit.
Wie oben erörtert, bestimmen Strahlverfolgungsprozeduren, welche geometrischen Primitive einer Szene von einem Strahl geschnitten werden. Aufgrund der großen Anzahl von Primitiven in einer 3D-Szene ist es jedoch möglicherweise nicht effizient oder machbar, jedes geometrische Primitiv auf einen Schnittpunkt zu testen. Beschleunigungsdatenstrukturen wie z. B. BVH ermöglichen eine schnelle Bestimmung, welche Begrenzungsvolumina ignoriert werden können, welche Begrenzungsvolumina geschnittene geometrische Primitive enthalten können und welche geschnittenen geometrischen Primitive für Visualisierung wichtig sind und welche nicht.As discussed above, ray tracing procedures determine which geometric primitives of a scene are intersected by a ray. However, due to the large number of primitives in a 3D scene, it may not be efficient or feasible to test each geometric primitive for an intersection. Acceleration data structures such as B. BVH enable a quick determination of which boundary volumes can be ignored, which boundary volumes can contain cut geometric primitives and which cut geometric primitives are important for visualization and which are not.
Strahl-SchnittpunkttestenBeam-intersection testing
3A-3C veranschaulichen eine Strahlverfolgung, die auf das Begrenzungsvolumen 208 von 2G angewendet wird, das ein Dreiecks-Maschennetz 320 enthält. 3A zeigt einen Strahl 302 in einem virtuellen Raum mit Begrenzungsvolumina 310 und 315. Um zu bestimmen, ob der Strahl 302 ein oder mehrere Dreiecke in dem Maschennetz 320 schneidet, könnte jedes Dreieck direkt gegen dem Strahl 302 getestet werden. Um den Prozess zu beschleunigen (da das Objekt viele tausend Dreiecke enthalten könnte), wird der Strahl 302 zuerst gegen die Begrenzungsvolumina 310 und 315 getestet. Wenn der Strahl 302 kein Begrenzungsvolumen schneidet, schneidet er keine Dreiecke innerhalb des Begrenzungsvolumens, und alle Dreiecke innerhalb des Begrenzungsvolumens können für die Zwecke dieses Strahls ignoriert werden. Da in 3A der Strahl 302 das Begrenzungsvolumen 310 verfehlt, müssen die Dreiecke des Maschennetzes 320 innerhalb dieses Begrenzungsvolumens nicht auf Schnittpunkte getestet werden. Obwohl das Begrenzungsvolumen 315 von dem Strahl 302 geschnitten wird, enthält das Begrenzungsvolumen 315 keine Geometrie, so dass kein weiteres Testen erforderlich ist. 3A-3C illustrate ray tracing based on the confinement volume 208 of 2G is applied, which is a triangular mesh 320 contains. 3A shows a ray 302 in a virtual space with limited volumes 310 and 315 , To determine if the beam 302 one or more triangles in the mesh 320 intersects, each triangle could be directly against the beam 302 getting tested. To speed up the process (since the object could contain many thousands of triangles), the beam 302 first against the limitation volumes 310 and 315 tested. If the beam 302 does not intersect a bounding volume, it does not intersect any triangles within the bounding volume, and all triangles within the bounding volume can be ignored for the purposes of this beam. There in 3A the beam 302 the limit volume 310 missed, the triangles of the mesh 320 are not tested for intersections within this limitation volume. Although the limit volume 315 from the beam 302 is cut, contains the limiting volume 315 no geometry, so no further testing is required.
Wenn andererseits ein Strahl wie z. B. der in 3B gezeigte Strahl 304 ein Begrenzungsvolumen 310 schneidet, das Geometrie enthält, dann kann der Strahl die Geometrie innerhalb des Begrenzungsvolumens schneiden oder nicht, so dass weitere Tests an der Geometrie selbst durchgeführt werden müssen, um mögliche Schnittpunkte zu finden. Da die Strahlen 304, 306 in 3B und 3C ein Begrenzungsvolumen 310 schneiden, das Geometrie enthält, müssen weitere Tests durchgeführt werden, um zu bestimmen, ob irgendwelche (und welche) der Primitive innerhalb des Begrenzungsvolumens geschnitten werden. In 3B würde weiteres Testen der Schnittpunkte mit den Primitiven anzeigen, dass der Strahl 304 zwar das Begrenzungsvolumen 310 durchläuft, aber keines der vom Begrenzungsvolumen eingeschlossenen Primitive schneidet (alternativ könnte, wie oben erwähnt, das Begrenzungsvolumen 310 weiter volumetrisch unterteilt werden, so dass ein Begrenzungsvolumen-Schnittpunkttest verwendet werden könnte, um zu zeigen, dass der Strahl keine Geometrie schneidet oder insbesondere, welche Primitive der Strahl möglicherweise schneidet).On the other hand, if a beam such. B. the in 3B shown beam 304 a limit volume 310 intersects that contains geometry, then the beam may or may not intersect the geometry within the confinement volume, so further testing must be performed on the geometry itself to find possible intersections. Because the rays 304 . 306 in 3B and 3C a limit volume 310 that contains geometry, further tests must be performed to determine whether any (and which) of the primitives are cut within the bounding volume. In 3B further testing of the intersections with the primitives would indicate that the beam 304 the limitation volume 310 runs through, but does not intersect any of the primitives included in the bounding volume (alternatively, as mentioned above, the bounding volume could 310 be further volumetrically subdivided so that a bounding volume intersection test could be used to show that the beam does not intersect geometry or, in particular, which primitives the beam may intersect).
3C zeigt eine Situation, in der das Begrenzungsvolumen 310 von dem Strahl 306 geschnitten wird und Geometrie enthält, die der Strahl 306 schneidet. Der Traversierungs-Koprozessor 138 testet die Schnittpunkte zwischen dem Strahl 306 und den einzelnen Primitiven, um zu bestimmen, welche Primitive der Strahl schneidet. 3C shows a situation in which the limiting volume 310 from the beam 306 is cut and contains geometry that the beam 306 cuts. The traversal coprocessor 138 tests the intersections between the beam 306 and the individual primitives to determine which primitives the beam intersects.
Strahlverfolgungs-Operationen Ray tracing operations
4 ist ein Flussdiagramm, das Beispiel-Strahlverfolgungs-Operationen zusammenfasst, die der Traversierungs-Koprozessor 138 in Zusammenarbeit mit SM(s) 132 wie oben beschrieben durchführt. Die Operationen in 4 werden vom Traversierungs-Koprozessor 138 in Zusammenarbeit mit seiner Interaktion mit einem SM 132 durchgeführt. Der Traversierungs-Koprozessor 138 kann somit die Identifizierung eines Strahls von dem SM 132 und den Traversierungsstatus, der einen oder mehrere Knoten in einer oder mehreren BVHs aufzählt, die der Strahl traversieren muss, empfangen. Der Traversierungs-Koprozessor 138 bestimmt, welche Begrenzungsvolumina einer BVH-Datenstruktur der Strahl schneidet (der „Strahl-Complet“-Test 512), und anschließend, ob der Strahl ein oder mehrere Primitive in den geschnittenen Begrenzungsvolumina schneidet und welche Dreiecke geschnitten werden (der „Strahl-Primitiv-Test“ 520). In nicht einschränkenden Ausführungsbeispielen spezifizieren „Complets“ (komprimierte Treelets („Drei-chen“) Wurzel- oder Innenknoten (d. h. Volumina) der Begrenzungsvolumenhierarchie mit Kindern, die andere Complets oder Blattknoten eines einzigen Typs pro Complet sind. 4 Figure 12 is a flow diagram summarizing example beam tracking operations performed by the traversal coprocessor 138 in collaboration with SM (s) 132 as described above. The operations in 4 are from the traversal coprocessor 138 in collaboration with his interaction with an SM 132 carried out. The traversal coprocessor 138 can thus identify a beam from the SM 132 and receive the traversal status that enumerates one or more nodes in one or more BVHs that the beam must traverse. The traversal coprocessor 138 determines which boundary volumes of a BVH data structure the beam intersects (the "beam complete" test 512 ), and then whether the beam intersects one or more primitives in the cut boundary volumes and which triangles are cut (the “beam primitive test” 520). In non-limiting embodiments, "complets" (compressed treelets ("threefold")) specify root or inner nodes (ie volumes) of the bounding volume hierarchy with children that are other completes or leaf nodes of a single type per complet.
Zuerst überprüft der Traversierungs-Koprozessor 138 den Traversierungsstatus des Strahls. Wenn ein Stapel, den der Traversierungs-Koprozessor 138 für den Strahl unterhält, leer ist, ist die Traversierung abgeschlossen. Wenn sich ein Eintrag oben auf dem Stapel befindet, sendet der Traversierungs-Koprozessor 138 eine Anforderung an das Speicher-Subsystem, diesen Knoten auszulesen. Der Traversierungs-Koprozessor 138 führt dann einen Begrenzungskasten-Test 512 durch, um zu bestimmen, ob ein Begrenzungsvolumen einer BVH-Datenstruktur von einem bestimmten Strahl geschnitten wird, den der SM 132 spezifiziert (Schritt 512, 514). Wenn der Begrenzungskasten-Test feststellt, dass das Begrenzungsvolumen nicht von dem Strahl geschnitten wird („Nein“ in Schritt 514), ist es nicht notwendig, weitere Testen für Visualisierung durchzuführen, und der Traversierungs-Koprozessor 138 kann dieses Ergebnis an den anfordernden SM 132 zurückgeben. Denn wenn ein Strahl ein Begrenzungsvolumen verfehlt (wie in 3A in Bezug auf das Begrenzungsvolumen 310), dann verfehlt der Strahl alle anderen kleineren Begrenzungsvolumina innerhalb des gerade getesteten Begrenzungsvolumens und irgendwelche Primitive, die das Begrenzungsvolumen enthält.First, the traversal coprocessor checks 138 the traversal status of the beam. If a stack the traversal coprocessor 138 maintains for the beam, is empty, the traversing is complete. If there is an entry at the top of the stack, the traversal coprocessor sends 138 a request to the storage subsystem to read this node. The traversal coprocessor 138 then performs a bounding box test 512 to determine whether a bounding volume of a BVH data structure is intersected by a particular beam that the SM 132 specified (step 512 . 514 ). If the bounding box test determines that the bounding volume is not cut by the beam (“No” in step 514 ), it is not necessary to carry out further tests for visualization, and the traversing coprocessor 138 this result can be sent to the requesting SM 132 hand back. Because if a beam misses a limiting volume (as in 3A in terms of the limitation volume 310 ), then the beam misses all other smaller confinement volumes within the confinement volume just tested and any primitives that contain the confinement volume.
Ergibt der vom Traversierungs-Koprozessor 138 durchgeführte Begrenzungskasten-Test, dass das Begrenzungsvolumen von dem Strahl geschnitten wird („Ja“ in Schritt 514), dann bestimmt der Traversierungs-Koprozessor, ob das Begrenzungsvolumen in kleinere Begrenzungsvolumina unterteilt werden kann (Schritt 518). In einem Ausführungsbeispiel führt der Traversierungs-Koprozessor 138 nicht notwendigerweise selbst irgendeine Unterteilung durch. Vielmehr hat jeder Knoten in der BVH ein oder mehrere Kinder (wobei jedes Kind ein Blatt oder ein Zweig in der BVH ist). Für jedes Kind gibt es ein Begrenzungsvolumen und einen Zeiger, der zu einem Zweig oder einem Blattknoten führt. Wenn ein Strahl einen Knoten unter Verwendung des Traversierungs-Koprozessors 138 verarbeitet, testet er sich selbst gegen die Begrenzungsvolumina der Kinder des Knotens. Der Strahl schiebt nur Stapeleinträge für diejenigen Zweige oder Blätter auf seinen Stapel, deren darstellende Begrenzungsvolumina getroffen worden sind. Wenn ein Strahl einen Knoten in dem Ausführungsbeispiel abruft, testet er nicht gegen das Begrenzungsvolumen des Knotens - er testet gegen die Begrenzungsvolumina der Kinder des Knotens. Der Traversierungs-Koprozessor 138 schiebt Knoten, deren Begrenzungsvolumina von einem Strahl getroffen werden, in einer durch die Strahlkonfiguration bestimmten Reihenfolge auf den Traversierungsstapel des Strahls. Zum Beispiel ist es möglich, Knoten in der Reihenfolge, in der die Knoten im Speicher erscheinen, oder in der Reihenfolge, in der sie entlang der Länge des Strahls erscheinen, oder in einer anderen Reihenfolge auf den Traversierungsstapel zu schieben. Wenn es weitere Unterteilungen des Begrenzungsvolumens gibt („Ja“ in Schritt 518), dann wird auf diese weiteren Unterteilungen des Begrenzungsvolumens zugegriffen, und der Begrenzungskasten-Test wird für jedes der resultierenden unterteilten Begrenzungsvolumina durchgeführt, um zu bestimmen, welche unterteilten Begrenzungsvolumina von dem Strahl geschnitten werden und welche nicht. Bei diesem rekursiven Prozess können einige der Begrenzungsvolumina durch den Test 514 eliminiert werden, während andere Begrenzungsvolumina in immer weiteren Unterteilungen resultieren können, die vom Traversierungs-Koprozessor 138 rekursiv durch Anwenden der Schritte 512-518 auf Schnittpunkte getestet werden.This results from the traversing coprocessor 138 Limiting box test carried out that the limiting volume is cut by the jet ("Yes" in step 514 ), then the traversal coprocessor determines whether the bounding volume can be divided into smaller bounding volumes (step 518 ). In one embodiment, the traversal coprocessor performs 138 not necessarily any division by yourself. Rather, each node in the BVH has one or more children (each child being a leaf or a branch in the BVH). For each child there is a volume limit and a pointer that leads to a branch or leaf node. If a beam knots using the traversal coprocessor 138 processed, it tests itself against the limited volumes of the children of the node. The beam only pushes batch entries for those branches or leaves on whose stack the representing limiting volumes have been hit. When a beam retrieves a node in the embodiment, it does not test against the knot's bounding volume - it tests against the knot's child's bounding volumes. The traversal coprocessor 138 pushes nodes whose boundary volumes are hit by a beam onto the beam traversal stack in an order determined by the beam configuration. For example, it is possible to push nodes onto the traversal stack in the order in which the nodes appear in memory, in the order in which they appear along the length of the beam, or in another order. If there are further subdivisions of the limitation volume ("Yes" in step 518 ), then these further divisions of the bounding volume are accessed and the bounding box test is performed for each of the resulting divided bounding volumes to determine which divided bounding volumes are intersected by the beam and which are not. In this recursive process, some of the confinement volumes can be tested 514 are eliminated, while other delimitation volumes can result in more and more subdivisions by the traversal coprocessor 138 recursively by applying the steps 512 - 518 be tested for intersections.
Sobald der Traversierungs-Koprozessor 138 bestimmt hat, dass die von dem Strahl geschnittenen Begrenzungsvolumina Blattknoten sind („Nein“ in Schritt 518), führt der Traversierungs-Koprozessor einen Primitiv-(z. B. Dreieck)-Schnittpunkttest 520 durch, um zu bestimmen, ob der Strahl Primitive in den geschnittenen Begrenzungsvolumina schneidet und welche Primitive der Strahl schneidet. Der Traversierungs-Koprozessor 138 führt somit eine Traversierung von geschnittenen nachkommenden Verzweigungsknoten nach Tiefe durch, bis Blattknoten erreicht sind. Der Traversierungs-Koprozessor 138 verarbeitet die Blattknoten. Wenn die Blattknoten Primitiv-Bereiche sind, testet der Traversierungs-Koprozessor 138 sie gegen den Strahl. Wenn die Blattknoten Instanzknoten sind, wendet der Traversierungs-Koprozessor 138 die Instanztransformation an. Wenn die Blattknoten Element-Bereiche sind, gibt der Traversierungs-Koprozessor 138 sie an den anfordernden SM 132 zurück. In den nicht einschränkenden Ausführungsbeispielen kann der SM 132 dem Traversierungs-Koprozessor 138 befehlen, unterschiedliche Arten von Strahl-Primitiv-Schnittpunkttests durchzuführen und unterschiedliche Ergebnisse zu melden, je nach den Operationen, die von einer Anwendung (oder einem Software-Stapel, auf dem die Anwendung läuft) kommen und von dem SM an die TTU weitergeleitet werden. Zum Beispiel kann der SM 132 dem Traversierungs-Koprozessor 138 befehlen, das nächstgelegene sichtbare Primitiv zu melden, das durch den Schnittpunkttest aufgedeckt worden ist, oder alle Primitive zu melden, die der Strahl schneidet, unabhängig davon, ob es sich um das nächstgelegene sichtbare Primitiv handelt. Der SM 132 kann diese verschiedenen Ergebnisse für verschiedene Arten von Visualisierung verwenden. Sobald der Traversierungs-Koprozessor 138 mit der Verarbeitung der Blattknoten fertig ist, kann es weitere Verzweigungsknoten (die früher auf den Stapel des Strahls geschoben worden sind) zu Testen geben.Once the traversal coprocessor 138 has determined that the boundary volumes intersected by the beam are leaf nodes ("No" in step 518 ), the traversal coprocessor performs a primitive (e.g. triangle) intersection test 520 to determine whether the beam intersects primitives in the cut boundary volumes and which primitives the beam intersects. The traversal coprocessor 138 thus traverses cut subsequent branch nodes by depth until leaf nodes are reached. The traversal coprocessor 138 processes the leaf nodes. If the leaf nodes are primitive areas, the traversal coprocessor tests 138 them against the beam. If the leaf nodes are instance nodes, the traversal coprocessor will apply 138 the instance transformation. If the leaf nodes are element areas, the traversal coprocessor returns 138 them to the requesting SM 132 back. In the non-limiting embodiments, the SM 132 the traversal coprocessor 138 command to perform different types of beam primitive intersection tests and report different results depending on the operations that come from an application (or a software stack on which the application is running) and are forwarded from the SM to the TTU. For example, the SM 132 the traversal coprocessor 138 command to report the closest visible primitive that has been detected by the intersection test or to report all primitives that the beam intersects, regardless of whether it is the closest visible primitive. The SM 132 can use these different results for different types of visualization. Once the traversal coprocessor 138 Once the leaf nodes have been processed, there may be further branch nodes (which were previously pushed onto the stack of the beam) for testing.
Mehrere SchnittpunkteMultiple intersections
Wie in 3C gezeigt, kann insbesondere irgendein gegebener Strahl mehrere Primitive innerhalb eines Begrenzungsvolumens schneiden. Ob der Strahlschnittpunkt innerhalb eines gegebenen Primitivs für Visualisierung von Bedeutung ist, hängt von den Eigenschaften und der Position dieses Primitivs sowie von den Visualisierungsprozeduren ab, die der SM 132 durchführt. Zum Beispiel können Primitive opak, transparent oder teilweise transparent (d. h. transluzent) sein. Opake Primitive blockieren den Durchgang eines Strahls durch das Primitiv, weil das Auge nicht durch die opake Oberfläche des Primitivs sehen kann. Transparente Primitive lassen den Strahl durch (weil das Auge durch das transparente Primitiv hindurchsehen kann), doch kann die Situation komplexer sein. Zum Beispiel können transparente Primitive spiegelnde Eigenschaften aufweisen, die bewirken, dass ein Teil des Strahls reflektiert wird (denken Sie an Reflexion an einer Fensterscheibe) und der Rest des Strahls hindurchgeht. Andere transparente Primitive werden verwendet, um eine Oberfläche zu schaffen, auf die eine Textur abgebildet wird. Zum Beispiel kann jedes einzelne Blatt eines Baums durch ein transparentes Primitiv modelliert werden, auf das ein Bild des Blattes texturabgebildet wird.As in 3C shown, in particular any given ray can intersect multiple primitives within a confinement volume. Whether the beam intersection is important for visualization within a given primitive depends on the properties and position of this primitive as well as on the visualization procedures that the SM 132 performs. For example, primitives can be opaque, transparent, or partially transparent (ie, translucent). Opaque primitives block the passage of a beam through the primitive because the eye cannot see through the opaque surface of the primitive. Transparent primitives let the beam pass (because the eye can see through the transparent primitive), but the situation can be more complex. For example, transparent primitives can have specular properties that cause part of the beam to be reflected (think reflection on a windowpane) and the rest of the beam to pass through. Other transparent primitives are used to create a surface on which a texture is mapped. For example, every single leaf of a tree can be modeled by a transparent primitive onto which an image of the leaf is mapped texture.
5A-5C veranschaulichen einige dieser Szenarien anhand eines Beispiels von drei Dreiecken, von denen angenommen wird, dass sie sich in demselben Begrenzungsvolumen befinden und jeweils von einem Strahl geschnitten werden. 5A veranschaulicht einen Strahl, der auf diese drei Dreiecke gerichtet ist, wobei das erste Dreieck, das der Strahl in Bezug auf den Standpunkt trifft, opak ist. Da das „vordere“ (aus Sicht der Richtung des Strahls vom Auge her) geschnittene Dreieck opak ist, blockiert dieses Dreieck den Strahl, so dass der Strahl die anderen Dreiecke nicht erreicht, obwohl er sie räumlich schneidet. In diesem Beispiel können die Dreiecke „hinter“ dem opaken Dreieck vom Standpunkt aus ignoriert (ausgesondert) werden, nachdem der Schnittpunkt des opaken Dreiecks identifiziert worden ist, da das „vordere“, opake Dreieck die anderen Dreiecke vor der Sicht des Benutzers entlang des Strahls verdeckt. Culling (Aussondern) wird in 5A-5C durch gestrichelte Linien angezeigt. In diesem Fall muss der Traversierungs-Koprozessor 138 möglicherweise nur die Identifizierung des ersten, opaken Dreiecks an den SM 132 melden. 5A-5C illustrate some of these scenarios using an example of three triangles, which are assumed to be in the same confinement volume and are each intersected by a ray. 5A illustrates a ray directed at these three triangles, the first triangle the ray hits with respect to the viewpoint being opaque. Since the “front” triangle (as seen from the eye in the direction of the beam) is opaque, this triangle blocks the beam so that the beam does not reach the other triangles, although it intersects them spatially. In this example, the triangles "behind" the opaque triangle can be ignored (discarded) from the point of view after the intersection of the opaque triangle has been identified, since the "front" opaque triangle detects the other triangles from the user's view along the beam covered. Culling is done in 5A-5C indicated by dashed lines. In this case, the traversal coprocessor 138 possibly only the identification of the first opaque triangle on the SM 132 Report.
5B veranschaulicht einen Strahl, der auf die gleichen drei Dreiecke gerichtet ist, doch ist das nächstgelegene sichtbare Dreieck nun teilweise transparent statt opak. Da das nächstgelegene sichtbare geschnittene Dreieck mindestens teilweise transparent ist, kann der Strahl durch es hindurchgehen, um das opake Dreieck dahinter zu treffen. In diesem Fall ist das opake Dreieck durch das teilweise transparente Dreieck sichtbar, blockiert aber die Sicht des Benutzers auf das dritte Dreieck entlang des Strahls. Hier kann der Traversierungs-Koprozessor 138 die Identifizierung der beiden vorderen Dreiecke an den SM 132 melden, aber nicht des dritten, ausgesonderten Dreiecks, obwohl der Strahl dieses dritte Dreieck räumlich schneidet. Die Entdeckungsreihenfolge kann hier von Bedeutung sein. Im Falle eines Alpha- und opaken Dreiecks, wenn das opake zuerst gefunden worden ist, gibt der Traversierungs-Koprozessor 138 das opake Dreieck an den SM 132 mit einem Traversierungsstatus zurück, der das Testen am Alpha-Dreieck wieder aufnehmen wird. Zwar gibt es hier eine Bedeutung, dass das Alpha transparent bedeutet, doch bedeutet es wirklich: „Bringe mich zum SM 132 zurück und lasse den SM entscheiden, wie damit umzugehen ist“. Zum Beispiel kann ein Alpha-Dreieck entsprechend einer Textur oder Funktion beschnitten werden, so dass Teile des Dreiecks weggeschnitten werden (d. h. abwesend, nicht transparent). Der Traversierungs-Koprozessor 138 weiß nicht, wie der SM 132 die Alpha-Dreiecke behandeln wird (d. h. er behandelt transparente Dreiecke nicht anders als beschnittene Dreiecke). Somit können Alpha-Dreiecke das Licht, das von Punkten jenseits davon entlang des Strahls kommt, blockieren oder färben oder nicht, und in Ausführungsbeispielen erfordern sie ein Eingreifen des SM 132, um diese Dinge zu handhaben/bestimmen. 5B illustrates a ray directed at the same three triangles, but the closest visible triangle is now partially transparent instead of opaque. Since the closest visible intersected triangle is at least partially transparent, the beam can pass through it to hit the opaque triangle behind it. In this case, the opaque triangle is visible through the partially transparent triangle, but blocks the user's view of the third triangle along the beam. Here the traversing coprocessor can 138 the identification of the two front triangles on the SM 132 report, but not the third, separated triangle, although the beam intersects this third triangle spatially. The order of discovery can be important here. In the case of an alpha and opaque triangle, if the opaque has been found first, the traversal coprocessor returns 138 the opaque triangle on the SM 132 with a traversal status that will resume testing on the alpha triangle. Although there is a meaning here that the alpha means transparent, it really means: “Take me to the SM 132 back and let the SM decide how to deal with it ”. For example, an alpha triangle can be trimmed according to a texture or function so that parts of the triangle are cut away (ie absent, not transparent). The traversal coprocessor 138 do not know how the SM 132 will treat the alpha triangles (ie, it will treat transparent triangles no differently than cropped triangles). Thus, alpha triangles may or may not block or color the light coming from points beyond it along the beam, and in embodiments require intervention by the SM 132 to handle / determine these things.
5C veranschaulicht ein Szenario, in dem die ersten beiden Dreiecke, die der Strahl trifft, teilweise transparent sind. Da das erste und das zweite geschnittene Dreieck mindestens teilweise transparent sind, durchläuft der Strahl das erste und das zweite Dreieck, um auf das ebenfalls schneidende dritte opake Dreieck zu treffen. Da das dritte geschnittene Dreieck opak ist, blockiert es den Strahl, und der Strahl trifft nicht auf irgendwelche anderen Dreiecke hinter dem dritten Dreieck, auch wenn sie räumlich von ihm geschnitten werden können. In diesem Fall kann der Traversierungs-Koprozessor 138 alle drei Dreiecke an den SM 132 melden, muss aber keine weiteren Dreiecke hinter dem opaken Dreieck melden, da das opake Dreieck den Strahl daran hindert, diese zusätzlichen Dreiecke zu erreichen. 5C illustrates a scenario in which the first two triangles that the beam hits are partially transparent. Because the first and the second cut triangle at least partially are transparent, the beam passes through the first and second triangles to meet the third opaque triangle, which also intersects. Since the third triangle cut is opaque, it blocks the beam and the beam does not hit any other triangles behind the third triangle, even if they can be spatially cut by it. In this case, the traversal coprocessor 138 all three triangles to the SM 132 report, but does not have to report any further triangles behind the opaque triangle, since the opaque triangle prevents the beam from reaching these additional triangles.
In manchen Modi muss der SM 132 jedoch möglicherweise die Identitäten aller Dreiecke kennen, die der Strahl schneidet, unabhängig davon, ob sie opak oder transparent sind. In diesen Modi kann der Traversierungs-Koprozessor 138 einfach den Schnittpunkttest durchführen und die Identitäten aller Dreiecke zurückgeben, die der Strahl räumlich schneidet (in solchen Modi wird der Traversierungs-Koprozessor für alle drei in 5A-5C gezeigten Szenarien die gleichen Schnittpunktergebnisse zurückgeben) und es dem SM 132 ermöglichen, sie zu sortieren - oder in manchen Fällen dem Traversierungs-Koprozessor 138 befehlen, weitere Tests an diesen Dreiecken durchzuführen.In some modes, the SM 132 however, may know the identities of all the triangles the ray intersects, regardless of whether they are opaque or transparent. In these modes, the traversal coprocessor can 138 simply perform the intersection test and return the identities of all the triangles that the beam intersects spatially (in such modes, the traversing coprocessor is used for all three in 5A-5C scenarios shown return the same intersection results) and it to the SM 132 enable them to be sorted - or in some cases the traversal coprocessor 138 order further tests to be carried out on these triangles.
Wie im Folgenden näher erläutert, kann der Traversierungs-Koprozessor 138, wenn ein Strahl ein opakes Dreieck schneidet, bei manchen Operationen so programmiert sein, dass er die Länge des gerade getesteten Strahls auf die Position des Schnittpunkts mit einem opaken Dreieck reduziert, so dass er keine Dreiecke „hinter“ dem geschnittenen Dreieck meldet. Wenn ein teilweise transparentes Dreieck als von einem Strahl geschnitten bestimmt wird, gibt der Traversierungs-Koprozessor 138 für Visualisierungszwecke eine vollständigere Liste von Dreiecken zurück, auf die der Strahl trifft, und der anfordernde SM 132 kann weitere Verarbeitung durchführen, um zum Beispiel auf Basis irgendeiner Textur oder anderer Eigenschaften des Dreiecks zu bestimmen, ob der Strahl blockiert, durchgelassen oder teilweise durchgelassen und teilweise reflektiert wird. In Ausführungsbeispielen hat der Traversierungs-Koprozessor 138 keinen Zugriff auf Textureigenschaften von Dreiecken und versucht daher nicht, Visualisierung in Bezug auf diese Eigenschaften zu bestimmen.As explained in more detail below, the traversing coprocessor can 138 If a ray intersects an opaque triangle, in some operations it may be programmed to reduce the length of the ray being tested to the position of the intersection with an opaque triangle so that it does not report triangles "behind" the intersected triangle. If a partially transparent triangle is determined to be cut by a beam, the traversal coprocessor returns 138 return a more complete list of triangles encountered by the beam and the requesting SM for visualization purposes 132 may perform further processing to determine, for example, whether the beam is blocked, transmitted, or partially transmitted and partially reflected, based on any texture or other properties of the triangle. In embodiments, the traversal coprocessor 138 does not have access to triangle texture properties and therefore does not attempt to determine visualization related to these properties.
Texturen oder andere OberflächenmodifizierungenTextures or other surface modifications
Zum Beispiel zeigen 6A und 6B ein transparentes Dreieck 610 mit einer Textur 615 eines auf das Dreieck aufgebrachten Blattes. Man könnte sich ein Dreieck aus Plexiglas mit einem Aufkleber eines Blattes vorstellen. Wie in 6A gezeigt, schneidet der Strahl 620 das transparente Dreieck 610 an einem Punkt, der außerhalb der aufgebrachten Textur 615 liegt. Da der Strahl 620 das Dreieck außerhalb der aufgebrachten Textur 615 schneidet, blockiert die Textur den Strahl 620 nicht, und der Strahl durchläuft das transparente Dreieck 610 ungehindert. Dies ist wie durch die Teile des Plexiglas-Dreiecks sehen zu können, die nicht von dem Blattaufkleber bedeckt sind. Man beachte, dass in einem Ausführungsbeispiel der SM 132 die Sichtbarkeitsbestimmung durchführt, da der Traversierungs-Koprozessor 138 nicht notwendigerweise Zugriff auf Informationen über den Blattaufkleber hat. Der Traversierungs-Koprozessor 138 hilft dem SM 132, indem er die Identifizierung des Dreiecks, das der Strahl schneidet, zusammen mit Informationen über die Eigenschaften dieses Dreiecks an den SM zurückgibt.For example, show 6A and 6B a transparent triangle 610 with a texture 615 of a leaf attached to the triangle. One could imagine a triangle made of plexiglass with a sticker on a sheet. As in 6A shown, the beam intersects 620 the transparent triangle 610 at a point that is outside of the applied texture 615 lies. Because the beam 620 the triangle outside the applied texture 615 cuts, the texture blocks the beam 620 not, and the beam traverses the transparent triangle 610 unhindered. This is as you can see through the parts of the plexiglass triangle that are not covered by the sheet sticker. Note that in one embodiment of the SM 132 performs the visibility determination because the traversal coprocessor 138 does not necessarily have access to information about the sheet sticker. The traversal coprocessor 138 helps the SM 132 by returning to the SM the identification of the triangle the ray intersects, along with information about the properties of that triangle.
In 6B schneidet der Strahl 630 das transparente Dreieck dort, wo die Textur 615 aufgebracht ist. Der SM 132 bestimmt auf Basis davon, ob die Textur 615 den Strahl 630 blockieren oder den Strahl 630 durchlassen wird, ob nachfolgende Traversierung durch den Traversierungs-Koprozessor 138 notwendig ist oder nicht. Wenn der Strahl 630 durch die Textur 615 blockiert wird, werden andere Dreiecke hinter dem transparenten Dreieck 610, die sonst von dem Strahl 630 geschnitten worden wären, von der Textur verdeckt und tragen nicht zur Sichtbarkeit entlang des Strahls bei. In den hierin enthaltenen nicht einschränkenden Ausführungsbeispielen hat der Traversierungs-Koprozessor 138 keinen Zugriff auf Texturinformationen und versucht daher nicht, diese Bestimmung zu beschleunigen. Der Traversierungs-Koprozessor 138 kann zum Beispiel alle Schnittpunkte zwischen dem Strahl und den verschiedenen Dreiecken innerhalb des Objekts an den anfordernden SM 132 zurückgeben, und der SM kann dann die Grafik-Primitiv-Engine 134 verwenden, um weitere Strahlverfolgungs-Visualisierungsbestimmungen durchzuführen. In anderen Ausführungsbeispielen könnte der Traversierungs-Koprozessor 138 einige oder alle dieser Tests beschleunigen, indem er mit der Texturabbildungseinheit und anderen Teilen der 3D-Grafikpipeline innerhalb der Grafik-Primitiv-Engine 134 interagiert, um die notwendigen Visualisierungsbestimmungen vorzunehmen.In 6B the ray cuts 630 the transparent triangle where the texture 615 is applied. The SM 132 determined based on whether the texture 615 the beam 630 block or the beam 630 is let through whether subsequent traversing by the traversing coprocessor 138 is necessary or not. If the beam 630 through the texture 615 is blocked, other triangles are behind the transparent triangle 610 that are otherwise from the beam 630 would have been cut, hidden by the texture and do not contribute to visibility along the beam. In the non-limiting embodiments contained herein, the traversal co-processor has 138 does not have access to texture information and therefore does not attempt to speed up this determination. The traversal coprocessor 138 can, for example, all intersection points between the beam and the various triangles within the object to the requesting SM 132 return, and the SM can then use the graphics primitive engine 134 use to perform further ray tracing visualization determinations. In other embodiments, the traversal coprocessor could 138 Accelerate some or all of these tests by working with the texture map and other parts of the 3D graphics pipeline within the graphics primitive engine 134 interacts to make the necessary visualization determinations.
Koordinatentransformationencoordinate transformations
2A-3C betreffen nur ein einziges Objekt, nämlich eine Teekanne. So wie der Raum, in dem Sie sich gerade befinden, mehrere Objekte enthält, enthalten die meisten 3D-Szenen viele Objekte. Eine 3D-Szene mit einer Teekanne enthält zum Beispiel wahrscheinlich auch eine Tasse, eine Untertasse, einen Milchkrug, einen Löffel, eine Zuckerdose usw., die alle auf einem Tisch stehen. Bei 3D-Grafik wird jedes dieser Objekte typischerweise unabhängig modelliert. Das Grafiksystem 100 verwendet dann Befehle vom Prozessor 120, um sämtliche Modelle zusammen in gewünschten Positionen, Orientierungen und Größen zwecks Visualisierung in die gemeinsame Szene zu setzen (so wie Sie den Tisch zum Servieren von Tee decken und anordnen). Dies bedeutet, dass der SM 132 dem Traversierungs-Prozessor 138 befehlen kann, denselben Strahl in Bezug auf mehrere Objekte in der Szene zu analysieren. Der Umstand, dass jedes dieser Objekte in Position, Orientierung und Größe transformiert wird, wenn es in die gemeinsame Szene gesetzt wird, wird jedoch vom Traversierungs-Koprozessor 138 berücksichtigt und beschleunigt. In nicht einschränkenden Ausführungsbeispielen wird die Transformation vom Welt-Raum zum Objekt-Raum zusammen mit einem Welt-Raum-Begrenzungskasten in der Welt-Raum-BVH gespeichert. Der Traversierungs-Koprozessor 138 beschleunigt den Transformationsprozess, indem er den Strahl aus dem Welt-(Szenen-)Raum in den Objekt-Raum transformiert, um die in 4 gezeigten Tests durchzuführen. Da die Transformation der Geometrie vom Objekt-Raum in den Welt-(Szenen-)Raum rechenintensiv ist, wird diese Transformation insbesondere der Grafikpipeline-Grafik-Primitiv-Engine 134 und/oder Raster-Engine 136 überlassen, um sie als Teil der Rasterung durchzuführen. Der Traversierungs-Koprozessor 138 wandelt stattdessen einen gegebenen Strahl aus dem Welt-Raum in das Koordinatensystem jedes durch eine Beschleunigungsdatenstruktur definierten Objekts um und führt seine Tests im Objekt-Raum durch. 2A-3C affect only one object, namely a teapot. Just as the room you are in contains several objects, most 3D scenes contain many objects. For example, a 3D scene with a teapot may also contain a cup, saucer, milk jug, spoon, sugar bowl, etc., all of which are on a table. With 3D graphics, each of these objects is typically modeled independently. The graphics system 100 then uses instructions from the processor 120 to all Place models together in the desired positions, orientations and sizes for the purpose of visualization in the common scene (just as you set and arrange the table for serving tea). This means that the SM 132 the traversal processor 138 command to analyze the same beam for multiple objects in the scene. However, the fact that each of these objects is transformed in position, orientation, and size when placed in the common scene is handled by the traversal coprocessor 138 considered and accelerated. In non-limiting exemplary embodiments, the transformation from world space to object space is stored together with a world space boundary box in the world space BVH. The traversal coprocessor 138 accelerates the transformation process by transforming the ray from the world (scene) space into the object space, around which in 4 perform the tests shown. Since the transformation of the geometry from the object space into the world (scene) space is computationally intensive, this transformation becomes especially the graphics pipeline graphics primitive engine 134 and / or raster engine 136 left to do as part of the screening. The traversal coprocessor 138 instead converts a given beam from the world space into the coordinate system of each object defined by an acceleration data structure and performs its tests in the object space.
7A und 7B veranschaulichen, wie der Traversierungs-Koprozessor 138 den gleichen Strahl in drei verschiedene Objekt-Räume transformiert. 7A zeigt drei Objekte auf einem Tisch: eine Tasse, eine Teekanne und einen Krug. Diese drei Objekte und ein Tisch bilden eine Szene, die im Welt-Raum existiert. Ein Strahl, der ebenfalls im Welt-Raum definiert ist, geht von dem Standpunkt aus und schneidet jedes der drei Objekte. 7A and 7B illustrate how the traversal coprocessor 138 transformed the same beam into three different object spaces. 7A shows three objects on a table: a cup, a teapot and a jug. These three objects and a table form a scene that exists in the world space. A ray, which is also defined in world space, starts from the point of view and intersects each of the three objects.
7B zeigt jedes der drei Objekte, wie sie in Objekt-Räumen definiert sind. Jedes dieser drei Objekte wird durch ein jeweiliges Modell definiert, das in einem jeweiligen Objekt-Raum existiert. Der Traversierungs-Koprozessor 138 transformiert in nicht einschränkenden Ausführungsbeispielen den Strahl in den Objekt-Raum jedes Objekts, bevor er die Schnittpunkttests für dieses Objekt durchführt. Diese „Instanztransformation“ erspart den Rechenaufwand für die Transformation der Geometrie jedes Objekts und der zugehörigen volumetrischen Unterteilungen der Beschleunigungsdatenstruktur vom Objekt-Raum in den Welt-Raum für die Zwecke des Traversierungs-Koprozessors 138 beim Durchführen von Schnittpunkttests. 7B shows each of the three objects as defined in object spaces. Each of these three objects is defined by a respective model that exists in a respective object space. The traversal coprocessor 138 transforms the beam into the object space of each object before performing the intersection tests for that object in non-limiting embodiments. This "instance transformation" saves the computing effort for the transformation of the geometry of each object and the associated volumetric subdivisions of the acceleration data structure from the object space into the world space for the purposes of the traversal coprocessor 138 when performing intersection tests.
Die anfordernde SM 132 verfolgt, welche Objekte sich in Bezug auf jeden einzelnen Strahl vor welchen anderen Objekten befinden, und klärt die Sichtbarkeit in Fällen, in denen ein Objekt ein anderes Objekt verbirgt, einen Schatten auf ein anderes Objekt wirft und/oder Licht auf ein anderes Objekt reflektiert. Die anfordernde SM 132 kann den Traversierungs-Prozessor 138 verwenden, um jeden dieser Tests zu beschleunigen.The requesting SM 132 keeps track of which objects are in front of which other objects in relation to each individual ray, and clarifies visibility in cases where one object hides another object, casts a shadow on another object and / or reflects light on another object. The requesting SM 132 can the traversal processor 138 use to speed up each of these tests.
Beispiel-Baurn-BVH-BeschleunigungsdatenstrukturSample Baurn-BVH acceleration data structure
8A und 8B zeigen ein rekursiv unterteiltes Begrenzungsvolumen einer 3D-Szene (8A) und eine entsprechende Baumdatenstruktur (8B), auf die der Traversierungs-Koprozessor 138 zugreifen kann und die für hardwarebeschleunigte Operationen verwendet wird, die von dem Traversierungs-Koprozessor durchgeführt werden. Die Unterteilung der Begrenzungsvolumina kann in einer hierarchischen Baumdatenstruktur dargestellt werden, wobei das in 2B gezeigte große Begrenzungsvolumen durch einen Eltern-Knoten des Baums dargestellt wird und die kleineren Begrenzungsvolumina durch Kind-Knoten des Baums dargestellt werden, die von den Eltern-Knoten umfasst sind. Die kleinsten Begrenzungsvolumina werden als Blattknoten im Baum dargestellt und identifizieren ein oder mehrere geometrische Primitive, die in diesen kleinsten Begrenzungsvolumina enthalten sind. 8A and 8B show a recursively subdivided boundary volume of a 3D scene ( 8A ) and a corresponding tree data structure ( 8B ) to which the traversal coprocessor 138 can be accessed and used for hardware accelerated operations performed by the traversal coprocessor. The subdivision of the limitation volumes can be represented in a hierarchical tree data structure 2 B shown large bounding volumes are represented by a parent node of the tree and the smaller bounding volumes are represented by child nodes of the tree, which are encompassed by the parent nodes. The smallest boundary volumes are represented as leaf nodes in the tree and identify one or more geometric primitives that are contained in these smallest boundary volumes.
Die Baumdatenstruktur kann in Speicher außerhalb des Traversierungs-Koprozessors 138 gespeichert und auf Basis von Abfragen, die die SMs 132 an den Traversierungs-Koprozessor 138 ausgeben, ausgelesen werden. Die Baumdatenstruktur enthält eine Vielzahl von Knoten, die in einer Hierarchie angeordnet sind. Die Wurzelknoten N1 der Baumstruktur entsprechen dem Begrenzungsvolumen N1, das alle Dreiecke 01-08 einschließt. Der Wurzelknoten N1 kann die Vertices des Begrenzungsvolumens N1 und Kind-Knoten des Wurzelknotens identifizieren.The tree data structure can be in memory outside of the traversal coprocessor 138 saved and based on queries that the SMs 132 to the traversal coprocessor 138 output, be read out. The tree data structure contains a large number of nodes which are arranged in a hierarchy. The root nodes N1 the tree structure corresponds to the limitation volume N1 that includes all triangles 01-08. The root node N1 can be the vertices of the bounding volume N1 and identify child nodes of the root node.
In 8A ist das Begrenzungsvolumen N1 in Begrenzungsvolumina N2 und N3 unterteilt. Die Kind-Knoten N2 und N3 der Baumstruktur von 8B entsprechen den in 8A gezeigten Begrenzungsvolumina N2 und N3 und stellen sie dar. Die Kind-Knoten N2 und N3 in der Baumdatenstruktur identifizieren die Vertices der jeweiligen Begrenzungsvolumina N2 und N3 im Raum. Jedes der Begrenzungsvolumina N2 und N3 ist in diesem bestimmten Beispiel weiter unterteilt. Das Begrenzungsvolumen N2 ist in enthaltene Begrenzungsvolumina N4 und N5 unterteilt. Das Begrenzungsvolumen N3 ist in enthaltene Begrenzungsvolumina N6 und N7 unterteilt. Das Begrenzungsvolumen N7 enthält zwei Begrenzungsvolumina N8 und N9. Das Begrenzungsvolumen N8 enthält die Dreiecke O7 und O8, und das Begrenzungsvolumen N9 enthält Blatt-Begrenzungsvolumina N10 und N11 als seine Kind-Begrenzungsvolumina. Das Blatt-Begrenzungsvolumen N10 enthält einen Primitiv-Bereich (z. B. Dreieck-Bereich) O10, und das Blatt-Begrenzungsvolumen N11 enthält einen Element-Bereich O9. Jeweilige Kind-Knoten N4, N5, N6, N8, N10 und N11 der Baumstruktur von 8B entsprechen den Begrenzungsvolumina N4, N5, N6, N8, N10 und N11 von 8A im Raum und stellen sie dar.In 8A is the limit volume N1 in limited volumes N2 and N3 divided. The child knot N2 and N3 the tree structure of 8B correspond to those in 8A shown limiting volumes N2 and N3 and represent them. The child nodes N2 and N3 identify the vertices of the respective bounding volumes in the tree data structure N2 and N3 in the room. Each of the limitation volumes N2 and N3 is further subdivided in this particular example. The limit volume N2 is in containment volumes N4 and N5 divided. The limit volume N3 is in containment volumes N6 and N7 divided. The limit volume N7 contains two delimitation volumes N8 and N9 , The limit volume N8 contains the triangles O7 and O8 , and the limit volume N9 contains sheet boundary volumes N10 and N11 than his child limit volumes. The sheet limit volume N10 contains a primitive Area (e.g. triangle area) O10 , and the sheet limit volume N11 contains an element area O9 , Respective child knot N4 . N5 . N6 . N8 . N10 and N11 the tree structure of 8B correspond to the limitation volumes N4 . N5 . N6 . N8 . N10 and N11 of 8A in the room and represent them.
Der Baum in 8B ist nur drei bis sechs Ebenen tief, so dass die Volumina N4, N5, N6, N8, N10 und N11 „Blattknoten“ bilden - das heißt, Knoten im Baum, die keine Kind-Knoten haben. 8A zeigt, dass jedes der Blattknoten-Begrenzungsvolumina N4, N5, N6 und N8 zwei Dreiecke der Geometrie in der Szene enthält. Zum Beispiel enthält die volumetrische Unterteilung N4 die Dreiecke O1 & O2; die volumetrische Unterteilung N5 enthält die Dreiecke O3 & O4; die volumetrische Unterteilung N6 enthält die Dreiecke O5 & O6; und die volumetrische Unterteilung N8 enthält die Dreiecke O7 & O8. Die in 8B gezeigte Baumstruktur stellt diese Blattknoten N4, N5, N6 und N7 dar, indem sie sie entsprechenden Dreiecken der Dreiecke 01-08 der Szenengeometrie zuordnet. Um auf diese Szenengeometrie zuzugreifen, traversiert der Traversierungs-Koprozessor 138 die Baumdatenstruktur von 8B bis hinab zu den Blattknoten. Im Allgemeinen können und werden unterschiedliche Teile des Baums unterschiedliche Tiefen haben und unterschiedliche Anzahlen von Dreiecken enthalten. Blattknoten, die volumetrischen Unterteilungen zugeordnet sind, die keine Geometrie enthalten, müssen nicht explizit in der Baumdatenstruktur dargestellt werden (d. h., der Baum wird „beschnitten“).The tree in 8B is only three to six levels deep, so the volumes N4 . N5 . N6 . N8 . N10 and N11 Form "leaf nodes" - that is, nodes in the tree that have no child nodes. 8A shows that each of the leaf node boundary volumes N4 . N5 . N6 and N8 contains two triangles of geometry in the scene. For example, the volumetric subdivision contains N4 the triangles O1 & O2 ; the volumetric division N5 contains the triangles O3 & O4 ; the volumetric division N6 contains the triangles O5 & O6 ; and the volumetric division N8 contains the triangles O7 & O8 , In the 8B The tree structure shown represents these leaf nodes N4 . N5 . N6 and N7 represent them by corresponding triangles to the triangles 01 - 08 assigned to the scene geometry. In order to access this scene geometry, the traversing coprocessor traverses 138 the tree data structure of 8B down to the leaf nodes. In general, different parts of the tree can and will have different depths and contain different numbers of triangles. Leaf nodes that are assigned to volumetric subdivisions that do not contain any geometry do not have to be explicitly represented in the tree data structure (ie the tree is “trimmed”).
Gemäß manchen Ausführungsformen kann der bei N7 verwurzelte Teilbaum einen Satz von Begrenzungsvolumina oder BVH darstellen, der in einem anderen Koordinatenraum definiert ist als die Begrenzungsvolumina, die den Knoten N1-N3 entsprechen. Wenn sich das Begrenzungsvolumen N7 in einem anderen Koordinatenraum befindet als sein Eltern-Begrenzungsvolumen N3, kann ein Instanzknoten N7', der die Strahltransformation liefert, die notwendig ist, um den bei N7 verwurzelten Teilbaum zu traversieren, den Rest des Baums mit dem bei N7 verwurzelten Teilbaum verbinden. Der Instanzknoten N7' verbindet das Begrenzungsvolumen oder die BVH entsprechend den Knoten N1-N3 mit den Begrenzungsvolumina oder BVH entsprechend den Knoten N7 usw. durch Definieren der Transformation aus Koordinatenraum von N1-N3 (z. B. Welt-Raum) in den Koordinatenraum von N7 usw. (z. B. Objektbereich).In some embodiments, the at N7 rooted subtree represent a set of bounding volumes or BVH that is defined in a different coordinate space than the bounding volumes that define the node N1 - N3 correspond. If the limit volume N7 is in a different coordinate space than its parent bounding volume N3 , can be an instance node N7 ' which provides the beam transformation necessary to complete the N7 rooted subtree to traverse the rest of the tree with the N7 connect rooted subtree. The instance node N7 ' connects the limitation volume or the BVH according to the nodes N1 - N3 with the limiting volumes or BVH corresponding to the nodes N7 etc. by defining the transformation from coordinate space of N1-N3 (e.g. world space) in the coordinate space of N7 etc. (e.g. object area).
Die interne Struktur und der Betrieb des Traversierungs-Koprozessors 138The internal structure and operation of the traversal coprocessor 138
9 zeigt ein vereinfachtes Beispiel-Blockdiagramm des Traversierungs-Koprozessors 138 mit Hardware, die konfiguriert ist, um beschleunigte Traversierungsoperationen wie oben beschrieben durchzuführen (eine noch detailliertere Implementierung dieses Traversierungs-Koprozessors 138 wird im Folgenden beschrieben). Da der in 9 gezeigte Traversierungs-Koprozessor 138 zum Traversieren von baumbasierten Beschleunigungsdatenstrukturen wie z. B. in 8A, 8B gezeigt angepasst ist, kann er auch als „Baumtraversierungseinheit“ oder „TTU“ 700 bezeichnet werden (das Bezugszeichen 700 bezieht sich auf die detailliertere nicht einschränkende Implementierung des in 1 gezeigten Traversierungs-Koprozessors 138). Baumtraversierungsoperationen können zum Beispiel umfassen, zu bestimmen, ob ein Strahl Begrenzungsvolumina und/oder Primitive einer Baumdatenstruktur (z. B. ein BVH-Baum) schneidet, welche Tests umfassen können, den Strahl in einen Objekt-Raum zu transformieren. 9 shows a simplified example block diagram of the traversal coprocessor 138 with hardware configured to perform accelerated traversal operations as described above (an even more detailed implementation of this traversal coprocessor 138 is described below). Since the in 9 traversal coprocessor shown 138 for traversing tree-based acceleration data structures such as B. in 8A . 8B shown, it can also be used as a "tree traversing unit" or "TTU" 700 be referred to (the reference symbol 700 refers to the more detailed, non-limiting implementation of the in 1 shown traversal coprocessor 138 ). For example, tree traversal operations may include determining whether a beam intersects bounding volumes and / or primitives of a tree data structure (e.g., a BVH tree), which tests may include transforming the beam into an object space.
Die TTU 700 enthält dedizierte Hardware zum Bestimmen, ob ein Strahl Begrenzungsvolumina schneidet, und dedizierte Hardware zum Bestimmen, ob ein Strahl Primitive der Baumdatenstruktur schneidet. In manchen Ausführungsformen kann die TTU 700 eine Traversierung einer Begrenzungsvolumenhierarchie nach Tiefe unter Verwendung einer Kurzstapeltraversierung mit Schnittpunkttesten von unterstützten Blattknoten-Primitiven und Rückgabe von Alpha-Primitiven und nicht unterstützten Blattknoten-Primitiven (Elementen) mitten in der Traversierung durchführen. Der Schnittpunkt der Primitive wird mit Bezug auf Dreiecke diskutiert, doch können auch andere geometrische Primitive verwendet werden.The TTU 700 includes dedicated hardware to determine whether a beam intersects boundary volumes and dedicated hardware to determine whether a beam intersects primitives of the tree data structure. In some embodiments, the TTU 700 traverse a bounding volume hierarchy by depth using short stack traversal with intersection testing of supported leaf node primitives and return of alpha primitives and unsupported leaf node primitives (elements) in the middle of the traversal. The intersection of the primitives is discussed with respect to triangles, but other geometric primitives can also be used.
Insbesondere enthält die TTU 700 einen Schnittpunktverwaltungsblock 722, einen Strahlverwaltungsblock 730 und einen Stapelverwaltungsblock 740. Jeder dieser Blöcke (und alle anderen Blöcke in 9) können dedizierte Hardware bilden, die durch Logikgatter, Register, in Hardware eingebettete Nachschlagtabellen oder andere kombinatorische Logik usw. implementiert wird.In particular, the TTU contains 700 an intersection management block 722 , a beam management block 730 and a batch management block 740 , Each of these blocks (and all other blocks in 9 ) can form dedicated hardware that is implemented by logic gates, registers, hardware lookup tables embedded in hardware, or other combinatorial logic, etc.
Der Strahlverwaltungsblock 730 ist verantwortlich für die Verwaltung von Informationen über und die Durchführung von Operationen in Bezug auf einen Strahl, der dem Strahlverwaltungsblock von einem SM 132 spezifiziert wird. Der Stapelverwaltungsblock 740 arbeitet in Verbindung mit Traversierungslogik 712, um Informationen über die Traversierung einer BVH-Beschleunigungsdatenstruktur zu verwalten und diesbezügliche Operationen durchzuführen. Die Traversierungslogik 712 wird von Ergebnissen eines Strahl-Complet-Test-Blocks 710 geleitet, der Schnittpunkte zwischen dem vom Strahlverwaltungsblock 730 angezeigten Strahl und durch die BVH dargestellten volumetrischen Unterteilungen testet, wobei nach Bedarf Instanztransformationen verwendet werden. Der Strahl-Complet-Test-Block 710 liest zusätzliche Informationen bezüglich der BVH über einen LO-Complet-Cache 752, der Teil der TTU 700 ist, aus dem Speicher 140 aus. Die Ergebnisse des Strahl-Complet-Test-Blocks 710 informieren die Traversierungslogik 712 darüber, ob weitere rekursive Traversierungen erforderlich sind. Der Stapelverwaltungsblock 740 unterhält Stapel zum Im-Auge-Behalten von Statusinformationen, wenn die Traversierungslogik 712 von einer Ebene der BVH zu einer anderen übergeht, wobei der Stapelverwaltungsblock Elemente auf den Stapel schiebt, wenn die Traversierungslogik tiefer in die BVH traversiert, und Elemente vom Stapel entfernt, wenn die Traversierungslogik nach oben in der BVH traversiert. Der Stapelverwaltungsblock 740 ist im Stande, dem anfordernden SM 132 in jedem Zeitpunkt, in dem sie der SM anfordert, Statusinformationen (z. B. Zwischen- oder Endergebnisse) zur Verfügung zu stellen.The beam management block 730 is responsible for managing information about and performing operations related to a beam from the beam management block of an SM 132 is specified. The batch management block 740 works in conjunction with traversal logic 712 to manage information about the traversal of a BVH acceleration data structure and to perform related operations. The traversal logic 712 is obtained from results of a beam complete test block 710 directed, the intersection between that of the beam management block 730 displayed beam and volumetric subdivisions represented by the BVH, using instance transformations as required. The beam complete test block 710 reads additional information regarding the BVH a LO complete cache 752 , part of the TTU 700 is from memory 140 out. The results of the beam complete test block 710 inform the traversal logic 712 whether further recursive traversing is required. The batch management block 740 maintains stacks for keeping track of status information when traversing logic 712 passes from one level of the BVH to another, with the batch management block pushing elements onto the stack if the traversing logic traverses deeper into the BVH and removes elements from the stack if the traversing logic traverses upwards in the BVH. The batch management block 740 is able to meet the requesting SM 132 to provide status information (e.g. interim or final results) at any point in time when the SM requests it.
Der Schnittpunktverwaltungsblock 722 verwaltet Informationen über und führt Operationen in Bezug auf Schnittpunkte zwischen Strahlen und Primitiven durch, wobei nach Bedarf Instanztransformationen verwendet werden. Der Strahl-Primitiv-Test-Block 720 liest auf einer bedarfsweisen Basis Informationen in Bezug auf Geometrie über einen L0-Primitiv-Cache 754, der Teil der TTU 700 ist, aus dem Speicher 140 aus. Der Schnittpunktverwaltungsblock 722 wird über Ergebnisse von Schnittpunkttests informiert, die der Strahl-Primitiv-Test- und Transformationsblock 720 durchführt. Somit führt der Strahl-Primitiv-Test- und Transformationsblock 720 Schnittpunktergebnisse dem Schnittpunktverwaltungsblock 722 zu, der Geometrietreffer und Schnittpunkte an den anfordernden SM 132 meldet.The intersection management block 722 maintains information about and performs intersection-ray-primitive intersection operations using instance transformations as needed. The beam primitive test block 720 reads information related to geometry on an as needed basis through an L0 primitive cache 754 , part of the TTU 700 is from memory 140 out. The intersection management block 722 is informed about the results of intersection tests that the beam primitive test and transformation block 720 performs. Thus the beam primitive test and transformation block leads 720 Intersection results to the intersection management block 722 to, the geometry hit and intersections at the requesting SM 132 reports.
Eine Stapelverwaltungseinheit 740 prüft den Traversierungsstatus, um zu bestimmen, welcher Typ von Daten auszulesen sind und welcher Datenpfad (Complet oder Primitiv) sie verbrauchen wird. Die Schnittpunkte für die Begrenzungsvolumina werden im Strahl-Complet-Testpfad der TTU 700 bestimmt, die einen oder mehrere Strahl-Complet-Testblöcke 710 und einen oder mehrere Traversierungslogikblöcke 712 enthält. Ein Complet spezifiziert Wurzel- oder Innenknoten eines Begrenzungsvolumens. Somit kann ein Complet ein oder mehrere Begrenzungsvolumina für den Strahl-Complet-Test definieren. Der Strahl-Complet-Testpfad der TTU 700 identifiziert, welche Begrenzungsvolumina von dem Strahl geschnitten werden. Von dem Strahl geschnittene Begrenzungsvolumina müssen weiter verarbeitet werden, um zu bestimmen, ob die den geschnittenen Begrenzungsvolumina zugeordneten Primitive geschnitten werden. Die Schnittpunkte für die Primitive werden im Strahl-Primitiv-Testpfad bestimmt, der einen oder mehrere Strahl-Primitiv-Test- und Transformationsblöcke 720 und einen oder mehrere Schnittpunktverwaltungsblöcke 722 enthält.A batch manager 740 checks the traversal status to determine what type of data to read and what data path (complete or primitive) it will consume. The intersection points for the boundary volumes are in the TTU's beam complete test path 700 determines which one or more beam complete test blocks 710 and one or more traversal logic blocks 712 contains. A complete specifies the root or inner node of a bounding volume. A complete can therefore define one or more limiting volumes for the beam complete test. The TTU beam complete test path 700 identifies which boundary volumes are intersected by the beam. Boundary volumes cut by the beam must be processed further to determine whether the primitives associated with the cut boundary volumes are cut. The intersections for the primitives are determined in the beam-primitive test path, the one or more beam-primitive test and transformation blocks 720 and one or more intersection management blocks 722 contains.
Die TTU 700 empfängt Abfragen von einem oder mehreren SMs 132, um Baumtraversierungsoperationen durchzuführen. Die Abfrage kann anfordern, ob ein Strahl Begrenzungsvolumina und/oder Primitive in einer BVH-Datenstruktur schneidet. Die Abfrage kann einen Strahl (z. B. Ursprung, Richtung und Länge des Strahls) und eine BVH-Datenstruktur und einen Traversierungsstatus (z. B. Kurzstapel) identifizieren, der einen oder mehrere Einträge enthält, die auf Knoten in einer oder mehreren Begrenzungsvolumenhierarchien verweisen, die der Strahl besuchen soll. Die Abfrage kann auch Informationen darüber enthalten, wie der Strahl mit bestimmten Typen von Schnittpunkten während der Traversierung umgehen soll. Die Strahlinformationen können im Strahlverwaltungsblock 730 gespeichert werden. Die gespeicherten Strahlinformationen (z. B. Strahllänge) können auf Basis der Ergebnisse des Strahl-Primitiv-Tests aktualisiert werden.The TTU 700 receives queries from one or more SMs 132 to perform tree traversal operations. The query can request whether a beam intersects bounding volumes and / or primitives in a BVH data structure. The query can identify a ray (e.g., origin, direction, and length of the ray) and a BVH data structure and traversal status (e.g., short stack) that contains one or more entries that are on nodes in one or more bounding volume hierarchies that the beam is to visit. The query can also include information about how the beam should handle certain types of intersection points during traversal. The beam information can be in the beam management block 730 get saved. The saved beam information (e.g. beam length) can be updated based on the results of the beam primitive test.
Die TTU 700 kann anfordern, dass die in der Abfrage identifizierte BVH-Datenstruktur aus Speicher außerhalb der TTU 700 ausgelesen wird. Ausgelesene Teile der BVH-Datenstruktur können in Level-Null-(L0)-Cache 750 innerhalb der TTU 700 zwischengespeichert werden, so dass die Informationen für andere zeitkohärente TTU-Operationen verfügbar sind, wodurch Zugriffe auf den Speicher 140 reduziert werden. Teile der BVH-Datenstruktur, die für den Strahl-Complet-Test benötigt werden, können in einem LO-Complet-Cache 752 gespeichert werden, und Teile der BVH-Datenstruktur, die für den Strahl-Primitiv-Test benötigt werden, können in einem L0-Primitiv-Cache 754 gespeichert werden.The TTU 700 can request that the BVH data structure identified in the query comes from memory outside the TTU 700 is read out. Parts of the BVH data structure that have been read out can be stored in level zero (L0) cache 750 within the TTU 700 be cached so that the information is available for other time-coherent TTU operations, thereby accessing the memory 140 be reduced. Parts of the BVH data structure that are required for the beam complete test can be stored in a LO complete cache 752 and portions of the BVH data structure needed for the beam primitive test can be stored in an L0 primitive cache 754.
Nachdem die für einen angeforderten Traversierungsschritt erforderlichen Complet-Informationen im Complet-Cache 752 verfügbar sind, bestimmt der Strahl-Complet-Test-Block 710 die von dem Strahl geschnittenen Begrenzungsvolumina. Beim Durchführen dieses Tests kann der Strahl aus dem Koordinatenraum der Begrenzungsvolumenhierarchie in einen relativ zu einem Complet definierten Koordinatenraum transformiert werden. Der Strahl wird gegen die Begrenzungskästen getestet, die den Kind-Knoten des Complets zugeordnet sind. In dem nicht einschränkenden Ausführungsbeispiel wird der Strahl nicht gegen den eigenen Begrenzungskasten des Complets getestet, da (1) die TTU 700 den Strahl zuvor gegen einen ähnlichen Begrenzungskasten getestet hat, als sie das Eltern-Begrenzungskasten-Kind getestet hat, das auf dieses Complet verwiesen hat, und (2) ein Zweck des Complet-Begrenzungskastens darin besteht, ein lokales Koordinatensystem zu definieren, innerhalb dessen die Kind-Begrenzungskästen in komprimierter Form ausgedrückt werden können. Wenn der Strahl irgendeinen der Kind-Begrenzungskästen schneidet, werden die Ergebnisse an die Traversierungslogik weitergeleitet, um die Reihenfolge zu bestimmen, in der die entsprechenden Kind-Zeiger dann auf den Traversierungsstapel geschoben werden (weiteres Testen erfordert wahrscheinlich, dass die Traversierungslogik 712 zu der nächsten Ebene der BVH hinunter traversiert). Diese Schritte werden rekursiv wiederholt, bis geschnittene Blattknoten der BVH angetroffen werden.After the complete information required for a requested traversal step in the complete cache 752 the beam complete test block determines 710 the boundary volumes cut by the beam. When performing this test, the beam can be transformed from the coordinate space of the bounding volume hierarchy into a coordinate space defined relative to a complete. The beam is tested against the bounding boxes associated with the child nodes of the complete. In the non-limiting embodiment, the beam is not tested against the complete bounding box because ( 1 ) the TTU 700 previously tested the beam against a similar bounding box when testing the parent bounding box child who referred to this complet, and ( 2 ) A purpose of the complete bounding box is to define a local coordinate system within which the child bounding boxes can be expressed in a compressed form. If the beam intersects any of the child bounding boxes, the results are passed to the traversal logic to determine the order in which the appropriate child pointers are then pushed onto the traversal stack (further testing likely requires the traversal logic 712 traversed down to the next level of BVH). These steps are repeated recursively until cut leaf nodes of the BVH are found.
Der Strahl-Complet-Test-Block 710 kann der Traversierungslogik 612 Strahl-Complet-Schnittpunkte zuführen. Unter Verwendung der Ergebnisse des Strahl-Complet-Tests erstellt die Traversierungslogik 712 Stapeleinträge, die an den Stapelverwaltungsblock 740 weiterzuleiten sind. Die Stapeleinträge können interne Knoten (d. h. einen Knoten, der einen oder mehrere Kind-Knoten enthält), die durch den Strahl-Complet-Test-Block 710 weiter auf Strahlschnittpunkte getestet werden müssen, und/oder in einem geschnittenen Blattknoten identifizierte Dreiecke anzeigen, die durch den Strahl-Primitiv-Test- und Transformationsblock 720 auf Strahlschnittpunkte getestet werden müssen. Der Strahl-Complet-Test-Block 710 kann die Traversierung auf im Stapel identifizierten internen Knoten wiederholen, um alle Blattknoten in der BVH zu bestimmen, die der Strahl schneidet. Die genauen Tests, die der Strahl-Complet-Test-Block 710 durchführt, werden in dem nicht einschränkenden Ausführungsbeispiel durch Modus-Bits, Strahloperationen (siehe unten) und Culling von Treffern bestimmt, und die TTU 700 kann Zwischen- sowie Endergebnisse an den SM 132 zurückgeben.The beam complete test block 710 can the traversal logic 612 Feed beam complete intersection points. The traversal logic builds using the results of the beam complete test 712 Batch entries sent to the batch management block 740 are to be forwarded. The batch entries can be internal nodes (ie a node that contains one or more child nodes) by the beam complete test block 710 must be further tested for beam intersection points, and / or indicate triangles identified in a cut leaf node by the beam primitive test and transformation block 720 must be tested for beam intersections. The beam complete test block 710 can repeat the traversal on internal nodes identified in the stack to determine all leaf nodes in the BVH that the beam is cutting. The exact tests that the beam complete test block 710 in the non-limiting embodiment are determined by mode bits, beam operations (see below), and hit culling, and the TTU 700 can send intermediate and final results to the SM 132 hand back.
Die geschnittenen Blattknoten identifizieren Primitive, die von dem Strahl geschnitten werden können oder nicht. Eine Option für die TTU 700 ist, z. B. einen Bereich von in den geschnittenen Blattknoten identifizierten Geometrien dem SM 132 für weitere Verarbeitung zuzuführen. Zum Beispiel kann der SM 132 auf Basis der Informationen, die die TTU 700 als Ergebnis der die BVH traversierenden TTU liefert, selbst bestimmen, ob die identifizierten Primitive von dem Strahl geschnitten werden. Um den SM 132 von dieser Verarbeitung zu entlasten und ihn dadurch unter Verwendung der Hardware der TTU 700 zu beschleunigen, kann der Stapelverwaltungsblock 740 Anforderungen an den Strahl-Primitiv- und Transformationsblock 720 ausgeben, einen Strahl-Primitiv-Test für die Primitive innerhalb geschnittener Blattknoten durchzuführen, die der Strahl-Complet-Test-Block 710 der TTU identifiziert hat. In manchen Ausführungsformen kann der SM 132 eine Anforderung nach dem Strahl-Primitiv-Test zum Testen eines bestimmten Bereichs von Primitiven an den Transformationsblock 720 ausgeben, unabhängig davon, wie dieser Geometriebereich identifiziert worden ist.The cut leaf nodes identify primitives that may or may not be cut by the beam. An option for the TTU 700 is, e.g. B. a range of geometries identified in the cut leaf nodes the SM 132 to be fed for further processing. For example, the SM 132 based on the information that the TTU 700 as a result of traversing the BVH TTU provides to determine whether the identified primitives are cut by the beam. To the SM 132 relieve of this processing and thereby using the hardware of the TTU 700 to speed up the batch management block 740 Requirements for the beam primitive and transformation block 720 issue a beam primitive test for the primitives within cut leaf nodes that the beam complete test block 710 the TTU has identified. In some embodiments, the SM 132 a request for the beam primitive test to test a certain range of primitives on the transform block 720 output regardless of how this geometry area was identified.
Nachdem sichergestellt ist, dass die für einen angeforderten Strahl-Primitiv-Test benötigten Primitiv-Daten im Primitiv-Cache 754 verfügbar sind, kann der Strahl-Primitiv- und Transformationsblock 710 unter Verwendung der im Strahlverwaltungsblock 730 gespeicherten Strahlinformationen Primitive bestimmen, die von dem Strahl geschnitten werden. Der Strahl-Primitiv-Test-Block 720 führt die Identifizierung von Primitiven, die als von dem Strahl geschnitten bestimmt worden sind, dem Schnittpunktverwaltungsblock 722 zu.After ensuring that the primitive data required for a requested beam primitive test is in the primitive cache 754 are available, the beam primitive and transformation block 710 using those in the beam management block 730 determine stored beam information primitives that are intersected by the beam. The beam primitive test block 720 carries out the identification of primitives determined to be cut by the beam to the intersection management block 722 to.
Der Schnittpunktverwaltungsblock 722 kann die Ergebnisse des Strahl-Primitiv-Tests an den SM 132 zurückgeben. Die Ergebnisse des Strahl-Primitiv-Tests können Identifikatoren von geschnittenen Primitiven, die Entfernung von Schnittpunkten vom Strahlursprung und andere Informationen über Eigenschaften der geschnittenen Primitiven umfassen. In manchen Ausführungsformen kann der Schnittpunktverwaltungsblock 722 einen vorhandenen Strahl-Primitiv-Test auf Basis von früheren Schnittpunktergebnissen von dem Strahl-Primitiv- und Transformationsblock 710 modifizieren (z. B. durch Modifizieren der Länge des Strahls).The intersection management block 722 can send the results of the beam primitive test to the SM 132 hand back. The results of the beam primitive test can include identifiers of cut primitives, the removal of intersections from the beam origin, and other information about properties of the cut primitives. In some embodiments, the intersection management block 722 an existing beam primitive test based on previous intersection results from the beam primitive and transformation block 710 modify (e.g. by modifying the length of the beam).
Der Schnittpunktverwaltungsblock 722 kann auch verschiedene Typen von Primitiven im Auge behalten. Zum Beispiel umfassen die verschiedenen Typen von Dreiecken opake Dreiecke, die einen Strahl blockieren, wenn sie geschnitten werden, und Alpha-Dreiecke, die den Strahl blockieren können oder nicht, wenn sie geschnitten werden, oder zusätzliche Behandlung durch den SM erfordern können. Ob ein Strahl durch ein transparentes Dreieck blockiert wird oder nicht, kann zum Beispiel von auf das Dreieck abgebildeten Textur(en), der von der Textur eingenommene Fläche des Dreiecks (siehe 6A und 6B) und der Art und Weise abhängen, in der die Textur das Dreieck modifiziert. Zum Beispiel erfordert Transparenz (z. B. Buntglas) in manchen Ausführungsformen, dass der SM 132 Treffer von transparenten Objekten im Auge behält, so dass sie in strahlparametrischer Reihenfolge sortiert und schattiert werden können, und blockiert den Strahl typischerweise nicht wirklich. Indessen ermöglicht Alpha-„Beschneiden“ das Beschneiden der Form des Primitivs auf Basis der Form einer auf das Primitiv abgebildeten Textur - zum Beispiel Ausschneiden einer Blattform aus einem Dreieck. (Man beachte, dass bei Rastergrafik Transparenz oft als „Alpha Blending“ und Beschneiden als „Alpha-Test“ bezeichnet wird). In anderen Ausführungsformen kann die TTU 700 transparente Treffer für spätere Behandlung durch den SM 132 in Warteschlangen in Speicher schieben und beschnittene Dreiecke direkt behandeln, indem sie Anforderungen an die Textureinheit sendet. Jedes Dreieck kann eine Kennung zum Anzeigen des Dreieck-Typs enthalten. Der Schnittpunktverwaltungsblock 722 ist konfiguriert, um eine Ergebniswarteschlange zum Verfolgen der verschiedenen Typen von geschnittenen Dreiecken zu unterhalten. Zum Beispiel kann die Ergebniswarteschlange eine oder mehrere Geschnittenes-opakes-Dreieck-Identifikatoren in einer Warteschlange und einen oder mehrere Transparentes-Dreieck-Identifikatoren in einer anderen Warteschlange speichern.The intersection management block 722 can also keep an eye on different types of primitives. For example, the various types of triangles include opaque triangles that block a beam when cut and alpha triangles that may or may not block the beam when cut or may require additional treatment by the SM. Whether or not a beam is blocked by a transparent triangle can be determined, for example, by the texture (s) imaged on the triangle, the area of the triangle occupied by the texture (see 6A and 6B ) and how the texture modifies the triangle. For example, transparency (e.g. stained glass) in some embodiments requires that the SM 132 Keeps an eye on hits from transparent objects so that they can be sorted and shaded in beam parametric order, and typically doesn't really block the beam. In the meantime, alpha “pruning” enables the shape of the primitive to be trimmed based on the shape of a texture mapped onto the primitive - for example, cutting a leaf shape from a triangle. (Note that in raster graphics, transparency is often referred to as "alpha blending" and cropping as "alpha test"). In other embodiments, the TTU 700 transparent hits for later treatment by the SM 132 queue into memory and handle trimmed triangles directly by sending requests to the texture unit. Each triangle can contain an identifier to indicate the triangle type. The intersection management block 722 is configured to maintain a result queue to keep track of the different types of intersected triangles. For example, the result queue can have one or more sliced-opaque- Store triangle identifiers in one queue and one or more transparent triangle identifiers in another queue.
Für opake Dreiecke kann der Strahlschnittpunkt in der TTU 700 vollständig bestimmt werden, da die Fläche des opaken Dreiecks den Strahl daran hindert, die Oberfläche des Dreiecks zu passieren. Für transparente Dreiecke können in manchen Ausführungsformen Strahlschnittpunkte nicht vollständig in der TTU 700 bestimmt werden, da die TTU 700 den Schnittpunkttest auf Basis der Geometrie des Dreiecks durchführt und möglicherweise keinen Zugriff auf die Textur des Dreiecks und/oder die von der Textur eingenommene Fläche des Dreiecks hat (in anderen Ausführungsformen kann die TTU durch den Texturabbildungsblock der Grafikpipeline mit Texturinformationen versorgt werden). Um vollständig zu bestimmen, ob das Dreieck geschnitten wird, können Informationen über transparente Dreiecke, die der Strahl-Primitiv- und Transformationsblock 710 als geschnitten bestimmt, an den SM 132 gesendet werden, damit der SM die vollständige Bestimmung vornehmen kann, ob das Dreieck die Sichtbarkeit entlang des Strahls beeinflusst.For opaque triangles, the beam intersection in the TTU 700 fully determined because the area of the opaque triangle prevents the beam from passing the surface of the triangle. For transparent triangles, in some embodiments, beam intersections cannot be completely in the TTU 700 be determined because the TTU 700 performs the intersection test based on the geometry of the triangle and may not have access to the texture of the triangle and / or the area of the triangle occupied by the texture (in other embodiments, the texture mapping block of the graphics pipeline can provide the TTU with texture information). To fully determine whether the triangle is intersected, you can use information about transparent triangles that the beam primitive and transform block 710 determined as cut, to the SM 132 are sent so that the SM can make the full determination of whether the triangle affects visibility along the beam.
Der SM 132 kann klären, ob der Strahl eine dem transparenten Dreieck zugeordnete Textur schneidet oder nicht und/oder ob der Strahl durch die Textur blockiert wird. Der SM 132 kann in manchen Fällen auf Basis dieser Bestimmung eine modifizierte Abfrage an die TTU 700 senden (z. B. Verkürzen des Strahls, wenn der Strahl durch die Textur blockiert wird).The SM 132 can clarify whether the beam intersects a texture assigned to the transparent triangle or not and / or whether the beam is blocked by the texture. The SM 132 In some cases, based on this determination, a modified query can be sent to the TTU 700 send (e.g. shortening the beam if the beam is blocked by the texture).
In einer Ausführungsform kann die TTU 700 konfiguriert sein, um alle als den Strahl schneidend bestimmten Dreiecke für weitere Verarbeitung an den SM 132 zurückzugeben. Da die Rückgabe jedes Dreieck-Schnittpunkts an den SM 132 für weitere Verarbeitung im Hinblick auf Schnittstellen- und Thread-Synchronisation aufwendig ist, kann die TTU 700 dafür konfiguriert sein, Dreiecke zu verbergen, die zwar geschnitten werden, aber nachweislich ohne funktionale Auswirkungen auf die resultierende Szene verborgen werden können. Da die TTU 700 zum Beispiel mit Dreieck-Typ-Informationen versehen wird (z. B. ob ein Dreieck opak oder transparent ist), kann die TTU 700 die Dreieck-Typ-Informationen verwenden, um geschnittene Dreiecke zu bestimmen, die entlang des Strahls von einem anderen schneidenden opaken Dreieck verdeckt werden und die daher nicht in die Ergebnisse einbezogen werden müssen, da sie die Sichtbarkeit entlang des Strahls nicht beeinträchtigen werden. Wie oben mit Bezug auf 5A-5C erörtert, kann, wenn die TTU 700 weiß, dass ein Dreieck entlang des Strahls durch ein opakes Dreieck verdeckt wird, das verdeckte Dreieck ohne Einfluss auf die Visualisierung der resultierenden Szene aus den Ergebnissen ausgeblendet werden.In one embodiment, the TTU 700 configured to include all triangles determined to intersect the beam for further processing to the SM 132 return. Since the return of each triangle intersection to the SM 132 for further processing with regard to interface and thread synchronization, the TTU can 700 configured to hide triangles that are intersected, but are proven to be hidden without any functional impact on the resulting scene. Since the TTU 700 For example, with triangle type information (e.g. whether a triangle is opaque or transparent), the TTU can 700 use the triangle type information to determine intersected triangles that are covered by another intersecting opaque triangle along the ray and therefore do not need to be included in the results as they will not affect visibility along the ray. As above with reference to 5A-5C discussed, if the TTU 700 knows that a triangle along the beam is hidden by an opaque triangle, the hidden triangle is hidden from the results without affecting the visualization of the resulting scene.
Der Schnittpunktverwaltungsblock 722 kann eine Ergebniswarteschlange zum Speichern von Treffern, die eine Dreieck-ID zuordnen, und Informationen über den Punkt, an dem der Strahl das Dreieck trifft, enthalten. Wenn ein Strahl als ein opakes Dreieck schneidend bestimmt wird, können die Identität des Dreiecks und die Entfernung des Schnittpunkts vom Strahlursprung in der Ergebniswarteschlange gespeichert werden. Wenn der Strahl als ein anderes opakes Dreieck schneidend bestimmt wird, kann das andere opake Dreieck aus dem Ergebnis weggelassen werden, wenn die Entfernung des Schnittpunkts vom Strahlursprung größer ist als die Entfernung des bereits in der Ergebniswarteschlange gespeicherten geschnittenen opaken Dreiecks. Wenn die Entfernung des Schnittpunkts vom Strahlursprung kleiner ist als die Entfernung des bereits in der Ergebniswarteschlange gespeicherten geschnittenen opaken Dreiecks, kann das andere geschnittene opake Dreieck das in der Ergebniswarteschlange gespeicherte opake Dreieck ersetzen. Nachdem alle Dreiecke einer Abfrage getestet worden sind, können die in der Ergebniswarteschlange gespeicherten Informationen über opake Dreiecke und die Schnittpunkt-Informationen an den SM 132 gesendet werden.The intersection management block 722 may contain a result queue for storing hits that map a triangle ID and information about the point at which the ray hits the triangle. If a beam is determined to intersect an opaque triangle, the identity of the triangle and the distance of the intersection from the beam origin can be stored in the result queue. If the beam is determined to be intersecting another opaque triangle, the other opaque triangle can be omitted from the result if the distance of the intersection from the beam origin is greater than the distance of the intersected opaque triangle already stored in the result queue. If the distance of the intersection from the beam origin is less than the distance of the cut opaque triangle already stored in the result queue, the other cut opaque triangle can replace the opaque triangle stored in the result queue. After all triangles of a query have been tested, the information about opaque triangles and the intersection information stored in the result queue can be sent to the SM 132 be sent.
In manchen Ausführungsformen kann der Schnittpunktverwaltungsblock 722, sobald ein Schnittpunkt mit einem opaken Dreieck identifiziert worden ist, den im Strahlverwaltungsblock 730 gespeicherten Strahl verkürzen, so dass Begrenzungsvolumina (die möglicherweise Dreiecke enthalten) hinter dem geschnittenen opaken Dreieck (entlang des Strahls) nicht als den Strahl schneidend identifiziert werden.In some embodiments, the intersection management block 722 as soon as an intersection with an opaque triangle has been identified, that in the beam management block 730 Shorten the stored ray so that bounding volumes (which may contain triangles) behind the intersected opaque triangle (along the ray) are not identified as intersecting the ray.
Der Schnittpunktverwaltungsblock 722 kann Informationen über geschnittene transparente Dreiecke in einer separaten Warteschlange speichern. Die gespeicherten Informationen über geschnittene transparente Dreiecke können an den SM 132 gesendet werden, damit der SM klärt, ob der Strahl eine dem Dreieck zugeordnete Textur schneidet oder nicht und/oder ob die Textur den Strahl blockiert. Das SM kann die Ergebnisse dieser Bestimmung an die TTU 700 zurückgeben und/oder die Abfrage auf Basis dieser Bestimmung modifizieren (z. B. den Strahl verkürzen, wenn der Strahl durch die Textur blockiert wird).The intersection management block 722 can store information about cut transparent triangles in a separate queue. The stored information about cut transparent triangles can be sent to the SM 132 are sent so that the SM clarifies whether the beam intersects a texture assigned to the triangle or not and / or whether the texture blocks the beam. The SM can send the results of this determination to the TTU 700 return and / or modify the query based on this determination (e.g. shorten the beam if the beam is blocked by the texture).
Beispiel-Strahlverfolgungs-Shading-PipelineSample ray tracing shading pipeline
10 zeigt eine Beispiel-Strahlverfolgungs-Shading-Pipeline 900, die von dem SM 132 durchgeführt und durch die TTU 700 beschleunigt werden kann. Die Strahlverfolgungs-Shading-Pipeline 900 beginnt damit, dass ein SM 132 eine Strahlerzeugung 910 aufruft und eine entsprechende Strahlverfolgungs-Anforderung an die TTU 700 ausgibt. Die Strahlverfolgungs-Anforderung identifiziert einen einzelnen in die Szene geworfenen Strahl und fordert die TTU 700 auf, nach Schnittpunkten mit einer ebenfalls durch den SM 132 spezifizierten Beschleunigungsdatenstruktur zu suchen. Die TTU 700 traversiert (10 Block 920) die Beschleunigungsdatenstruktur, um Schnittpunkte oder potenzielle Schnittpunkte zwischen dem Strahl und den volumetrischen Unterteilungen und zugeordneten Dreiecken zu bestimmen, die die Beschleunigungsdatenstruktur darstellt. Potenzielle Schnittpunkte können durch Finden von Begrenzungsvolumina in der Beschleunigungsdatenstruktur, die von dem Strahl geschnitten werden, identifiziert werden. Nachkommen von nicht geschnittenen Begrenzungsvolumina müssen nicht geprüft werden. 10 shows an example ray tracing shading pipeline 900 by the SM 132 carried out and by the TTU 700 can be accelerated. The ray tracing shading pipeline 900 starts with an SM 132 a beam generation 910 calls and a corresponding ray tracing request to the TTU 700 outputs. The ray tracing requirement identifies you single beam thrown into the scene and demands the TTU 700 on, after intersections with one also by the SM 132 search specified acceleration data structure. The TTU 700 traversed ( 10 block 920 ) the acceleration data structure to determine intersection points or potential intersection points between the beam and the volumetric divisions and associated triangles that the acceleration data structure represents. Potential intersection points can be identified by finding boundary volumes in the acceleration data structure that are intersected by the beam. Offspring from uncut cut volumes do not need to be checked.
Für Dreiecke innerhalb von geschnittenen Begrenzungsvolumina führt der Strahl-Primitiv-Test-Block 720 der TTU 700 einen Schnittpunkt-Prozess 930 durch, um zu bestimmen, ob der Strahl die Primitive schneidet. Die TTU 700 gibt Schnittpunkt-Informationen an den SM 132 zurück, der als Antwort auf die Schnittpunktbestimmung eine „Irgendein-Treffer“ Shading-Operation 940 durchführen kann. Zum Beispiel kann der SM 132 ein Textur-Nachschlagen nach einem geschnittenen Primitiv durchführen (oder von anderer Hardware durchführen lassen) und auf Basis des passenden Texel-Wertes entscheiden, wie ein den Strahl visualisierendes Pixel zu schattieren ist. Der SM 132 behält diese Ergebnisse im Auge, da die TTU 700 möglicherweise mehrere Schnittpunkte mit unterschiedlicher Geometrie in der Szene in beliebiger Reihenfolge zurückgibt.The beam primitive test block performs for triangles within cut boundary volumes 720 the TTU 700 an intersection process 930 to determine if the beam intersects the primitives. The TTU 700 gives intersection information to the SM 132 back, in response to the intersection determination, an “any hit” shading operation 940 can perform. For example, the SM 132 perform a texture lookup after a cut primitive (or have it carried out by other hardware) and decide, based on the appropriate Texel value, how to shade a pixel visualizing the beam. The SM 132 keeps an eye on these results since the TTU 700 may return multiple intersections with different geometry in the scene in any order.
Alternativ können Primitive, die die TTU 700 als geschnitten bestimmt, weiterverarbeitet werden, um zu bestimmen 950, ob sie als ein Fehlschuss 960 oder als ein nächstgelegener Treffer 970 zu schattieren sind. Der SM 132 kann zum Beispiel die TTU 700 anweisen, einen nächstgelegenen Treffer in der spezifizierten Geometrie zu melden, oder sie kann die TTU anweisen, alle Treffer in der spezifizierten Geometrie zu melden. Zum Beispiel kann es Sache der SM 132 sein, auf Basis von implementierten Umgebungs-Nachschlagen (z. B. Approximieren des Aussehens einer reflektierenden Oberfläche mittels eines vorberechneten Texturbildes) eine „Fehlschuss“-Shading-Operation für ein Primitiv zu implementierten, das die TTU 700 als geschnitten bestimmt, wie z. B. in 6A & 6B gezeigt. Der SM 132 kann eine Nächstgelegener-Treffer-Shading-Operation durchführen, um das nächstgelegene geschnittene Primitiv auf Basis von Materialbewertungen und Texturnachschlagen als Antwort auf Nächstgelegener-Treffer-Meldungen zu bestimmen, die die TTU 700 für eine bestimmte Objektgeometrie geliefert hat.Alternatively, primitives that the TTU 700 determined as cut, processed to determine 950 whether it is a miss 960 or as a closest hit 970 to be shaded. The SM 132 can for example the TTU 700 instruct to report a closest hit in the specified geometry, or it can instruct the TTU to report all hits in the specified geometry. For example, it can be the business of SM 132 be based on implemented environment lookups (e.g. approximating the appearance of a reflective surface using a pre-calculated texture image) to implement a “miss” shading operation for a primitive that the TTU 700 determined as cut, such as. B. in 6A & 6B shown. The SM 132 may perform a closest hit shading operation to determine the closest cut primitive based on material ratings and texture lookups in response to closest hit messages that the TTU 700 delivered for a certain object geometry.
Das detailliertere Flussdiagramm einer Strahlverfolgungs-Pipeline von 11A zeigt den Datenfluss und die Interaktion zwischen Komponenten für einen repräsentativen Anwendungsfall: Verfolgen von Strahlen gegen eine Szene, die geometrische Primitive enthält, mit in Hardware behandelten Instanztransformationen. In einem nicht einschränkenden Ausführungsbeispiel ist die Strahlverfolgungs-Pipeline von 11A im Wesentlichen softwaredefiniert (was in Ausführungsbeispielen bedeutet, dass sie durch die SMs 132 bestimmt wird), nutzt aber in hohem Maße Hardwarebeschleunigung durch die TTU 700. Schlüsselkomponenten umfassen den SM 132 (und den Rest der Rechenpipeline), die TTU 700 (die als Koprozessor zum SM dient) sowie den L1-Cache und das nachgelagerte Speichersystem, aus dem die TTU BVH- und Dreieck-Daten abruft.The more detailed flowchart of a ray tracing pipeline from 11A shows the data flow and the interaction between components for a representative application: tracing rays against a scene containing geometric primitives with instance transformations handled in hardware. In one non-limiting embodiment, the beam tracking pipeline is from 11A essentially software-defined (which in exemplary embodiments means that they are defined by the SMs 132 is determined), but uses hardware acceleration by the TTU to a high degree 700 , Key components include the SM 132 (and the rest of the computing pipeline), the TTU 700 (which serves as a coprocessor to the SM) as well as the L1 cache and the downstream storage system from which the TTU retrieves BVH and triangle data.
Die in 11A gezeigte Pipeline zeigt, dass die Begrenzungsvolumenhierarchie-Erzeugung 1002 im Voraus von einem Entwicklungssystem durchgeführt werden kann. Sie zeigt auch, dass die Strahlerzeugung und -verteilung 1004 von dem SM 132 oder einer anderen Software in dem Ausführungsbeispiel durchgeführt oder gesteuert werden, wie Shading (welches Beleuchten und Texturieren umfassen kann). Die Beispiel-Pipeline enthält eine „Top-Level“-BVH-Baumtraversierung 1006, eine Strahltransformation 1014, eine „Bottom-Level“-BVH-Baumtraversierung 1018 und einen Strahl/Dreieck- (oder anderes Primitiv) -Schnittpunkt 1026, die jeweils von der TTU 700 durchgeführt werden. Diese müssen nicht in der gezeigten Reihenfolge durchgeführt werden, da ein Handshaking zwischen der TTU 700 und dem SM 132 bestimmt, was die TTU 700 tut und in welcher Reihenfolge.In the 11A The pipeline shown shows that the limit volume hierarchy generation 1002 can be done in advance by a development system. It also shows that beam generation and distribution 1004 from the SM 132 or other software in the embodiment, such as shading (which may include lighting and texturing). The sample pipeline contains a "top-level" BVH tree traversal 1006 , a beam transformation 1014 , a bottom-level BVH tree traversal 1018 and a ray / triangle (or other primitive) intersection 1026 , each from the TTU 700 be performed. These do not have to be carried out in the order shown, since handshaking between the TTU 700 and the SM 132 determines what the TTU 700 does and in what order.
Der SM 132 legt der TTU 700 jeweils einen oder mehrere Strahlen zugleich vor. Jeder Strahl, den der SM 132 der TTU 700 für Traversierung vorlegt, kann geometrische Parameter des Strahls, den Traversierungsstatus sowie Strahl-Flag-, Modus-Flag- und Strahloperations-Informationen des Strahls umfassen. In einem Ausführungsbeispiel liefert oder umfasst eine Strahloperation (RayOp) einen Hilfs-Arithmetik- oder Logik-Test zum Unterdrücken, Übersteuern und/oder Erlauben von Speichern eines Schnittpunkts. Der Traversierungsstapel kann auch von dem SM 132 verwendet werden, um bestimmte Statusinformationen an die TTU 700 zur Verwendung bei der Traversierung zu übermitteln. Eine neue Strahlabfrage kann mit einem expliziten Traversierungsstapel gestartet werden. Für manche Abfragen kann jedoch eine kleine Anzahl von Stapelinitialisierern vorgesehen werden, um die neue Abfrage von einem gegebenen Typ zu starten, wie zum Beispiel: Traversierung ausgehend von einem Complet; Schnittpunkt eines Strahls mit einem Bereich von Dreiecken; Schnittpunkt eines Strahls mit einem Bereich von Dreiecken, gefolgt von Traversierung ausgehend von einem Complet; Vertex-Abruf aus einem Dreieck-Puffer für ein gegebenes Dreieck, usw. In manchen Ausführungsformen verbessert die Verwendung von Stapelinitialisierern anstelle von Explizitstapelinitialisierung die Leistung, da Stapelinitialisierer weniger Streaming-Prozessor-Register benötigen und die Anzahl der Parameter reduzieren, die vom Streaming-Prozessor an die TTU übertragen werden müssen.The SM 132 puts the TTU 700 one or more beams at a time. Every ray that the SM 132 the TTU 700 for traversal may include geometric parameters of the beam, traversal status, and beam flag, mode flag, and beam operation information of the beam. In one embodiment, a ray operation (RayOp) provides or includes an auxiliary arithmetic or logic test to suppress, override, and / or allow an intersection to be saved. The traversal stack can also be from the SM 132 used to send certain status information to the TTU 700 to be transmitted for use in traversal. A new beam query can be started with an explicit traversal stack. For some queries, however, a small number of batch initializers can be provided to start the new query of a given type, such as: traversing from a complet; Intersection of a ray with an area of triangles; Intersection of a ray with a range of triangles, followed by traversing from a complete; Vertex fetch from a triangle buffer for a given triangle, etc. In some embodiments, the use of improves Batch initializers perform instead of explicit batch initialization because batch initializers use fewer streaming processor registers and reduce the number of parameters that must be transferred from the streaming processor to the TTU.
In dem Ausführungsbeispiel kann ein Satz von Modus-Flags (-Merkern), die der SM 132 mit jeder Abfrage (z. B. Strahl) vorlegt, mindestens teilweise steuern, wie die TTU 700 die Abfrage verarbeitet, wenn die Abfrage das Begrenzungsvolumen eines bestimmten Typs schneidet oder ein Primitiv eines bestimmten Primitiv-Typs schneidet. Die Modus-Flags, die der SM 132 der TTU 700 vorlegt, geben dem SM und/oder der Anwendung die Fähigkeit, z. B. durch einen RayOp einen Hilfs-Arithmetik- oder Logik-Test zum Unterdrücken, Übersteuern und/oder Erlauben von Speichern eines Schnittpunkts zu spezifizieren. Die Modus-Flags können zum Beispiel ermöglichen, das Traversierungsverhalten in Übereinstimmung mit Aspekten zu ändern wie zum Beispiel einer Tiefe (oder Entfernung), die einem jedem Begrenzungsvolumen und/oder Primitiv zugeordnet ist, der Größe eines Begrenzungsvolumens oder Primitivs in Bezug auf eine Entfernung vom Ursprung oder dem Strahl, bestimmten Instanzen eines Objekts, usw. Diese Fähigkeit kann von Anwendungen genutzt werden, um dynamisch und/oder selektiv Sätze von Objekten für Schnittpunkttests gegenüber bestimmten Sätzen oder Gruppen von Abfragen freizugeben / zu deaktivieren, zum Beispiel um verschiedene Versionen von Modellen verwenden zu können, wenn sich ein Anwendungsstatus ändert (zum Beispiel beim Öffnen oder Schließen von Türen), oder um verschiedene Versionen eines Modells bereitzustellen, die als Funktion der Länge des Strahls ausgewählt werden, um eine Form von geometrischem Detaillierungsgrad zu realisieren, oder um bestimmten Sätzen von Objekten aus bestimmten Klassen von Strahlen zu erlauben, in bestimmten Ansichten manche Schichten sichtbar oder unsichtbar zu machen.In the embodiment, a set of mode flags (flags) that the SM 132 with every query (e.g. beam) submitted, at least partially control how the TTU 700 processes the query when the query intersects the bounding volume of a particular type or intersects a primitive of a particular primitive type. The mode flags that the SM 132 the TTU 700 provides the SM and / or the application with the ability, for. B. by a RayOp to specify an auxiliary arithmetic or logic test to suppress, override and / or allow storage of an intersection. For example, the mode flags may allow the traversal behavior to be changed in accordance with aspects such as a depth (or distance) associated with each bounding volume and / or primitive, the size of a bounding volume or primitive with respect to a distance from Origin or the ray, certain instances of an object, etc. This ability can be used by applications to dynamically and / or selectively enable / disable sets of objects for intersection testing against certain sets or groups of queries, for example different versions of models to use when an application status changes (for example, when opening or closing doors), or to provide different versions of a model that are selected as a function of the length of the beam to implement some form of geometric level of detail, or certain Sentences of obje to allow certain classes of rays to make certain layers visible or invisible in certain views.
Zusätzlich zu dem Satz von Modus-Flags, die für den Strahl-Complet-Schnittpunkt und für Strahl-Primitiv-Schnittpunkte getrennt spezifiziert werden können, kann die Strahldatenstruktur andere RayOp-Test-bezogene Parameter spezifizieren, wie z. B. Strahl-Flags, Strahl-Parameter und einen RayOp-Test. Die Strahl-Flags können von der TTU 700 verwendet werden, um verschiedene Aspekte des Traversierungsverhaltens, des Backface-(Rückseiten)-Culling und der Behandlung der verschiedenen Kind-Knoten-Typen zu steuern, abhängig vom Bestehen/Nichtbestehen-Status eines optionalen RayOp-Tests. RayOp-Tests fügen daher den Fähigkeiten der TTU 700 Flexibilität hinzu, auf Kosten einer gewissen Komplexität. Die TTU 700 reserviert einen „Strahl-Slot“ für jeden aktiven Strahl, den sie verarbeitet, und kann die Strahl-Flags, Modus-Flags und/oder die RayOp-Informationen während Traversierung in dem entsprechenden Strahl-Slot-Puffer innerhalb der TTU speichern.In addition to the set of mode flags that can be specified separately for the beam complete intersection and for the beam primitive intersection, the beam data structure can specify other RayOp test related parameters such as: B. beam flags, beam parameters and a RayOp test. The beam flags can be obtained from the TTU 700 can be used to control various aspects of traversal behavior, backface pulling, and handling of the different child node types, depending on the pass / fail status of an optional RayOp test. RayOp tests therefore add to the capabilities of the TTU 700 Add flexibility, at the cost of some complexity. The TTU 700 reserves a "beam slot" for each active beam it processes and can store the beam flags, mode flags and / or the RayOp information in the corresponding beam slot buffer within the TTU during traversal.
In dem in 11A gezeigten Beispiel führt die TTU 700 eine Top-Level-Baumtraversierung 1006 und eine Bottom-Level-Baumtraversierung 1018 durch. In dem Ausführungsbeispiel ermöglicht die Zwei-Level-Traversierung (Zwei-Ebenen-Traversierung) der BVH schnelle Strahlverfolgungsreaktionen auf dynamische Szenenänderungen.In the in 11A shown example leads the TTU 700 a top-level tree traversal 1006 and a bottom-level tree traversal 1018 by. In the exemplary embodiment, the two-level traversing (two-level traversing) enables BVH fast beam tracking reactions to dynamic scene changes.
Die Strahltransformation 1014 bietet den geeigneten Übergang von der Top-Level-Baumtraversierung 1006 zu der Bottom-Level-Baumtraversierung 1018, indem der Strahl, der bei der Top-Level-Traversierung in einem ersten Koordinatenraum (z. B. Welt-Raum) verwendet werden kann, in einen anderen Koordinatenraum (z. B. Objekt-Raum) der BVH der Bottom-Level-Traversierung transformiert wird. Eine Beispiel-BVH-Traversierungstechnik, die eine Zwei-Level-Traversierung verwendet, ist in früherer Literatur beschrieben, siehe z. B. Woop, „A Ray Tracing Hardware Architecture for Dynamic Scenes“, Universität des Saarlandes, 2004, doch sind Ausführungsformen nicht darauf beschränkt.The beam transformation 1014 offers the appropriate transition from top-level tree traversing 1006 to the bottom-level tree traversal 1018 by moving the beam that can be used in the top-level traversing in a first coordinate space (e.g. world space) into another coordinate space (e.g. object space) of the BVH of the bottom-level Traversal is transformed. An example BVH traversal technique using two-level traversal is described in previous literature, see e.g. B. Woop, "A Ray Tracing Hardware Architecture for Dynamic Scenes", Saarland University, 2004 However, embodiments are not limited to this.
In manchen Ausführungsformen wird die Top-Level-Traversierung (im Welt-Raum) in einer BVH durchgeführt, die als Antwort auf Änderungen in der Szene dynamisch neu berechnet werden kann (z. B. durch den SM 132), und die Bottom-Level-Traversierung wird in einer BVH von Begrenzungsvolumina durchgeführt, die statisch oder im Wesentlichen statisch bleiben, selbst wenn Änderungen in der Szene auftreten. Die Begrenzungsvolumina in der BVH, die für die Bottom-Level-Baumtraversierung 1018 (im Objekt-Raum) verwendet werden, können detailliertere Informationen über die Szenengeometrie umfassen als die jeweiligen Begrenzungsvolumina, die bei der Top-Level-Baumtraversierung 1006 verwendet werden, wodurch die Modifizierung der Bottom-Level-Traversierungs-BVH als Antwort auf Szenenänderungen vermieden oder zumindest reduziert wird. Dies trägt dazu bei, Strahlverfolgung von dynamischen Szenen zu beschleunigen.In some embodiments, the top level traversal (in world space) is performed in a BVH, which can be dynamically recalculated in response to changes in the scene (e.g. by the SM 132 ), and bottom-level traversal is performed in a BVH of bounding volumes that remain static or essentially static, even if changes occur in the scene. The limitation volumes in the BVH, for the bottom-level tree traversal 1018 (in the object space) can be used to include more detailed information about the scene geometry than the respective limitation volumes that are used in the top-level tree traversal 1006 are used, whereby the modification of the bottom-level traversing BVH in response to scene changes is avoided or at least reduced. This helps speed up beam tracking of dynamic scenes.
Beispiel Top-Level-BaumtraversierungExample of top-level tree traversal
Die Top-Level-Baumtraversierung 1006 durch die TTU 700 empfängt Complets von dem L1-Cache 1012 und liefert eine Instanz an die Strahl-Transformation 1014 für Transformation oder eine Fehlschuss/Ende-Ausgabe 1013 an den SM 132 für Verarbeitung des Nächstgelegener-Treffer-Shaders 1015 durch den SM (dieser Block kann auch rekursiv auf Basis von Nicht-Blattknoten/Kein-Treffer-Bedingungen arbeiten). Bei der Top-Level-Baumtraversierung 1006 ruft ein Nächstes-Complet-Abruf-Schritt 1008 das nächste in Schritt 1010 auf Strahl schnittpunkte zu testende Complet aus dem Speicher und/oder der Cache-Hierarchie ab, und der Strahlbegrenzungsvolumen-Schnittpunkttest wird an den Begrenzungsvolumina im abgerufenen Complet durchgeführt.The top-level tree traversal 1006 by the TTU 700 receives complets from the L1 cache 1012 and delivers an instance to the beam transformation 1014 for transformation or a miss / end issue 1013 to the SM 132 for processing the closest hit shader 1015 by the SM (this block can also work recursively on the basis of non-leaf nodes / no hit conditions). In the top-level tree traversal 1006 calls a next complete fetch step 1008 the next in step 1010 Complet to be tested at beam intersections from the memory and / or the cache hierarchy, and the beam boundary volume intersection test is performed on the boundary volumes in the retrieved complete.
Wie oben beschrieben, verbindet ein Instanzknoten eine BVH mit einer anderen BVH, die in einem anderen Koordinatensystem liegt. Wenn ein Kind des geschnittenen Begrenzungsvolumens ein Instanzknoten ist, ist die Strahl-Transformation 1014 im Stande, eine passende Transformationsmatrix aus dem L1-Cache 1016 auszulesen. Die TTU 700 transformiert den Strahl unter Verwendung der entsprechenden Transformationsmatrix in das Koordinatensystem der Kind-BVH. Die US-Patentanmeldung Nr. 14/697,480 , die bereits durch Bezugnahme aufgenommen worden ist, beschreibt Transformationsknoten, die einen ersten Satz von Knoten in einem Baum mit einem zweiten Satz von Knoten verbinden, wobei der erste und der zweite Satz von Knoten in verschiedenen Koordinatensystemen liegen. Die Instanzknoten in Ausführungsbeispielen können den Transformationsknoten in der US-Anmeldung Nr. 14/697,480 ähnlich sein. In einem alternativen, nicht instanzierenden Modus der TTU 700, in 11B gezeigt, führt die TTU keine „Botton“-Level-Baumtraversierung durch, und nicht-instanzierte Baum-BVH-Traversierungen werden von Blöcken 1008, 1010 durchgeführt, z. B. unter Verwendung nur eines Stapels. Die TTU 700 kann auf Basis dessen, was sie aus der BVH und/oder dem Abfragetyp liest, zwischen den instanzierten Operationen von 11A und den nicht-instanzierten Operationen von 11B umschalten. Zum Beispiel kann ein bestimmter Abfragetyp die TTU darauf beschränken, nur die nicht-instanzierten Operationen zu verwenden. Bei einer solchen Abfrage würden irgendwelche geschnittenen Instanzknoten an den SM zurückgegeben.As described above, an instance node connects a BVH to another BVH that is in a different coordinate system. If a child of the cut boundary volume is an instance node, the ray transform is 1014 able to find a suitable transformation matrix from the L1 cache 1016 read. The TTU 700 transforms the beam into the coordinate system of the child BVH using the corresponding transformation matrix. The U.S. Patent Application No. 14 / 697,480 , which has already been incorporated by reference, describes transformation nodes that connect a first set of nodes in a tree to a second set of nodes, the first and second sets of nodes being in different coordinate systems. The instance nodes in exemplary embodiments can be the transformation node in the U.S. Application No. 14 / 697,480 be similar to. In an alternative, non-instancing mode of the TTU 700 , in 11B shown, the TTU does not carry out a “botton” level tree traversal, and non-instanced tree BVH traversings are carried out by blocks 1008 . 1010 performed, e.g. B. using only one stack. The TTU 700 can, based on what it reads from the BVH and / or the query type, between the instanced operations of 11A and the non-instantiated operations of 11B switch. For example, a particular type of query can limit the TTU to only use the uninstanced operations. Any such intersected instance nodes would be returned to the SM in such a query.
In manchen nicht einschränkenden Ausführungsformen wird der Begrenzungsvolumen-Schnittpunkttest in Schritt 1010 an jedem Begrenzungsvolumen in dem abgerufenen Complet durchgeführt, bevor das nächste Complet abgerufen wird. Andere Ausführungsformen können andere Techniken verwenden, wie z. B. Traversieren der Top-Level-Traversierungs-BVH auf eine Weise nach Tiefe. Das bereits durch Bezugnahme aufgenommene US-Patent Nr. 9,582,607 beschreibt eine oder mehrere Complet-Strukturen und -Inhalte, die in Ausführungsbeispielen verwendet werden können. Das US-Patent Nr. 9,582,607 beschreibt ebenfalls eine Beispiel-Traversierung von Complets.In some non-limiting embodiments, the bound volume intersection test is in step 1010 performed on each bound volume in the retrieved complet before the next complet is retrieved. Other embodiments may use other techniques, such as e.g. B. Traversing the top-level traversing BVH in a way based on depth. That already incorporated by reference U.S. Patent No. 9,582,607 describes one or more complete structures and contents that can be used in exemplary embodiments. The U.S. Patent No. 9,582,607 also describes an example traversal of complets.
Wenn ein Begrenzungsvolumen als von dem Strahl geschnitten bestimmt wird, werden die Kind-Begrenzungsvolumina (oder Verweise darauf) des geschnittenen Begrenzungsvolumens für nachfolgendes Testen auf Schnittpunkt mit dem Strahl und für Traversierung im Auge behalten. In Ausführungsbeispielen werden eine oder mehrere Stapel-Datenstrukturen verwendet, um Kind-Begrenzungsvolumina im Auge zu behalten, die nachfolgend auf Schnittpunkt mit dem Strahl zu testen sind. In manchen Ausführungsbeispielen kann ein Traversierungsstapel von geringer Größe verwendet werden, um Complets, die durch Betrieb der Top-Level-Baumtraversierung 1006 zu traversieren sind, und auf Schnittpunkte zu testende Primitive im Auge zu behalten, und eine größere lokale Stapel-Datenstruktur kann verwendet werden, um den Traversierungsstatus in der Bottom-Level-Baumtraversierung 1018 im Auge zu behalten.If a confinement volume is determined to be intersected by the beam, the child confinement volumes (or references thereto) of the intersected confinement volume are monitored for subsequent intersection testing with the beam and for traversal. In embodiments, one or more stack data structures are used to keep an eye on child boundary volumes that are subsequently tested for intersection with the beam. In some embodiments, a small-sized traversal stack can be used to complete by operating the top-level tree traversal 1006 to be traversed, and to keep an eye on primitives to be tested for intersections, and a larger local batch data structure can be used to track traversal status in the bottom-level tree traversal 1018 to keep in mind.
Beispiel Bottom-Level-BaumtraversierungExample of bottom-level tree traversal
Bei der Bottom-Level-Baumtraversierung 1018 ruft ein Nächstes-Complet-Abruf-Schritt 1022 das nächste, in Schritt 1024 auf Strahl Schnittpunkte zu testende Complet aus dem Speicher und/oder der Cache-Hierarchie 1020 ab, und das Strahlbegrenzungsvolumen-Schnittpunkttesten wird an den Begrenzungsvolumina in dem abgerufenen Complet durchgeführt. Die Bottom-Level-Baumtraversierung kann, wie oben erwähnt, Complets mit Begrenzungsvolumina in einem anderen Koordinatensystem enthalten als die bei der Baumtraversierung der oberen Ebene traversierten Begrenzungsvolumina. Die Bottom-Level-Baumtraversierung empfängt auch Complets aus dem L1-Cache und kann auf Basis von Nicht-Blatt/Kein-Treffer-Bedingungen und auch mit der Top-Level-Baumtraversierung 1006 auf Basis von Fehlschuss/Ende-Erkennung rekursiv oder iterativ in sich selbst arbeiten. Es können Schnittpunkte des Strahls mit den Begrenzungsvolumina in der BVH der unteren Ebene bestimmt werden, wobei der Strahl in das Koordinatensystem des ausgelesenen Complets der unteren Ebene transformiert wird. Die bei der Baumtraversierung der unteren Ebene als von dem Strahl geschnitten gefundenen Blatt-Begrenzungsvolumina werden dann dem Strahl/Dreieck-Schnittpunkt 1026 zugeführt.Bottom-level tree traversal 1018 calls a next complete fetch step 1022 the next, in step 1024 Complet to be tested on beam intersections from the memory and / or the cache hierarchy 1020 and the beam confinement volume intersection testing is performed on the confinement volumes in the retrieved complete. As mentioned above, the bottom-level tree traversal can contain completes with boundary volumes in a different coordinate system than the boundary volumes traversed in the tree traversal of the upper level. The bottom-level tree traversal also receives completes from the L1 cache and can be based on non-leaf / no-hit conditions and also with the top-level tree traversal 1006 work recursively or iteratively in yourself based on miss / end detection. Intersection points of the beam with the boundary volumes in the BVH of the lower level can be determined, whereby the beam is transformed into the coordinate system of the read complete from the lower level. The leaf boundary volumes found in the tree traversal of the lower level as cut by the beam then become the beam / triangle intersection 1026 fed.
Die Blatt-Ausgaben der Bottom-Level-Baumtraversierung 1018 werden dem Strahl/Dreieck-Schnittpunkt 1026 zugeführt (der sowohl Zugriff auf LO-Cache als auch die Fähigkeit hat, Dreiecke über den L1-Cache 1028 auszulesen). Die L0-Complet- und Dreieck-Caches können kleine Nur-Lese-Caches innerhalb der TTU 700 sein. Der Strahl/Dreieck-Schnittpunkt 1026 kann auch Blatt-Ausgaben aus der Top-Level-Baumtraversierung 1006 empfangen, wenn bestimmte Blattknoten erreicht werden, ohne eine instanzierte BVH zu traversieren.The leaf editions of the bottom-level tree traversal 1018 become the ray / triangle intersection 1026 (which has both access to the LO cache and the ability to triangle through the L1 cache 1028 read). The L0 complete and triangle caches can have small read-only caches within the TTU 700 his. The ray / triangle intersection 1026 can also leaf editions from the top-level tree traversing 1006 received when certain leaf nodes are reached without traversing an instanced BVH.
Nachdem alle Primitive im Primitiv-Bereich verarbeitet worden sind, überprüft die Schnittpunktverwaltungseinheit den Status der Ergebniswarteschlange und fertigt Pakete an, die an die Stapelverwaltungseinheit und/oder Strahlverwaltungseinheit zu senden sind, um die Attribute und den Traversierungsstatus des Strahls zu aktualisieren, den nächsten Traversierungsschritt des Strahls einzurichten und/oder den Strahl (falls erforderlich) an den SM 132 zurückzugeben. Wenn die Ergebniswarteschlange Opak- oder Alpha-Schnittpunkte enthält, die während der Verarbeitung des Primitiv-Bereichs gefunden worden sind, dann signalisiert die Schnittpunktverwaltungseinheit der Strahlverwaltungseinheit die parametrische Länge (t) des nächstgelegenen Opak-Schnittpunkts in der Ergebniswarteschlange, um sie als das tmax des Strahls zum Verkürzen des Strahls aufzuzeichnen. Zum Aktualisieren des Traversierungsstatus, um den nächsten Traversierungsschritt des Strahls einzurichten, signalisiert die Schnittpunktverwaltungseinheit der Stapelverwaltungseinheit, ob ein Opak-Schnittpunkt aus dem Primitiv-Bereich in der Ergebniswarteschlange vorhanden ist, ob ein oder mehrere Alpha-Schnittpunkte in der Ergebniswarteschlange vorhanden sind, ob die Ergebniswarteschlange voll ist, ob zusätzliche Alpha-Schnittpunkte im Primitiv-Bereich gefunden worden sind, die nicht an den SM zurückgegeben worden sind und die nicht in der Ergebniswarteschlange vorhanden sind, und den Index des nächsten Alpha-Primitivs in dem Primitiv-Bereich für den zu testenden Strahl, nachdem der SM den Inhalt der Ergebniswarteschlange verbraucht hat (der Index des nächsten Primitivs in dem Bereich nach dem Alpha-Primitiv mit der höchsten Speicherreihenfolge aus dem aktuellen Primitiv-Bereich in der Ergebniswarteschlange).After all primitives in the primitive area have been processed, the intersection manager checks the status of the result queue and prepares packets for the batch manager and / or Beam management unit are to be sent to update the attributes and traversing status of the beam, set up the next traversal step of the beam and / or the beam (if necessary) to the SM 132 return. If the result queue contains opaque or alpha intersections found during primitive region processing, then the intersection manager signals the ray manager the parametric length (t) of the closest opaque intersection in the result queue to be the tmax of Record the beam to shorten the beam. To update the traversal status to establish the next traversal step of the beam, the intersection manager signals the batch manager whether there is an opaque intersection from the primitive area in the result queue, whether there are one or more alpha intersections in the result queue, whether that Result queue is full, whether additional alpha intersections have been found in the primitive area that have not been returned to the SM and that do not exist in the result queue, and the index of the next alpha primitive in the primitive area for the to testing ray after the SM has consumed the contents of the result queue (the index of the next primitive in the area after the alpha primitive with the highest storage order from the current primitive area in the result queue).
Wenn die Stapelverwaltungseinheit 740 das Paket von der Schnittpunktverwaltungseinheit 722 empfängt, überprüft die Stapelverwaltungseinheit 740 das Paket, um die nächste Aktion zu bestimmen, die erforderlich ist, um den Traversierungsschritt abzuschließen und den nächsten zu starten. Wenn das Paket von der Schnittpunktverwaltungseinheit 722 anzeigt, dass ein Opak-Schnittpunkt im Primitiv-Bereich gefunden worden ist, und die Strahl-Modus-Bits anzeigen, dass der Strahl die Traversierung beenden soll, sobald irgendein Schnittpunkt gefunden worden ist, gibt die Stapelverwaltungseinheit 740 den Strahl und seine Ergebniswarteschlange mit einem Traversierungsstatus, der anzeigt, dass die Traversierung abgeschlossen ist (ein Fertig-Flag-gesetzt und/oder ein leerer Top-Level- und Bottom-Level-Stapel), an den SM zurück. Wenn das Paket von der Schnittpunktverwaltungseinheit 722 anzeigt, dass es Opak- oder Alpha-Schnittpunkte in der Ergebniswarteschlange gibt und dass es verbleibende, in der Ergebniswarteschlange nicht vorhandene Alpha-Schnittpunkte im Primitiv-Bereich gibt, die der Strahl während der Verarbeitung des Primitiv-Bereichs getroffen hat und die nicht bereits an den SM zurückgegeben worden sind, gibt die Stapelverwaltungseinheit 740 den Strahl und die Ergebniswarteschlange an den SM zurück, wobei der Traversierungsstatus modifiziert wird, das Cull-Opak-Bit so zu setzen, dass weitere Verarbeitung von opaken Primitiven im Primitiv-Bereich verhindert wird und der zu dem ersten Alpha-Primitiv nach dem höchsten Alpha-Primitiv-Schnittpunkt von dem Primitiv-Bereich vorgerückte Start-Index des Primitiv-Bereichs an den SM in der Ergebniswarteschlange des Strahls zurückgegeben wird. Wenn das Paket von der Schnittpunktverwaltungseinheit 722 anzeigt, dass keine Opak- oder Alpha-Schnittpunkte gefunden worden sind, als der Strahl den Primitiv-Bereich verarbeitet hat, entfernt die Stapelverwaltungseinheit 740 den oberen Teil des Stapeleintrags (entsprechend dem fertigen Primitiv-Bereich) von dem aktiven Traversierungsstapel. Wenn das Paket von der Stapelverwaltungseinheit 740 anzeigt oder dass entweder Opak-Schnittpunkte in der Ergebniswarteschlange vorhanden sind und die Strahl-Modus-Bits nicht anzeigen, dass der Strahl die Traversierung beenden soll, sobald irgendein Schnittpunkt gefunden worden ist, und/oder Alpha-Schnittpunkte in der Ergebniswarteschlange vorhanden sind, aber keine verbleibenden, nicht in der Ergebniswarteschlange vorhandenen Alpha-Schnittpunkte im Primitiv-Bereich gefunden worden sind, die nicht bereits an den SM zurückgegeben worden sind, entfernt die Stapelverwaltungseinheit 740 den oberen Teil des Stapeleintrags (entsprechend dem fertigen Primitiv-Bereich) vom aktiven Traversierungsstapel und modifiziert den Inhalt der Ergebniswarteschlange, um anzuzeigen, dass alle in der Ergebniswarteschlange vorhandenen Schnittpunkte aus einem Primitiv-Bereich stammen, dessen Verarbeitung abgeschlossen worden ist.If the batch manager 740 the package from the intersection manager 722 receives, checks the batch manager 740 the package to determine the next action required to complete the traversal step and start the next one. If the package from the intersection manager 722 indicates that an opaque intersection has been found in the primitive area, and the beam mode bits indicate that the beam should stop traversing as soon as any intersection is found, the batch manager reports 740 return the beam and its result queue to the SM with a traversal status indicating that the traversal is complete (a done flag and / or an empty top-level and bottom-level stack). If the package from the intersection manager 722 indicates that there are opaque or alpha intersections in the result queue and that there are remaining alpha intersections in the primitive area not present in the result queue that the ray hit during primitive area processing and that are not already on the batch manager gives back to the SM 740 return the beam and result queue to the SM, modifying the traversal status to set the cull opaque bit to prevent further processing of opaque primitives in the primitive area and to the first alpha primitive after the highest alpha -Primitive intersection of the primitive area advanced starting index of the primitive area is returned to the SM in the result queue of the beam. If the package from the intersection manager 722 indicating that no opaque or alpha intersections were found when the beam processed the primitive area, the batch manager removes 740 the upper part of the stack entry (corresponding to the finished primitive area) from the active traversal stack. If the package from the batch manager 740 indicates or that there are either opaque intersections in the result queue and the ray mode bits do not indicate that the ray should end traversing once any intersection has been found and / or alpha intersections exist in the result queue but The batch manager does not remove any remaining alpha intersections in the primitive that are not in the result queue and that have not already been returned to the SM 740 the top of the batch entry (corresponding to the finished primitive area) from the active traversal stack and modifies the contents of the result queue to indicate that all intersections in the result queue come from a primitive area whose processing has been completed.
Wenn der aktive Stapel der untere Stapel ist und der untere Stapel leer ist, setzt die Stapelverwaltungseinheit 740 den aktiven Stapel auf den oberen Stapel. Wenn der obere Stapel der aktive Stapel ist und der aktive Stapel leer ist, gibt die Stapelverwaltungseinheit 740 den Strahl und seine Ergebniswarteschlange mit einem Traversierungsstatus, der anzeigt, dass die Traversierung abgeschlossen ist (ein Fertig-Flag-gesetzt und/oder ein leerer Top-Level- und Bottom-Level-Stapel), an den SM zurück. Wenn der aktive Stapel einen oder mehrere Stapeleinträge enthält, überprüft die Stapelverwaltungseinheit 740 den oberen Stapeleintrag und startet den nächsten Traversierungsschritt. Das Testen von Primitiven und/oder Primitiv-Bereichen auf Schnittpunkte mit einem Strahl und die Rückgabe der Ergebnisse an den SM 132 sind beschrieben in der gleichzeitig anhängigen US-Anmeldung Nr. 16/101,148 mit dem Titel „Conservative Watertight Ray Triangle Intersection“, der US-Anmeldung Nr. 16/101,066 mit dem Titel „Method for Continued Bounding Volume Hierarchy Traversal on Intersection without Shader Intervention“ und der US-Anmeldung Nr. 16/101,066 mit dem Titel „Method for Handling Out-of-Order Opaque and Alpha Ray/Primitive Intersections“, die hiermit in ihrer Gesamtheit durch Bezugnahme aufgenommen werden.If the active batch is the bottom batch and the bottom batch is empty, the batch management unit sets 740 the active stack on top of the stack. If the top batch is the active batch and the active batch is empty, the batch manager gives 740 return the beam and its result queue to the SM with a traversal status indicating that the traversal is complete (a done flag and / or an empty top-level and bottom-level stack). If the active batch contains one or more batch entries, the batch manager checks 740 the top stack entry and starts the next traversing step. Testing primitives and / or primitive areas for intersections with a beam and returning the results to the SM 132 are described in the pending U.S. Application No. 16 / 101,148 titled "Conservative Watertight Ray Triangle Intersection", the U.S. Application No. 16 / 101,066 with the title "Method for Continued Bounding Volume Hierarchy Traversal on Intersection without Shader Intervention" and the U.S. Application No. 16 / 101,066 entitled "Method for Handling Out-of-Order Opaque and Alpha Ray / Primitive Intersections", which are hereby incorporated by reference in their entirety.
Obwohl die obige Offenbarung in den speziellen Kontext von Computergrafik und Visualisierung eingebettet ist, könnten Strahlverfolgung und der offenbarte Traversierungs-Koprozessor für mannigfache Anwendungen jenseits von Grafik und Visualisierung eingesetzt werden. Nicht einschränkende Beispiele umfassen Schallausbreitung für realistische Klangsynthese, die Simulation von Sonarsystemen, Design optischer Elemente und Systeme, Partikeltransportsimulation (z. B. für Medizinphysik oder experimentelle Hochenergiephysik), allgemeine Wellenausbreitungssimulation, Vergleich mit LIDAR-Daten für Zwecke z. B. der Roboter- oder Fahrzeuglokalisierung und andere. Für einige dieser Anwendungsgebiete hat man OptiX™ bereits in der Vergangenheit genutzt. Although the above disclosure is embedded in the specific context of computer graphics and visualization, beam tracing and the disclosed traversal coprocessor could be used for a variety of applications beyond graphics and visualization. Non-limiting examples include sound propagation for realistic sound synthesis, simulation of sonar systems, design of optical elements and systems, particle transport simulation (e.g. for medical physics or experimental high-energy physics), general wave propagation simulation, comparison with LIDAR data for purposes e.g. B. robot or vehicle location and others. For some of these applications, OptiX ™ has been used in the past.
Streaming-Scheduling-Cache-SpeicherStreaming scheduling cache
In einem Strahlverfolger traversiert jeder Strahl die Beschleunigungsdatenstruktur (z. B. BVH) auf eine individualistische Weise. Es mag zunächst den Anschein erwecken, dass die in eine gegebene Szene geschossenen Strahlen relativ kohärent sind, da sie alle von dem gleichen Standpunkt ausgehen. Dies ist jedoch möglicherweise nur zu Beginn eines typischen Strahlverfolgungs-Prozesses der Fall. Im weiteren Verlauf der Strahlverfolgungs-Prozedur divergiert die Kohärenz mit Traversierung und Shading. Gewöhnlich braucht es mehrere Schritte, um zu bestimmen, welche Objekte sichtbar sind, welches Licht welche Objekte erreicht und welche Oberflächen wo reflektieren. Da sich diese Divergenz in den Strahlen ausbreitet, die gerade verarbeitet werden, nimmt die Ausführungsbesetzung auf Bänken der von manchen Strahlverfolgern verwendeten Single-Instruction-Multithread-Engines sehr schnell ab. In derartigen SIMT-Strahlverfolger-Architekturen wird in irgendeinem gegebenen Zeitpunkt nur ein kleiner Teil der SIMT-Prozessoren tätig sein, während der Rest der Prozessoren untätig sein wird. In manchen Ausführungsformen führt ein Streaming-Multiprozessor auf einem Warp aus, so dass mit zunehmender Divergenz der Threads die Anzahl der aktiven Threads sinkt, aber die Anzahl der Warps, die auf verschiedenen Streaming-Multiprozessoren verarbeitet werden, nicht notwendigerweise bis ganz zum Schluss sinkt. Dementsprechend sind Verbesserungen möglich.In a beam tracker, each beam traverses the acceleration data structure (e.g. BVH) in an individualistic way. It may seem at first glance that the rays shot into a given scene are relatively coherent, since they all start from the same point of view. However, this may only be the case at the beginning of a typical ray tracing process. In the further course of the beam tracing procedure, the coherence with traversing and shading diverges. It usually takes several steps to determine which objects are visible, which light reaches which objects, and which surfaces reflect where. As this divergence spreads in the beams that are being processed, the execution cast on banks of the single-instruction multithreaded engines used by some beam trackers decreases very quickly. In such SIMT beam tracing architectures, only a small portion of the SIMT processors will be active at any given time, while the rest of the processors will be idle. In some embodiments, a streaming multiprocessor executes on a warp, so as the divergence of threads increases, the number of active threads decreases, but the number of warps processed on different streaming multiprocessors does not necessarily decrease until the very end. Accordingly, improvements are possible.
Strahlverfolgung beinhaltet häufig, eine Strahlschnittpunkt-Abfrage gegen eine vorgefertigte Begrenzungsvolumenhierarchie (BVH) auszuführen. Individuelle Strahlen in diesen Abfragen nehmen häufig ähnliche Wege durch die Hierarchie. Gruppieren ihrer kohärenten Ausführung kann Leistungsfähigkeits- und Leistungsvorteile haben. Frühere Implementierungen außerhalb der Baumtraversierungseinheit (Tree Traversal Unit; TTU) haben diese Ausführung im Allgemeinen nicht gruppiert und duplizieren BVH-Knoten in Registerdateien, statt unter Verwendung einer einzigen Dateninstanz direkt aus dem Cache zu arbeiten.Beam tracing often involves performing a beam intersection query against a pre-built bounded volume hierarchy (BVH). Individual rays in these queries often take similar paths through the hierarchy. Grouping their coherent execution can have performance and performance advantages. Previous implementations outside the tree traversal unit (TTU) generally did not group this implementation and duplicate BVH nodes in register files instead of working directly from the cache using a single data instance.
Streaming-Cache-SpeicherStreaming cache
Die vorliegenden nicht einschränkenden Ausführungsbeispiele stellen einen Traversierungs-Koprozessor-Cache-Speicher bereit, der dafür ausgelegt ist, konfigurierbar, klein und effizient beim Streaming von Arbeitslast zu sein. Er ist auch ein Cache-Speicher, der nicht an den anfordernden Client zurückgeben muss, sondern unter Verwendung von Anforderungs-Metadaten und Daten, die im Cache-Speicher selbst resident sind, die Ausführung entlang eines angefügten Datenpfades plant. Auf diese Weise ist der Cache-Speicher kein typischer Cache-Speicher, sondern fungiert auch als ein Scheduler, der residente Daten verwendet, um Betrieb/Ausführung von Strahl-Anforderungen geeignet und effizient zu gruppieren.The present non-limiting embodiments provide a traversal coprocessor cache that is configured to be configurable, small, and efficient in streaming workload. It is also a cache that does not have to return to the requesting client, but plans to execute along an attached data path using request metadata and data resident in the cache itself. In this way, the cache is not a typical cache, but also acts as a scheduler that uses resident data to appropriately and efficiently group operation / execution of beam requests.
In nicht einschränkenden Ausführungsbeispielen wird die Beschleunigungsdatenstruktur in komprimierter Form in Speicher gespeichert. Während ein Strahl seinen Weg durch die Hierarchie nimmt, die die Beschleunigungsdatenstruktur definiert, liest die TTU 700 die erforderlichen Daten aus Speicher über eine Cache-Zeile eines L1-Cache-Speichers aus. Die TTU 700 testet den Strahl dann gegen die Daten, die ausgelesen und in der Cache-Zeile verfügbar gemacht worden sind.In non-limiting exemplary embodiments, the acceleration data structure is stored in compressed form in memory. As a beam travels through the hierarchy that defines the acceleration data structure, the TTU reads 700 the required data from memory via a cache line of an L1 cache. The TTU 700 then tests the beam against the data that has been read out and made available in the cache line.
Um diesen Prozess zu erleichtern, verfügt die TTU 700 über einen eigenen internen kleinen, aber effizienten Streaming-Cache 750, hier „L0-Cache“ genannt („L-Null-Cache“ oder „Level-Null-Cache“). In dem in 9 gezeigten nicht einschränkenden Beispiel befindet sich der LO-Cache innerhalb der TTU 700 selbst. Dieser TTU-LO-Cache 750 wird von einem größeren, leistungsfähigeren Speichersystem unterstützt, das einen zusätzlichen L1-Cache („Level-Eins-Cache“) und möglicherweise weitere Cache-Ebenen wie z. B. Level-2-Cache usw. enthält, die letztendlich Zugriff auf Hauptspeicher 140 ermöglichen (siehe 1). In dem nicht einschränkenden Ausführungsbeispiel wird der LO-Cache 750 nur von der TTU 700 verwendet und ist nur für diese bestimmt. Dieser LO-Cache 750 zieht Daten zur Verwendung durch die TTU 700 ein und plant auch die Verwendung dieser Daten gegen die Strahlen, die dagegen testen wollen. Der Cache 750 führt seine Scheduling-Funktion implizit durch die Reihenfolge durch, in der er Daten den Datenpfad entlang zu den anderen Teilen der TTU 700 streamt.To make this process easier, the TTU has 700 via its own internal small but efficient streaming cache 750 , here called "L0 cache"("L zero cache" or "level zero cache"). In the in 9 The non-limiting example shown is the LO cache within the TTU 700 itself. This TTU-LO cache 750 is supported by a larger, more powerful storage system that has an additional L1 cache ("level one cache") and possibly additional cache levels such as B. level 2 cache, etc., which ultimately access main memory 140 enable (see 1 ). In the non-limiting embodiment, the LO cache 750 only from the TTU 700 used and is intended only for this. This LO cache 750 pulls data for use by the TTU 700 and also plans to use this data against the rays that want to test against it. The cache 750 implicitly performs its scheduling function by the order in which it data travels down the data path to the other parts of the TTU 700 streams.
Hintergrund - Basis-Cache-Speicher-KonzepteBackground - basic cache concepts
Wie der Fachmann weiß, hat man konventionellen „Cache-Speicher“ seit vielen Jahren in Hochgeschwindigkeits-Computerarchitekturen verwendet. Die Grundidee hinter einem Cache-Speicher ist es, einen kleinen, leicht zugänglichen Speicher nahe an einem Hochgeschwindigkeitsprozessor zu platzieren, typischerweise auf demselben Silizium. Der Prozessor gibt Anforderungen nach Daten aus dem Hauptspeicher aus, indem er sie über den Cache-Speicher sendet. Der Cache-Speicher liest die angeforderten Daten aus dem Hauptspeicher aus und speichert die ausgelesenen Daten in einem kleinen lokalen Speicher, auf den der Prozessor schneller zugreifen kann.As one of ordinary skill in the art knows, conventional "cache memory" has been used in high speed computer architectures for many years. The basic idea behind a cache memory is to place a small, easily accessible memory close to a high-speed processor, typically on the same silicon. The processor issues requests for data from main memory by sending them through the cache. The cache reads the requested data from the main memory and stores the read data in a small local memory, which the processor can access more quickly.
Ein typischer Cache-Speicher liest Daten aus, die ein ausführender Prozess benötigt, um zu laufen, und speichert und unterhält sie. Auslesen in einen typischen Cache-Speicher wird durch einen Prozess initiiert, der nach diesen Daten aus dem Hauptspeicher ruft. Aber anstatt die ausgelesenen Daten einfach an den Prozess zurückzugeben, unterhält der Cache-Speicher auch eine Kopie der Daten in lokalem Speicher nahe an dem Prozess, der die Daten verwendet. Wenn der Prozess die gleichen Daten noch einmal benötigt (was aufgrund eines als „lokalisierte Ausführung“ bekannten Phänomens oft der Fall sein kann), kann der Cache-Speicher sie schnell bereitstellen, ohne sie erneut aus dem Hauptspeicher auslesen zu müssen. Wenn der ausführende Prozess die Daten nicht mehr benötigt (z. B. weil er zu einem anderen Teil des Prozesses fortgeschritten ist), können die Daten aus dem Cache hinausgeworfen werden, um Platz für andere Daten zu schaffen, die der Prozess jetzt benötigt.A typical cache reads out data that an executing process needs to run and stores and maintains it. Reading into a typical cache memory is initiated by a process that calls for this data from the main memory. But instead of simply returning the read data to the process, the cache also maintains a copy of the data in local memory close to the process that uses the data. If the process needs the same data again (which can often be the case due to a phenomenon known as "localized execution"), the cache can provide it quickly without having to read it out of main memory again. When the executing process no longer needs the data (e.g. because it has advanced to another part of the process), the data can be thrown out of the cache to make room for other data that the process now needs.
Haushaltsköche werden mit dem Konzept eines Cache vertraut sein, da ein typischer Haushaltskühlschrank eine Art Lebensmittel-Cache darstellt. Es gibt riesige Mengen an verschiedenen Zutaten in der Kühlabteilung Ihres lokalen Lebensmittelsupermarktes, aber jedes Mal den ganzen Weg zum Laden gehen zu müssen, wenn man eine Zutat benötigt, wäre sehr lästig. Stattdessen bringt der Haushaltskoch gelegentlich die Zutaten aus dem Supermarkt mit, die in den nächsten Tagen wahrscheinlich benötigt werden, und lagert sie in einem Haushaltskühlschrank. Der Haushaltskühlschrank ist nur wenige Schritte von Spüle und Herd entfernt, so dass die Zutaten, die er enthält, für den Koch leicht zugänglich sind. Der Koch muss den Inhalt des Haushaltskühlschranks regelmäßig auffüllen. Und der Koch muss möglicherweise manchmal in den Laden laufen, um spezielle Zutaten zu holen, die der Haushaltskühlschrank nicht enthält.Household chefs will be familiar with the concept of a cache, since a typical household refrigerator is a kind of food cache. There are huge amounts of different ingredients in the refrigeration department of your local grocery store, but having to go all the way to the store every time you need an ingredient would be very annoying. Instead, the household chef occasionally brings the ingredients from the supermarket that are likely to be needed in the next few days and stores them in a household refrigerator. The household refrigerator is just a few steps away from the sink and stove, so the ingredients it contains are easily accessible to the cook. The cook must periodically replenish the contents of the household refrigerator. And the cook may sometimes have to run to the store to get special ingredients that the household fridge doesn't contain.
Ein typischer Vorteil eines Cache-Speichers ist daher die reduzierte Latenz - die Zeit, die benötigt wird, um Daten aus Speicher auszulesen. Gewöhnlich ist es für einen Prozess viel schneller, Daten aus einem lokalen Cache zu gewinnen, als sie aus Speicher auszulesen. Da viele Prozesse tendenziell die gleichen Daten immer wieder erneut verwenden („Verweislokalität“), kann es sehr effizient sein, eine lokale Kopie von Daten zu unterhalten, auf die der Prozess viel schneller zugreifen kann als wenn er sie aus Gemeinschafts-Hauptspeicher ausliest.A typical advantage of a cache is the reduced latency - the time it takes to read data from memory. It is usually much faster for a process to extract data from a local cache than to read it from memory. Because many processes tend to reuse the same data over and over again ("referral locality"), it can be very efficient to maintain a local copy of data that the process can access much faster than if it were reading it from shared memory.
Der Traversierungs-Prozessor-Cache-Speicher fungiert auch als ein SchedulerThe traversal processor cache also acts as a scheduler
Wenn die Speicherlatenz der TTU 700 (d. h. die Zeit, die benötigt wird, um Daten aus dem Speichersystem auszulesen) die einzige Einschränkung wäre, wäre eine mögliche Lösung, einen großen dedizierten L0-Cache für die TTU 700 vor dem L1-Cache bereitzustellen, den die TTU 700 mit den SMs 132 gemeinsam nutzt. Aus Gründen der Effizienz und zur Einsparung von Hardware-Fläche stellt ein besseres Design jedoch TTU-Aufgaben-Scheduling bereit.If the storage latency of the TTU 700 (ie the time it takes to read data from the storage system) the only limitation would be a possible solution, a large dedicated L0 cache for the TTU 700 before the L1 cache that the TTU 700 with the SMs 132 shared. However, for reasons of efficiency and to save hardware space, a better design provides TTU task scheduling.
In den nicht einschränkenden Ausführungsbeispielen baut die TTU 700 auf das bereitgestellte Speichersystem und wird davon unterstützt, welches einen größeren L1-Cache enthält, der von einem oder mehreren SMs 132, der TTU 700 und Texturabbildungseinheiten gemeinsam genutzt wird. Darüber hinaus verfügt die TTU 700 jedoch über ihren eigenen, sehr kleinen und hocheffizienten Streaming-L0-Cache 750, der aus dem L1-Cache ausgelesene Daten zwischenspeichert und auch die Strahl-Ausführung über ihren Datenpfad plant.In the non-limiting exemplary embodiments, the TTU builds 700 to the storage system provided and is supported by it, which contains a larger L1 cache, that of one or more SMs 132 , the TTU 700 and texture mapping units is shared. In addition, the TTU 700 however, through their own very small and highly efficient streaming L0 cache 750 , which temporarily stores data read from the L1 cache and also plans the beam execution via its data path.
Strahl-Operations-SchedulingOperations beam scheduling
Um hohe Effizienz bereitzustellen, stellt der L0-Cache 750 des nicht einschränkenden Ausführungsbeispiels ein Strahl-Ausführungs-Scheduling über den Datenpfad in den Cache selbst bereit. In nicht einschränkenden Ausführungsbeispielen führt der Cache 750 sein Strahl-Ausführungs-Scheduling auf Basis der Reihenfolge durch, in der er Datenanforderungen nachkommt. Insbesondere hält sich der Cache 750 darüber auf dem Laufenden, welche Strahlen darauf warten, dass die gleichen Daten aus dem Speichersystem zurückgegeben werden, und erfüllt dann - sobald er die Daten ausliest und in einer Cache-Zeile speichert - ungefähr gleichzeitig die Anforderungen von all jenen Strahlen, die auf die gleichen Daten warten.To provide high efficiency, the L0 cache provides 750 of the non-limiting embodiment, beam execution scheduling via the data path into the cache itself is ready. The cache performs in non-limiting exemplary embodiments 750 through its beam execution scheduling based on the order in which it meets data requests. In particular, the cache persists 750 keeps track of which rays are waiting for the same data to be returned from the storage system, and then, as soon as it reads the data and stores it in a cache line, approximately simultaneously meets the requirements of all those rays that are on the same Waiting for data.
Der Cache 750 diktiert somit der Ausführung irgendeiner bestimmten Sammlung von gegenwärtig aktivierten Strahlen, die gegenwärtig auf die gleichen Daten warten, durch die TTU 700 eine Zeitkohärenz zu, indem er die TTU im Wesentlichen zwingt, alle diese Strahlen ungefähr zur gleichen Zeit auszuführen. Da alle Strahlen in der Gruppe ungefähr zur gleichen Zeit ausführen und jeder ungefähr die gleiche Zeit zur Ausführung benötigt, bündelt der Cache 750 die Strahlen effektiv zu einer zeitlich kohärenten Ausführung, indem er sie ungefähr zur gleichen Zeit bedient. Diese gebündelten Strahlen fahren fort, jede Iteration bei einer rekursiven Traversierung der Beschleunigungsdatenstruktur in einer zeitlich kohärenten Weise wiederholt durchzuführen, solange die Strahlen weiter die gleichen Daten für jede Iteration anfordern.The cache 750 thus dictates the TTU's execution of any particular collection of currently activated beams currently waiting for the same data 700 time coherence by essentially forcing the TTU to execute all of these beams at approximately the same time. Since all rays in the group execute at approximately the same time and each takes approximately the same time to execute, the cache is bundled 750 the beams effectively to be coherent in time by operating them at about the same time. These focused rays continue to iterate each time the recursive traversal of the Repeat the acceleration data structure in a time-coherent manner as long as the beams continue to request the same data for each iteration.
Die Bündelung von Strahlen durch den Cache 750 in einer zeitlich kohärenten Weise, indem er ihnen die Daten, auf die sie warten, ungefähr zur gleichen Zeit liefert, plant effektiv die nächsten sukzessiven Datenanforderungen der TTU 700 für diese Strahlen so, dass sie auch ungefähr gleichzeitig stattfinden, was bedeutet, dass der Cache diese sukzessiven Datenanforderungen ungefähr gleichzeitig mit den gleichen, aus dem Speichersystem ausgelesenen neuen Daten erfüllen kann.The bundling of rays through the cache 750 in a time-coherent manner by providing them with the data they are waiting for at about the same time, effectively planning the TTU's next successive data requests 700 for these rays so that they also occur approximately simultaneously, which means that the cache can fulfill these successive data requests approximately simultaneously with the same new data read from the storage system.
Ein Vorteil der L0-Cache-750-Gruppierung von Strahlen in dieser Weise besteht darin, dass die resultierende Gruppe von Strahl-Anforderungen, die an den gleichen Daten ausgeführt werden, annähernd den gleichen Traversierungspfad durch die hierarchische Datenstruktur nehmen und daher wahrscheinlich für jede von mehreren sukzessiven Iterationen ungefähr gleichzeitig die gleichen Daten aus dem L0-Cache 750 anfordern werden - auch wenn jede individuelle Strahl-Anforderung nicht formell mit irgendeiner anderen Strahl-Anforderung koordiniert ist. Durch den Umstand, dass der L0-Cache 750 über den Datenpfad zu den TTU-Blöcken 710, 712, 740 plant, plant der L0-Cache effektiv seine eigenen zukünftigen Anforderungen an das Speichersystem im Auftrag der von ihm gebündelten Strahlen, um die Latenz zu minimieren und gleichzeitig akzeptable Leistungsfähigkeit mit einem relativ kleinen Cache-Daten-RAM mit einer relativ kleinen Anzahl von Cache-Zeilen zu erbringen. Diese Bündelung hat auch den Effekt, die Verweislokalität im L1-Cache und irgendwelchen nachgelagerten Caches zu verbessern.An advantage of the L0 cache 750 grouping of beams in this manner is that the resulting set of beam requests made on the same data take approximately the same traversal path through the hierarchical data structure and therefore likely for each of several successive iterations, the same data from the L0 cache approximately simultaneously 750 request - even if each individual beam request is not formally coordinated with any other beam request. Due to the fact that the L0 cache 750 via the data path to the TTU blocks 710 . 712 . 740 plans, the L0 cache effectively plans its own future memory system requirements on behalf of the beams it bundles to minimize latency while maintaining acceptable performance with a relatively small cache data RAM with a relatively small number of cache lines to provide. This bundling also has the effect of improving the reference locality in the L1 cache and any downstream caches.
Wenn Strahlen in dem Bündel zu divergieren beginnen, indem sie unterschiedliche Traversierungsdaten anfordern, hört der Cache 750 gleichzeitig mit anderen Strahlen in dem Bündel auf, sie zu bedienen. Die Divergenz tritt auf, wenn die Größe der Begrenzungskästen in der BVH auf niedrigeren Ebenen abnimmt. Was schon früh winzige, ignorierbare Unterschiede in Ursprung oder Richtung gewesen sein könnten, führt nun dazu, dass zuvor gebündelte Strahlen diese kleineren Begrenzungskästen anders verfehlen oder treffen.When beams in the bundle begin to diverge requesting different traversal data, the cache stops 750 at the same time with other rays in the bundle to operate them. The divergence occurs when the size of the bounding boxes in the BVH decreases at lower levels. What may have been tiny, ignorable differences in origin or direction at an early stage now means that previously bundled beams miss or hit these smaller boundary boxes differently.
Hierarchische-Datenstruktur-Traversierung - Wie Strahl-Operationen aktiviert werdenHierarchical data structure traversing - How beam operations are activated
In dem nicht einschränkenden Ausführungsbeispiel speist der TTU-L0-Cache 750 Complets in einen Datenpfad ein, an dessen Ende sich ein Stapelverwaltungsblock 740 befindet. Der Stapelverwaltungsblock 740 in der nicht einschränkenden Beispiel-Traversierungs-Koprozessor-Architektur bestimmt, welche Operation als nächstes für einen gegebenen Strahl durchgeführt wird. Somit bestimmt der Stapelverwaltungsblock 740, ob Rekursion innerhalb der Beschleunigungsdatenstruktur erforderlich ist (z. B. um ein Begrenzungsvolumen für weitere sukzessive Strahl-Complet-Tests weiter in seine Kinder zu unterteilen), oder ob ein Blattknoten in der Beschleunigungsdatenstruktur erreicht worden ist (in diesem Fall wird die Stapelverwaltungseinheit einen Strahl-Dreieck-Test planen, der von dem Strahl-Dreieck-Test-Block 720 durchzuführen ist). Wenn der Stapelverwaltungsblock 740 bestimmt, dass zusätzliche Rekursion den Begrenzungskasten-Pfad entlang erforderlich ist, dann wird der Stapelverwaltungsblock 740 eine weitere Anforderung an den L0-Cache 750 initiieren, um das nächste Complet in der hierarchischen Datenstruktur auszulesen, das für eine nächste sukzessive Iteration des Strahl-Complet-Tests durch den Block 710 erforderlich ist.In the non-limiting embodiment, the TTU-L0 cache 750 completes feeds into a data path, at the end of which there is a batch management block 740 located. The batch management block 740 in the non-limiting example traversal coprocessor architecture determines which operation is performed next for a given beam. Thus the batch management block determines 740 whether recursion is required within the acceleration data structure (e.g. to further divide a limit volume for further successive beam-complete tests into its children) or whether a leaf node in the acceleration data structure has been reached (in this case the batch management unit becomes one Plan the beam-triangle test from the beam-triangle test block 720 is to be carried out). If the batch management block 740 determines that additional recursion is required along the bounding box path, then the batch management block 740 initiate a further request to the L0 cache 750 in order to read out the next complete in the hierarchical data structure, which is for a next successive iteration of the beam complete test by the block 710 is required.
Der Complet-Cache 752 befindet sich somit linear in dem Datenpfad. Es ist Teil einer Ausführe-Anfordere-Ausführe-Anfordere-Schleife, die, da sie sich innerhalb des Datenpfades befindet, Informationen darüber aufweist, welche Complets ausgelesen worden sind und verfügbar sind und welche Complets zu Cache-Fehlschlägen führen, die zusätzliche Speicherzugriffe auf den Speicher 140 erfordern.The complete cache 752 is therefore linear in the data path. It is part of an execute-request-execute-request loop which, since it is within the data path, has information about which completes have been read and are available, and which completes lead to cache failures that cause additional memory accesses to the Storage 140 require.
Durch Gruppieren der Anforderungen, so dass viele Strahl-Complet-Tests, die gegen die gleichen Complet-Daten getestet werden, geplant werden, um mehr oder weniger gleichzeitig durchgeführt zu werden, werden Strahlen, die „kohärent“ sind - was bedeutet, dass sie gruppiert sind, um ihre Strahl-Complet-Tests gegen die gleichen Complet-Daten durchzuführen - für zusätzliche Tests gruppiert bleiben. Durch fortgesetztes Gruppieren dieser Strahlen als ein Bündel kohärenter Strahlen wird die Anzahl von redundanten Speicherzugriffen, um immer wieder die gleichen Complet-Daten auszulesen, erheblich reduziert, und daher arbeitet die TTU 700 viel effizienter. Mit anderen Worten, die Strahlen, die mehr oder weniger den gleichen Traversierungspfad durch die Beschleunigungsdatenstruktur nehmen, werden tendenziell zwecks Ausführung des Strahl-Complet-Tests gruppiert - nicht nur für die gegenwärtige Testausführung, sondern auch für weitere sukzessive Testausführungen, da dieses Bündel von „kohärenten“ Strahlen seinen Weg entlang der Traversierung der Beschleunigungsdatenstruktur fortsetzt. Dies erhöht die Effizienz jeder auf Speicher ausgestellten Anforderung erheblich, indem es sie über eine Anzahl verschiedener Strahlen hinweg nutzt, und verringert den Stromverbrauch der Hardware erheblich.By grouping the requirements so that many beam complete tests that are tested against the same complete data are scheduled to be performed more or less concurrently, beams become “coherent” - which means that they are are grouped to do their beam complete tests against the same complete data - stay grouped for additional tests. By continuing to group these beams as a bundle of coherent beams, the number of redundant memory accesses in order to read out the same complete data again and again is considerably reduced, and therefore the TTU works 700 much more efficient. In other words, the beams that take more or less the same traversal path through the acceleration data structure tend to be grouped for the purpose of performing the beam complete test - not only for the current test execution, but also for other successive test executions because this bundle of " coherent “rays continue along the traversal of the acceleration data structure. This significantly increases the efficiency of any request made to memory by using it across a number of different beams, and significantly reduces hardware power consumption.
Um die Strahl-Complet-Test-Blöcke 710 kontinuierlich weiter mit neuen Daten zu versorgen, sollte der Complet-Cache 752 idealerweise in jedem Zyklus neue Complet-Daten liefern. Zu erwarten, dass ein weiter entfernter L1-Cache eine so hohe Ansprechbarkeit bietet, ist möglicherweise unrealistisch. Im Gegenteil, der weiter entfernte L1-Cache könnte am Ende überlastet werden und zu einem Engpass für die Strahl-Complet-Tests werden, welche die TTU 700 mit extrem hohen Raten durchführen kann. In dem nicht einschränkenden Ausführungsbeispiel wird der L1-Cache von der TTU 700, einem oder mehreren SMs 132 und einer oder mehreren Texturabbildungseinheiten gemeinsam genutzt. Der L0-Cache 750 innerhalb der TTU 700 bietet somit einen Pufferungseffekt, so dass Speicherzugriff über die TTU erfolgt oder an den eigenen L0-Cache der TTU abgeladen wird, und jene Speicherzugriffe stören nicht Speicherzugriffe, welche die SMs 132 und Texturabbildungseinheiten möglicherweise über den Gemeinschafts-L1-Cache durchführen. Der L0-Cache 750 innerhalb der TTU 700 ermöglicht somit eine Bandbreitenverstärkung ohne wesentliche zusätzliche Komplexität des Speichersystems. Als Folge davon, dass der L0-Cache getroffen wird, statt dass an den L1-Cache oder sogar an Hauptspeicher hinausgegangen wird, hat der L0-Cache 750 der TTU die Wirkung, die Latenz zu reduzieren und die Bandbreite zu vergrößern.Around the beam complete test blocks 710 The complete cache should continuously supply new data 752 ideally in everyone Cycle deliver new complete data. Expecting a more distant L1 cache to offer such high responsiveness may be unrealistic. On the contrary, the more distant L1 cache could end up being overloaded and becoming a bottleneck for the beam complete tests that the TTU 700 can perform at extremely high rates. In the non-limiting embodiment, the L1 cache is handled by the TTU 700 , one or more SMs 132 and one or more texture mapping units. The L0 cache 750 within the TTU 700 thus offers a buffering effect, so that memory access takes place via the TTU or is loaded onto the TTU's own L0 cache, and those memory accesses do not interfere with memory accesses which the SMs 132 and may perform texture mapping units through the shared L1 cache. The L0 cache 750 within the TTU 700 thus enables bandwidth amplification without significant additional complexity of the storage system. As a result of the L0 cache being hit rather than going to the L1 cache or even main memory, the TTU's L0 cache 750 has the effect of reducing latency and increasing bandwidth.
Große Vorteile ergeben sich durch die Fähigkeit der L0-Cache-Struktur 750, die Strahl-Ausführung auf Basis der Daten zu gruppieren, die die gruppierten Strahlen benötigen, um die Beschleunigungsdatenstruktur zu traversieren. Der SM 132, der der TTU 700 Strahlen für Complet-Testen vorlegt, hat in einem allgemeinen Fall möglicherweise keine Ahnung, dass diese Strahlen „kohärent“ sind. Die Strahlen können im dreidimensionalen Raum nebeneinander existieren, traversieren aber typischerweise die Beschleunigungsdatenstruktur völlig unabhängig voneinander. Ob bestimmte Strahlen also miteinander kohärent sind, hängt nicht nur von den räumlichen Positionen der Strahlen ab (welche der SM 132 selbst oder durch andere Hilfsoperationen wie z. B. sogar künstliche Intelligenz bestimmen kann), sondern auch von der detaillierten bestimmten Beschleunigungsdatenstruktur, die die Strahlen traversieren. Da der SM 132, der die Strahl-Complet-Tests anfordert, nicht notwendigerweise direkten Zugriff auf die detaillierte Beschleunigungsdatenstruktur hat (noch die Zeit hätte, die Beschleunigungsdatenstruktur zu analysieren, auch wenn er Zugriff hätte), baut der SM auf die TTU 700, um die Datenstruktur-Traversierung für Strahlen zu beschleunigen, welche der SM 132 auch immer der TTU zum Testen vorlegt. In dem nicht einschränkenden Ausführungsbeispiel stellt der eigene L0-Cache 750 der TTU 700 ein zusätzliches Maß an Intelligenz bereit, die auf Basis von unabhängig traversierenden Strahlen, die die gleichen Complet-Daten ungefähr zur gleichen Zeit anfordern, entdeckt, dass diese Strahlen die Beschleunigungsdatenstruktur kohärent traversieren. Durch anfängliches Gruppieren dieser kohärenten Strahlen derart, dass sie Strahl-Complet-Tests ungefähr zur gleichen Zeit durchführen, erhalten diese kohärenten Strahlen wieder die Möglichkeit, für sukzessive Tests gruppiert zu werden, wenn die Strahlen die Beschleunigungsdatenstruktur traversieren. Der TTU-L0-Cache 750 baut somit nicht auf irgendeine vorgegebene Gruppierung von Strahlen als kohärent (obwohl er von einer natürlichen Vorlege-Reihenfolge von Strahlen durch den anfordernden SM 132 Gebrauch macht, die einfach auf räumlicher Nähe der Strahlen basiert, wie sie vom SM zum Testen vorgelegt werden), sondern beobachtet stattdessen auf Basis der Daten, die die Strahlen zum Testen benötigen, während sie die Beschleunigungsdatenstruktur traversieren, dass diese Strahlen die gleichen Teile der Beschleunigungsdatenstruktur traversieren und für Effizienz gruppiert werden können.Great advantages result from the ability of the L0 cache structure 750 to group the beam execution based on the data that the grouped beams need to traverse the acceleration data structure. The SM 132 who the TTU 700 Submitting rays for complete testing may have no idea in a general case that these rays are "coherent". The beams can coexist in three-dimensional space, but typically traverse the acceleration data structure completely independently of one another. So whether certain rays are coherent does not only depend on the spatial positions of the rays (which of the SM 132 itself or through other auxiliary operations such as B. can even determine artificial intelligence), but also from the detailed determined acceleration data structure that traverses the beams. Since the SM 132 , who requests the beam complete tests, does not necessarily have direct access to the detailed acceleration data structure (would still have the time to analyze the acceleration data structure, even if he had access), the SM relies on the TTU 700 to accelerate the data structure traversal for rays that the SM 132 always submitted by the TTU for testing. In the non-limiting embodiment, the TTU's own L0 cache 750 700 an additional level of intelligence ready, based on independently traversing beams requesting the same complete data at approximately the same time, discovers that these beams are consistently traversing the acceleration data structure. By initially grouping these coherent beams so that they perform beam complete tests at approximately the same time, these coherent beams are again given the opportunity to be grouped for successive tests when the beams traverse the acceleration data structure. The TTU-L0 cache 750 thus does not rely on any given grouping of beams as coherent (although it is of a natural order of supply of beams by the requesting SM 132 Uses, which is simply based on the spatial proximity of the beams as presented by the SM for testing), but instead observes that based on the data that the beams need for testing, while traversing the acceleration data structure, these beams are the same parts of the Traverse acceleration data structure and can be grouped for efficiency.
Strahl-AktivierungBeam activation
Im Allgemeinen wird alles, was die TTU 700 in der nicht einschränkenden Beispiel-Implementierung durchführt, im Auftrag eines Strahls sein. Somit führt der L0-Cache 750 im Allgemeinen Aufgaben im Auftrag von Strahlen durch, im Gegensatz zur Durchführung von anderen Speicherauslese-Aufgaben. Somit werden alle Anforderungen vom TTU-L0-Cache 750 an das Speichersystem einschließlich des L1-Cache im Auftrag eines Strahls erfolgen. In dem nicht einschränkenden Ausführungsbeispiel enthalten die Parameter, die einen Strahl bestimmen, zum Beispiel Ursprung, Richtung, tmin und tmax. Diese Parameter werden vom SM 132 in seiner Anforderung an die TTU 700 explizit gesetzt und nicht aus Speicher geladen. Was direkt für Verwendung durch die TTU 700 geladen wird, sind Complets, Dreiecke und Instanzknoten. Das Complet-System in dem nicht einschränkenden Ausführungsbeispiel stellt Begrenzungskästen und zugehörige Zeiger dar. Das Complet ist in einer komprimierten Form im Speicher 140 gespeichert, und der Cache 750 liest sie in diesem komprimierten Format aus dem Speichersystem aus.In general, everything the TTU 700 in the non-limiting example implementation performed on behalf of a ray. The L0 cache thus carries 750 generally perform tasks on behalf of rays, as opposed to performing other memory read tasks. So all requests from the TTU-L0 cache 750 to the storage system including the L1 cache on behalf of a beam. In the non-limiting embodiment, the parameters that determine a beam include, for example, origin, direction, tmin and tmax. The SM 132 in his request to the TTU 700 explicitly set and not loaded from memory. What directly for use by the TTU 700 loads are completes, triangles and instance nodes. The complete system in the non-limiting embodiment represents bounding boxes and associated pointers. The complete is in a compressed form in memory 140 saved, and the cache 750 reads them from the storage system in this compressed format.
In nicht einschränkenden Ausführungsbeispielen ist es die Stapelverwaltungseinheit 740, die den TTU-Stapel aktualisiert, während Strahlen die Beschleunigungsdatenstruktur rekursiv hinab und dann wieder hinauf traversieren. Es ist die Stapelverwaltungseinheit 740, die zum Beispiel bestimmt, ob ein bestimmter Strahl weitere rekursive Traversierung durch die Beschleunigungsdatenstruktur erfordert, oder ob der Strahl nun zum Beispiel einen Strahl-Dreieck-Test unter Verwendung des anderen Datenpfades erfordert. In dem nicht einschränkenden Ausführungsbeispiel kann die Stapelverwaltungseinheit 740 auf einer Reihum-Basis wählen, welcher Strahl als nächstes zu aktivieren ist, was im Wesentlichen eine zufällige Wahl in Bezug auf irgendeine bestimmte Zeitkohärenz von Datenerfordernissen dieses bestimmten Strahls ist. Ein zufällig gewählter Strahl wird somit ausgewählt, um den Strahl-Complet-Datenpfad entlang zu gehen, und dieser zufällig ausgewählte Strahl ist es, der eine neue Datenanforderung an den L0-Cache 750 nach einem Complet initiiert, das dieser zufällig ausgewählte Strahl für seinen eigenen Strahl-Complet-Test benötigt. Es ist der L0-Cache 750, der irgendeine Möglichkeit erkennt, diesen zufällig ausgewählten Strahl mit anderen Strahlen zu gruppieren, die die gleichen Daten benötigen, um die Speicherzugriffe der TTU 700 effizienter zu machen. Dementsprechend wird der L0-Cache 750 kohärenten Strahlen, die ähnliche Pfade durch die Beschleunigungsdatenstruktur traversieren, eine Gruppen-Ausführungsreihenfolge zudiktieren, obwohl der formale Strahlausführungs-Scheduling-Prozess, den die TTU 700 über die Stapelverwaltungseinheit 740 durchführt, und das Complet-Scheduling tatsächlich auf Basis dessen, was möglicherweise ein Zufallsauswahlprozess ist, Strahlen für Aktivierung auswählen.In non-limiting embodiments, it is the batch manager 740 that updates the TTU stack as beams traverse the acceleration data structure recursively down and then up again. It's the batch manager 740 which, for example, determines whether a particular beam requires further recursive traversal through the acceleration data structure, or whether the beam now requires, for example, a beam-triangle test using the other data path. In the non-limiting embodiment, the batch manager 740 in turn choose which beam to activate next, which is essentially a random choice with respect to any particular time coherency of data requirements of that particular ray. A randomly selected beam is thus selected to go along the beam complete data path, and it is this randomly selected beam that makes a new data request to the L0 cache 750 initiated after a complete that this randomly selected beam needs for its own beam complete test. It is the L0 cache 750 who detects any way to group this randomly selected beam with other beams that need the same data to store the TTU's memory accesses 700 to make it more efficient. Accordingly, the L0 cache 750 dictate a coherent beams that traverse similar paths through the acceleration data structure to a group execution order, although the formal beam execution scheduling process that the TTU 700 via the batch management unit 740 and actually complete the scheduling based on what may be a random selection process, select beams for activation.
In den Ausführungsbeispielen startet jeder Strahl seine Traversierung der Beschleunigungsdatenstruktur von einer Stelle aus, an der ihn zu Starten ein SM 132 verlangt hat. Der L0-Cache 750 findet Möglichkeiten, Strahlen hinter bestimmten Speicherblöcken zusammenzufügen. Da mehr Strahlen den gleichen Speicherblock benötigen, während eine anhängige Anforderung erfüllt wird, schiebt der L0-Cache 750 diese neuen Anforderungen in eine Anhängige-Anforderungen-Tabelle. Sobald eine bestimmte Cache-Zeile aus dem Hauptspeicher ausgelesen worden ist und gültig ist, können alle Strahlen, die auf diese Daten warten, dann in die Daten-Pipe abgeleitet werden.In the exemplary embodiments, each beam starts its traversal of the acceleration data structure from a point at which it is started by an SM 132 has requested. The L0 cache 750 finds ways to put rays behind certain blocks of memory. Since more beams need the same block of memory while a pending request is being met, the L0 cache shifts 750 these new requirements in a pending requirements table. As soon as a certain cache line has been read out of the main memory and is valid, all rays which are waiting for this data can then be derived into the data pipe.
Da irgendeine vom L0-Cache 750 verarbeitete Anforderung an Speicher im Auftrag eines bestimmten Strahls initiiert wird, erfolgt irgendein Auslesen aus übergeordnetem Speicher in den L0-Cache auch in Bezug auf einen bestimmten anfordernden Strahl. Zum Beispiel wird der erste Strahl, der nach einem bestimmten Complet aus Speicher verlangt, eine Anforderung durch den L0-Cache 750 initiieren, um dieses Complet aus übergeordnetem Speicher auszulesen. Diese Anforderung im Auftrag eines bestimmten Strahls wird in dem nicht einschränkenden Ausführungsbeispiel durch die Stapelverwaltungseinheit 740 in potenzieller Zusammenarbeit mit dem Complet-Scheduler auf Basis der für Aktivierung zur Verfügung stehenden Strahlen initiiert.Because any of the L0 cache 750 processed request to memory is initiated on behalf of a specific beam, some readout takes place from higher-level memory in the L0 cache, also with respect to a specific requesting beam. For example, the first ray that requests a certain complete of memory becomes a request through the L0 cache 750 Initiate in order to read this complete from higher-level memory. In the non-limiting embodiment, this request on behalf of a specific beam is carried out by the batch management unit 740 initiated in potential collaboration with the complete scheduler based on the beams available for activation.
Die Stapelverwaltungseinheit 740 sucht einen Strahl für Aktivierung aus, und dieser ausgewählte Strahl aktiviert und initiiert eine Anforderung nach einem Complet über den L0-Cache 750. In manchen Fällen bestimmt die Stapelverwaltungseinheit 740 möglicherweise, dass die Anforderung im Auftrag dieses bestimmten Strahls nicht nach einem Complet ist, sondern stattdessen der andere Datenpfad genutzt werden soll, um einen Strahl-Dreieck-Test und/oder eine Instanztransformation durchzuführen.The batch management unit 740 looks for a beam for activation, and this selected beam activates and initiates a request for a complete via the L0 cache 750 , In some cases, the batch manager determines 740 possibly that the request on behalf of this particular beam is not for a complete, but instead the other data path is to be used to carry out a beam-triangle test and / or an instance transformation.
Die Stapelverwaltungseinheit 740 wird diesen gleichen Prozess unabhängig für den nächsten Strahl wiederholen, der für Aktivierung zur Verfügung steht. Dieser nächste Strahl wird unabhängig aktiviert und erzeugt unabhängig seine eigene Speicheranforderung über den L0-Cache 750. In dem nicht einschränkenden Ausführungsbeispiel verwendet der L0-Cache 750 jedoch seine internen Statusinformationen, um zu bestimmen, ob der Cache bereits eine Anforderung nach den gleichen Daten an übergeordneten Speicher gesendet hat. Wenn der L0-Cache 750 bereits die gleichen Daten ausgelesen hat und diese Daten in einer Cache-Zeile des Daten-RAM 1208 (siehe unten) verfügbar sind, kann der L0-Cache diese natürlich dem anfordernden Prozess innerhalb der TTU 700 zur Verfügung stellen. In diesem Fall nehme man jedoch an, dass der L0-Cache 750 im Auftrag eines anderen Strahls eine Anforderung nach den gleichen Daten gestellt hat und die Daten noch nicht aus dem übergeordneten Speicher zurückerhalten hat, so dass die Daten noch nicht verfügbar und in einer Cache-Zeile gültig sind. In diesem Zeitpunkt registriert der L0-Cache 750 die neue Anforderung und verknüpft oder gruppiert den Strahl, der die neue Anforderung stellt, effektiv mit dem Strahl, der die vorherige Anforderung gestellt hat, da beide Strahlen die gleichen Daten anfordern.The batch management unit 740 will repeat this same process independently for the next beam that is available for activation. This next beam is activated independently and independently generates its own memory request via the L0 cache 750 , In the non-limiting embodiment, the L0 cache uses 750 however, its internal status information to determine whether the cache has already sent a request for the same data to higher-level storage. If the L0 cache 750 has already read the same data and this data in a cache line of the data RAM 1208 (see below) are available, the L0 cache can of course the requesting process within the TTU 700 provide. In this case, however, assume that the L0 cache 750 has made a request for the same data on behalf of another beam and has not yet received the data from the higher-level memory, so that the data are not yet available and are valid in a cache line. At this point the L0 cache registers 750 the new request and effectively links or groups the beam that makes the new request with the beam that made the previous request since both beams request the same data.
Der L0-Cache 750 kann auf diese Weise beliebig viele Strahlen miteinander verknüpfen oder gruppieren. Sobald die Daten ausgelesen sind und in einer Cache-Zeile gültig sind, kann der L0-Cache 750 alle diese gruppierten Strahlen zu der gleichen oder ungefähr der gleichen Zeit mit den Daten versorgen. Dieses Scheduling bietet höhere Effizienzgrade, auch wenn in dem nicht einschränkenden Ausführungsbeispiel die einzigen Strahlen, die jemals bestimmte Daten aus dem L0-Cache 750 empfangen, diejenigen Strahlen sind, die nach diesen bestimmten Daten verlangt haben.The L0 cache 750 can link or group any number of beams in this way. As soon as the data has been read and is valid in a cache line, the L0 cache can 750 supply all of these grouped beams with the data at the same or approximately the same time. This scheduling offers higher levels of efficiency, even if, in the non-limiting embodiment, the only rays ever specific data from the L0 cache 750 received, are those rays that have requested this particular data.
Somit wird in nicht einschränkenden Ausführungsbeispielen ein Strahl in den Cache kommen, der ein Complet designiert, gegen das der Strahl testen soll. Typischerweise wird ein Complet auf einer einzelnen Cache-Zeile ausgelesen. Als Antwort auf den Strahl-Complet-Test 710 erstellt die TTU 700 eine Anforderung an den Speicher 140, das Complet in den L0-Complet-Cache 752 auszulesen, so dass es für den Strahl-Complet-Test-Block 710 für diesen Strahl verfügbar ist. Es zeigt sich, dass andere Strahlen möglicherweise gegen genau die gleichen Complet-Daten testen wollen.Thus, in non-limiting embodiments, a beam will come into the cache that designates a complete against which the beam is to test. A complete is typically read out on a single cache line. In response to the beam complete test 710 created the TTU 700 a request to memory 140 , the complete in the L0 complete cache 752 read out so that it is for the beam complete test block 710 is available for this beam. It turns out that other beams may want to test against exactly the same complete data.
Um diese gemeinsame Nutzung der ausgelesenen Daten zu ermöglichen und unnötige zusätzliche Speicherauslesevorgänge zu minimieren, gruppiert das nicht einschränkende Ausführungsbeispiel Strahlen unter Verwendung eines Eintrags einer Gemeinsam-Anhängige-Adressen-Tabelle (PAT) 1206 (siehe unten). Wenn diese Complet-Daten in den L0-Complet-Cache 752 ausgelesen werden, plant der Complet-Cache 752 im Wesentlichen die Strahl-Complet-Tests für alle Strahlen, die auf diese Complet-Daten gewartet haben, indem er die Speicherzugriffsanforderungen des Strahl-Complet-Test-Blocks 710 alle zur gleichen Zeit oder ungefähr zur gleichen Zeit bedient. Diese Operationen könnten in manchen Beispiel-Implementierungen simultan parallel arbeiten, doch gibt es in dem in 9 gezeigten Beispiel möglicherweise nur eine begrenzte Anzahl von (z. B. zwei) Strahl-Complet-Tests 710, so dass manche geplante Strahl-Complet-Tests möglicherweise gleichzeitig durchgeführt werden, während andere möglicherweise für Durchführung der Reihe nach (z. B. direkt hintereinander), aber dennoch zeitnah (z. B. direkt hintereinander) zueinander geplant werden. Dieses Scheduling wird als Teil des Datenpfades durchgeführt (d. h. einfach dadurch, dass der Cache 750 die Daten für diese jetzt gruppierten Strahlen auf eine zeitlich kohärente Weise bereitstellt), anstatt dass Intervention durch einen SM 132, einen Explizit-Strahl-Scheduler oder andere Rückgabe an einen Client erforderlich ist.To enable this shared use of the read data and unnecessary To minimize additional memory reads, the non-limiting embodiment groups rays using an entry of a pending address table (PAT) 1206 (see below). If this complete data is in the L0 complete cache 752 the complete cache plans to be read out 752 essentially the beam complete test for all beams that have been waiting for this complete data by addressing the memory access requirements of the beam complete test block 710 all served at the same time or at about the same time. These operations could work simultaneously in parallel in some example implementations, but there is one in the 9 The example shown may only have a limited number (e.g. two) beam complete tests 710 , so that some scheduled beam complete tests may be performed simultaneously, while others may be scheduled to be performed sequentially (e.g., one after the other), but still in a timely manner (e.g., one after the other). This scheduling is done as part of the data path (ie simply by having the cache 750 provides the data for these now grouped beams in a time-coherent manner) rather than intervention by an SM 132 , an explicit beam scheduler or other return to a client is required.
TTU 700 kann einen Complet-Scheduler bereitstellen, doch kann das vom Cache 750 durchgeführte Scheduling für diesen Complet-Scheduler transparent sein und optimiert einfach die Leistungsfähigkeit des Cache in Bezug darauf, welche Sammlung von Strahlen auch immer der Complet-Scheduler für Ausführung plant. Insbesondere wird der Cache 750 der Ausführung von Strahlen, die die gleichen Daten benötigen, eine Zeitkohärenz zudiktieren, einfach indem er ihre individuellen unabhängigen Datenanforderungen ungefähr zu der gleichen Zeit bedient, und dies dann von Traversierungs-Iteration zu Traversierungs-Iteration fortsetzen, um die Effizienz des Cache beim Bedienen von Datenanforderungen für alle Strahlen zu erhöhen, die die TTU 700 gegenwärtig behandelt. Das Ziel ist nicht, die Speicher-Leistungsfähigkeit oder die irgendeinem bestimmten Strahl zugeordnete Ausführung zu beschleunigen, sondern die Ausführung von Strahlen zu gruppieren, die die gleichen Teile der Beschleunigungsdatenstruktur traversieren, so dass der Streaming-Cache 750 alle diese Strahlen mit den gleichen Daten bedienen kann, die der Cache aus dem Speichersystem (z. B. einem LI-Cache) erhält, um die Latenz zu reduzieren und gleichzeitig die Größe des Streaming-Cache zu minimieren.TTU 700 can provide a complete scheduler, but can do that from the cache 750 performed scheduling for this complete scheduler and simply optimizes the performance of the cache in relation to whatever collection of rays the complete scheduler plans to execute. In particular, the cache 750 To dictate time coherency to the execution of beams that need the same data simply by serving their individual independent data requests at about the same time and then proceeding from traversal iteration to traversal iteration to increase the efficiency of the cache in serving Increase data requirements for all rays that the TTU 700 currently being treated. The goal is not to speed up memory performance or the execution associated with any particular beam, but to group the execution of beams that traverse the same parts of the acceleration data structure so that the streaming cache 750 can serve all of these beams with the same data that the cache receives from the storage system (e.g., an LI cache) to reduce latency while minimizing the size of the streaming cache.
TTU-Abfragen liefern Anfangs-Gruppierungen von Strahl-OperationenTTU queries provide initial groupings of beam operations
Der L0-Cache 750 kann darin effektiv sein, Strahlen auf diese Weise zu gruppieren, indem er die Zeitkohärenz der Traversierung von bestimmten Teilen der Beschleunigungsdatenstruktur von mehreren Strahlen ausnutzt, die die SMs 132 der TTU 700 vorlegen. Diese Zeitkohärenz beginnt mit der Abfrage selbst. Eine Abfrage an die TTU 700 von einem SM 132 wird typischerweise aus einer Anzahl von Strahlen bestehen (z. B. 32 verschiedene Strahlen in manchen Ausführungsformen). Dies bedeutet, dass die TTU 700 ab einer bestimmten Anzahl von Strahlen an der gleichen Stelle der Beschleunigungsdatenstruktur (z. B. dem Wurzelknoten des Begrenzungsvolumenhierarchie-Baums) beginnt. Diese Anfangs-Strahlen sind „Primärstrahlen“, d. h. sie starten typischerweise von einer Standpunkt-Position und werden in häufig ähnlichen Richtungen in die dreidimensionale Szene geschossen. Diese Strahlen werden häufig ähnliche Anfangs-Pfade durch die hierarchische Datenstruktur nehmen, da sie von der gleichen Standpunkt-Position innerhalb der Szene ausstrahlen und in ähnlichen Richtungen in die Szene geschossen werden. Es ist nicht garantiert, dass sie ähnliche Traversierungspfade nehmen, aber sie werden es wahrscheinlich tun.The L0 cache 750 can be effective in grouping beams in this way by taking advantage of the time coherency of traversing certain parts of the acceleration data structure of multiple beams that the SMs 132 the TTU 700 submit. This time coherence begins with the query itself. A query to the TTU 700 from an SM 132 will typically consist of a number of rays (e.g. 32 different rays in some embodiments). This means that the TTU 700 starts from a certain number of beams at the same point in the acceleration data structure (e.g. the root node of the limitation volume hierarchy tree). These initial rays are “primary rays”, ie they typically start from a standpoint position and are shot into the three-dimensional scene in often similar directions. These rays will often take similar initial paths through the hierarchical data structure because they emanate from the same viewpoint position within the scene and will be shot into the scene in similar directions. They are not guaranteed to take similar traversal paths, but they will likely do so.
Der TTU-L0-Cache bewahrt und nutzt die Anfangs-Strahl-Operations-GruppierungThe TTU-L0 cache maintains and uses the initial beam operations grouping
Da der SM 132 diese Strahlen anfänglich gruppiert, um gleichzeitig in die TTU 700 abgeschossen zu werden, sendet die TTU die Complet-Anforderung für diese Strahlen direkt hintereinander an den L0-Cache 750. Der L0-Cache 750 sieht also diese Complet-Anforderungen von diesen verschiedenen Strahlen mehr oder weniger als eine Gruppe kommen, bewahrt diese Gruppierung, wenn Speicherwerte aus dem übergeordneten Speicher ausgelesen werden, und bewahrt diese Gruppierung von Iteration zu Iteration, wenn die Strahlen die Beschleunigungsdatenstruktur weiter traversieren.Since the SM 132 these beams are initially grouped to simultaneously enter the TTU 700 to be shot, the TTU sends the complete request for these beams to the L0 cache one after the other 750 , The L0 cache 750 therefore, if these complete requests come from these different beams more or less than a group, this grouping is retained when memory values are read from the higher-level memory, and this grouping is maintained from iteration to iteration as the beams continue to traverse the acceleration data structure.
Wenn die Strahlen zu divergieren beginnen (d. h., sie nehmen nicht mehr den gleichen Pfad durch die Datenhierarchie, weil sie auf unterschiedliche Objekte oder andere Teile der Hierarchie treffen), dann wird die vom L0-Cache 750 versuchte Gruppierung weniger effektiv. Eine solche Divergenz führt zu Singletons („Einzelstücken“), bei denen es nur einen Strahl in einer Gruppe gibt, der auf ein bestimmtes aus den höheren Speicherebenen auszulesendes Complet wartet. Für Primärstrahlen-Traversierung ist das Singleton-Verhältnis relativ niedrig. Beim Modellieren von Reflexionen, bei denen die Primärstrahlen von unterschiedlichen Oberflächen der Szene reflektiert worden sind und von den verschiedenen Objekten in der Szene in zufälligen Richtungen durch die Szene prallen, wird die Traversierung jedoch viel weniger kohärent, und das Verhältnis von Singletons zu gruppierten Strahlen wächst. Doch auch wenn dies geschieht, da alle Strahlen immer noch die gleiche BVH traversieren, beginnen alle Strahlen ihre Traversierungen immer noch an der Spitze des Baums und erfordern daher mindestens das gleiche Anfangs-Complet. Somit kann der L0-Cache 750 auch im Falle von Traversierung sekundärer oder reflektierter Strahlen noch von einer gewissen Kohärenz zwischen gruppierten Strahlen profitieren, wenn sie nahe der Spitze der hierarchischen Datenstruktur des BVH traversieren. Während diese Sekundärstrahlen beginnen, nach unten in die hierarchische Datenstruktur zu traversieren, beginnt die Kohärenz verloren zu gehen, und das Verhältnis der Singletons wird viel höher.When the rays begin to diverge (that is, they no longer take the same path through the data hierarchy because they encounter different objects or other parts of the hierarchy), then that from the L0 cache 750 tried grouping less effectively. Such a divergence leads to singletons ("single pieces"), in which there is only one beam in a group, which is waiting for a certain complete to be read from the higher storage levels. For primary beam traversal, the singleton ratio is relatively low. When modeling reflections in which the primary rays have been reflected from different surfaces of the scene and from the different objects in the scene in random directions through the Scene, the traversal becomes much less coherent and the ratio of singletons to grouped rays increases. But even if this happens because all rays still traverse the same BVH, all rays still start traversing at the top of the tree and therefore require at least the same initial completion. So the L0 cache 750 Even in the case of traversing secondary or reflected rays, benefit from a certain coherence between grouped rays if they traverse near the top of the hierarchical data structure of the BVH. As these secondary beams begin to traverse down into the hierarchical data structure, coherence begins to be lost and the singletons ratio becomes much higher.
Der TTU-L0-Cache entdeckt Strahl-Operationen, die den gleichen oder ähnlichen Traversierungspfaden durch eine Begrenzungsvolumenhierarchie folgenThe TTU-L0 cache discovers beam operations that follow the same or similar traversal paths through a bounding volume hierarchy
In dem nicht einschränkenden Ausführungsbeispiel ist es die Gruppierung im L0-Cache 750 selbst, die die Kohärenz fördert, nicht irgendein explizites Scheduling durch die Stapelverwaltungseinheit 740 oder gar durch SMs 132. Wenn die SM-Abfragen mit einer gewissen Kohärenz beginnen, tendiert der L0-Cache 750 dazu, die Kohärenz zu erkennen und zu bewahren, und nutzt sie als eine Möglichkeit zur Steigerung der Speicherzugriffseffizienz. Der L0-Cache 750 ist jedoch im Stande, Kohärenz unabhängig von der in Abfragen des SM 132 enthaltenen Kohärenz zu entdecken. Zum Beispiel ist der L0-Cache 750 im Stande, Datenkohärenz für Strahlen zu entdecken, die alle auf die Spitze der hierarchischen Datenstruktur zugreifen, auch wenn die Pfade, die diese Strahlen schließlich durch die Datenstruktur nehmen werden, sehr divergent und inkohärent sind.In the non-limiting embodiment, it is the grouping in the L0 cache 750 itself, which promotes coherence, not some explicit scheduling by the batch manager 740 or even through SMs 132 , If the SM queries start with some coherence, the L0 cache tends 750 to recognize and maintain coherence and use it as a way to increase memory access efficiency. The L0 cache 750 is, however, able to achieve coherence independently of that in SM queries 132 discover the coherence contained. For example, the L0 cache 750 able to discover data coherence for rays that all access the top of the hierarchical data structure, even if the paths that these rays will eventually take through the data structure are very divergent and incoherent.
In dem nicht einschränkenden Ausführungsbeispiel führt jede SM 132 eine Vielzahl von Threads aus, wie z. B. 32 Threads, wobei jeder Thread einen bestimmten Strahl verwaltet. Wenn der SM 132 32 Threads ausführt, umfasst seine Abfrage an die TTU 700 einen Stapel von 32 Strahlen. Sobald sich diese 32 Strahlen innerhalb der TTU 700 befinden, werden sie unabhängig voneinander verarbeitet, bis es an der Zeit ist, die Ergebnisse von der TTU wieder an den anfordernden SM 132 zurückzugeben. Die TTU 700 kann diese Strahlen in beliebiger Reihenfolge und mit beliebiger Staffelung verarbeiten, wobei die Haupt-Zeitbeschränkung darin besteht, dass die TTU die Berichte anfordernder SMs 132 über Strahl-Traversierungs-Ergebnisse in derselben Gruppierung wie die ursprünglichen Anforderungen sendet.In the non-limiting embodiment, each SM leads 132 a variety of threads, such as B. 32 Threads, each thread managing a specific ray. If the SM 132 32 Threads executes includes its query to the TTU 700 a stack of 32 Rays. As soon as this 32 Rays within the TTU 700 they are processed independently of each other until it is time to send the results back to the requesting SM from the TTU 132 return. The TTU 700 can process these beams in any order and with any staggering, the main time constraint being that the TTU reports the SMs requesting 132 sends beam traversal results in the same grouping as the original requests.
In dem nicht einschränkenden Ausführungsbeispiel gibt es mehrere SMs 132, und in manchen Ausführungsformen bedient eine einzelne TTU 700 mehrere (z. B. zwei) SMs 132. In dem nicht einschränkenden Ausführungsbeispiel verarbeitet die TTU 700 Strahl-Anforderungen von diesen zwei verschiedenen SMs 132. Diese SMs 132 koordinieren ihre jeweiligen Strahl-Anforderungen nicht in Form von Zeitkohärenz, doch kann der TTU-L0-Cache 750 entdecken, dass von einem SM 132 abgeschossene Strahlen dem gleichen Traversierungspfad folgen wie von einem anderen SM abgeschossene Strahlen, und kann Strahl-Anforderungen von verschiedenen SMs gruppieren, um das Auslesen von Daten für all diese Strahlen über eine Folge von Datenstruktur-Traversierungs-Iterationen effizienter zu machen. Der L0-Cache 750 ist in dem nicht einschränkenden Ausführungsbeispiel somit im Stande, Kohärenz zwischen Strahlen in verschiedenen Abfragen von verschiedenen SMs 132 zu entdecken und diese Abfragen effizienter zu bedienen, und zwar basierend darauf, dass der L0-Cache 750 Kohärenz zwischen diesen verschiedenen Strahlen ausnutzt - Kohärenz, welche die SMs 132 selbst nicht erkannt oder der TTU 700 mitgeteilt haben. In dem nicht einschränkenden Ausführungsbeispiel kann es Hunderte von Strahlen geben, die gleichzeitig aktiv sind, und es ist Sache der TTU, all diese Strahlen so effizient wie möglich zu bedienen. Der L0-Cache 750 wirkt somit effektiv als ein Scheduler, indem er als Folge der Gruppierung, die der L0-Cache durchführt, Kohärenz fördert.In the non-limiting embodiment, there are multiple SMs 132 , and in some embodiments serves a single TTU 700 several (e.g. two) SMs 132 , In the non-limiting embodiment, the TTU processes 700 Beam requirements from these two different SMs 132 , These SMs 132 do not coordinate their respective beam requirements in the form of time coherence, but the TTU-L0 cache can 750 discover that from an SM 132 fired beams follow the same traversal path as beams fired by another SM, and can group beam requests from different SMs to make reading data for all of these beams more efficient over a series of data structure traversal iterations. The L0 cache 750 Thus, in the non-limiting embodiment, is able to achieve coherence between beams in different queries from different SMs 132 to discover and serve these queries more efficiently, based on the fact that the L0 cache 750 Exploits coherence between these different beams - coherence which the SMs 132 itself not recognized or the TTU 700 have communicated. In the non-limiting embodiment, there can be hundreds of beams that are active at the same time, and it is up to the TTU to operate all of these beams as efficiently as possible. The L0 cache 750 thus acts effectively as a scheduler by promoting coherence as a result of the grouping that the L0 cache performs.
Nicht einschränkende Beispiel-Gruppierungs-AnalogieNon-limiting example grouping analogy
Als grobe Analogie denke man an eine Cafeteria-Speisenservierreihe, die knapp mit Speisenservierpersonal besetzt ist. Die Speisenservierreihe ist so gestaltet, dass verschiedene Speisen von verschiedenen Servierstationen serviert werden: Fleisch wird von einer Fleisch-Servierstation serviert, Fisch wird von einer Fisch-Servierstation serviert, und vegetarische Speisen werden von einer Vegetarisch-Servierstation serviert. Aber der Chef überbringt dem Servierer die schlechte Nachricht: Zwei andere Mitarbeiter haben sich krank gemeldet, und nur ein Servierer muss nun von allen drei Stationen aus selbst bedienen. Da Servierer knapp sind, ist es nicht möglich, jeder Servierstation einen anderen Servierer zuzuordnen. Schlimmer noch, jede andere Speisen-Auswahl erfordert, dass der einzelne Speisenservierer zu einer anderen Servierstation geht und andere Servierutensilien aufnimmt.As a rough analogy, think of a cafeteria food service row that is barely staffed with food service staff. The food serving range is designed to serve different dishes from different serving stations: meat is served from a meat serving station, fish is served from a fish serving station, and vegetarian dishes are served from a vegetarian serving station. But the boss brought the bad news to the server: two other employees reported sick and only one server now has to serve himself from all three stations. Since servers are scarce, it is not possible to assign a different server to each serving station. Worse, any other food selection requires that the individual food server go to another serving station and pick up other serving utensils.
Wenn die Gäste in der Reihenfolge „wer zuerst kommt, mahlt zuerst“ bedient werden, wird der Servierer ständig verschiedene Servierutensilien ablegen und aufnehmen und zwischen den Servierstationen wechseln. Angenommen, der erste Gast bestellt Fleisch, und der Servierer steht an der Vegetarisch-Station. Der Servierer muss das Vegetarisch-Servierutensil ablegen, zur Fleisch-Station gehen, das Fleisch-Servierutensil aufnehmen und dem Gast Fleisch servieren. Der nächste Gast in der Reihe wünscht möglicherweise ebenfalls Fleisch, das der Servierer sehr effizient servieren kann, da er bereits an der Fleisch-Station ist. Aber nehmen wir an, der nächste Gast wünscht Fisch. Der Servierer muss das Fleisch-Servierutensil ablegen, zur Fisch-Station gehen, das Fisch-Servierutensil aufnehmen und den Wunsch des Gastes nach Fisch erfüllen. In der Zwischenzeit wird die Servierreihe immer länger, mit hungrigen Gästen, die darauf bedacht sind, ihre Gerichte zu bekommen.If the guests are served in the order of "first come, first served", the server will keep storing and picking up various serving utensils and switching between the serving stations. Suppose the first guest orders meat and the server is at the vegetarian station. The server must put down the vegetarian serving utensil to the meat station go, pick up the meat serving utensil and serve meat to the guest. The next guest in the row may also want meat that the server can serve very efficiently, since he is already at the meat station. But let's say the next guest wants fish. The server must put down the meat serving utensil, go to the fish station, pick up the fish serving utensil and fulfill the guest's request for fish. In the meantime, the serving line is getting longer and longer, with hungry guests eager to get their dishes.
Der Servierer bekommt dann eine gute Idee. Er ruft zu den Gästen und bittet sie, drei verschiedene Reihen zu bilden: eine für Fleisch, eine zweite für Fisch und eine dritte für Vegetarier. Der Servierer serviert Fleisch an die ersten zehn Gäste in der Fleischreihe in schneller Folge; dann geht er zur Fisch-Station, um die ersten zehn Gäste zu bedienen, die auf Fisch warten; und dann geht er zur Vegetarisch-Station, um den dort wartenden Gästen vegetarische Gerichte zu servieren. Durch Gruppieren der Gäste auf Basis der Speisen, auf die sie warten, hat der Servierer seine Gesamteffizienz erhöht und hat effektiv geplant, wann die Gäste bedient werden (es werden Fleisch-Esser bedient, dann Meeresfrüchte-Esser, dann Vegetarier, usw.). Einzelne Gäste vorne in der Reihe warten vielleicht länger, um ihre individuellen Gerichte zu erhalten, als wenn alle in der Reihenfolge „wer zuerst kommt, mahlt zuerst“ bedient würden, aber der Gesamteffekt ist, dass alle Gäste im Durchschnitt schneller und effizienter von einem weniger hektischen Speisenservierer bedient werden.The server then gets a good idea. He calls to the guests and asks them to form three different rows: one for meat, a second for fish and a third for vegetarians. The server serves meat to the first ten guests in the meat line in quick succession; then he goes to the fish station to serve the first ten guests waiting for fish; and then he goes to the vegetarian station to serve vegetarian dishes to the guests waiting there. By grouping the guests based on the food they are waiting for, the server has increased their overall efficiency and effectively planned when the guests will be served (serving meat eaters, then seafood eaters, then vegetarians, etc.). Individual guests in the front row may wait longer to receive their individual dishes than if everyone were served in the "first come, first served" order, but the overall effect is that all guests average faster and more efficiently from one less hectic food servers are served.
In Weiterführung der obigen Analogie sei angenommen, dass alle Gäste Anspruch auf Nachschlag haben. In diesem Wissen modifiziert der Servierer seine Strategie. Als erste Hilfe beschließt der Servierer nun, alle Vegetarier in der Reihe zu bedienen, sobald das Tablett mit vegetarischen Speisen aus der Küche kommt, und erst nachdem alle Vegetarier bedient worden sind, wechselt er die Station. Er bedient dann alle Meeresfrüchte-Esser, bevor er irgendwelche Fleisch-Esser bedient. Da die Vegetarier alle anfänglich ungefähr zur gleichen Zeit bedient worden sind, werden sie alle ungefähr zur gleichen Zeit für ihren Nachschlag erscheinen. Dies bedeutet, dass auf Basis des Zeitpunkts, zu dem die Gäste in der Cafeteria ihre Wünsche nach Nachschlag äußern, der Servierer im Stande sein wird, eine ähnliche Strategie zu verfolgen, nämlich allen Vegetariern ihren Nachschlag von der Vegetarisch-Station aus zu servieren, dann allen Fisch-Esser ihren Nachschlag von der Fisch-Servierstation aus zu servieren und schließlich allen Fleisch-Essern ihren Nachschlag von der Fleisch-Servierstation aus zu servieren - was die Anzahl der nötigen Wechsel des Servierers von einer Servierstation zur anderen minimiert, obwohl der Servierer keine explizite Kontrolle darüber hat, wann irgendein Gast für Nachschlag kommt. Der Servierer kommt zwar gerne Gästen entgegen, die zunächst Fisch bestellt haben, jetzt aber vegetarischen Nachschlag wollen, doch hat der Servierer den Gästen auf Basis ihrer ersten Wünsche effektiv eine zeitliche Gruppierung zudiktiert, so dass sie natürlich auf eine zeitlich kohärente Weise für Nachschlag erscheinen werden - wodurch die Effizienz des Servierers, das gesamte Gericht einschließlich eines oder mehrerer Nachschläge zu servieren - und im Falle der TTU 700 mit einer großen Beschleunigungsdatenstruktur - weiter erhöht wird.Continuing the analogy above, it is assumed that all guests are entitled to a reference. With this knowledge, the server modifies his strategy. As a first aid, the server decides to serve all the vegetarians in the row as soon as the tray with vegetarian dishes comes out of the kitchen, and only changes the station after all the vegetarians have been served. He then serves all of the seafood eaters before serving any meat eater. Since the vegetarians were all initially served at about the same time, they will all appear for their reference at about the same time. This means that based on the time when the guests in the cafeteria express their desires for reference, the server will be able to follow a similar strategy, namely to serve all vegetarians from the vegetarian station, then to serve all fish eaters their reference from the fish serving station and finally to serve all meat eaters their reference from the meat serving station - which minimizes the number of times the server needs to be changed from one serving station to another, although the server does not has explicit control over when any guest comes for reference. The server will be happy to accommodate guests who initially ordered fish, but now want a vegetarian lookup, but based on their initial wishes, the server has effectively dictated a time grouping to the guests, so that they will of course appear for a lookup in a coherent manner - which increases the efficiency of the server to serve the entire dish including one or more lookups - and in the case of the TTU 700 with a large acceleration data structure - is further increased.
Detaillierteres Beispiel für Aufbau & Implementierung des Streaming-Cache-Speichers 750More detailed example of the structure & implementation of the streaming cache 750
12 zeigt ein nicht einschränkendes Ausführungsbeispiel einer Implementierung des Cache-Speichers 750. In diesem Beispiel umfasst die Struktur des Cache-Speichers 750 eine Anhängige-Anforderungen-Tabelle (PRT) 1202, eine Etikett-Struktur (TAG) 1204, eine Anhängige-Adressen-Tabelle (PAT) 1206, einen Daten-RAM (DAT) 1208 und eine Logikschaltung 1210. 12 shows a non-limiting embodiment of an implementation of the cache memory 750 , In this example, the structure of the cache includes 750 a pending requirements table (PRT) 1202 , a label structure (TAG) 1204 , a pending address table (PAT) 1206 , a data RAM (DAT) 1208 and a logic circuit 1210 ,
Die Logikschaltung 1210 weist jeder Anforderung an den Cache 750 einen Eintrag in der PRT-Tabelle 1202 zu. Jeder PRT-Tabelle-1202-Eintrag hält auf Anforderung Metadaten und hat einen Zeiger auf einen einzelnen PAT-1206-Eintrag. In dem nicht einschränkenden Ausführungsbeispiel empfängt jede Anforderung, die dem L0-Cache 750 vorgelegt wird, einen Eintrag in der Anhängige-Anforderungen-Tabelle 1202. Die Anhängige-Anforderungen-Tabelle 1202 wird somit zur Unterscheidung eindeutiger Anforderungen verwendet. Der PRT-Tabelle-1202-Eintrag bleibt gültig, bis der Cache die Anforderung erfüllt, indem er die Daten für diese Anforderung auf den angefügten Datenpfad sendet.The logic circuit 1210 assigns every request to the cache 750 an entry in the PRT table 1202 to. Each PRT table 1202 entry holds metadata on request and has a pointer to a single PAT 1206 entry. In the non-limiting embodiment, each request received by the L0 cache 750 an entry is submitted in the pending requirements table 1202 , The pending requirements table 1202 is therefore used to distinguish clear requirements. The PRT table 1202 entry remains valid until the cache fulfills the request by sending the data for that request to the attached data path.
Alle Anforderungen an den Cache 750 prüfen die Etiketten (TAG) 1204 auf einen vorherigen gültigen Eintrag an derselben Adresse und in demselben Kontext. Die TAG 1204 kann mehrwegig, mengenassoziativ oder direkt abgebildet sein, wie der Fachmann erkennt. Wie in 12 gezeigt, kann die TAG 1204 zum Beispiel einen Eintrag entsprechend jeder Datenzeile des Daten-RAM 1208 aufweisen, wobei das Etikett die Hauptspeicheradresse („ADDR“) des in der Cache-Zeile gespeicherten Datenblocks, einen Offset oder Zeiger („OFF“) in den Daten-RAM 1208, der anzeigt, welche der Datenzeilen den von dieser Speicheradresse ausgelesenen Datenblock speichert, und ein Gültig-(„V“)-Bit enthält, das anzeigt, ob die Daten in der entsprechenden Cache-Zeile gültig sind. In dem nicht einschränkenden Ausführungsbeispiel ist der Cache-Speicher 750 ein Nur-LeseSpeicher, so dass keine Speichermarke in der TAG 1204 erforderlich ist, die eine Notwendigkeit anzeigen würde, modifizierte Daten in den Hauptspeicher zurückzuschreiben, doch könnten in anderen Ausführungsformen eine solche Speichermarke und eine Zurückschreibfähigkeit vorgesehen werden.All cache requirements 750 check the labels (TAG) 1204 to a previous valid entry at the same address and in the same context. The TAG 1204 can be multi-way, quantity-associative or directly mapped, as the expert recognizes. As in 12 shown, the TAG 1204 for example, an entry corresponding to each row of data in the data RAM 1208 have, the label the main memory address ("ADDR") of the data block stored in the cache line, an offset or pointer ("OFF") in the data RAM 1208 , which indicates which of the data lines stores the data block read from this memory address and contains a valid (“V”) bit, which indicates whether the data in the corresponding cache line is valid. In the non-limiting embodiment, the cache is 750 a read-only memory, so no memory mark in the TAG 1204 is necessary that indicate a need would write modified data back to main memory, but in other embodiments such a memory tag and writeability could be provided.
Treffer- und Fehlschlag-ErkennungHit and failure detection
Wie in 13 gezeigt, ist in Abhängigkeit vom Status das Ergebnis einer TAG-1204-Prüfung einer neuen Adressenanforderung an den Cache 750 entweder:
- (1) Datentreffer ohne vorherige Anforderungen an die gleichen im Cache residenten Daten (Ausgang „Nein“ zum Entscheidungsblock 1256),
- (2) Datentreffer mit vorheriger bzw. vorherigen Anforderung(en) an die gleichen im Cache residenten Daten (Ausgang „Ja“ zum Entscheidungsblock 1256),
- (3) Datenfehlschlag mit vorheriger bzw. vorherigen Anforderung(en) an die gleichen im Cache residenten Daten (Ausgang „Ja“ zum Entscheidungsblock 1258), oder
- (4) Datenfehlschlag ohne vorherige Anforderungen an die gleichen im Cache residenten Daten (Ausgang „Nein“ zum Entscheidungsblock 1258).
As in 13 shown, depending on the status, is the result of a TAG-1204 check of a new address request to the cache 750 either: - (1) Data hit without previous requests for the same data residing in the cache (exit "No" to the decision block 1256 )
- (2) Data hit with previous or previous request (s) for the same data residing in the cache (output "Yes" to the decision block 1256 )
- (3) Data failure with previous or previous request (s) for the same data residing in the cache ("Yes" output to the decision block 1258 ), or
- (4) Data failure without previous requests for the same data residing in the cache (exit "No" to the decision block 1258 ).
Ein Daten-„Treffer“ bedeutet hier, dass gültige Daten als Antwort auf die Anforderung bereits im Daten-RAM 1208 resident sind. Ein Daten-„Fehlschlag“ bedeutet, dass gültige Daten als Antwort auf die Anforderung nicht bereits im Daten-RAM 1208 resident sind und aus höheren Speicherebenen ausgelesen werden müssen. Ein „Treffer“ oder „Fehlschlag“ wird typischerweise durch Vergleichen der Speicheradresse der eingehenden Anforderung mit den in der TAG 1204 gespeicherten Speicheradressen bestimmt.A data “hit” here means that valid data in response to the request is already in the data RAM 1208 are resident. A data "failure" means that valid data in response to the request is not already in the data RAM 1208 are resident and must be read from higher memory levels. A "hit" or "failure" is typically obtained by comparing the memory address of the incoming request with that in the TAG 1204 stored memory addresses determined.
In den Fällen 1 und 4 wird ein TAG-1204-Eintrag zugewiesen (siehe unten) (Blöcke 1262, 1266), der möglicherweise einen vorherigen Etikett-Eintrag hinauswirft. Ein Etikett-Eintrag bleibt gültig, bis er entweder verdrängt entfernt wird oder der zugehörige PAT-1206-Eintrag und Daten-RAM-1208-Eintrag ungültig gemacht werden. Das heißt, ein Etikett-Eintrag muss nicht für die Länge der Anforderung gültig sein, die ihn erzeugt hat. Manche Beispiel-Implementierungen könnten die TAG-1204- und PAT-1206-Einträge miteinander verknüpfen. In diesem Fall bleibt der Etikett-Eintrag gültig, während der PAT-Eintrag gültig ist und/oder der Daten-RAM gültig ist.In the cases 1 and 4 a TAG-1204 entry is assigned (see below) (blocks 1262 . 1266 ), which may throw out a previous label entry. A label entry remains valid until it is either removed or the associated PAT 1206 entry and data RAM 1208 entry are invalidated. That is, a label entry need not be valid for the length of the request that created it. Some example implementations could link the TAG-1204 and PAT-1206 entries together. In this case, the label entry remains valid while the PAT entry is valid and / or the data RAM is valid.
Ein PAT-1206-Eintrag wird nur in den Fällen 1 und 4 oben zugewiesen (Blöcke 1260, 1264). Der PAT-1206-Eintrag enthält alle Informationen, die erforderlich sind, um Daten von anderen Ebenen der Cache-Hierarchie anzufordern und nicht eindeutige Daten den angefügten Datenpfad entlang an den Rest der TTU 700 zu senden.A PAT-1206 entry is only in those cases 1 and 4 assigned above (blocks 1260 . 1264 ). The PAT-1206 entry contains all of the information required to request data from other levels of the cache hierarchy and non-unique data along the attached data path to the rest of the TTU 700 to send.
In dem Ausführungsbeispiel erzeugt die Anhängige-Adressen-Tabelle (PAT) 1206 die eindeutigen Gruppen für die eindeutigen Adressen, die von den anderen Speicherebenen angefordert werden. Für jede eindeutige Adresse gibt es einen Eintrag in der Anhängige-Adressen-Tabelle 1206 für jede Anforderung, die für diese Adresse innerhalb des Cache 750 in irgendeinem Zeitpunkt aktiv ist. Die TAG 1204 ordnet eine Adresse einem gegenwärtigen Eintrag in der Anhängige-Adressen-Tabelle 1206 zu. Mit dem TAG-1204-Zugriff ist es möglich, ohne vorherige Anforderung an die gleiche im Cache 750 residente Adresse einen Datentreffer von etwas zu haben, das in dem Daten-RAM 1208 resident ist. Diese Art von Anforderung erlaubt die Zuweisung sowohl eines PRT-1202-Eintrags als auch eines PAT-1206-Eintrags.In the embodiment, the pending address table (PAT) creates 1206 the unique groups for the unique addresses requested by the other storage levels. There is an entry in the pending address table for each unique address 1206 for every request for that address within the cache 750 is active at any time. The TAG 1204 maps an address to a current entry in the pending address table 1206 to. With TAG-1204 access it is possible to cache the same without prior request 750 resident address to have a data hit of something in the data RAM 1208 is resident. This type of request allows both a PRT-1202 entry and a PAT-1206 entry to be assigned.
Bei Zuweisung wird der TAG-1204-Eintrag mit einem Zeiger auf den PAT-1206-Eintrag (Blöcke 1262, 1266) aktualisiert, so dass nachfolgende Anforderungen dieses Treffers (TAG-Prüfungsergebnisfälle 2 und 3 oben) in derselben Gruppe zugeordnet werden können. Manche Implementierungen könnten die TAG-1204 und PAT-1206-Einträge miteinander verknüpfen. Mehrere PRT-1202-Einträge können sich auf den gleichen PAT-1206-Eintrag beziehen. Der PAT-1206-Eintrag bleibt gültig, bis alle zugewiesenen PRT-1202-Einträge, die sich auf ihn beziehen, geplant worden sind.When assigned, the TAG-1204 entry is pointered to the PAT 1206 -Entry (blocks 1262 . 1266 ) updated so that subsequent requirements of this hit (TAG test result cases 2 and 3 above) can be assigned to the same group. Some implementations could use the TAG-1204 and PAT- 1206 - Link entries together. Multiple PRT-1202 entries can refer to the same PAT-1206 entry. The PAT-1206 entry remains valid until all assigned PRT-1202 entries related to it have been scheduled.
Gruppen von im PRT 1202 verfolgten Anforderungen, die dem gleichen PAT-1206-Eintrag zugewiesen sind, werden hierin als „PAT-Gruppen“ bezeichnet. Datenanforderungen an andere Ebenen des Cache erfolgen auf Basis des Inhalts des PAT-1206-Eintrags. Die zurückkommenden Daten werden im Daten-RAM (DAT) 1208 gespeichert. Der DAT 1208 verwendet eine Zuweisung-bei-Rückgabe-Politik. In einem Ausführungsbeispiel wird, wenn es keine verfügbaren Einträge im Daten-RAM 1208 gibt, die Antwort ignoriert (fallengelassen), und der Cache 750 stellt eine neue Anforderung an übergeordneten Speicher. Um Fortschritt zu gewährleisten, werden Daten nur einige wenige Male fallengelassen, bevor alle neuen Anforderungen zurückgehalten werden, bis die Daten zurückkommen und einen gültigen Eintrag finden (siehe unten).Groups of in the PRT 1202 Tracked requests associated with the same PAT-1206 entry are referred to herein as "PAT groups". Data requests to other levels of the cache are made based on the contents of the PAT-1206 entry. The returning data is stored in the data RAM (DAT) 1208 saved. The DAT 1208 uses an assignment-on-return policy. In one embodiment, if there are no available entries in the data RAM 1208 there, the answer ignored (dropped), and the cache 750 makes a new request to higher-level storage. To ensure progress, data is dropped only a few times before any new requests are withheld until the data comes back and finds a valid entry (see below).
Wie oben erläutert, ist eine andere Art von Anforderung ein Datentreffer, bei dem eine vorherige Anforderung der gleichen Daten bereits im Cache resident ist. Dies bedeutet, dass eine vorherige Anforderung bereits einen PAT-1206-Eintrag zugewiesen hat. In diesem Fall muss der Cache 750 keine zusätzliche Anforderung stellen, sondern nur erlauben, dass die gegenwärtige Anforderung von der zuvor gestellten Anforderung Huckepack genommen wird. In diesem Fall wird der dieser letzten Anforderung entsprechende PRT-1202-Eintrag geschrieben, um einen Zeiger auf den PAT-1206-Eintrag bereitzustellen, der bereits zuvor angefordert worden ist.As explained above, another type of request is a data hit where a previous request for the same data is already resident in the cache. This means that a previous request has already assigned a PAT-1206 entry. In this case, the cache 750 don't make an additional requirement, just allow the current request to be piggybacked from the previous request. In this case, the PRT-1202 entry corresponding to this last request is written to provide a pointer to the PAT-1206 entry that was previously requested.
Eine dritte Option für das Etikett ist ein Datenfehlschlag mit der vorherigen Anforderung nach den gleichen, bereits im Cache vorhandenen Daten. Dies bedeutet, dass die vorherige Anforderung fehlgeschlagen ist, und der Cache 750 muss die Anforderung bis zum Speicher senden, um die Daten aus dem Speicher auszulesen. In diesem Fall nimmt die gegenwärtige Anforderung einfach jene vorherige Anforderung bis zum Speicher Huckepack. Eine neue Speicheranforderung wird nicht gestellt, und der PRT-1202-Eintrag wird einfach der vorherigen Anforderung zugewiesen.A third option for the label is a data failure with the previous request for the same data already in the cache. This means that the previous request failed and the cache 750 must send the request to memory to read the data from memory. In this case, the current request simply piggybacks that previous request to memory. A new memory request is not made and the PRT-1202 entry is simply assigned to the previous request.
Im Falle eines Datenfehlschlags ohne vorherige Anforderung stellt die Anforderung, die einen Fehlschlag erzeugt, eine Anforderung an die Speicherhierarchie. Sie weist einen PAT-1206-Eintrag und einen PRT-1202-Eintrag zu. Schließlich werden die Daten aus dem Speicher ausgelesen und im Daten-RAM 1208 gespeichert. Wenn dies geschieht, wird der PAT-1206-Eintrag aktiviert, der auf das Auslesen der Daten aus dem Speicher gewartet hat. Wenn dieser PAT-1206-Eintrag aktiviert ist, werden auch alle PRT-1202-Einträge aktiviert, die diesem PAT-Eintrag zugeordnet sind. Diese Informationen werden dann innerhalb der TTU 700 den Datenpfad entlang gesendet. Dies ist ein Beispiel dafür, wie der TTU-L0-Cache 750 die Strahlen zur Ausführung gruppiert - einfach indem der TTU-L0-Cache 750 die verschiedenen Anforderungen ungefähr zur gleichen Zeit den Datenpfad entlang zum Beispiel an die Strahl-Complet-Tests 710 weiterleiten lässt.In the event of a data failure without a prior request, the request that fails will place a request on the storage hierarchy. It assigns a PAT-1206 entry and a PRT-1202 entry. Finally, the data is read from the memory and in the data RAM 1208 saved. When this happens, the PAT-1206 entry is activated, which has been waiting for the data to be read from the memory. If this PAT-1206 entry is activated, all PRT-1202 entries that are assigned to this PAT entry are also activated. This information is then kept within the TTU 700 sent along the data path. This is an example of how the TTU-L0 cache 750 the beams are grouped for execution - simply by the TTU-L0 cache 750 the various requirements at about the same time along the data path, for example to the beam complete tests 710 lets forward.
Scheduling Strahl-Verarbeitung über den DatenpfadScheduling beam processing through the data path
Sobald er im DAT 1208 resident ist, wird der TAG-1204-Eintrag, sofern er noch dem PAT-1206-Eintrag für die Daten zugeordnet ist, aktualisiert, um auf diesen Daten-RAM-Eintrag zu zeigen. Nachfolgende Anforderungen können dann auf diesen Dateneintrag treffen.As soon as he is in DAT 1208 if resident, the TAG-1204 entry, if still associated with the PAT-1206 entry for the data, is updated to point to that data RAM entry. Subsequent requests can then meet this data entry.
Wenn die Daten für einen PAT 1206 im Daten-RAM resident sind (entweder gerade geschrieben worden sind oder im Falle eines Treffers bereits vorhanden sind), wird dieser PAT-1206-Eintrag aktiviert. Nach dem Gewinn einer Arbitrierung unter anderen aktivierten PAT-1206-Einträgen wird der Eintrag aktiviert und sendet die residenten Daten (plus PRT-Metadaten) aus dem Daten-RAM 1208 (Block 1272), leert die zugehörigen PRT-1202-Einträge und hebt die Zuweisung der PAT-Einträge auf. Eine nachfolgende Anforderung, die auf diese PAT-Gruppe hätte treffen können (die jetzt bedient worden ist), wird stattdessen eine neue PAT-Gruppe starten. Auf diese Weise werden alle Einträge in einer PAT-Gruppe zusammen geplant.If the data for a PAT 1206 are resident in the data RAM (either have just been written or already exist in the event of a hit), this PAT-1206 entry is activated. After winning arbitration among other activated PAT-1206 entries, the entry is activated and sends the resident data (plus PRT metadata) from the data RAM 1208 (Block 1272 ), empties the associated PRT-1202 entries and removes the assignment of the PAT entries. A subsequent request that could have met this PAT group (which has now been served) will instead start a new PAT group. In this way, all entries in a PAT group are planned together.
In manchen Implementierungen sind mehrere Datenpfade an den Cache angefügt. In diesem Fall kann jeder Pfad unabhängig von unterschiedlichen PAT-Gruppen oder von Elementen derselben PAT-Gruppe, die über die Datenpfade verteilt sind, versorgt werden.In some implementations, multiple data paths are attached to the cache. In this case, each path can be supplied independently of different PAT groups or of elements of the same PAT group that are distributed over the data paths.
Zuweisung bei Rückgabe & Kapazitäts-FehlerbehandlungReturn Assignment & Capacity Error Handling
Einer der anderen Aspekte dieses TTU-L0-Cache 750 ist, dass der darin enthaltene Daten-RAM 1208 nach dem Prinzip der Zuweisung-bei-Rückgabe-Politik arbeitet. Dadurch kann der Daten-RAM 1208 sehr klein gehalten werden. So könnten zum Beispiel in einer Betriebsart über 100 Etiketten 1204 ausstehend sein, denen allen unter Verwendung von nur acht Datenzeilen des Daten-RAM 1208 genügt wird. Wenn Daten aus dem Speicher zurückkommen, sind alle diese Datenzeilen korrekt gesperrt, da es viele anhängige Anforderungen gibt, die versuchen, Daten aus dem Cache zu lesen, und von diesen anhängigen Anforderungen wird eine Sicherungskopie hergestellt. Der Cache 750 wird die Anforderung fallenlassen und eine ganz neue Anforderung an den L1-Cache erstellen. Wenn daher der Zuweisung-bei-Rückgabe-Mechanismus fehlschlägt, versucht der L0-Cache 750 lediglich die Anforderung erneut. In dem nicht einschränkenden Ausführungsbeispiel gibt es eine Begrenzung der Anzahl der Male, die irgendeine gegebene Anforderung wiederholt werden kann, bevor die Anforderung in einen kritischen Modus eintritt, in dem keine neuen Anforderungen erlaubt sind, bis die vorherigen Anforderungen erfüllt sind. Dies verhindert, dass neue Anforderungen hereinkommen und ältere Anforderungen verhungern lassen.One of the other aspects of this TTU-L0 cache 750 is that the data RAM it contains 1208 works on the principle of allocation-on-return policy. This allows the data RAM 1208 be kept very small. For example, in an operating mode 100 labels 1204 be pending, all using only eight rows of data from data RAM 1208 is sufficient. When data comes back from memory, all of these rows of data are locked correctly because there are many pending requests trying to read data from the cache, and a backup copy of these pending requests is made. The cache 750 will drop the request and create a whole new request to the L1 cache. Therefore, if the allocation-on-return mechanism fails, the L0 cache tries 750 just the request again. In the non-limiting embodiment, there is a limit on the number of times that any given request can be repeated before the request enters a critical mode in which no new requests are allowed until the previous requests are met. This prevents new requests from coming in and older requests from starving.
Was den L1-Cache betrifft, so ist die wiederholte Anforderung eine völlig eigene und neue Anforderung. Aus der Sicht des L0-Cache 750 hat der L0 die Daten fallengelassen, weil es keinen Platz gab, um sie zu speichern. Der L0-Cache 750 wiederholt die Anforderung und sendet eine neue Anforderung an den L1-Cache. Diese neue Anforderung ist jedoch vom Standpunkt des L1-Cache identisch mit der ursprünglichen Anforderung und kann auf die gleiche Weise erfüllt werden, sofern die Daten noch im L1-Cache resident sind. Der einzige Unterschied besteht darin, dass in dem nicht einschränkenden Ausführungsbeispiel der L0-Cache 750 aufzeichnet, dass er bereits zuvor die gleichen Daten angefordert hat, und dass es sich um einen Wiederholungsversuch auf Basis von Nichtverfügbarkeit von Speicherplatz im Daten-RAM 1208 handelt, um sie zu speichern, sobald der L1-Cache sie bereitgestellt hat. Wenn in dem nicht einschränkenden Ausführungsbeispiel dieser Prozess zu viele Male wiederholt wird (in einem Ausführungsbeispiel bedeutet „zu viele Male “, dass er insgesamt zweimal ausgeführt wird), verhindert der TTU-L0-Cache 750, dass neue Anforderungen hereinkommen, um zu verhindern, dass Speicherplatz im Daten-RAM 1208 mit neuen Anforderungen belegt wird, wenn ältere Anforderungen unerfüllt geblieben sind. Dies ermöglicht es den älteren Anforderungen, Fortschritte zu machen.As for the L1 cache, the repeated request is a completely separate and new request. From the perspective of the L0 cache 750 has the L0 the data dropped because there was no place to store it. The L0 cache 750 repeats the request and sends a new request to the L1 cache. However, this new request is identical to the original request from the point of view of the L1 cache and can be met in the same way if the data is still resident in the L1 cache. The only difference is that in the non-limiting embodiment, the L0 cache 750 records that it has previously requested the same data and that it is retrying based on unavailability of space in the data RAM 1208 is about them save as soon as the L1 cache has provided them. If, in the non-limiting embodiment, this process is repeated too many times (in one embodiment, “too many times” means that it is executed twice in total), the TTU-L0 cache prevents 750 that new requests come in to prevent space in the data RAM 1208 is filled with new requirements if older requirements remain unfulfilled. This enables the older requirements to make progress.
Zum Beispiel sei angenommen, dass es 64 anhängige Anforderungen an den L0-Cache 750 gibt. Man nehme an, dass alle diese Anforderungen die gleiche Adresse anfordern. Der TTU-L0-Cache 750 stellt nur eine entsprechende Anforderung an den L1-Cache, um alle 64 Anforderungen nach den gleichen Daten zu erfüllen. Wenn diese Daten aus dem L1-Cache zurückkehren und in den Daten-RAM 1208 des L0-Cache 750 geschrieben werden, gibt es 64 Anforderungen, die der L0-Cache für Ausführung auf Basis der Rückgabe dieser Daten plant. Die Rate, mit der das nicht einschränkende Ausführungsbeispiel Strahl-Tests für Ausführung plant, kann einer pro Zyklus sein. Es kann daher 64 Zyklen dauern, um die 64 Anforderungen aus dem L0-Cache 750 zu leeren. Andere Implementierungen sind möglich.For example, suppose it is 64 pending L0 cache requirements 750 gives. Assume that all of these requests request the same address. The TTU-L0 cache 750 only makes a corresponding request to the L1 cache to all 64 To meet requirements for the same data. When this data returns from the L1 cache and into the data RAM 1208 of the L0 cache 750 there are written 64 Requests that the L0 cache plans to execute based on the return of this data. The rate at which the non-limiting embodiment schedules beam tests for execution can be one per cycle. It can therefore 64 Cycles take around 64 L0 cache requests 750 to empty. Other implementations are possible.
Man nehme nun an, es gab gleich hinter den 64 Anforderungen nach den gleichen Daten zusätzliche 64 Anforderungen, wobei jede Anforderung eine andere Adresse anfordert. Angenommen, der L1-Cache beginnt, nacheinander auf diese 64 neuen Anforderungen zu antworten. Nachdem der L1-Cache auf eine bestimmte Anzahl von Anforderungen (z. B. sieben neue Anforderungen) geantwortet hat, ist der Daten-RAM 1208 im TTU-L0-Cache 750 vollständig gefüllt - da der Daten-RAM den ersten Wert weiter behalten muss, solange er die 64 ursprünglichen Anforderungen weiter bedient, die alle die gleiche Adresse verwenden. Da der L1-Cache als Antwort auf die neuen Anforderungen weiter Daten liefert, wird der TTU-L0-Cache 750 bestimmen, dass der Daten-RAM 1208 vollständig mit gültigen Daten gefüllt ist, die auf Verwendung warten und noch nicht überschrieben werden können.Now suppose there was just behind 64 Requests for the same additional data 64 Requests, each request requesting a different address. Suppose the L1 cache starts on this one by one 64 respond to new requirements. After the L1 cache has responded to a certain number of requests (e.g., seven new requests), the data RAM is 1208 in the TTU-L0 cache 750 completely filled - since the data RAM must keep the first value as long as it has the 64 served original requests, all using the same address. Since the L1 cache continues to deliver data in response to the new requests, the TTU-L0 cache becomes 750 determine that the data RAM 1208 is completely filled with valid data that is waiting to be used and cannot yet be overwritten.
In dem nicht einschränkenden Ausführungsbeispiel gibt es im Daten-RAM 1208 keinen Platz für die achte Antwort für neue Daten, die vom L1-Cache zurückgegeben werden, so dass der L0-Cache die Antwort fallenlässt und eine neue Anforderung nach der gleichen Adresse zurück an den L1-Cache stellt. In diesem Fall wird der Gegendruck im L0-Cache 750 durch eine oder typischerweise eine kleine Anzahl von Daten-Gültig-Bedingungen erzeugt, bei denen der L0-Cache weiter die gleichen Daten an eine relativ große Anzahl von Strahl-Anforderungen liefert, von denen jede die gleichen Daten angefordert hat, doch ist die TTU 700 nicht im Stande, alle diese Anforderungen gleichzeitig durchzuführen, und baut stattdessen auf den L0-Cache, um die Daten beizubehalten, während die TTU an der verschiedenen großen Anzahl von Anforderungen arbeitet, die diese Daten verwenden. In diesem Fall bleiben die Daten-Gültig-Cache-Zeilen, die Daten für eine große Anzahl von Anforderungen gemeinsam bereitstellen, länger gesperrt, als es ideal wäre - was die Cache-Zeile bindet, der TTU 700 Zeit zur Durchführung der verschiedenen Anforderungen zu geben, die diese Daten verwenden.In the non-limiting embodiment, there is data RAM 1208 no space for the eighth response for new data returned from the L1 cache, so the L0 cache drops the response and makes a new request to the L1 cache for the same address. In this case the back pressure is in the L0 cache 750 generated by one or typically a small number of data valid conditions in which the L0 cache continues to deliver the same data to a relatively large number of beam requests, each of which requested the same data, but is the TTU 700 unable to make all of these requests at once, and instead relies on the L0 cache to keep the data while the TTU is working on the various large number of requests that use this data. In this case, the data valid cache lines that provide data together for a large number of requests remain locked longer than would be ideal - which binds the cache line, the TTU 700 Give time to complete the various requests that use this data.
Rekonfigurierbarer Streaming-CacheReconfigurable streaming cache
In einem nicht einschränkenden Ausführungsbeispiel hat der Daten-RAM 1208 N Zeilen, die jeweils M Bytes an Daten aufweisen, für eine Gesamt-Daten-RAM-Größe von N × M Bytes. Die TAG 1204 und die PAT-Tabelle 1206 enthalten jeweils X-Einträge, und das PRT 1202 hat Y-Einträge. Dies bedeutet, dass in irgendeinem gegebenen Zeitpunkt bis zu Y Anforderungen vom L0-Cache 750 bedient werden können, doch können in irgendeinem gegebenen Zeitpunkt maximal nur X Anforderungen an den L1-Cache ausstehend sein. In dieser Implementierung sind in irgendeinem gegebenen Zeitpunkt maximal N ausgelesene Datenblöcke im Daten-RAM 1208 resident.In one non-limiting embodiment, data RAM 1208 has N rows, each containing M bytes of data, for a total data RAM size of N x M bytes. The TAG 1204 and the PAT table 1206 each contain X entries, and the PRT 1202 has Y entries. This means that at any given time up to Y requests from the L0 cache 750 can be served, but at any given time, there can be a maximum of only X requests to the L1 cache pending. In this implementation, there is a maximum of N read data blocks in the data RAM at any given time 1208 resident.
In dem nicht einschränkenden Ausführungsbeispiel sind die Größen von PRT 1202, TAG 1204, PAT 1206 und DAT 1208 alle unabhängig konfigurierbar. Es sind sogar Größen bis hinab zu Einzeleinträgen erlaubt. Zum Beispiel würde eine Einzeleintrag-TAG 1204 nur direkt aufeinander folgende Anforderungen an dieselbe Adresse gruppieren. Oder ein Einzeleintrag-DAT 1208 würde es nur erlauben, in irgendeinem Zeitpunkt auf eine einzelne Datenzeile einzuwirken. In nicht einschränkenden Ausführungsformen kann jeder dieser Parameter völlig unabhängig konfiguriert werden. Zum Beispiel wäre es möglich, den L0-Cache 750 so zu konfigurieren, dass er einen Einzel-Etikett-Eintrag mit 64 Daten-RAM-Einträgen und 64 PRT-Einträgen hat. Das Verhältnis der Größen spielt ebenfalls eine Rolle, wobei das PRT/PAT-Verhältnis potenziell durch die mittlere PAT-Gruppen-Größe bestimmt wird.In the non-limiting embodiment, the sizes are PRT 1202 , DAY 1204 , PAT 1206 and DAT 1208 all independently configurable. Even sizes down to individual entries are allowed. For example, a single entry TAG 1204 only group consecutive requests to the same address. Or a single entry DAT 1208 would only allow to act on a single line of data at any time. In non-limiting embodiments, each of these parameters can be configured completely independently. For example, it would be possible to use the L0 cache 750 to configure it to have a single label entry 64 Data RAM entries and 64 Has PRT entries. The size ratio also plays a role, with the PRT / PAT ratio potentially being determined by the mean PAT group size.
Die Fähigkeit, den Cache 750 sehr klein zu bemessen, während noch akzeptable Leistungsfähigkeit aufrechterhalten wird, ermöglicht gute Flächeneinsparungen. Durch Einschließen eines Schedulers in das Cache-Design können Anforderungen mit ähnlichen Ausführungsanforderungen gruppiert werden, was die Leistungsfähigkeit verbessern kann.The ability to cache 750 dimensioning very small while still maintaining acceptable performance enables good space savings. By including a scheduler in the cache design, requests with similar execution requirements can be grouped, which can improve performance.
In einer Ausführungsform kann TTU 700 zum Beispiel Hunderte von Strahlen gleichzeitig behandeln, und dennoch könnte der Streaming-Cache 750 sehr klein sein (z. B. 8 Cache-Zeilen). Den Streaming-Cache 750 klein zu halten, bewahrt Chipfläche und Stromverbrauch, ohne die Latenz zu vergrößern, indem inhärente Kohärenz-Eigenschaften von unabhängigen parallelen Strahlen ausgenutzt werden, die vom gleichen Standpunkt ausgehen und die gleichen Teile der BVH-Beschleunigungsdatenstruktur traversieren.In one embodiment, TTU 700 for example handle hundreds of rays at the same time, and yet the streaming cache could 750 be very small (e.g. 8 cache lines). The streaming cache 750 Keeping small, saves chip area and power consumption without increasing latency by taking advantage of inherent coherence properties of independent parallel beams that come from the same point of view and traverse the same parts of the BVH acceleration data structure.
Alternative nicht einschränkende Beispiel-ImplementierungenAlternative, non-limiting example implementations
Während es in manchen nicht einschränkenden Beispielen-Implementierungen möglich sein könnte, für das Scheduling von Strahl-Complet-Tests durch die TTU 700 den gleichen Cache zu verwenden, wie er für das Auslesen von anderen Daten durch SMs 132, Texturabbilder und dergleichen verwendet wird, bietet ein separater dedizierter L0-Complet-Cache 752 innerhalb der TTU 700 reduzierte Latenz und ist daher hilfreich, um die Geschwindigkeit zu erhöhen, mit der die TTU 700 den Strahl-Complet-Test 710 beschleunigt.While it may be possible in some non-limiting example implementations, for the TTU to schedule beam complete tests 700 to use the same cache as that used for reading out other data by SMs 132 , Texture maps and the like is used, offers a separate dedicated L0 complete cache 752 within the TTU 700 reduced latency and is therefore helpful to increase the speed at which the TTU 700 the beam complete test 710 accelerated.
Es könnte zum Beispiel möglich sein, eine solche Anforderung unter Verwendung des L1-Cache zu stellen. Der L1-Cache würde die angeforderten Informationen liefern, manche in der Reihenfolge der empfangenen Anforderungen (wenn die Daten bereits im L1-Cache verfügbar waren) und manche nicht in Reihenfolge (z. B. im Falle eines Cache-Fehlschlags, der ein Auslesen aus dem Speicher 140 erfordert). Bei einer derartigen Gestaltung würde die Rückgabe der Daten aus dem L1-Cache als Antwort auf jede Anforderung erfolgen, die gestellt wird. Dies würde die Rückgabe von Daten auf einer Datenzeile für jede Zeile für jede Anforderung, die gestellt wird, erfordern. Im Gegensatz dazu ermöglicht das nicht einschränkende Ausführungsbeispiel eine Rückgabe von Complet-Daten aus dem Complet-Cache 752 nur einmal für jede Gruppe von Strahlen, die anfordern und die Daten benötigen, um die Strahl-Complet-Tests gegen diese Strahlen durchzuführen. Dies bewahrt sowohl Strom als auch Zugriffszeit wesentlich.For example, it might be possible to make such a request using the L1 cache. The L1 cache would provide the requested information, some in the order of the requests received (if the data was already available in the L1 cache) and some not in the order (e.g. in the case of a cache failure reading out) the store 140 ) Requires. With such a design, the return of the data from the L1 cache would be in response to any request made. This would require the return of data on one row of data for each row for each request that is made. In contrast, the non-limiting exemplary embodiment enables return data from the complete cache to be returned 752 only once for each group of rays that request and need the data to perform the beam complete test against those rays. This saves both electricity and access time significantly.
Zuweisen von Cache-Zeilen bei RückgabeAllocate cache lines on return
Zusätzliche Merkmale dieses Beispiel-L0-TTU-Cache 750 sind bemerkenswert. Bei traditionellen Caches früherer Systeme bewirken Fehlschläge, dass Cache-Zeilen zugewiesen werden. Im Gegensatz dazu gibt es in dem nicht einschränkenden Ausführungsbeispiel eine Tabelle von Anforderungen, die bei einem Fehlschlag zugewiesen werden. Hier werden Cache-Zeilen nicht bei einem Fehlschlag zugewiesen, sondern werden stattdessen bei einer Rückgabe aus dem L1-Cache zugewiesen.Additional features of this sample L0 TTU cache 750 are remarkable. With traditional caches of earlier systems, failures cause cache lines to be allocated. In contrast, in the non-limiting embodiment, there is a table of requests that are assigned on failure. Here, cache lines are not allocated on failure, but instead are allocated on return from the L1 cache.
Wenn eine Datenzeile zurückkommt und nun Daten im Daten-RAM 1208 verfügbar sind, wird der PAT-Eintrag 1206 in diesem Zeitpunkt aktiviert. Es könnte sein, dass es mehrere PAT-1206-Einträge gibt, die aktiviert und einsatzbereit sind. In dem nicht einschränkenden Ausführungsbeispiel wählt der TTU-L0-Cache 750 zwischen solchen aktivierten und einsatzbereiten Einträgen der PAT-Tabelle 1206 unter Verwendung einer Reihum-Methode aus. In dem nicht einschränkenden Ausführungsbeispiel gibt es keine Ältester-Typ- und Erste-Rückgabe-Politik. Stattdessen bedient der TTU-L0-Cache 750 Anforderungen an die TTU unter Verwendung eines Reihum-Algorithmus, der auch Bedienung zwischen Gruppen berücksichtigt - denn wenn der L0-Cache beginnt, einen bestimmten PAT-1206-Eintrag zu bedienen, wird er all die verschiedenen Prozesse bereitstellen, die diese bestimmte Adresse verlangen, bevor er einen anderen PAT-Eintrag auswählt, um ihn der TTU zu liefern. In dem nicht einschränkenden Ausführungsbeispiel bezieht sich jedes Auslesen aus dem L1-Cache auf nur einen einzigen PAT-1206-Eintrag.When a line of data comes back and now data in data RAM 1208 are available, the PAT entry 1206 activated at this time. There may be several PAT-1206 entries that are activated and ready for use. In the non-limiting embodiment, the TTU-L0 cache chooses 750 between such activated and ready-to-use entries in the PAT table 1206 using a series method. In the non-limiting embodiment, there is no elder type and first return policy. Instead, the TTU-L0 cache serves 750 TTU requirements using an in-line algorithm that also takes into account inter-group operation - because when the L0 cache starts serving a particular PAT-1206 entry, it will provide all the different processes that require that particular address, before selecting another PAT entry to deliver to the TTU. In the non-limiting embodiment, each read from the L1 cache relates to only a single PAT-1206 entry.
In dem nicht einschränkenden Ausführungsbeispiel kann es zwei Varianten geben, wie die PAT-Einträge implementiert werden. In einer Beispiel-Implementierung ist es möglich, ein PAT 1206 mit einer TAG-1204-Zeile zu verknüpfen. In einer anderen Beispiel-Implementierung ist ein PAT-1206-Eintrag nicht mit einer TAG-1204-Zeile verknüpft. In dem Fall, dass der PAT-1206-Eintrag mit einer TAG-1204-Zeile verknüpft ist, wird das Etikett so lange gültig gehalten, wie der PAT-1206-Eintrag gültig ist. Dies erzeugt das Potenzial für Gegendruck auf der Etikett-Seite. Dies wird geschehen, wenn ein Etikett voll ist mit Zeilen, die für PAT-1206-Einträge sind. In diesem Fall ist jeder PAT-1206-Eintrag wirklich eine eindeutige Adresse. Dies liegt daran, dass in dem nicht einschränkenden Ausführungsbeispiel jede eindeutige Adresse nur einen einzigen PAT-1206-Eintrag haben kann. Alle im Cache anhängigen Anforderungen für diese Adresse werden gruppiert.In the non-limiting embodiment, there can be two variants of how the PAT entries are implemented. In a sample implementation, it is possible to create a PAT 1206 link with a TAG-1204 line. In another example implementation, a PAT-1206 entry is not linked to a TAG-1204 line. In the event that the PAT-1206 entry is linked to a TAG-1204 line, the label is kept valid as long as the PAT-1206 entry is valid. This creates the potential for back pressure on the label side. This will happen when a label is full of lines that are for PAT-1206 entries. In this case, each PAT-1206 entry is really a unique address. This is because, in the non-limiting embodiment, each unique address can have only a single PAT-1206 entry. All cached requests for this address are grouped.
In einer weiteren nicht einschränkenden Beispiel-Implementierung sind die PAT-1206-Einträge von den TAG-1204-Einträgen getrennt. In einer solchen Implementierung muss der TAG-1204-Eintrag nicht für die Zeitspanne gültig sein, die ein PAT-1206-Eintrag gültig ist. In diesem Fall ist es möglich, dass der L0-Cache 750 eine Anforderung an den L1-Cache stellt, die zu einem Abruf aus dem L1-Cache führt, und dann eine dazwischenliegende Anforderung stattfindet. Da das Etikett 1204 nicht der ausstehenden Anforderung zugeordnet ist, die in der Speicherhierarchie noch anhängig ist, kann ein Etikett mit der neuen Anforderung verwendet werden. Dies bedeutet, dass es der PAT 1206 ist, der verwendet wird, um ausstehende Anforderungen zu verfolgen, und um zu verfolgen, ob sie erfüllt worden sind oder nicht, und die TAG-Struktur 1204 wird nicht für eine derartige Verfolgung verwendet. In dieser Situation wird es jedoch keine Gruppierung zwischen neuen und ausstehenden Anforderungen geben - das heißt, die in den Cache 750 eingehende neue Anforderung wird nicht mit der Anforderung gruppiert, die bereits an den L1-Cache übermittelt worden ist und auf eine Antwort vom L1-Cache wartet. Dies führt zu zwei oder mehr PAT-1206-Einträgen für die gleiche Adresse, und die Gruppierung erfolgt, wenn diese in den Cache eingegeben werden, sofern die PRT-1202-Einträge jeder Gruppe zugeordnet sind. In dieser Ausführungsform ist es möglich, aus dem L1-Cache zurückkommende Daten zu haben, die identisch sind mit Daten für die gleiche Adresse wie ein eindeutiger PAT-1206-Eintrag. Jeder PAT-1206-Eintrag wird ein einzelnes Datenstück haben, das zurückkommt oder bereits im Daten-Cache 750 resident ist, falls ein DatenTreffer vorlag, als auf das Etikett 1204 zum ersten Mal zugegriffen worden ist. In diesem Fall entspricht jeder PAT-1206-Eintrag Daten, auf die die TTU 700 zugreifen wird.In another, non-limiting example implementation, the PAT-1206 entries are separated from the TAG-1204 entries. In such an implementation, the TAG-1204 entry need not be valid for the period of time that a PAT-1206 entry is valid. In this case it is possible that the L0 cache 750 makes a request to the L1 cache that results in a fetch from the L1 cache, and then an intermediate request takes place. Because the label 1204 a label with the new request can not be assigned to the pending request that is still pending in the storage hierarchy. This means that it is the PAT 1206 used to track pending requests and to track whether or not they have been met, and the TAG structure 1204 is not used for such persecution. In this situation, however, there will be no grouping between new and pending requests - that is, those in the cache 750 incoming new request is not grouped with the request that has already been submitted to the L1 cache and is waiting for a response from the L1 cache. This results in two or more PAT-1206 entries for the same address, and grouping occurs when they are cached, provided the PRT-1202 entries are associated with each group. In this embodiment, it is possible to have data returning from the L1 cache that is identical to data for the same address as a unique PAT-1206 entry. Each PAT-1206 entry will have a single piece of data that will come back or already in the data cache 750 If there was a data hit, the resident is on the label 1204 has been accessed for the first time. In this case, each PAT-1206 entry corresponds to data to which the TTU 700 will access.
In dem nicht einschränkenden Ausführungsbeispiel ist der L0-Cache 750 ein Nur-Lese-Cache, und das System geht davon aus, dass sich die Daten zwischen sukzessiven Lesezugriffen auf den L0-Cache nicht ändern werden. Dies ist eine vernünftige Annahme, da die auszulesenden Daten aus einer Beschleunigungsdatenstruktur ausgelesen werden, die während der Ausführung nicht notwendigerweise dynamisch verändert wird, die aber vorab gespeichert ist und auf die für Traversierung durch bestimmte Strahlen einfach zugegriffen wird. Wenn die Daten einer Änderung unterworfen waren, müsste der L0-Cache 750 die Daten explizit ungültig machen, um Inkonsistenzen zwischen sukzessiven Auslesevorgängen von derselben Speicheradresse zu vermeiden.In the non-limiting embodiment, the L0 cache is 750 a read-only cache, and the system assumes that the data will not change between successive read accesses to the L0 cache. This is a reasonable assumption since the data to be read out are read from an acceleration data structure which is not necessarily changed dynamically during execution, but which is stored in advance and which is easily accessed for traversing by certain rays. If the data was subject to change, the L0 cache would have to 750 explicitly invalidate the data to avoid inconsistencies between successive reads from the same memory address.
In manchen nicht einschränkenden Ausführungsbeispielen kann es möglich sein, die Kohärenz zwischen verschiedenen Strahl-Anforderungen unter Verwendung eines anderen Auslesepfades als eines Cache auszunutzen. In manchen Ausführungsformen könnte es zum Beispiel möglich sein, den L0-Complet-Cache 752 durch einen Puffer zu ersetzen, der Anforderungen an höhere Speicherebenen wie z. B. den L1-Cache stellt, ohne sie mit vorherigen Strahl-Anforderungen zu verknüpfen. In einer solchen Implementierung könnte die Möglichkeit, redundante Anforderungen für kohärente Strahlen auszunutzen, mit einer Einzel-TAG-1204-Implementierung realisiert werden (was das oben erörterte Design durch Programmieren der nutzbaren Größe und Tiefe des Daten-RAM tatsächlich zulässt). In diesem reduzierten Beispiel ist die einzige verfügbare Gruppierung jene mit Bezug auf die unmittelbar vorherige Anforderung - entweder sind die zuletzt ausgelesenen Daten die gleichen Daten, die gerade angefordert worden sind, oder es sind andere Daten. Diese Beispiel-Implementierung würde weniger wie ein Cache und eher wie ein Puffer arbeiten, wäre aber dennoch im Stande, Strahl-Daten-Kohärenz auszunutzen, indem sukzessive Strahl-Anforderungen gruppiert werden, die die gleichen aus höheren Speicherebenen ausgelesenen Daten verwenden.In some non-limiting embodiments, it may be possible to exploit the coherence between different beam requests using a read path other than a cache. For example, in some embodiments it may be possible to use the L0 complete cache 752 to be replaced by a buffer that meets the requirements for higher storage levels such as B. provides the L1 cache without linking it to previous beam requests. In such an implementation, the ability to take advantage of redundant requirements for coherent beams could be realized with a single TAG 1204 implementation (which the design discussed above actually allows by programming the usable size and depth of the data RAM). In this reduced example, the only grouping available is that relating to the immediately previous request - either the last data read is the same data that was just requested, or it is different data. This example implementation would work less like a cache and more like a buffer, but would still be able to take advantage of beam data coherence by successively grouping beam requests using the same data read from higher levels of memory.
Es ist auch möglich, einen L0-Cache 750 bereitzustellen, der diesen oben erörterten Gruppierungsaspekt nicht direkt nutzt. Eine derartige Gestaltung würde den Speicherverkehr reduzieren, um effizienteres Speicherauslesen zu ermöglichen, würde aber den TTU 700-Betrieb nicht weiter optimieren, indem Möglichkeiten beim Scheduling der Strahl-Ausführung auf Basis von Strahlen ausnutzt werden, die die gleichen ausgelesenen Daten benötigen, die wahrscheinlich den gleichen oder ähnlichen Traversierungspfaden durch eine Begrenzungsvolumenhierarchie folgen. Bei einer solchen Implementierung wäre die Gruppierung, die durchgeführt würde, im Wesentlichen eine In-Reihenfolge-Bedienung von Anforderungen.It is also possible to have an L0 cache 750 which does not directly use this grouping aspect discussed above. Such a design would reduce memory traffic to enable more efficient memory reading, but would not further optimize TTU 700 operation by taking advantage of beam scheduling capabilities based on beams that require the same data that is likely to be read Follow the same or similar traversal paths through a bounding volume hierarchy. In such an implementation, the grouping that would be performed would essentially be an in-order servicing of requests.
Beispiel-Bilderzeugungs-Pipeline mit StrahlverfolgungExample ray tracing imaging pipeline
Die oben beschriebenen Strahlverfolgungs- und anderen Fähigkeiten können auf mannigfache Weise genutzt werden. Zum Beispiel können sie nicht nur zum Rendern einer Szene unter Verwendung von Strahlverfolgung genutzt werden, sondern können auch in Kombination mit Abtastsignalwandlungs-Techniken wie z. B. im Kontext der Abtastsignalwandlung von geometrischen Bausteinen (d. h. Polygon-Primitiven wie z. B. Dreiecken) eines 3D-Modells zur Erzeugung eines Bildes zur Anzeige (z. B. auf dem in 1 dargestellten Display 150) implementiert werden. 14 veranschaulicht ein Beispiel-Flussdiagramm für die Verarbeitung von Primitiven, um Bildpixelwerte eines Bildes zu liefern, gemäß einer Ausführungsform.The beam tracing and other capabilities described above can be used in a variety of ways. For example, not only can they be used to render a scene using ray tracing, but they can also be used in combination with scanning signal conversion techniques such as. B. in the context of the scanning signal conversion of geometric building blocks (ie polygon primitives such as triangles) of a 3D model to generate an image for display (e.g. on the in 1 shown display 150 ) are implemented. 14 10 illustrates an example flowchart for processing primitives to provide image pixel values of an image, according to one embodiment.
Wie 14 zeigt, kann als Antwort auf das Empfangen einer Benutzereingabe ein Bild eines 3D-Modells erzeugt werden (Schritt 1652). Die Benutzereingabe kann eine Aufforderung zur Anzeige eines Bildes oder einer Bildsequenz sein, wie z. B. eine Eingabe-Operation, die während Interaktion mit einer Anwendung (z. B. einer Spiel-Anwendung) durchgeführt wird. Als Antwort auf die Benutzereingabe führt das System Abtastsignalwandlung und Rasterung von geometrischen Primitiven des 3D-Modells einer Szene unter Verwendung einer konventionellen GPU-3D-Grafikpipeline durch (Schritt 1654). Die Abtastsignalwandlung und Rasterung von geometrischen Primitiven kann zum Beispiel das Verarbeiten von Primitiven des 3D-Modells umfassen, um Bildpixelwerte unter Verwendung konventioneller Techniken wie z. B. Beleuchtung, Transformationen, Texturabbildung, Rasterung und dergleichen zu bestimmen, wie sie Fachleuten bekannt sind und im Folgenden in Verbindung mit 18 erörtert werden. Die erzeugten Pixeldaten können in einen Bildpuffer geschrieben werden.How 14 shows, an image of a 3D model can be generated in response to receiving a user input (step 1652 ). The user input can be a request to display an image or an image sequence, such as e.g. B. An input operation that is performed while interacting with an application (e.g., a game application). In response to user input, the system performs scan signal conversion and rasterization of geometric primitives of the 3D model of a scene using a conventional GPU 3D graphics pipeline (step 1654 ). For example, scanning signal conversion and rasterization of geometric primitives may include processing primitives of the 3D model to obtain image pixel values using conventional techniques such as B. lighting, transformations, texture mapping, screening and the like determine how they are known to those skilled in the art and hereinafter in connection with eighteen be discussed. The generated pixel data can be written into an image buffer.
In Schritt 1656 können ein oder mehrere Strahlen von einem oder mehreren Punkten auf den gerasterten Primitiven unter Verwendung von TTU-Hardwarebeschleunigung verfolgt werden. Die Strahlen können gemäß einer oder mehreren der in dieser Anmeldung offenbarten Strahlverfolgungs-Fähigkeiten verfolgt werden. Auf Basis der Ergebnisse der Strahlverfolgung können die im Puffer gespeicherten Pixelwerte modifiziert werden (Schritt 1658). Modifizieren der Pixelwerte kann in manchen Anwendungen zum Beispiel die Bildqualität verbessern, indem zum Beispiel realistischere Reflexionen und/oder Schatten angewendet werden. Ein Bild wird unter Verwendung der im Puffer gespeicherten modifizierten Pixelwerte angezeigt (Schritt 1660).In step 1656 one or more beams from one or more points on the rasterized primitives can be tracked using TTU hardware acceleration. The beams can be tracked according to one or more of the beam tracking capabilities disclosed in this application. Based on the results of the ray tracing, the pixel values stored in the buffer can be modified (step 1658 ). For example, modifying the pixel values may improve image quality in some applications, for example by using more realistic reflections and / or shadows. An image is displayed using the modified pixel values stored in the buffer (step 1660 ).
In einem Beispiel können Abtastsignalwandlung und Rasterung von geometrischen Primitiven unter Verwendung des in Bezug auf 15-18, 19, 20, 21 und/oder 22 beschriebenen Verarbeitungssystems implementiert werden, und Strahlverfolgung kann von den SMs 132 unter Verwendung der in Bezug auf 9 beschriebenen TTU-Architektur implementiert werden, um weitere Visualisierungsmerkmale (z. B. Spiegelreflexion, Schatten, usw.) hinzuzufügen. 14 ist nur ein nicht einschränkendes Beispiel - die SMs 132 könnten die beschriebene TTU ohne Texturverarbeitung oder andere konventionelle 3D-Grafikverarbeitung selbst verwenden, um Bilder zu erzeugen, oder die SMs könnten Texturverarbeitung und andere konventionelle 3D-Grafikverarbeitung ohne die beschriebene TTU verwenden, um Bilder zu erzeugen. Die SMs können auch irgendeine gewünschte Bilderzeugung oder andere Funktionalität in Software implementieren, je nach der Anwendung, um irgendeine gewünschte programmierbare Funktionalität bereitzustellen, die nicht an die Hardwarebeschleunigungs-Merkmale gebunden ist, die von Texturabbildungs-Hardware, Baumtraversierungs-Hardware oder anderer Grafikpipeline-Hardware bereitgestellt werden.In one example, scan signal conversion and rasterization of geometric primitives can be done using the with respect to 15-18 . 19 . 20 . 21 and / or 22 processing system described, and beam tracking can be performed by the SMs 132 using the regarding 9 described TTU architecture can be implemented to add further visualization features (e.g. mirror reflection, shadows, etc.). 14 is just one non-limiting example - the SMs 132 could use the described TTU without texture processing or other conventional 3D graphics processing itself to generate images, or the SMs could use texture processing and other conventional 3D graphics processing without the described TTU to generate images. The SMs can also implement any desired imaging or other functionality in software, depending on the application, to provide any desired programmable functionality that is not tied to the hardware acceleration features provided by texture mapping hardware, tree traversing hardware, or other graphics pipeline hardware to be provided.
Beispiel-Parallelverarbeitungsarchitektur mit StrahlverfolgungExample parallel processing architecture with beam tracing
Die oben beschriebene TTU-Struktur kann in oder in Verbindung mit einer nicht einschränkenden Beispiel-Parallelverarbeitungs-Systemarchitektur implementiert werden, wie sie nachfolgend in Bezug auf 15-22 beschrieben ist. Eine derartige Parallelverarbeitungsarchitektur kann zum Beispiel zum Implementieren der GPU 130 von 1 verwendet werden.The TTU structure described above can be implemented in or in connection with a non-limiting example parallel processing system architecture, as described below in relation to FIG 15-22 is described. Such a parallel processing architecture can be used, for example, to implement the GPU 130 of 1 be used.
Beispiel-ParallelverarbeitungsarchitekturFor example parallel processing architecture
15 veranschaulicht eine nicht einschränkende Beispiel-Parallelverarbeitungseinheit (PPU) 1700. In einer Ausführungsform ist die PPU 1700 ein Multi-Thread-Prozessor, der auf einer oder mehreren integrierten Schaltungen implementiert ist. Die PPU 1700 ist eine Latenz verbergende Architektur (Latency Hiding Architecture), die dafür ausgelegt ist, viele Threads parallel zu verarbeiten. Ein Thread (d. h. ein Thread einer Ausführung) ist eine Instanziierung eines Satzes von Befehlen, die konfiguriert sind, um von der PPU 1700 ausgeführt zu werden. In einer Ausführungsform ist die PPU 1700 konfiguriert, um eine Grafik-Render-Pipeline für Verarbeitung von dreidimensionalen (3D) Grafikdaten zu implementieren, um zweidimensionale (2D) Bilddaten für Anzeige auf einem Display-Gerät wie z. B. einem Flüssigkristalldisplay-Gerät (LCD-Gerät), einem Gerät mit organischen Leuchtdioden (OLED), einem Gerät mit transparenten Leuchtdioden (TOLED), einem Feldemissions-Display (FED), einem Feldsequenz-Display, einem Projektions-Display, einem am Kopf angebrachten Display oder irgendeinem anderen gewünschten Display zu erzeugen. In anderen Ausführungsformen kann die PPU 1700 zur Durchführung von Universalberechnungen verwendet werden. Obwohl hierin zur Veranschaulichung ein Beispiel-Parallelprozessor vorgesehen ist, sei darauf hingewiesen, dass dieser Prozessor nur zu veranschaulichenden Zwecken angegeben ist und dass irgendein Prozessor eingesetzt werden kann, um diesen zu ergänzen und/oder zu ersetzen. 15 illustrates a non-limiting example parallel processing unit (PPU) 1700 , In one embodiment, the PPU 1700 a multi-thread processor implemented on one or more integrated circuits. The PPU 1700 is a latency hiding architecture that is designed to process many threads in parallel. A thread (ie, a thread of execution) is an instantiation of a set of instructions that are configured to be issued by the PPU 1700 to be executed. In one embodiment, the PPU 1700 configured to implement a graphics render pipeline for processing three-dimensional (3D) graphics data to generate two-dimensional (2D) image data for display on a display device such as B. a liquid crystal display device (LCD device), a device with organic light-emitting diodes (OLED), a device with transparent light-emitting diodes (TOLED), a field emission display (FED), a field sequence display, a projection display, one on Head mounted display or any other desired display. In other embodiments, the PPU 1700 be used to carry out universal calculations. Although an example parallel processor is provided herein for purposes of illustration, it should be understood that this processor is provided for illustrative purposes only and that any processor may be used to supplement and / or replace it.
Zum Beispiel können eine oder mehrere PPUs 1700 so konfiguriert sein, dass sie Tausende von Anwendungen für Hochleistungsrechner (HPC, High Performance Computing), Rechenzentren und maschinelles Lernen beschleunigen. Die PPU 1700 kann so konfiguriert sein, dass sie zahlreiche Systeme und Anwendungen für Deep Learning (tiefgehendes Lernen) beschleunigt, darunter autonome Fahrzeugplattformen, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalytik, molekulare Simulationen, Medikamentenentdeckung, Krankheitsdiagnose, Wettervorhersage, Big Data Analytik, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierungen und personalisierte Benutzerempfehlungen und dergleichen.For example, one or more PPUs 1700 Configured to accelerate thousands of high performance computing (HPC), data center and machine learning applications. The PPU 1700 can be configured to accelerate numerous deep learning systems and applications, including autonomous vehicle platforms, deep learning, high-precision speech, image and text recognition systems, intelligent video analytics, molecular simulations, drug discovery, disease diagnosis, weather forecast, big data Analytics, astronomy, molecular dynamics simulation, financial modeling, robotics, factory automation, real-time language translation, online search optimization and personalized user recommendations and the like.
Die PPU 1700 kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einem drahtlosen, tragbaren Gerät), einem Personal Digital Assistant (PDA), einer Digitalkamera, einem Fahrzeug, einem am Kopf befestigten Display, einem tragbaren elektronischen Gerät und dergleichen enthalten sein. In einer Ausführungsform ist die PPU 1700 auf einem einzelnen Halbleitersubstrat ausgebildet. In einer anderen Ausführungsform ist die PPU 1700 zusammen mit einem oder mehreren anderen Geräten, wie z. B. zusätzlichen PPUs 1700, dem Speicher 1704, einer CPU für Computer mit reduziertem Befehlssatz (RISC), einer Speicherverwaltungseinheit (MMU), einem Digital-Analog-Wandler (DAC) und dergleichen in einem SoC (System-on-a-Chip, System auf einem Chip) enthalten.The PPU 1700 can be in a desktop computer, a laptop computer, a tablet computer, servers, supercomputers, a smartphone (e.g. a wireless, portable device), a personal digital assistant (PDA), a digital camera, a vehicle, a attached to the head display, a portable electronic device and the like. In one embodiment the PPU 1700 formed on a single semiconductor substrate. In another embodiment, the PPU 1700 together with one or more other devices, such as. B. additional PPUs 1700 , the store 1704 , a CPU for reduced instruction set computers (RISC), a memory management unit (MMU), a digital-to-analog converter (DAC), and the like are contained in a SoC (system-on-a-chip, system on a chip).
In einer Ausführungsform kann die PPU 1700 auf einer Grafikkarte enthalten sein, die ein oder mehrere Speichergeräte 1704 enthält. Die Grafikkarte kann so konfiguriert sein, dass sie eine Schnittstellenverbindung mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers herstellt. In noch einer Ausführungsform kann die PPU 1700 eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein Parallelprozessor sein, die bzw. der im Chipsatz des Motherboards enthalten ist.In one embodiment, the PPU 1700 be included on a graphics card that has one or more storage devices 1704 contains. The graphics card can be configured to interface with a PCIe slot on a motherboard of a desktop computer. In another embodiment, the PPU 1700 an integrated graphics processing unit (iGPU) or a parallel processor, which is contained in the chipset of the motherboard.
Wie in 15 gezeigt, enthält die PPU 1700 eine Eingabe/Ausgabe-(I/O)-Einheit 1705, eine Vorverarbeitungseinheit 1715, eine Scheduler-Einheit 1720, eine Arbeitsverteilungseinheit 1725, einen Hub 1730, ein Koppelfeld (XBar, crossbar) 1770, einen oder mehrere Allgemeinverarbeitungscluster (GPCs) 1750 und eine oder mehrere Partitionseinheiten 1780. Die PPU 1700 kann über eine oder mehrere Hochgeschwindigkeits-NVLink-1710-Verbindungen mit einem Host-Prozessor oder anderen PPUs 1700 verbunden sein. Die PPU 1700 kann über eine Verbindung 1702 mit einem Host-Prozessor oder anderen Peripheriegeräten verbunden sein. Die PPU 1700 kann auch mit einem lokalen Speicher verbunden sein, der eine Anzahl von Speichergeräten 1704 umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von DRAM-(Dynamic Random Access Memory, Speicher mit dynamischem Direktzugriff)-Geräten umfassen. Die DRAM-Geräte können als ein HBM-(High-Bandwidth Memory)-Subsystem konfiguriert sein, wobei mehrere DRAM-Dies (Waferstücke) in jedem Gerät gestapelt sind.As in 15 shown contains the PPU 1700 an input / output (I / O) unit 1705, a preprocessing unit 1715 , a scheduler unit 1720 , a work distribution unit 1725 , a hub 1730 , a switching matrix (XBar, crossbar) 1770 , one or more general processing clusters (GPCs) 1750 and one or more partition units 1780 , The PPU 1700 Can be connected to a host processor or other PPUs via one or more high-speed NVLink 1710 connections 1700 be connected. The PPU 1700 can over a connection 1702 connected to a host processor or other peripheral devices. The PPU 1700 can also be connected to local storage that has a number of storage devices 1704 includes. In one embodiment, the local memory may include a number of DRAM (Dynamic Random Access Memory) devices. The DRAM devices can be configured as a HBM (high bandwidth memory) subsystem, with multiple DRAM dies (wafer pieces) stacked in each device.
Die NVLink-1710-Verbindung ermöglicht es Systemen, eine oder mehrere PPUs 1700 in Kombination mit einer oder mehreren CPUs zu skalieren und zu integrieren, unterstützt Cache-Kohärenz zwischen den PPUs 1700 und CPUs sowie CPU-Mastering. Daten und/oder Befehle können vom NVLink 1710 über den Hub 1730 zu/von anderen Einheiten der PPU 1700 übertragen werden, wie z. B. einer oder mehreren Kopier-Engines, einem Video-Encoder, einem Video-Decoder, einer Leistungsverwaltungseinheit usw. (nicht explizit gezeigt). Der NVLink 1710 wird in Verbindung mit 21 näher beschrieben.The NVLink 1710 connection enables systems to have one or more PPUs 1700 Scaling and integrating in combination with one or more CPUs supports cache coherence between the PPUs 1700 and CPUs as well as CPU mastering. Data and / or commands can be sent from the NVLink 1710 about the hub 1730 to / from other units of the PPU 1700 are transmitted such. B. one or more copy engines, a video encoder, a video decoder, a power management unit, etc. (not explicitly shown). The NVLink 1710 is used in conjunction with 21 described in more detail.
Die I/O-Einheit 1705 ist so konfiguriert, dass sie über die Verbindung 1702 Kommunikation (d. h. Befehle, Daten, usw.) von einem Host-Prozessor (nicht gezeigt) sendet und empfängt. Die I/O-Einheit 1705 kann mit dem Host-Prozessor direkt über die Verbindung 1702 oder über ein oder mehrere Zwischen-Geräte wie z. B. eine Speicherbrücke kommunizieren. In einer Ausführungsform kann die I/O-Einheit 1705 über die Verbindung 1702 mit einem oder mehreren anderen Prozessoren kommunizieren, wie z. B. einer oder mehreren der PPUs 1700. In einer Ausführungsform implementiert die I/O-Einheit 1705 eine PCIe-(Peripheral Component Interconnect Express)-Schnittstelle für Kommunikation über einen PCIe-Bus, und die Verbindung 1702 ist ein PCIe-Bus. In alternativen Ausführungsformen kann die I/O-Einheit 1705 andere Arten von bekannten Schnittstellen für Kommunikation mit externen Geräten implementieren.I / O unit 1705 is configured to operate over the connection 1702 Communication (ie commands, data, etc.) from a host processor (not shown) sends and receives. The I / O unit 1705 can connect directly to the host processor 1702 or via one or more intermediate devices such. B. communicate a memory bridge. In one embodiment, the I / O unit 1705 about the connection 1702 communicate with one or more other processors, e.g. B. one or more of the PPUs 1700 , In one embodiment, the I / O unit implements 1705 a PCIe (Peripheral Component Interconnect Express) interface for communication via a PCIe bus, and the connection 1702 is a PCIe bus. In alternative embodiments, the I / O unit 1705 implement other types of known interfaces for communication with external devices.
Die I/O-Einheit 1705 decodiert Pakete, die über die Verbindung 1702 empfangen wurden. In einer Ausführungsform repräsentieren die Pakete Befehle, die so konfiguriert sind, dass sie die PPU 1700 verschiedene Operationen durchführen lassen. Die I/O-Einheit 1705 überträgt die decodierten Befehle an verschiedene andere Einheiten der PPU 1700, wie es die Befehle spezifizieren können. Zum Beispiel können manche Befehle an die Vorverarbeitungseinheit 1715 übertragen werden. Andere Befehle können an den Hub 1730 oder andere Einheiten der PPU 1700 übertragen werden, wie z. B. eine oder mehrere Kopier-Engines, einen Video-Encoder, einen Video-Decoder, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt). Mit anderen Worten, die I/O-Einheit 1705 ist so konfiguriert, dass sie die Kommunikation zwischen und unter den verschiedenen Logikeinheiten der PPU 1700 weiterleitet.I / O unit 1705 decodes packets over the link 1702 were received. In one embodiment, the packets represent commands configured to do the PPU 1700 have various operations performed. The I / O unit 1705 transmits the decoded instructions to various other units of the PPU 1700 how the commands can specify. For example, some commands can be sent to the preprocessing unit 1715 be transmitted. Other commands can be sent to the hub 1730 or other units of the PPU 1700 are transmitted such. B. one or more copy engines, a video encoder, a video decoder, a power management unit, etc. (not explicitly shown). In other words, I / O unit 1705 is configured to communicate between and among the various logic units of the PPU 1700 forwards.
In einer Ausführungsform codiert ein vom Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der der PPU 1700 Arbeit (Workload) zur Verarbeitung liefert. Ein Workload kann mehrere Anweisungen sowie Daten, die von diesen Anweisungen verarbeitet werden sollen, umfassen. Der Puffer ist ein Bereich in einem Speicher, auf den sowohl der Host-Prozessor als auch die PPU 1700 zugreifen (d. h. lesen/schreiben) können. Zum Beispiel kann die I/O-Einheit 1705 so konfiguriert sein, dass sie über Speicheranforderungen, die über die Verbindung 1702 übertragen werden, auf den Puffer in einem Systemspeicher zugreift, der mit der Verbindung 1702 verbunden ist. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und sendet dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 1700. Die Vorverarbeitungseinheit 1715 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Vorverarbeitungseinheit 1715 verwaltet einen oder mehrere Ströme, liest Befehle aus den Strömen und leitet Befehle an die verschiedenen Einheiten der PPU 1700 weiter.In one embodiment, a program executed by the host processor encodes an instruction stream in a buffer that the PPU 1700 Supplies work (workload) for processing. A workload can contain multiple statements, as well as data to be processed by these statements. The buffer is an area in memory that both the host processor and the PPU access 1700 access (ie read / write). For example, the I / O unit 1705 Be configured to meet storage requests over the connection 1702 are transferred, accesses the buffer in system memory associated with the connection 1702 connected is. In one embodiment, the host processor writes the instruction stream to the buffer and then sends a pointer to the beginning of the instruction stream to the PPU 1700 , The preprocessing unit 1715 receives pointers to one or more instruction streams. The preprocessing unit 1715 manages one or more streams, reads commands from the streams and forwards commands to the various units of the PPU 1700 further.
Die Vorverarbeitungseinheit 1715 ist mit einer Scheduler-Einheit 1720 gekoppelt, die die verschiedenen GPCs 1750 so konfiguriert, dass sie Aufgaben bzw. Tasks bearbeiten, die durch die ein oder mehreren Ströme definiert sind. Die Scheduler-Einheit 1720 ist so konfiguriert, dass sie Statusinformationen zu den verschiedenen Aufgaben verfolgt, die von der Scheduler-Einheit 1720 verwaltet werden. Der Status kann anzeigen, welchem GPC 1750 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, einen der Aufgabe zugewiesenen Prioritätsgrad und so weiter. Die Scheduler-Einheit 1720 verwaltet die Ausführung einer Vielzahl von Aufgaben auf den ein oder mehreren GPCs 1750. The preprocessing unit 1715 is with a scheduler unit 1720 coupled which the different GPCs 1750 configured to process tasks defined by the one or more streams. The scheduler unit 1720 is configured to track status information about the various tasks performed by the scheduler unit 1720 to get managed. The status can indicate which GPC 1750 a task is assigned, whether the task is active or inactive, a priority level assigned to the task, and so on. The scheduler unit 1720 manages the execution of a variety of tasks on the one or more GPCs 1750 ,
Die Scheduler-Einheit 1720 ist mit einer Arbeitsverteilungseinheit 1725 gekoppelt, die so konfiguriert ist, dass sie Aufgaben zur Ausführung auf den GPCs 1750 abfertigt. Die Arbeitsverteilungseinheit 1725 kann eine Anzahl von geplanten Aufgaben verfolgen, die von der Scheduler-Einheit 1720 empfangen wurden. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 1725 für jeden der GPCs 1750 einen Pool von anstehenden Aufgaben und einen Pool von aktiven Aufgaben. Der Pool von anstehenden Aufgaben kann eine Anzahl von Slots (z. B. 32 Slots) umfassen, die Aufgaben enthalten, die von einem bestimmten GPC 1750 zu bearbeiten sind. Der Pool von aktiven Aufgaben kann eine Anzahl von Slots (z. B. 4 Slots) für Aufgaben umfassen, die gerade von den GPCs 1750 aktiv bearbeitet werden. Wenn ein GPC 1750 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem Pool von aktiven Aufgaben für den GPC 1750 entfernt, und es wird eine der anderen Aufgaben aus dem Pool von anstehenden Aufgaben ausgewählt und für Ausführung auf dem GPC 1750 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 1750 untätig war, z. B. während des Wartens auf Auflösung einer Datenabhängigkeit, kann die aktive Aufgabe aus dem GPC 1750 entfernt und an den Pool von anstehenden Aufgaben zurückgegeben werden, während eine andere Aufgabe im Pool von anstehenden Aufgaben ausgewählt und für Ausführung auf dem GPC 1750 eingeplant wird.The scheduler unit 1720 is with a work distribution unit 1725 coupled, which is configured to perform tasks on the GPCs 1750 dispatches. The work distribution unit 1725 can track a number of scheduled tasks by the scheduler unit 1720 were received. In one embodiment, the work distribution unit manages 1725 for each of the GPCs 1750 a pool of upcoming tasks and a pool of active tasks. The pool of pending tasks can include a number of slots (e.g., 32 slots) that contain tasks performed by a particular GPC 1750 are to be processed. The pool of active tasks can include a number of slots (e.g., 4 slots) for tasks currently being performed by the GPCs 1750 be actively processed. If a GPC 1750 When a task finishes executing, that task is removed from the pool of active tasks for the GPC 1750 removed and one of the other tasks is selected from the pool of pending tasks and is to be executed on the GPC 1750 planned. If an active task on the GPC 1750 was idle, e.g. B. while waiting for resolution of a data dependency, the active task from the GPC 1750 removed and returned to the pool of pending tasks while another task is selected in the pool of pending tasks and for execution on the GPC 1750 is scheduled.
Die Arbeitsverteilungseinheit 1725 kommuniziert über das XBar 1770 mit einem oder mehreren GPCs 1750. Das XBar 1770 ist ein Verbindungsnetz, das viele Einheiten der PPU 1700 mit anderen Einheiten der PPU 1700 koppelt. Zum Beispiel kann das XBar 1770 so konfiguriert sein, dass es die Arbeitsverteilungseinheit 1725 mit einem bestimmten GPC 1750 koppelt. Obwohl nicht explizit gezeigt, können eine oder mehrere andere Einheiten der PPU 1700 auch über den Hub 1770 mit dem XBar 1770 verbunden sein.The work distribution unit 1725 communicates via the XBar 1770 with one or more GPCs 1750 , The XBar 1770 is a connection network that many units of the PPU 1700 with other units of the PPU 1700 coupled. For example, the XBar 1770 be configured to be the work distribution unit 1725 with a certain GPC 1750 coupled. Although not explicitly shown, one or more other units of the PPU 1700 also about the hub 1770 with the XBar 1770 be connected.
Die Aufgaben werden von der Scheduler-Einheit 1720 verwaltet und von der Arbeitsverteilungseinheit 1725 an ein GPC 1750 abgefertigt. Der GPC 1750 ist so konfiguriert, dass er die Aufgabe bearbeitet und Ergebnisse erzeugt. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 1750 verbraucht, über das XBar 1770 an einen anderen GPC 1750 weitergeleitet oder im Speicher 1704 gespeichert werden. Die Ergebnisse können über die Partitionseinheiten 1780, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in den bzw. aus dem Speicher 1704 implementieren, in den Speicher 1704 geschrieben werden. Die Ergebnisse können über den NVLink 1710 an eine andere PPU 1704 oder CPU übertragen werden. In einer Ausführungsform enthält die PPU 1700 eine Anzahl U von Partitionseinheiten 1780, die der Anzahl von separaten und getrennten Speichergeräten 1704 entspricht, die mit der PPU 1700 gekoppelt sind. Eine Partitionseinheit 1780 wird im Folgenden in Verbindung mit 16 näher beschrieben.The tasks are handled by the scheduler unit 1720 managed and managed by the work distribution unit 1725 to a GPC 1750 handled. The GPC 1750 is configured to process the task and produce results. The results can be from other tasks within the GPC 1750 used up via the XBar 1770 to another GPC 1750 forwarded or in memory 1704 get saved. The results can be found on the partition units 1780 that have a memory interface for reading and writing data to and from memory 1704 implement in memory 1704 to be written. The results can be viewed via the NVLink 1710 to another PPU 1704 or CPU are transferred. In one embodiment, the PPU includes 1700 a number U of partition units 1780 that is the number of separate and separate storage devices 1704 corresponds to that with the PPU 1700 are coupled. A partition unit 1780 is used in conjunction with 16 described in more detail.
In einer Ausführungsform führt ein Host-Prozessor (z. B. der Prozessor 120 von 1) einen Treiber-Kernel aus, der eine Anwendungsprogrammierschnittstelle (API) implementiert, die es einer oder mehreren auf dem Host-Prozessor ausgeführten Anwendungen ermöglicht, Operationen für Ausführung auf der PPU 1700 zu planen. In einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 1700 ausgeführt, und die PPU 1700 bietet Isolation, Dienstgüte (QoS, Quality of Service) und unabhängige Adressräume für die mehreren Rechenanwendungen. Eine Anwendung kann Anweisungen (d. h. API-Aufrufe) generieren, die den Treiber-Kernel veranlassen, eine oder mehrere Aufgaben für Ausführung durch die PPU 1700 zu generieren. Der Treiber-Kernel gibt Aufgaben an einen oder mehrere Ströme aus, die von der PPU 1700 bearbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von verwandten Threads umfassen, die hier als ein Warp bezeichnet werden. In einer Ausführungsform umfasst ein Warp 32 in Bezug stehende Threads, die parallel ausgeführt werden können. Kooperierende Threads können sich auf eine Vielzahl von Threads beziehen, einschließlich Anweisungen zur Durchführung der Aufgabe und dass Daten über Gemeinschaftsspeicher ausgetauscht werden können. Threads und kooperierende Threads werden in Verbindung mit 19 näher beschrieben.In one embodiment, a host processor (e.g., the processor 120 of 1 ) a driver kernel that implements an application programming interface (API) that enables one or more applications running on the host processor to perform operations on the PPU 1700 to plan. In one embodiment, multiple computing applications are run simultaneously by the PPU 1700 executed, and the PPU 1700 offers isolation, quality of service (QoS) and independent address spaces for the multiple computing applications. An application can generate instructions (ie, API calls) that cause the driver kernel to perform one or more tasks for execution by the PPU 1700 to generate. The driver kernel issues tasks to one or more streams that are generated by the PPU 1700 to be edited. Each task can include one or more groups of related threads, referred to herein as a warp. In one embodiment, a warp includes 32 related threads that can run in parallel. Cooperating threads can refer to a variety of threads, including instructions on how to perform the task and that data can be shared across shared storage. Threads and cooperating threads are associated with 19 described in more detail.
Beispiel-SpeicherpartitionseinheitExample memory partition unit
Die MMU 1890 stellt eine Schnittstelle zwischen dem GPC 1750 und der Partitionseinheit 1780 bereit. Die MMU 1890 kann Übersetzung von virtuellen Adressen in physische Adressen, Speicherschutz und Arbitrierung von Speicheranforderungen ermöglichen. In einer Ausführungsform stellt die MMU 1890 einen oder mehrere Übersetzungspuffer (TLBs, Translation Lookaside Buffers) bereit, um Übersetzung von virtuellen Adressen in physische Adressen im Speicher 1704 durchzuführen.The MMU 1890 provides an interface between the GPC 1750 and the partition unit 1780 ready. The MMU 1890 can enable translation of virtual addresses into physical addresses, memory protection and arbitration of memory requests. In one embodiment, the MMU provides 1890 one or more translation buffers (TLBs, Translation Lookaside Buffers) ready to translate virtual addresses into physical addresses in memory 1704 perform.
16 veranschaulicht eine Speicherpartitionseinheit 1780 der PPU 1700 von 15 gemäß einer Ausführungsform. Wie in 16 gezeigt, enthält die Speicherpartitionseinheit 1780 eine Rasteroperations-(ROP)-Einheit 1850, einen Level-2-Cache (L2-Cache) 1860 und eine Speicherschnittstelle 1870. Die Speicherschnittstelle 1870 ist mit dem Speicher 1704 gekoppelt. Die Speicherschnittstelle 1870 kann 32, 64, 128, 1024-Bit-Datenbusse oder dergleichen für Hochgeschwindigkeits-Datenübertragung implementieren. In einer Ausführungsform enthält die PPU 1700 U Speicherschnittstellen 1870, eine Speicherschnittstelle 1870 pro Paar Partitionseinheiten 1780, wobei jedes Paar Partitionseinheiten 1780 mit einem entsprechenden Speichergerät 1704 verbunden ist. Zum Beispiel kann die PPU 1700 mit bis zu Y Speichergeräten 1704 verbunden sein, wie z. B. Speicherstapel mit hoher Bandbreite oder Grafik mit Doppel-Datenrate, Version 5, Speicher mit synchronem dynamischen Direktzugriff oder anderen Arten von persistentem Speicher. 16 illustrates a storage partition unit 1780 the PPU 1700 of 15 according to one embodiment. As in 16 shown contains the storage partition unit 1780 a raster operation (ROP) unit 1850 , a level 2 cache (L2 cache) 1860 and a memory interface 1870 , The storage interface 1870 is with memory 1704 coupled. The storage interface 1870 can implement 32, 64, 128, 1024 bit data buses or the like for high speed data transmission. In one embodiment, the PPU 1700 U memory interfaces 1870 , a storage interface 1870 per pair of partition units 1780 , where each pair of partition units 1780 with an appropriate storage device 1704 connected is. For example, the PPU 1700 with up to Y storage devices 1704 be connected, such as B. High bandwidth memory stack or dual data rate graphics, version 5, synchronous dynamic random access memory, or other types of persistent memory.
In einer Ausführungsform implementiert die Speicherschnittstelle 1870 eine HBM2-Speicherschnittstelle und entspricht U einem halben U. In einer Ausführungsform befinden sich die HBM2-Speicherstapel auf demselben physischen Gehäuse wie die PPU 1700, was im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen zu erheblichen Leistungs- und Flächeneinsparungen führt. In einer Ausführungsform enthält jeder HBM2-Stapel vier Speicher-Dies und ist Y gleich 4, wobei der HBM2-Stapel zwei 128-Bit-Kanäle pro Die für insgesamt 8 Kanäle sowie eine Datenbusbreite von 1024 Bits aufweist.In one embodiment, the memory interface implements 1870 an HBM2 memory interface and corresponds to U half a U. In one embodiment, the HBM2 memory stacks are on the same physical chassis as the PPU 1700 , which leads to significant performance and space savings compared to conventional GDDR5-SDRAM systems. In one embodiment, each HBM2 stack contains and is four memory dies Y equal 4 , with the HBM2 stack two 128-bit channels per die for a total of 8 channels and a data bus width of 1024 Bits.
In einer Ausführungsform unterstützt der Speicher 1704 Einzelfehler korrigierenden und Doppelfehler erkennenden (SECDED) Fehlerkorrekturcode (ECC) zum Schutz von Daten. ECC bietet höhere Zuverlässigkeit für Rechenanwendungen, die empfindlich auf Datenbeschädigung reagieren. Zuverlässigkeit ist besonders wichtig in großen Cluster-Computerumgebungen, in denen PPUs 1700 sehr große Datensätze verarbeiten und/oder Anwendungen über längere Zeiträume laufen.In one embodiment, the memory supports 1704 Single error correcting and double error detecting (SECDED) error correction code (ECC) to protect data. ECC offers greater reliability for computing applications that are sensitive to data corruption. Reliability is particularly important in large cluster computing environments where PPUs are used 1700 process very large data sets and / or applications run over longer periods of time.
In einer Ausführungsform implementiert die PPU 1700 eine mehrstufige Speicherhierarchie. In einer Ausführungsform unterstützt die Speicherpartitionseinheit 1780 einen vereinheitlichten Speicher, um einen einzigen vereinheitlichten virtuellen Adressraum für Speicher der CPU und PPU 1700 bereitzustellen, der das Teilen von Daten zwischen virtuellen Speichersystemen ermöglicht. In einer Ausführungsform wird die Häufigkeit der Zugriffe einer PPU 1700 auf Speicher verfolgt, der sich auf anderen Prozessoren befindet, um sicherzustellen, dass Speicherseiten in den physischen Speicher derjenigen PPU 1700 verschoben werden, die häufiger auf die Seiten zugreift. In einer Ausführungsform unterstützt der NVLink 1710 Adressenübersetzungsdienste, die es der PPU 1700 ermöglichen, direkt auf Seitentabellen einer CPU zuzugreifen, und vollen Zugriff auf CPU-Speicher durch die PPU 1700 ermöglichen.In one embodiment, the PPU implements 1700 a multi-level storage hierarchy. In one embodiment, the storage partition unit supports 1780 a unified memory to a single unified virtual address space for memory of the CPU and PPU 1700 to provide, which enables the sharing of data between virtual storage systems. In one embodiment, the frequency of accesses by a PPU 1700 traces memory that resides on other processors to ensure that pages of memory are in the physical memory of that PPU 1700 that access the pages more often. In one embodiment, the NVLink supports 1710 Address translation services that it the PPU 1700 enable direct access to page tables of a CPU and full access to CPU memory by the PPU 1700 enable.
In einer Ausführungsform übertragen Kopier-Engines Daten zwischen mehreren PPUs 1700 oder zwischen PPUs 1700 und CPUs. Die Kopier-Engines können Seitenstörungen für Adressen erzeugen, die nicht in die Seitentabellen eingetragen sind. Die Speicherpartitionseinheit 1780 kann dann die Seitenstörungen bedienen und die Adressen in die Seitentabelle eintragen, woraufhin die Kopier-Engine die Übertragung durchführen kann. In einem herkömmlichen System ist Speicher für Mehrfach-Kopier-Engine-Operationen zwischen mehreren Prozessoren festgeheftet (d. h. nicht auslagerbar), was den verfügbaren Speicher erheblich reduziert. Bei Hardware-Seitenstörung können Adressen an die Kopier-Engines weitergegeben werden, ohne sich Sorgen zu machen, ob die Speicherseiten resident sind, und die Kopier-Operation ist transparent.In one embodiment, copy engines transfer data between multiple PPUs 1700 or between PPUs 1700 and CPUs. The copy engines can generate page faults for addresses that are not entered in the page tables. The storage partition unit 1780 can then serve the page faults and enter the addresses in the page table, whereupon the copy engine can carry out the transfer. In a conventional system, memory for multiple copy engine operations is pinned (ie, non-pageable) between multiple processors, which significantly reduces available memory. In the event of hardware page failure, addresses can be passed to the copy engines without worrying about whether the memory pages are resident and the copy operation is transparent.
Daten aus dem Speicher 1704 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 1780 abgerufen und im L2-Cache 1860, der On-Chip (auf dem Chip) angesiedelt ist und zwischen den verschiedenen GPCs 1750 geteilt wird, gespeichert werden. Wie gezeigt, enthält jede Speicherpartitionseinheit 1780 einen Teil des L2-Cache 1860, der einem entsprechenden Speichergerät 1704 zugeordnet ist. Untergeordnete Caches können dann in verschiedenen Einheiten innerhalb der GPCs 1750 implementiert werden. Zum Beispiel kann jeder der SMs 1840 einen Level-One-Cache (L1-Cache) implementieren. Der L1-Cache ist privater Speicher, der einem bestimmten SM 1840 fest zugeordnet ist. Daten aus dem L2-Cache 1860 können abgerufen und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der SMs 1840 gespeichert werden. Der L2-Cache 1860 ist mit der Speicherschnittstelle 1870 und dem XBar 1770 gekoppelt.Data from memory 1704 or other system memory can be from the storage partition unit 1780 accessed and in the L2 cache 1860 , the on-chip (on the chip) is located and between the different GPCs 1750 shared, saved. As shown, each storage partition unit contains 1780 part of the L2 cache 1860 of a corresponding storage device 1704 assigned. Subordinate caches can then be in different units within the GPCs 1750 be implemented. For example, each of the SMs 1840 implement a level one cache (L1 cache). The L1 cache is private memory that a specific SM 1840 is permanently assigned. Data from the L2 cache 1860 can be accessed and in each of the L1 caches for processing in the functional units of the SMs 1840 get saved. The L2 cache 1860 is with the storage interface 1870 and the XBar 1770 coupled.
Die ROP-Einheit 1850 führt grafische Rasteroperationen in Bezug auf Pixelfarbe durch, wie z. B. Farbkompression, Pixel-Blending und dergleichen. Die ROP-Einheit 1850 führt auch Tiefentesten in Verbindung mit der Raster-Engine 1825 durch und empfängt eine Tiefe für eine Abtast-Position, die einem Pixelfragment zugeordnet ist, von der Culling-Engine der Raster-Engine 1825. Die Tiefe wird gegen eine entsprechende Tiefe in einem Tiefenpuffer für eine dem Fragment zugeordnete Abtast-Position getestet. Wenn das Fragment den Tiefentest für die Abtast-Position besteht, aktualisiert die ROP-Einheit 1850 den Tiefenpuffer und sendet ein Ergebnis des Tiefentests an die Raster-Engine 1825. Man beachte, dass die Anzahl der Partitionseinheiten 1780 von der Anzahl der GPCs 1750 abweichen kann und daher jede ROP-Einheit 1850 mit jeder der GPCs 1750 gekoppelt sein kann. Die ROP-Einheit 1850 verfolgt die von den verschiedenen GPCs 1750 empfangenen Pakete und bestimmt, zu welchem GPC 1750 ein von der ROP-Einheit 1850 erzeugtes Ergebnis durch das XBar 1770 geleitet wird. Obwohl die ROP-Einheit 1850 in 16 innerhalb der Speicherpartitionseinheit 1780 enthalten ist, kann sich die ROP-Einheit 1850 in einer anderen Ausführungsform außerhalb der Speicherpartitionseinheit 1780 befinden. Zum Beispiel kann sich die ROP-Einheit 1850 im GPC 1750 oder einer anderen Einheit befinden.The ROP unit 1850 performs graphic raster operations related to pixel color, such as B. color compression, pixel blending and the like. The ROP unit 1850 also performs depth testing in conjunction with the raster engine 1825 through and receives a depth for a scan position associated with a pixel fragment from the raster engine culling engine 1825 , The depth is tested against a corresponding depth in a depth buffer for a scan position assigned to the fragment. If the fragment passes the depth test for the scan position, the ROP updates 1850 the depth buffer and sends a result of the depth test to the raster engine 1825 , Note that the number of partition units 1780 on the number of GPCs 1750 can deviate and hence every ROP unit 1850 with each of the GPCs 1750 can be coupled. The ROP unit 1850 keeps track of those from the various GPCs 1750 received packets and determines which GPC 1750 one from the ROP unit 1850 result generated by the XBar 1770 is directed. Although the ROP unit 1850 in 16 within the storage partition unit 1780 is included, the ROP unit 1850 in another embodiment outside the storage partition unit 1780 are located. For example, the ROP unit 1850 in the GPC 1750 or another unit.
Beispiel-AllgemeinverarbeitungsdusterSample Allgemeinverarbeitungsduster
17 veranschaulicht ein GPC 1750 der PPU 1700 von 15 gemäß einer Ausführungsform. Wie in 17 gezeigt, enthält jeder GPC 1750 eine Anzahl von Hardware-Einheiten zur Bearbeitung von Aufgaben. In einer Ausführungsform enthält jeder GPC 1750 einen Pipeline-Manager 1810, eine Pre-Rasteroperationseinheit (PROP) 1815, eine Raster-Engine 1825, ein Arbeitsverteilungs-Koppelfeld (WDX) 1880, eine Speicherverwaltungseinheit (MMU) 1890 und einen oder mehrere Datenverarbeitungs-Cluster (DPCs) 1820. Man beachte, dass der GPC 1750 von 17 anstelle der oder zusätzlich zu den in 17 gezeigten Einheiten andere Hardware-Einheiten enthalten kann. 17 illustrates a GPC 1750 the PPU 1700 of 15 according to one embodiment. As in 17 shown, each contains GPC 1750 a number of hardware units for processing tasks. In one embodiment, each contains GPC 1750 a pipeline manager 1810 , a pre-raster operation unit (PROP) 1815 , a raster engine 1825 , a work distribution switching matrix (WDX) 1880 , a memory management unit (MMU) 1890 and one or more data processing clusters (DPCs) 1820 , Note that the GPC 1750 of 17 instead of or in addition to the in 17 units shown may contain other hardware units.
In einer Ausführungsform wird der Betrieb des GPC 1750 durch den Pipeline-Manager 1810 gesteuert. Der Pipeline-Manager 1810 verwaltet die Konfiguration der ein oder mehreren DPCs 1820 für Bearbeitung von Aufgaben, die dem GPC 1750 zugewiesen sind. In einer Ausführungsform kann der Pipeline-Manager 1810 mindestens einen der ein oder mehreren DPCs 1820 so konfigurieren, dass er mindestens einen Teil einer Grafik-Rendering-Pipeline implementiert.In one embodiment, the operation of the GPC 1750 through the pipeline manager 1810 controlled. The pipeline manager 1810 manages the configuration of one or more DPCs 1820 for processing tasks that the GPC 1750 are assigned. In one embodiment, the pipeline manager 1810 at least one of the one or more DPCs 1820 Configure to implement at least part of a graphics rendering pipeline.
Jeder in dem GPC 1750 enthaltene DPC 1820 enthält einen M-Pipe-Controller (MPC) 1830, eine Primitiv-Engine 1835, einen oder mehrere SMs 1840, eine oder mehrere Textureinheiten 1842 und eine oder mehrere TTUs 700. Der SM 1840 kann ähnlich wie der oben beschriebene SM 132 strukturiert sein. Der MPC 1830 steuert den Betrieb des DPC 1820 und leitet die vom Pipeline-Manager 1810 empfangenen Pakete an die entsprechenden Einheiten im DPC 1820 weiter. Zum Beispiel können Pakete, die einem Vertex zugeordnet sind, an die Primitiv-Engine 1835 weitergeleitet werden, die so konfiguriert ist, dass sie Vertex-Attribute, die dem Vertex zugeordnet sind, aus dem Speicher 1704 holt. Im Gegensatz dazu können Pakete, die einem Shader-Programm zugeordnet sind, an den SM 1840 übertragen werden.Everyone in the GPC 1750 DPC included 1820 contains an M-Pipe-Controller (MPC) 1830 , a primitive engine 1835 , one or more SMs 1840 , one or more texture units 1842 and one or more TTUs 700 , The SM 1840 can be similar to the SM described above 132 be structured. The MPC 1830 controls the operation of the DPC 1820 and directs that from the pipeline manager 1810 received packets to the corresponding units in the DPC 1820 further. For example, packages associated with a vertex can be sent to the primitive engine 1835 that are configured to take vertex attributes associated with the vertex from memory 1704 get. In contrast, packets that are assigned to a shader program can be sent to the SM 1840 be transmitted.
Bei Konfiguration für Universal-Parallelberechnung kann eine einfachere Konfiguration im Vergleich zu Grafikverarbeitung verwendet werden. Insbesondere werden die in 15 gezeigten Grafikverarbeitungseinheiten mit fester Funktion umgangen, wodurch ein viel einfacheres Programmiermodell entsteht. In der Universal-Parallelberechnungs-Konfiguration weist die Arbeitsverteilungseinheit 1725 Thread-Blöcke direkt den DPCs 1820 zu und verteilt sie darauf. Die Threads in einem Block führen das gleiche Programm aus, wobei eine eindeutige Thread-ID bei der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 1840 verwendet wird, um das Programm auszuführen und Berechnungen durchzuführen, der Gemeinschaftsspeicher/L1-Cache 1970, um zwischen Threads zu kommunizieren, und die LSU 1954, um über den Gemeinschaftsspeicher/L 1-Cache 1970 und die Speicherpartitionseinheit 1780 globalen Speicher zu lesen und darin zu schreiben. Bei Konfiguration für Universal-Parallelberechnung kann der SM 1840 auch Befehle schreiben, mit denen die Scheduler-Einheit 1720 neue Arbeit auf den DPCs 1820 starten kann. Die TTU 700 kann verwendet werden, um räumliche Abfragen im Kontext der Universal-Parallelberechnung zu beschleunigen.When configured for universal parallel calculation, a simpler configuration can be used compared to graphics processing. In particular, the in 15 bypassed shown graphics processing units with a fixed function, which creates a much simpler programming model. In the universal parallel calculation configuration, the work distribution unit points 1725 Thread blocks directly to the DPCs 1820 and distribute them on it. The threads in a block run the same program, using a unique thread ID in the calculation to ensure that each thread produces unique results, with the SM 1840 The shared memory / L1 cache is used to run the program and perform calculations 1970 to communicate between threads and the LSU 1954 to go through the shared memory / L 1 cache 1970 and the storage partition unit 1780 read and write global memory. When configured for universal parallel calculation, the SM 1840 also write commands with which the scheduler unit 1720 new work on the DPCs 1820 can start. The TTU 700 can be used to speed up spatial queries in the context of universal parallel calculation.
Grafik-Render-PipelineGraphics rendering pipeline
Ein DPC 1820 kann so konfiguriert sein, dass er ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 1840 ausführt, was bestimmte Shading-Operationen mit der TTU 700 beschleunigen kann. Der Pipeline-Manager 1810 kann auch so konfiguriert sein, dass er von der Arbeitsverteilungseinheit 1725 empfangene Pakete an die entsprechenden Logikeinheiten innerhalb des GPC 1750 weiterleitet. Zum Beispiel können manche Pakete an Hardware-Einheiten mit fester Funktion in der PROP 1815 und/oder der Raster-Engine 1825 weitergeleitet werden, während andere Pakete an die DPCs 1820 zur Verarbeitung durch die Primitiv-Engine 1835 oder den SM 1840 weitergeleitet werden können. In einer Ausführungsform kann der Pipeline-Manager 1810 mindestens einen der ein oder mehreren DPCs 1820 so konfigurieren, dass er ein Modell eines neuronalen Netzes und/oder eine Rechen-Pipeline implementiert.A DPC 1820 can be configured to run a vertex shader program on the programmable streaming multiprocessor (SM) 1840 executes what certain shading operations with the TTU 700 can accelerate. The pipeline manager 1810 can also be configured to be from the work distribution unit 1725 packets received to the corresponding logic units within the GPC 1750 forwards. For example, some packages of hardware units with a fixed function in the PROP 1815 and / or the raster engine 1825 are forwarded while other packets are sent to the DPCs 1820 for processing by the primitive engine 1835 or the SM 1840 can be forwarded. In one embodiment, the pipeline manager 1810 at least one of the one or more DPCs 1820 Configure to implement a neural network model and / or compute pipeline.
Die PROP-Einheit 1815 ist so konfiguriert, dass sie von der Raster-Engine 1825 und den DPCs 1820 erzeugte Daten an eine Rasteroperations-(ROP)-Einheit weiterleitet, die in Verbindung mit 16 näher beschrieben wird. Die PROP-Einheit 1815 kann auch so konfiguriert sein, dass sie Optimierungen für Farbmischung durchführt, Pixeldaten organisiert, Adressenübersetzungen durchführt und dergleichen.The PROP unit 1815 is configured to be by the raster engine 1825 and the DPCs 1820 forwards generated data to a raster operation (ROP) unit in connection with 16 is described in more detail. The PROP unit 1815 can also be configured to perform color mixing optimizations, organize pixel data, perform address translations, and the like.
Die Raster-Engine 1825 enthält eine Anzahl von Hardware-Einheiten mit fester Funktion, die so konfiguriert sind, dass sie verschiedene Rasteroperationen durchführen können. In einer Ausführungsform enthält die Raster-Engine 1825 eine Setup-Engine, eine Grobraster-Engine, eine Culling-Engine, eine Clipping-Engine, eine Feinraster-Engine und eine Kachel-Coalescing-Engine. Die Setup-Engine empfängt transformierte Vertices und generiert Ebenengleichungen, die dem geometrischen Primitiv zugeordnet sind, das durch die Vertices definiert ist. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformationen (z. B. eine x,y-Abdeckungsmaske für eine Kachel) für das Primitiv zu generieren. Die Ausgabe der Grobraster-Engine wird zu der Culling-Engine übertragen, wo Fragmente, die dem Primitiv zugeordnet sind, dass einen Z-Test nicht besteht, einem Culling (Auslesen) unterzogen werden, und zu einer Clipping-Engine übertragen, wo Fragmente, die außerhalb eines Betrachtungsstumpfs liegen, einem Clipping (Abschneiden) unterzogen werden. Diejenigen Fragmente, die das Clipping und Culling überleben, können an die Feinraster-Engine übergeben werden, um Attribute für die Pixelfragmente auf Basis der von der Setup-Engine generierten Ebenengleichungen zu generieren. Die Ausgabe der Raster-Engine 1825 umfasst Fragmente, die zum Beispiel von einem Fragment-Shader zu verarbeiten sind, der innerhalb eines DPC 1820 implementiert ist. The raster engine 1825 contains a number of fixed-function hardware units that are configured to perform various raster operations. In one embodiment, the raster engine includes 1825 a setup engine, a coarse screen engine, a culling engine, a clipping engine, a fine screen engine and a tile coalescing engine. The setup engine receives transformed vertices and generates plane equations associated with the geometric primitive defined by the vertices. The level equations are transferred to the coarse grid engine to generate coverage information (e.g., an x, y coverage mask for a tile) for the primitive. The output of the coarse screen engine is transferred to the culling engine, where fragments associated with the primitive that a z-test does not pass are subjected to culling (reading) and transferred to a clipping engine, where fragments, that are outside of a stump are subjected to clipping. Those fragments that survive clipping and culling can be passed to the fine grid engine to generate attributes for the pixel fragments based on the level equations generated by the setup engine. The output of the raster engine 1825 includes fragments that are to be processed, for example, by a fragment shader operating within a DPC 1820 is implemented.
Im Einzelnen ist die PPU 1700 so konfiguriert, dass sie Befehle empfängt, die Shader-Programme zur Verarbeitung von Grafikdaten spezifizieren. Grafikdaten können als ein Satz von Primitiven definiert sein, wie z. B. Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen und dergleichen. Typischerweise enthält ein Primitiv Daten, die eine Anzahl von Vertices bzw. Eckpunkten für das Primitiv spezifizieren (z. B. in einem Modell-Raum-Koordinatensystem), sowie Attribute, die einem jedem Vertex des Primitivs zugeordnet sind. Die PPU 1700 kann so konfiguriert sein, dass sie die Grafik-Primitive verarbeitet, um einen Bildpuffer zu erzeugen (d. h. Pixeldaten für jedes Pixel des Displays), zum Beispiel unter Verwendung der TTU 700 als Hardwarebeschleunigungs-Ressource.Specifically, the PPU 1700 configured to receive commands that specify shader programs for processing graphic data. Graphic data can be defined as a set of primitives, such as: B. points, lines, triangles, quadrilaterals, triangular strips and the like. Typically, a primitive contains data that specifies a number of vertices or vertices for the primitive (e.g. in a model space coordinate system), as well as attributes that are assigned to each vertex of the primitive. The PPU 1700 can be configured to process the graphics primitives to generate an image buffer (ie, pixel data for each pixel of the display), for example using the TTU 700 as a hardware acceleration resource.
Eine Anwendung schreibt Modelldaten für eine Szene (d. h. eine Sammlung von Vertices und Attributen) in einen Speicher, wie z. B. einen Systemspeicher oder Speicher 1704. Die Modelldaten definieren jedes der Objekte, die auf einem Display sichtbar sein können. Die Modelldaten können auch eine oder mehrere BVHs wie oben beschrieben definieren. Die Anwendung führt dann einen API-Aufruf an den Treiber-Kernel durch, der anfordert, dass die Modelldaten gerendert und angezeigt werden. Der Treiber-Kernel liest die Modelldaten und schreibt Befehle an die ein oder mehreren Ströme, um Operationen zur Verarbeitung der Modelldaten durchzuführen. Die Befehle können sich auf verschiedene Shader-Programme beziehen, die auf den SMs 1840 der PPU 1700 zu implementieren sind, einschließlich eines oder mehrerer Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader, Pixel-Shader, Strahlerzeugungs-Shader, Strahlschnittpunkt-Shader, Strahltreffer-Shader und Strahlfehlschuss-Shader (diese entsprechen den durch die DirectX Raytracing (DXR) API definierten Shadern und ignorieren irgendeine Unterscheidung zwischen „Nächstgelegener-Treffer“ und „Irgendein-Treffer“ -Shadern; siehe https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-raytracing/). Zum Beispiel kann ein oder können mehrere SMs 1840 so konfiguriert sein, dass sie ein Vertex-Shader-Programm ausführen, das eine Anzahl von Vertices verarbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die verschiedenen SMs 1840 so konfiguriert sein, dass sie verschiedene Shader-Programme gleichzeitig ausführen. Zum Beispiel kann eine erste Teilmenge von SMs 1840 so konfiguriert sein, dass sie ein Vertex-Shader-Programm ausführt, während eine zweite Teilmenge von SMs 1840 so konfiguriert sein kann, dass sie ein Pixel-Shader-Programm ausführt. Die erste Teilmenge von SMs 1840 verarbeitet Vertexdaten zu verarbeiteten Vertexdaten und schreibt die verarbeiteten Vertexdaten in den L2-Cache 1860 und/oder den Speicher 1704 (siehe 16). Nachdem die verarbeiteten Vertexdaten gerastert (d. h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert) worden sind, um Fragmentdaten zu erzeugen, führt die zweite Teilmenge von SMs 1840 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt und in den Bildpuffer im Speicher 1704 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden, wobei unterschiedliche Daten derselben Szene gemäß einem Pipeline-Vorgehen verarbeitet werden, bis alle Modelldaten für die Szene in den Bildpuffer gerendert worden sind. Anschließend wird der Inhalt des Bildpuffers an eine Display-Steuerung zur Anzeige auf einem Display-Gerät übertragen.An application writes model data for a scene (ie, a collection of vertices and attributes) into a memory, such as. B. a system memory or memory 1704 , The model data define each of the objects that can be visible on a display. The model data can also define one or more BVHs as described above. The application then makes an API call to the driver kernel, which requests that the model data be rendered and displayed. The driver kernel reads the model data and writes commands to the one or more streams to perform operations to process the model data. The commands can refer to various shader programs that are on the SMs 1840 the PPU 1700 are to be implemented, including one or more vertex shaders, hull shaders, domain shaders, geometry shaders, pixel shaders, beam generation shaders, beam intersection shaders, beam hit shaders and beam miss shaders (these correspond to those by DirectX Raytracing (DXR) API defined shaders and ignore any distinction between "closest hit" and "any hit"shaders; see https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-raytracing/). For example, one or more SMs 1840 be configured to run a vertex shader program that processes a number of vertices defined by the model data. In one embodiment, the different SMs 1840 configured to run different shader programs at the same time. For example, a first subset of SMs 1840 configured to run a vertex shader program while a second subset of SMs 1840 can be configured to run a pixel shader program. The first subset of SMs 1840 processes vertex data into processed vertex data and writes the processed vertex data into the L2 cache 1860 and / or the memory 1704 (please refer 16 ). After the processed vertex data has been rasterized (ie transformed from three-dimensional data into two-dimensional data in the screen space) to generate fragment data, the second subset of SMs 1840 a pixel shader to generate processed fragment data, which is then mixed with other processed fragment data and placed in the frame buffer in memory 1704 to be written. The vertex shader program and the pixel shader program can be executed simultaneously, with different data of the same scene being processed according to a pipeline procedure until all model data for the scene have been rendered in the image buffer. The content of the image buffer is then transferred to a display controller for display on a display device.
18 ist ein Konzeptdiagramm einer mittels der PPU 1700 von 15 implementierten Grafikverarbeitungs-Pipeline 2000. Die Grafikverarbeitungs-Pipeline 2000 ist ein abstraktes Flussdiagramm der zur Erzeugung von 2D-Computerbildern aus 3D-Geometriedaten implementierten Verarbeitungsschritte. Wie bekannt, können Pipeline-Architekturen Operationen mit langer Latenz effizienter durchführen, indem sie die Operation in eine Vielzahl von Stufen aufteilen, wobei der Ausgang jeder Stufe mit dem Eingang der nächstfolgenden Stufe gekoppelt ist. Somit empfängt die Grafikverarbeitungs-Pipeline 2000 Eingabedaten 2001, die von einer Stufe zur nächsten Stufe der Grafikverarbeitungs-Pipeline 2000 übertragen werden, um Ausgabedaten 2002 zu erzeugen. In einer Ausführungsform kann die Grafikverarbeitungs-Pipeline 2000 eine durch die OpenGL®-API definierte Grafikverarbeitungs-Pipeline repräsentieren. Optional kann die Grafikverarbeitungs-Pipeline 2000 im Kontext der Funktionalität und Architektur der vorherigen Figuren und/oder irgendwelcher nachfolgender Figur(en) implementiert werden. Wie oben mit Bezug auf 14 erörtert, kann die Strahlverfolgung zur Verbesserung der durch Rasterung von geometrischen Primitiven erzeugten Bildqualität verwendet werden. In manchen Ausführungsformen können die in dieser Anmeldung offenbarten Strahlverfolgungs-Operationen und TTU-Strukturen auf einen oder mehrere Zustände der Grafikverarbeitungs-Pipeline 2000 angewendet werden, um die subjektive Bildqualität zu verbessern. eighteen is a conceptual diagram of one using the PPU 1700 of 15 implemented graphics processing pipeline 2000 , The graphics processing pipeline 2000 is an abstract flowchart of the processing steps implemented to generate 2D computer images from 3D geometry data. As is known, pipeline architectures can perform long latency operations more efficiently by dividing the operation into a plurality of stages, with the output of each stage coupled to the input of the next stage. Thus, the graphics processing pipeline receives 2000 input data 2001 by one level to the next level of the graphics processing pipeline 2000 transferred to output data 2002 to create. In one embodiment, the graphics processing pipeline 2000 represent a graphics processing pipeline defined by the OpenGL® API. Optionally, the graphics processing pipeline 2000 implemented in the context of the functionality and architecture of the previous figures and / or any subsequent figure (s). As above with reference to 14 discussed, ray tracing can be used to improve the image quality generated by rasterizing geometric primitives. In some embodiments, the ray tracing operations and TTU structures disclosed in this application can point to one or more states of the graphics processing pipeline 2000 applied to improve subjective image quality.
Wie in 18 gezeigt, weist die Grafikverarbeitungs-Pipeline 2000 eine Pipeline-Architektur auf, die eine Anzahl von Stufen umfasst. Die Stufen umfassen, sind aber nicht beschränkt auf, eine Datenaufbaustufe 2010, eine Vertex-Shading-Stufe 2020, eine Primitiv-Aufbaustufe 2030, eine Geometrie-Shading-Stufe 2040, eine Viewport Skalier-, Cull- und Clipp- (VSCC) Stufe 550, eine Rasterungsstufe 2060, eine Fragment-Shading-Stufe 2070 und eine Rasteroperationen-Stufe 2080. Die Eingabedaten 2001 umfassen in einer Ausführungsform Befehle, die die Verarbeitungseinheiten so konfigurieren, dass die Stufen der Grafikverarbeitungs-Pipeline 2000 und geometrische Primitive (z. B. Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen oder -fächer usw.), die von den Stufen zu verarbeiten sind, implementiert werden. Die Ausgabedaten 2002 können Pixeldaten (d. h. Farbdaten) umfassen, die in einen Bildpuffer oder eine andere Art von Oberflächendatenstruktur in einem Speicher kopiert werden.As in eighteen shown, the graphics processing pipeline 2000 a pipeline architecture comprising a number of stages. The levels include, but are not limited to, a data build level 2010 , a vertex shading level 2020 , a primitive advanced level 2030 , a geometry shading level 2040 , a Viewport scaling, culling and clipping (VSCC) level 550 , a grid level 2060 , a fragment shading level 2070 and a raster operations stage 2080 , The input data 2001 In one embodiment, include instructions that configure the processing units to match the stages of the graphics processing pipeline 2000 and geometric primitives (e.g. dots, lines, triangles, quadrilaterals, triangular stripes or fans, etc.) to be processed by the levels. The output data 2002 may include pixel data (ie, color data) copied to an image buffer or other type of surface data structure in memory.
Die Datenaufbaustufe 2010 empfängt die Eingabedaten 2001, die Vertexdaten für Oberflächen höherer Ordnung, Primitive oder dergleichen spezifizieren. Die Datenaufbaustufe 2010 sammelt die Vertexdaten in einem temporären Speicher oder einer Warteschlange, wie z. B. durch Empfangen eines Befehls vom Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher enthält, und Lesen der Vertexdaten aus dem Puffer. Die Vertexdaten werden dann zur Verarbeitung an die Vertex-Shading-Stufe 2020 übertragen.The data development level 2010 receives the input data 2001 that specify vertex data for higher order surfaces, primitives, or the like. The data development level 2010 collects the vertex data in temporary memory or a queue, such as By receiving a command from the host processor that contains a pointer to a buffer in memory and reading the vertex data from the buffer. The vertex data is then sent to the vertex shading stage for processing 2020 transfer.
Die Vertex-Shading-Stufe 2020 verarbeitet Vertexdaten, indem sie eine Reihe von Operationen (d. h. einen Vertex-Shader oder ein Programm) einmal für jeden der Vertices ausführt. Vertices können z. B. als ein 4-Koordinaten-Vektor (d. h. <x, y, z, w>) angegeben werden, der einem oder mehreren Vertex-Attributen zugeordnet ist (z. B. Farbe, Texturkoordinaten, Flächennormale, usw.). Die Vertex-Shading-Stufe 2020 kann einzelne Vertex-Attribute wie z. B. Position, Farbe, Texturkoordinaten und dergleichen handhaben. Mit anderen Worten führt die Vertex-Shading-Stufe 2020 Operationen an den Vertex-Koordinaten oder anderen Vertex-Attributen durch, die einem Vertex zugeordnet sind. Solche Operationen umfassen gewöhnlich Beleuchtungsoperationen (d. h. Modifizieren von Farbattributen für einen Vertex) und Transformationsoperationen (d. h. Modifizieren des Koordinatenraums für einen Vertex). Zum Beispiel können Vertices mit Hilfe von Koordinaten in einem Objekt-Koordinatenraum spezifiziert werden, welche durch Multiplikation der Koordinaten mit einer Matrix transformiert werden, die die Koordinaten aus dem Objekt-Koordinatenraum in einen Welt-Raum oder einen NCD-Raum (Raum mit normierten Gerätekoordinaten) übersetzt. Die Vertex-Shading-Stufe 2020 erzeugt transformierte Vertexdaten, die an die Primitiv-Aufbaustufe 2030 übertragen werden.The vertex shading level 2020 processes vertex data by performing a series of operations (ie, a vertex shader or program) once for each of the vertices. Vertices can e.g. B. can be specified as a 4-coordinate vector (ie <x, y, z, w>) which is assigned to one or more vertex attributes (e.g. color, texture coordinates, surface normal, etc.). The vertex shading level 2020 can separate vertex attributes such as B. handle position, color, texture coordinates and the like. In other words, the vertex shading stage leads 2020 Operations on the vertex coordinates or other vertex attributes associated with a vertex. Such operations usually include lighting operations (ie, modifying color attributes for a vertex) and transformation operations (ie, modifying the coordinate space for a vertex). For example, vertices can be specified with the help of coordinates in an object coordinate space, which are transformed by multiplying the coordinates with a matrix, which converts the coordinates from the object coordinate space into a world space or an NCD space (space with standardized device coordinates ) translated. The vertex shading level 2020 generates transformed vertex data that is at the primitive level 2030 be transmitted.
Die Primitiv-Aufbaustufe 2030 sammelt Vertices, die von der Vertex-Shading-Stufe 2020 ausgegeben werden, und gruppiert die Vertices zu geometrischen Primitiven für Verarbeitung durch die Geometrie-Shading-Stufe 2040. Zum Beispiel kann die Primitiv-Aufbaustufe 2030 so konfiguriert sein, dass sie immer drei aufeinanderfolgende Vertices als ein geometrisches Primitiv (d. h. ein Dreieck) für Übertragung an die Geometrie-Shading-Stufe 2040 gruppiert. In manchen Ausführungsformen können bestimmte Vertices für aufeinanderfolgende geometrische Primitive wiederverwendet werden (z. B. können zwei aufeinanderfolgende Dreiecke in einem Dreieckstreifen zwei Vertices gemeinsam benutzen). Die Primitiv-Aufbaustufe 2030 überträgt geometrische Primitive (d. h. eine Sammlung von zugehörigen Vertices) an die Geometrie-Shading-Stufe 2040.The primitive advanced level 2030 collects vertices by the vertex shading level 2020 and groups the vertices into geometric primitives for processing by the geometry shading level 2040 , For example, the primitive advanced level 2030 be configured to always have three consecutive vertices as a geometric primitive (ie a triangle) for transmission to the geometry shading stage 2040 grouped. In some embodiments, certain vertices can be reused for successive geometric primitives (e.g., two successive triangles in a triangle strip can share two vertices). The primitive advanced level 2030 transfers geometric primitives (ie a collection of related vertices) to the geometry shading stage 2040 ,
Die Geometrie-Shading-Stufe 2040 verarbeitet geometrische Primitive, indem sie eine Reihe von Operationen (d. h. einen Geometrie-Shader oder ein Programm) an den geometrischen Primitiven ausführt. Tesselierungs-Operationen können aus jedem geometrischen Primitiv ein oder mehrere geometrische Primitive erzeugen. Mit anderen Worten kann die Geometrie-Shading-Stufe 2040 jedes geometrische Primitiv in ein feineres Maschennetz aus zwei oder mehr geometrischen Primitiven für Verarbeitung durch den Rest der Grafikverarbeitungs-Pipeline 2000 unterteilen. Die Geometrie-Shading-Stufe 2040 überträgt geometrische Primitive an die Viewport SCC Stufe 550.The geometry shading level 2040 processes geometric primitives by performing a series of operations (that is, a geometry shader or program) on the geometric primitives. Tessellation operations can generate one or more geometric primitives from each geometric primitive. In other words, the geometry shading level 2040 each geometric primitive into a finer mesh of two or more geometric primitives for processing by the rest of the graphics processing pipeline 2000 divide. The geometry shading level 2040 transfers geometric primitives to the Viewport SCC level 550 ,
In einer Ausführungsform kann die Grafikverarbeitungs-Pipeline 2000 innerhalb eines Streaming-Multiprozessors arbeiten, und die Vertex-Shading-Stufe 2020, die Primitiv-Aufbaustufe 2030, die Geometrie-Shading-Stufe 2040, die Fragment-Shading-Stufe 2070 und/oder zugehörige Hard- bzw. Software können sequentiell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen abgeschlossen sind, kann in einer Ausführungsform die Viewport SCC Stufe 550 die Daten verwenden. In einer Ausführungsform können von einer oder mehreren Stufen der Grafikverarbeitungs-Pipeline 2000 verarbeitete Primitiv-Daten in einen Cache geschrieben werden (z. B. L1-Cache, einen Vertex-Cache, usw.). In diesem Fall kann die Viewport SCC Stufe 550 in einer Ausführungsform auf die Daten im Cache zugreifen. In einer Ausführungsform sind die Viewport SCC Stufe 550 und die Rasterungsstufe 2060 als Schaltungen mit fester Funktion implementiert.In one embodiment, the graphics processing pipeline 2000 work within a streaming multiprocessor, and the vertex shading stage 2020 who have favourited Primitive Advanced Level 2030 who have favourited Geometry Shading Level 2040 who have favourited Fragment Shading Level 2070 and / or associated hardware or software can perform processing operations sequentially. In one embodiment, once the sequential processing operations are completed, the Viewport SCC stage 550 use the data. In one embodiment, one or more stages of the graphics processing pipeline 2000 processed primitive data are written to a cache (e.g. L1 cache, a vertex cache, etc.). In this case, the Viewport SCC level 550 access the data in the cache in one embodiment. In one embodiment, the Viewport are SCC level 550 and the screening level 2060 implemented as circuits with a fixed function.
Die Viewport SCC Stufe 550 führt die Skalierung, das Culling und das Clipping der geometrischen Primitive durch. Jeder Oberfläche, die gerendert wird, ist eine abstrakte Kameraposition zugeordnet. Die Kameraposition stellt den Standort eines Betrachters dar, der auf die Szene schaut, und definiert einen Betrachtungsstumpf, der die Objekte der Szene umschließt. Der Betrachtungsstumpf kann eine Betrachtungsebene, eine hintere Ebene und vier Clipping-Ebenen umfassen. Jedes geometrische Primitiv, das sich vollständig außerhalb des Betrachtungsstumpfs befindet, kann einem Culling unterzogen (d. h. verworfen) werden, da das geometrische Primitiv nicht zu der endgültigen gerenderten Szene beiträgt. Irgendein geometrisches Primitiv, das sich teils innerhalb des Betrachtungsstumpfs und teils außerhalb des Betrachtungsstumpfs befindet, kann abgeschnitten werden (d. h. in ein neues geometrisches Primitiv umgewandelt werden, das innerhalb des Betrachtungsstumpfs eingeschlossen ist). Darüber hinaus können geometrische Primitive jeweils auf Basis einer Tiefe des Betrachtungsstumpfs skaliert werden. Alle potentiell sichtbaren geometrischen Primitive werden dann an die Rasterungsstufe 2060 übertragen.The Viewport SCC level 550 performs the scaling, culling and clipping of the geometric primitives. An abstract camera position is assigned to each surface that is rendered. The camera position represents the location of a viewer looking at the scene and defines a stump of observation that encloses the objects of the scene. The viewing stump can include a viewing level, a back level, and four clipping levels. Any geometric primitive that is completely outside of the stump can be culled (ie discarded) because the geometric primitive does not contribute to the final rendered scene. Any geometric primitive that is partially inside the viewing stump and partially outside the viewing stump can be cut off (ie, converted to a new geometric primitive that is enclosed within the viewing stump). In addition, geometric primitives can be scaled based on the depth of the observation stump. All potentially visible geometric primitives are then added to the screening level 2060 transfer.
Die Rasterungsstufe 2060 wandelt die geometrischen 3D-Primitive in 2D-Fragmente um (z. B. für Anzeige usw. verwendbar). Die Rasterungsstufe 2060 kann so konfiguriert sein, dass sie die Vertices der geometrischen Primitive verwendet, um einen Satz von Ebenengleichungen zu erstellen, aus denen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 2060 kann auch eine Abdeckungsmaske für eine Vielzahl von Pixeln berechnen, die angibt, ob eine oder mehrere Abtast-Positionen für das Pixel das geometrische Primitiv abschneiden. In einer Ausführungsform kann auch Z-Testen durchgeführt werden, um zu bestimmen, ob das geometrische Primitiv von anderen geometrischen Primitiven, die bereits gerastert wurden, verdeckt wird. Die Rasterungsstufe 2060 erzeugt Fragmentdaten (d. h. interpolierte Vertex-Attribute, die einer bestimmten Abtast-Position für jedes abgedeckte Pixel zugeordnet sind), die an die Fragment-Shading-Stufe 2070 übertragen werden.The screening level 2060 converts the geometric 3D primitives into 2D fragments (e.g. usable for display etc.). The screening level 2060 can be configured to use the vertices of the geometric primitives to create a set of plane equations from which various attributes can be interpolated. The screening level 2060 can also compute a cover mask for a plurality of pixels, indicating whether one or more sample positions for the pixel cut off the geometric primitive. In one embodiment, Z testing can also be performed to determine whether the geometric primitive is hidden by other geometric primitives that have already been rasterized. The screening level 2060 generates fragment data (ie, interpolated vertex attributes associated with a particular scan position for each covered pixel) that is at the fragment shading level 2070 be transmitted.
Die Fragment-Shading-Stufe 2070 verarbeitet Fragmentdaten, indem sie eine Reihe von Operationen (z. B. einen Fragment-Shader oder ein Programm) an jedem der Fragmente durchführt. Die Fragment-Shading-Stufe 2070 kann Pixeldaten (d. h. Farbwerte) für das Fragment erzeugen, z. B. indem sie Beleuchtungs-Operationen oder Abtasten von Texturabbildungen unter Verwendung interpolierter Texturkoordinaten für das Fragment durchführt. Die Fragment-Shading-Stufe 2070 erzeugt Pixeldaten, die an die Rasteroperationen-Stufe 2080 übertragen werden.The fragment shading level 2070 processes fragment data by performing a series of operations (e.g., a fragment shader or program) on each of the fragments. The fragment shading level 2070 can generate pixel data (ie, color values) for the fragment, e.g. B. by performing lighting operations or scanning texture maps using interpolated texture coordinates for the fragment. The fragment shading level 2070 generates pixel data related to the raster operations stage 2080 be transmitted.
Die Rasteroperationen-Stufe 2080 kann verschiedene Operationen an den Pixeldaten durchführen, wie z. B. Alpha-Tests, Schablonentests und Mischen der Pixeldaten mit anderen Pixeldaten, die anderen Fragmenten entsprechen, die dem Pixel zugeordnet sind. Wenn die Rasteroperationen-Stufe 2080 die Verarbeitung der Pixeldaten (d. h. der Ausgabedaten 2002) abgeschlossen hat, können die Pixeldaten in ein Renderziel wie z. B. einen Bildpuffer, einen Farbpuffer oder dergleichen geschrieben werden.The raster operations level 2080 can perform various operations on the pixel data, such as B. Alpha tests, template tests and mixing the pixel data with other pixel data corresponding to other fragments associated with the pixel. If the raster operations stage 2080 the processing of the pixel data (ie the output data 2002 ) has completed, the pixel data can be transferred to a rendering target such as B. an image buffer, a color buffer or the like.
Man beachte, dass eine oder mehrere zusätzliche Stufen zusätzlich zu oder anstelle einer oder mehreren der oben beschriebenen Stufen in die Grafikverarbeitungs-Pipeline 2000 aufgenommen werden können. Verschiedene Implementierungen der abstrakten Grafikverarbeitungs-Pipeline können unterschiedliche Stufen implementieren. Darüber hinaus können in manchen Ausführungsformen eine oder mehrere der oben beschriebenen Stufen (wie z. B. die Geometrie-Shading-Stufe 2040) von der Grafikverarbeitungs-Pipeline ausgeschlossen sein. Andere Arten von Grafikverarbeitungs-Pipelines werden als im Schutzumfang der vorliegenden Offenbarung liegend betrachtet. Darüber hinaus kann jede der Stufen der Grafikverarbeitungs-Pipeline 2000 von einer oder mehreren dedizierten Hardware-Einheiten innerhalb eines Grafikprozessors wie z. B. der PPU 200 implementiert werden. Andere Stufen der Grafikverarbeitungs-Pipeline 2000 können durch programmierbare Hardware-Einheiten wie z. B. den SM 1840 der PPU 1700 implementiert werden.Note that one or more additional stages are in addition to or instead of one or more of the stages described above in the graphics processing pipeline 2000 can be included. Different implementations of the abstract graphics processing pipeline can implement different stages. In addition, in some embodiments, one or more of the levels described above (such as the geometry shading level 2040 ) be excluded from the graphics processing pipeline. Other types of graphics processing pipelines are considered to be within the scope of the present disclosure. In addition, each of the stages of the graphics processing pipeline 2000 of one or more dedicated hardware units within a graphics processor such as B. the PPU 200 be implemented. Other stages of the graphics processing pipeline 2000 can by programmable hardware units such. B. the SM 1840 the PPU 1700 be implemented.
Die Grafikverarbeitungs-Pipeline 2000 kann über eine Anwendung implementiert werden, die von einem Host-Prozessor ausgeführt wird, wie z. B. einer CPU 120. In einer Ausführungsform kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, welche verschiedene Funktionen definiert, die von einer Anwendung genutzt werden können, um grafische Daten für Anzeige zu generieren. Der Gerätetreiber ist ein Softwareprogramm, das eine Vielzahl von Anweisungen enthält, die den Betrieb der PPU 1700 steuern. Die API bietet einem Programmierer eine Abstraktion, die es einem Programmierer ermöglicht, spezialisierte Grafikhardware wie z. B. die PPU 1700 zu verwenden, um die grafischen Daten zu erzeugen, ohne dass der Programmierer den spezifischen Befehlssatz für die PPU 1700 verwenden muss. Die Anwendung kann einen API-Aufruf enthalten, der an den Gerätetreiber für die PPU 1700 weitergeleitet wird. Der Gerätetreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu reagieren. In manchen Fällen kann der Gerätetreiber Operationen durchführen, indem er Anweisungen auf der CPU ausführt. In anderen Fällen kann der Gerätetreiber zumindest teilweise Operationen durchführen, indem er Operationen auf der PPU 1700 über eine Eingabe/Ausgabe-Schnittstelle zwischen der CPU und der PPU 1700 startet. In einer Ausführungsform ist der Gerätetreiber so konfiguriert, dass er die Grafikverarbeitungs-Pipeline 2000 unter Verwendung der Hardware der PPU 1700 implementiert.The graphics processing pipeline 2000 can be implemented via an application that is run by a host processor, such as B. a CPU 120 , In one embodiment, a device driver can implement an application programming interface (API) that defines various functions that can be used by an application to generate graphical data for display. The device driver is a software program that contains a variety of instructions that guide the operation of the PPU 1700 Taxes. The API offers an abstraction to a programmer that enables a programmer to use specialized graphics hardware such as B. the PPU 1700 to use to generate the graphical data without the programmer having the specific instruction set for the PPU 1700 must use. The application can include an API call to the device driver for the PPU 1700 is forwarded. The device driver interprets the API call and performs various operations to respond to the API call. In some cases, the device driver can perform operations by executing instructions on the CPU. In other cases, the device driver can at least partially perform operations by performing operations on the PPU 1700 via an input / output interface between the CPU and the PPU 1700 starts. In one embodiment, the device driver is configured to be the graphics processing pipeline 2000 using the hardware of the PPU 1700 implemented.
Innerhalb der PPU 1700 können verschiedene Programme ausgeführt werden, um die verschiedenen Stufen der Grafikverarbeitungs-Pipeline 2000 zu implementieren. Zum Beispiel kann der Gerätetreiber einen Kernel auf der PPU 1700 starten, um die Vertex-Shading-Stufe 2020 auf einem SM 1840 (oder mehreren SMs 1840) durchzuführen. Der Gerätetreiber (oder der von der PPU 1800 ausgeführte anfängliche Kernel) kann auch andere Kernel auf der PPU 1800 starten, um andere Stufen der Grafikverarbeitungs-Pipeline 2000 auszuführen, wie z. B. die Geometrie-Shading-Stufe 2040 und die Fragment-Shading-Stufe 2070. Darüber hinaus können einige der Stufen der Grafikverarbeitungs-Pipeline 2000 auf Festeinheiten-Hardware implementiert werden, wie z. B. einem Rasterer oder einem Datenassembler, der in der PPU 1700 implementiert ist. Man beachte, dass Ergebnisse aus einem Kernel von einer oder mehreren dazwischenliegenden Hardware-Einheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 1840 verarbeitet werden.Within the PPU 1700 Different programs can run to the different stages of the graphics processing pipeline 2000 to implement. For example, the device driver can have a kernel on the PPU 1700 start to the vertex shading level 2020 on an SM 1840 (or several SMs 1840 ) to carry out. The device driver (or that of the PPU 1800 running initial kernel) may also be other kernels on the PPU 1800 start to other stages of the graphics processing pipeline 2000 execute such. B. the geometry shading level 2040 and the fragment shading level 2070 , It can also use some of the stages of the graphics processing pipeline 2000 be implemented on fixed unit hardware such as B. a rasterizer or a data assembler in the PPU 1700 is implemented. Note that results from a kernel can be processed by one or more intermediate fixed-function hardware units before being processed by a subsequent kernel on an SM 1840 are processed.
Beispiel-Streaming-MultiprozessorExample streaming multiprocessor
Der SM 1840 umfasst einen programmierbaren Streaming-Prozessor, der so konfiguriert ist, dass er Aufgaben verarbeitet, die durch eine Anzahl von Threads repräsentiert werden. Jeder SM 1840 ist multi-threaded (mehrprozessfähig) und so konfiguriert, dass er eine Vielzahl von Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführen kann. In einer Ausführungsform implementiert der SM 1840 eine SIMD-(Single-Instruction, Multiple-Data)-Architektur, bei der jeder Thread in einer Gruppe von Threads (d. h. einem Warp) so konfiguriert ist, dass er einen anderen Datensatz auf Basis desselben Befehlssatzes verarbeitet. Alle Threads in der Gruppe der Threads führen dieselben Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 1840 eine SIMT-(Single-Instruction, Multiple-Thread)-Architektur, bei der jeder Thread in einer Gruppe von Threads so konfiguriert ist, dass er einen anderen Datensatz auf Basis desselben Befehlssatzes verarbeitet, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung voneinander abweichen dürfen. In einer Ausführungsform werden für jeden Warp ein Programmzähler, ein Aufruf-Stapel und ein Ausführungsstatus unterhalten, was Gleichzeitigkeit zwischen Warps und serielle Ausführung innerhalb von Warps ermöglicht, wenn Threads innerhalb des Warps voneinander abweichen. In einer weiteren Ausführungsform werden für jeden einzelnen Thread ein Programmzähler, ein Aufruf-Stapel und ein Ausführungsstatus unterhalten, was gleiche Gleichzeitigkeit zwischen allen Threads, innerhalb und zwischen Warps, ermöglicht. Wenn der Ausführungsstatus für jeden einzelnen Thread aufrechterhalten wird, können Threads, die dieselben Anweisungen ausführen, konvergiert und parallel ausgeführt werden, um maximale Effizienz zu erreichen.The SM 1840 includes a programmable streaming processor that is configured to process tasks represented by a number of threads. Every SM 1840 is multi-threaded and configured so that it can execute a large number of threads (e.g. 32 threads) from a specific group of threads at the same time. In one embodiment, the SM implements 1840 a SIMD (single instruction, multiple data) architecture in which each thread in a group of threads (ie, a warp) is configured to process a different record based on the same instruction set. All threads in the thread group follow the same instructions. In another embodiment, the SM implements 1840 a SIMT (single-instruction, multiple-thread) architecture in which each thread in a group of threads is configured to process a different record based on the same instruction set, but with individual threads in the group of threads during the Execution may differ from each other. In one embodiment, a program counter, a call stack and an execution status are maintained for each warp, which enables simultaneity between warps and serial execution within warps if threads within the warps differ from one another. In a further embodiment, a program counter, a call stack and an execution status are maintained for each individual thread, which enables the same simultaneity between all threads, within and between warps. If execution status is maintained for each thread, threads that execute the same instructions can be converged and executed in parallel for maximum efficiency.
19 veranschaulicht den Streaming-Multiprozessor 1840 von 17 gemäß einer Ausführungsform. Wie in 19 gezeigt, enthält der SM 1840 einen Anweisungs-Cache 1905, eine oder mehrere Scheduler-Einheiten 1910, eine Registerdatei 1920, einen oder mehrere Verarbeitungs-Rechenkerne 1950, eine oder mehrere Spezial-Funktionseinheiten (SFUs) 1952, eine oder mehrere Lade-/Speicher-Einheiten (LSUs) 1954, ein Verbindungsnetz 1980 und einen Gemeinschaftsspeicher/L1-Cache 1970. 19 illustrates the streaming multiprocessor 1840 of 17 according to one embodiment. As in 19 shown, the SM contains 1840 an instruction cache 1905 , one or more scheduler units 1910 , a register file 1920 , one or more processing computing cores 1950 , one or more special functional units (SFUs) 1952 , one or more load / store units (LSUs) 1954 , a connection network 1980 and a shared memory / L1 cache 1970 ,
Wie oben beschrieben, fertigt die Arbeitsverteilungseinheit 1725 Aufgaben zur Ausführung auf den GPCs 1750 der PPU 1700 ab. Die Aufgaben sind einem bestimmten DPC 1820 innerhalb eines GPC 1750 zugewiesen, und wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 1840 zugewiesen werden. Die Scheduler-Einheit 1910 empfängt die Aufgaben von der Arbeitsverteilungseinheit 1725 und verwaltet die Anweisungsplanung für einen oder mehrere Thread-Blöcke, die der SM 1840 zugeordnet sind. Die Scheduler-Einheit 1910 plant Thread-Blöcke zur Ausführung als Warps von parallelen Threads ein, wobei jedem Thread-Block mindestens ein Warp zugewiesen ist. In einer Ausführungsform führt jeder Warp 32 Threads aus. Die Scheduler-Einheit 1910 kann eine Vielzahl verschiedener Thread-Blöcke verwalten, die Warps den verschiedenen Thread-Blöcken zuweisen und dann während jedes Taktzyklus Anweisungen von der Vielzahl von verschiedenen kooperativen Gruppen an die verschiedenen Funktionseinheiten (d. h. Rechenkerne 1950, SFUs 1952 und LSUs 1954) abfertigen.As described above, the work distribution unit manufactures 1725 Tasks for execution on the GPCs 1750 the PPU 1700 from. The tasks are a specific DPC 1820 within a GPC 1750 assigned, and if the task is assigned to a shader program, the task can be assigned to an SM 1840 be assigned to. The scheduler unit 1910 receives the tasks from the work distribution unit 1725 and manages instruction scheduling for one or more thread blocks that the SM 1840 assigned. The scheduler unit 1910 schedules thread blocks for execution as warps of parallel threads, with at least one warp assigned to each thread block. In one embodiment, each warp 32 Threads out. The scheduler unit 1910 can manage a variety of different thread blocks that assign warps to the different thread blocks and then, during each clock cycle, direct instructions from the plurality of different cooperative groups to the different functional units (ie, cores) 1950 , SFUs 1952 and LSUs 1954 ) dispatch.
Cooperative Groups ist ein Programmiermodell für die Organisation von Gruppen kommunizierender Threads, das es Entwicklern ermöglicht, die Granularität auszudrücken, mit der Threads kommunizieren, was den Ausdruck reichhaltigerer, effizienterer paralleler Zerlegungen ermöglicht. Kooperative Start-APIs unterstützen Synchronisation zwischen Thread-Blöcken für die Ausführung paralleler Algorithmen. Herkömmliche Programmiermodelle bieten ein einziges, einfaches Konstrukt zur Synchronisation kooperierender Threads: eine Barriere über alle Threads eines Thread-Blocks hinweg (d. h. die Funktion syncthreads()). Programmierer möchten jedoch oft Gruppen von Threads mit kleinerer Granularität als Thread-Blöcke definieren und innerhalb der definierten Gruppen synchronisieren, um mehr Leistung, Designflexibilität und Softwarewiederverwendung in Form von gemeinsamen gruppenweiten Funktionsschnittstellen zu ermöglichen. Cooperative Groups is a programming model for organizing groups of communicating threads that allows developers to express the granularity with which threads communicate, which enables richer, more efficient parallel decompositions to be expressed. Cooperative start APIs support synchronization between thread blocks for the execution of parallel algorithms. Conventional programming models offer a single, simple construct for synchronizing cooperating threads: a barrier across all threads of a thread block (ie the function syncthreads ()). However, programmers often want to define groups of threads with smaller granularity than thread blocks and synchronize them within the defined groups to provide more performance, design flexibility and software reuse in the form of common group-wide functional interfaces.
Cooperative Groups ermöglicht es Programmierern, Gruppen von Threads explizit an Unterblock- (d. h. so klein wie ein einzelner Thread) und Multiblock-Granularitäten zu definieren und kollektive Operationen wie z. B. Synchronisation der Threads in einer kooperativen Gruppe durchzuführen. Das Programmiermodell unterstützt saubere Zusammensetzung über Softwaregrenzen hinweg, so dass Bibliotheken und Utility-Funktionen in ihrem lokalen Kontext sicher synchronisieren können, ohne Annahmen über Konvergenz treffen zu müssen. Cooperative Groups Primitive ermöglichen neue Muster kooperativer Parallelität, einschließlich Produzenten-Verbraucher-Parallelität, opportunistischer Parallelität und globaler Synchronisation über ein ganzes Netz von Thread-Blöcken hinweg.Cooperative groups allow programmers to explicitly define groups of threads on sub-block (i.e., as small as a single thread) and multiblock granularities and perform collective operations such as B. Synchronize the threads in a cooperative group. The programming model supports clean composition across software boundaries, so that libraries and utility functions can synchronize safely in their local context without having to make assumptions about convergence. Cooperative groups primitives enable new patterns of cooperative parallelism, including producer-consumer parallelism, opportunistic parallelism, and global synchronization across an entire network of thread blocks.
Eine Abfertigungs-Einheit 1915 ist so konfiguriert, das sie Anweisungen an eine oder mehrere der Funktionseinheiten senden kann. In der Ausführungsform enthält die Scheduler-Einheit 1910 zwei Abfertigungs-Einheiten 1915, die es ermöglichen, während jedes Taktzyklus zwei verschiedene Anweisungen von derselben Warp zu senden. In alternativen Ausführungsformen kann jede Scheduler-Einheit 1910 eine einzige Abfertigungs-Einheit 1915 oder zusätzliche Abfertigungs-Einheiten 1915 enthalten.A handling unit 1915 is configured so that it can send instructions to one or more of the functional units. In the embodiment, the scheduler unit contains 1910 two handling units 1915 that allow two different instructions to be sent from the same warp during each clock cycle. In alternative embodiments, each scheduler unit can 1910 a single handling unit 1915 or additional handling units 1915 contain.
Jeder SM 1840 enthält eine Registerdatei 1920, die einen Satz Register für die Funktionseinheiten der SM 1840 bereitstellt. In einer Ausführungsform ist die Registerdatei 1920 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein bestimmter Teil der Registerdatei 1920 fest zugeordnet ist. In einer anderen Ausführungsform ist die Registerdatei 1920 zwischen den verschiedenen Warps aufgeteilt, die von dem SM 1840 ausgeführt werden. Die Registerdatei 1920 stellt temporären Speicher für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten verbunden sind. 21 veranschaulicht eine Beispiel-Konfiguration der Registerdateien des SM 1840.Every SM 1840 contains a register file 1920 that have a set of registers for the functional units of the SM 1840 provides. In one embodiment, the register file is 1920 divided between the individual functional units so that each functional unit has a specific part of the register file 1920 is permanently assigned. In another embodiment, the register file is 1920 split between the different warps created by the SM 1840 be carried out. The register file 1920 provides temporary storage for operands that are connected to the data paths of the functional units. 21 illustrates an example configuration of the register files of the SM 1840 ,
Jeder SM 1840 umfasst L Verarbeitungs-Rechenkerne 1950. In einer Ausführungsform enthält der SM 1840 eine große Anzahl (z. B. 128, usw.) von getrennten Verarbeitungs-Rechenkernen 1950. Jeder Rechenkern 1950 kann eine Verarbeitungseinheit mit vollständiger Pipeline, einfacher Genauigkeit, doppelter Genauigkeit und/oder gemischter Genauigkeit enthalten, die eine Gleitkomma-Arithmetik-Logikeinheit und eine Ganzzahl-Arithmetik-Logikeinheit enthält. In einer Ausführungsform implementieren die Gleitkomma-Arithmetik-Logikeinheiten die Norm IEEE 754-2008 für Gleitkomma-Arithmetik. In einer Ausführungsform enthalten die Rechenkerne 1950 64 Einfachgenauigkeits-(32-Bit)-Gleitkomma-Rechenkerne, 64 Ganzzahl-Rechenkerne, 32 Doppelgenauigkeits-(64-Bit)-Gleitkomma-Rechenkerne und 8 Tensor-Rechenkerne.Every SM 1840 includes L processing cores 1950 , In one embodiment, the SM includes 1840 a large number (e.g. 128, etc.) of separate processing cores 1950 , Every calculation core 1950 may include a full pipeline, single precision, double precision, and / or mixed precision processing unit that includes a floating point arithmetic logic unit and an integer arithmetic logic unit. In one embodiment, the floating point arithmetic logic units implement the IEEE 754-2008 standard for floating point arithmetic. In one embodiment, the computing cores include 1950 64 single-precision (32-bit) floating point cores, 64 integer computing cores, 32 double-precision (64-bit) floating point computing cores and 8 tensor computing cores.
Tensor-Rechenkerne sind dafür konfiguriert, Matrixoperationen durchzuführen, und in einer Ausführungsform sind ein oder mehrere Tensor-Rechenkerne in den Rechenkernen 1950 enthalten. Insbesondere sind die Tensor-Rechenkerne so konfiguriert, dass sie Deep-Leaming-Matrixarithmetik durchführen können, wie z. B. Faltungsoperationen für Training und Inferenzierung neuronaler Netze. In einer Ausführungsform arbeitet jeder Tensor-Rechenkern auf einer 4x4-Matrix und führt eine Matrix-Multiplikations- und Akkumulationsoperation D=A×B+C durch, worin A, B, C und D 4x4-Matrizen sind.Tensor cores are configured to perform matrix operations, and in one embodiment, one or more tensor cores are in the cores 1950 contain. In particular, the tensor cores are configured so that they can perform deep leaming matrix arithmetic, such as. B. Convolutional operations for training and inferencing neural networks. In one embodiment, each tensor core operates on a 4x4 matrix and performs a matrix multiplication and accumulation operation D = A × B + C, where A, B, C and D are 4x4 matrices.
In einer Ausführungsform sind die Matrix-Multiplikations-Eingaben A und B 16-Bit-Gleitkomma-Matrizen, während die Akkumulations-Matrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkomma-Matrizen sein können. Tensor-Rechenkerne arbeiten an 16-Bit-Gleitkomma-Eingabedaten mit 32-Bit-Gleitkomma-Akkumulation. Die 16-Bit-Gleitkomma-Multiplikation erfordert 64 Operationen und führt zu einem hochpräzisen Produkt, das dann unter Verwendung von 32-Bit-Gleitkomma-Addition mit den anderen Zwischenprodukten für eine 4x4x4-Matrix-Multiplikation akkumuliert wird. In one embodiment, the matrix multiplication inputs A and B are 16-bit floating point matrices, while the accumulation matrices C and D can be 16-bit floating point or 32-bit floating point matrices. Tensor cores work on 16-bit floating point input data with 32-bit floating point accumulation. The 16-bit floating point multiplication requires 64 operations and results in a high-precision product that is then accumulated using 32-bit floating point addition with the other intermediates for 4x4x4 matrix multiplication.
In der Praxis werden Tensor-Rechenkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die sich aus diesen kleineren Elementen zusammensetzen. Eine API, wie z. B. CUDA 9 C++ API, stellt spezialisierte Matrixlast-, Matrix-Multiplikation- und -Akkumulation- sowie Matrix-Speicheroperationen zur Verfügung, um Tensor-Rechenkerne von einem CUDA-C++-Programm effizient zu nutzen. Auf der CUDA-Ebene setzt die Schnittstelle auf Warp-Ebene Matrizen der Größe 16x16 voraus, die alle 32 Threads des Warps überspannen.In practice, tensor cores are used to perform much larger two-dimensional or higher-dimensional matrix operations composed of these smaller elements. An API, such as B. CUDA 9 C ++ API, provides specialized matrix load, matrix multiplication and accumulation as well as matrix storage operations to efficiently use tensor cores from a CUDA C ++ program. At the CUDA level, the interface at warp level requires 16x16 size dies, all of them 32 Spanning warp threads.
Jeder SM 1840 enthält auch M SFUs 1952, die spezielle Funktionen durchführen (z. B. Attributbewertung, reziproke Quadratwurzel und dergleichen). In einer Ausführungsform können die SFUs 1952 eine Baumtraversierungseinheit enthalten, die so konfiguriert ist, dass eine hierarchische Baumdatenstruktur traversiert wird. In einer Ausführungsform können die SFUs 1952 eine Textureinheit enthalten, die so konfiguriert ist, dass sie Texturabbildungs-Filteroperationen durchführt. In einer Ausführungsform sind die Textureinheiten so konfiguriert, dass sie Texturabbildungen (z. B. ein 2D-Array von Texeln) aus dem Speicher 1704 laden und die Texturabbildungen abtasten, um abgetastete Texturwerte zur Verwendung in Shader-Programmen zu erzeugen, die vom SM 1840 ausgeführt werden. In einer Ausführungsform werden die Texturabbildungen in Gemeinschaftsspeicher/L1-Cache 1970 gespeichert. Die Textureinheiten implementieren Textur-Operationen wie z. B. Filteroperationen unter Verwendung von Mip-Maps (d. h. Texturabbildungen mit unterschiedlichen Detaillierungsgraden). In einer Ausführungsform enthält jeder SM 340 zwei Textureinheiten. Every SM 1840 also contains M SFUs 1952 that perform special functions (e.g. attribute evaluation, reciprocal square root and the like). In one embodiment, the SFUs 1952 include a tree traversing unit configured to traverse a hierarchical tree data structure. In one embodiment, the SFUs 1952 include a texture unit configured to perform texture mapping filtering operations. In one embodiment, the texture units are configured to take texture maps (e.g., a 2D array of texels) from memory 1704 load and sample the texture maps to generate sampled texture values for use in shader programs that the SM 1840 be carried out. In one embodiment, the texture maps are in shared memory / L1 cache 1970 saved. The texture units implement texture operations such as B. Filter operations using mip maps (ie texture maps with different levels of detail). In one embodiment, each contains SM 340 two texture units.
Jeder SM 1840 umfasst auch N LSUs 1954, die Lade- und Speicheroperationen zwischen dem Gemeinschaftsspeicher/L 1-Cache 1970 und der Registerdatei 1920 implementieren. Jeder SM 1840 enthält ein Verbindungsnetz 1980, das jede der Funktionseinheiten mit der Registerdatei 1920 und die LSU 1954 mit der Registerdatei 1920, Gemeinschaftsspeicher/L1-Cache 1970 verbindet. In einer Ausführungsform ist das Verbindungsnetz 1980 ein Koppelfeld, das so konfiguriert sein kann, dass es irgendeine der Funktionseinheiten mit irgendeinem der Register in der Registerdatei 1920 verbindet und die LSUs 1954 mit der Registerdatei und Speicherstellen im Gemeinschaftsspeicher/L1-Cache 1970 verbindet.Every SM 1840 also includes N LSUs 1954, the load and store operations between the shared memory / L 1 cache 1970 and the register file 1920 to implement. Every SM 1840 contains a connection network 1980 that each of the functional units with the register file 1920 and the LSU 1954 with the register file 1920 , Shared memory / L1 cache 1970 combines. In one embodiment, the connection network is 1980 a switching matrix that can be configured to have any of the functional units with any of the registers in the register file 1920 connects and the LSUs 1954 with the register file and storage locations in the shared memory / L1 cache 1970 combines.
Der Gemeinschaftsspeicher/L1-Cache 1970 ist ein Array von On-Chip-Speicher, das Datenspeicherung und Kommunikation zwischen dem SM 1840 und der Primitiv-Engine 1835 sowie zwischen Threads im SM 1840 ermöglicht. In einer Ausführungsform umfasst der Gemeinschaftsspeicher/L1-Cache 1970 128KB Speicherkapazität und befindet sich in dem Pfad vom SM 1840 zur Partitionseinheit 1780. Mit dem Gemeinschaftsspeicher/L1-Cache 1970 können Lese- und Schreibzugriffe zwischengespeichert werden. Einer oder mehrere von dem Gemeinschaftsspeicher/L1-Cache 1970, L2-Cache 1860 und Speicher 1704 sind Backup-Speicher.The shared memory / L1 cache 1970 is an array of on-chip memory that stores data and communication between the SM 1840 and the primitive engine 1835 as well as between threads in SM 1840 allows. In one embodiment, the shared memory comprises / L1 cache 1970 128KB storage capacity and is in the path of the SM 1840 to the partition unit 1780 , With the shared memory / L1 cache 1970 read and write accesses can be buffered. One or more of the shared memory / L1 cache 1970 , L2 cache 1860 and memory 1704 are backup storage.
Die Kombination von Daten-Cache und Gemeinschaftsspeicher-Funktionalität in einem einzigen Speicherblock bietet die beste Gesamtleistung für beide Arten von Speicherzugriffen. Die Kapazität ist als ein Cache von Programmen nutzbar, die keinen Gemeinschaftsspeicher verwenden. Wenn zum Beispiel Gemeinschaftsspeicher dafür konfiguriert ist, die Hälfte der Kapazität zu nutzen, können Textur- und Lade-/SpeicherOperationen die verbleibende Kapazität nutzen. Integration in den Gemeinschaftsspeicher/L 1-Cache 1970 ermöglicht es dem Gemeinschaftsspeicher/L 1-Cache 1970, als Hochdurchsatz-Leitung für das Streaming von Daten zu fungieren und zugleich Zugriff mit hoher Bandbreite und niedriger Latenz auf häufig wiederverwendete Daten zu ermöglichen.The combination of data cache and shared memory functionality in a single block of memory provides the best overall performance for both types of memory access. The capacity is usable as a cache of programs that do not use shared memory. For example, if shared storage is configured to use half of the capacity, texture and load / store operations can use the remaining capacity. Integration in the shared memory / L 1 cache 1970 enables shared memory / L 1 cache 1970 to act as a high-throughput line for streaming data while providing high bandwidth and low latency access to frequently reused data.
21 veranschaulicht eine Beispiel-Architektur für den SM 1840. Wie in 19 gezeigt, kann der SM 1840 mit einer oder mehreren Textureinheiten 1842 und/oder einer oder mehreren TTUs 700 gekoppelt sein. Als Kompromiss zwischen Leistung und Fläche kann ein nicht einschränkendes Ausführungsbeispiel eine einzige Textureinheit 1842 und/oder eine einzige TTU 700 pro Gruppe von SMs 1840 enthalten (z. B. siehe 19). Die TTU 700 kann mit den SMs 1840 über einen TTU-Ein/Ausgabeblock in der Speicher-Eingabe-Ausgabe und mit einem L1-Cache über eine dedizierte Leseschnittstelle kommunizieren. In einem Ausführungsbeispiel liest die TTU 700 nur aus dem Hauptspeicher und schreibt nicht in den Hauptspeicher. 21 illustrates an example architecture for the SM 1840 , As in 19 shown, the SM 1840 with one or more texture units 1842 and / or one or more TTUs 700 be coupled. As a compromise between performance and area, a non-limiting embodiment can have a single texture unit 1842 and / or a single TTU 700 per group of SMs 1840 included (e.g. see 19 ). The TTU 700 can with the SMs 1840 communicate via a TTU input / output block in the memory input / output and with an L1 cache via a dedicated read interface. In one embodiment, the TTU reads 700 only from the main memory and does not write to the main memory.
Detailliertere Beispiel-TTU-ArchitekturMore detailed example TTU architecture
Wie oben erörtert, kann die TTU 700 ein Koprozessor zum SM 1840 sein. Wie ein Texturprozessor wird sie über einen Satz von SM-Befehlen zugänglich gemacht, greift als ein Nur-Lese-Client des L1-Cache auf Speicher zu und gibt Ergebnisse in die SM-Registerdatei zurück. Im Gegensatz zu manchen Texturprozessoren macht es die Datenmenge, die für eine typische Abfrage in die TTU 700 ein- und daraus ausgelagert werden muss, in manchen Ausführungsformen schwierig, sämtliche Quellen- und Zielregister in einer einzigen Anweisung zu spezifizieren (und da die meisten dieser Daten Pro-Thread-eindeutig sind, gibt es kein TTU-Analogon von Texturköpfen und Abtastern). Infolgedessen wird die TTU 700 in manchen Ausführungsformen über eine Multi-Anweisungs-Sequenz programmiert. Diese Sequenz kann in manchen Implementierungen als eine einzelne „Makro-Anweisung“ konzipiert werden.As discussed above, the TTU 700 a coprocessor to the SM 1840 his. Like a texture processor, it is accessed through a set of SM instructions, accesses memory as a read-only client of the L1 cache, and returns results to the SM register file. Unlike some texture processors, it makes the amount of data necessary for a typical query in the TTU 700 must be swapped in and out, difficult in some embodiments to specify all source and destination registers in a single instruction (and since most of this data is per-thread unique, there is no TTU analog of texture heads and scanners). As a result, the TTU 700 programmed via a multi-instruction sequence in some embodiments. In some implementations, this sequence can be designed as a single “macro instruction”.
Und ebenso wie Textureinheiten 1842 kann sich die TTU 700 in manchen Implementierungen auf bestimmte Nur-Lese-Datenstrukturen im Speicher stützen, die mit Software vorgefüllt sind. Diese umfassen:
- - Ein oder mehrere BVHs, wobei jede BVH zum Beispiel ein Baum von achsenausgerichteten Begrenzungskästen ist, die in einem komprimierten Format gespeichert sind, das den Speicherverkehr im Vergleich zu einer unkomprimierten Darstellung stark reduziert. Jeder Knoten in der BVH wird als eine Complet-Struktur gespeichert, wobei Größe und Ausrichtung in manchen Implementierungen an die einer L1-Cache-Zeile angepasst sind. Kind-Complets eines gegebenen Elternteils werden vorzugsweise zusammenhängend in Speicher gespeichert, und Kind-Zeiger werden in komprimierter Form gespeichert.
- - Null oder mehr Instanzknoten, die eine Möglichkeit bieten, ein Blatt einer BVH mit der Wurzel einer anderen zu verbinden. Ein Instanzknoten kann eine Datenstruktur sein, die ebenfalls ausgerichtet ist. Diese Struktur kann einen Zeiger auf die Sub-BVH, Flags, die das Backface-Culling-Verhalten in der Sub-BVH beeinflussen, und eine Matrix enthalten, die den ersten drei Zeilen einer beliebigen Transformationsmatrix (in homogenen Koordinaten) von dem Koordinatensystem der Top-Level-BVH (gewöhnlich „Welt-Raum“) zu dem der Sub-BVH (gewöhnlich „Objekt-Raum“) entspricht. Die letzte Zeile der Matrix in manchen Ausführungsformen ist in manchen Implementierungen implizit (0, 0, 0, 1).
- - Null oder mehr Dreieck- oder andere Primitiv-Puffer, die zum Beispiel Dreiecke enthalten, die entweder als ein Triplett von Koordinaten pro Vertex oder in einem verlustfrei komprimierten Format gespeichert sind, das von der TTU 700 verstanden wird. Zusätzlich kann pro Dreieck oder anderem Primitiv ein Alpha-Bit bereitgestellt werden, das Dreiecke anzeigt, die besondere Behandlung durch die Software erfordern, um zu bestimmen, ob das Dreieck tatsächlich von einem gegebenen Strahl geschnitten wird. Dreieck-Puffer können in Blöcken organisiert sein. Es kann auch ein Erzwinge-kein-Culling-Funktionsbit pro Dreieck geben. Wenn dieses Bit gesetzt ist, zeigt es an, dass beide Seiten des Dreiecks in Bezug auf Culling als nach vorne oder nach hinten weisend zu behandeln sind, d. h. das Dreieck ist nicht auszusondern, weil der Strahl die „Rückseite“ statt der „Vorderseite“ schneidet. Der einfachste Anwendungsfall dafür ist ein einzelnes Dreieck, das ein Blatt darstellt, wobei wir das Blatt noch sehen können, wenn der Strahl es auf der Rückseite trifft.
And just like texture units 1842 can the TTU 700 in some implementations rely on certain read-only data structures in memory that are prefilled with software. These include: - One or more BVHs, each BVH being, for example, a tree of axis-oriented bounding boxes that are stored in a compressed format that greatly reduces storage traffic compared to an uncompressed representation. Each node in the BVH is saved as a complete structure, with size and orientation in some Implementations that are adapted to an L1 cache line. Kind completes of a given parent are preferably stored contiguously in memory, and child pointers are stored in compressed form.
- - Zero or more instance nodes that offer a possibility to connect one leaf of a BVH to the root of another. An instance node can be a data structure that is also aligned. This structure can include a pointer to the sub-BVH, flags that affect the back-face culling behavior in the sub-BVH, and a matrix that represents the first three rows of any transformation matrix (in homogeneous coordinates) from the coordinate system of the top -Level BVH (usually "world space") to which the sub-BVH (usually "object space") corresponds. The last line of the matrix in some embodiments is implicit (0, 0, 0, 1) in some implementations.
- Zero or more triangle or other primitive buffers containing, for example, triangles stored either as a triplet of coordinates per vertex or in a losslessly compressed format developed by the TTU 700 is understood. In addition, an alpha bit can be provided per triangle or other primitive indicating triangles that require special software treatment to determine whether the triangle is actually intersected by a given ray. Triangle buffers can be organized in blocks. There can also be one force-no-culling function bit per triangle. When set, this bit indicates that both sides of the triangle should be treated as facing forward or backward in terms of culling, ie the triangle should not be discarded because the beam intersects the "back" instead of the "front" , The simplest use case for this is a single triangle that represents a leaf, and we can still see the leaf when the beam hits it on the back.
Die TTU 700 ist in manchen Ausführungsformen statuslos, was bedeutet, dass zwischen Abfragen kein Architekturstatus in der TTU aufrechterhalten wird. Gleichzeitig ist es oft sinnvoll, dass Software, die auf dem SM 1840 läuft, Fortsetzung einer früheren Abfrage anfordert, was bedeutet, dass der relevante Status von der TTU 700 in Register zu schreiben und dann in Registern (oft vor Ort) an die TTU zurückzugeben ist, um fortzufahren. Dieser Status kann die Form eines Traversierungsstapels annehmen, der den Fortschritt beim Traversieren der BVH verfolgt.The TTU 700 is stateless in some embodiments, which means that no architectural status is maintained in the TTU between queries. At the same time, it often makes sense for software running on the SM 1840 running, requesting continuation of an earlier query, meaning the relevant status from the TTU 700 to be written in registers and then returned to the TTU in registers (often on site) to continue. This status can take the form of a traversal stack that tracks the progress in traversing the BVH.
Es kann auch eine kleine Anzahl von Stapelinitialisierern vorgesehen werden, um eine neue Abfrage eines gegebenen Typs zu beginnen, zum Beispiel:
- • Traversierung startend von einem Complet
- • Schnittpunkt eines Strahls mit einem Bereich von Dreiecken
- • Schnittpunkt eines Strahls mit einem Bereich von Dreiecken, gefolgt von einer Traversierung, die von einem Complet startet
- • Vertex-Abruf aus einem Dreieck-Puffer für ein gegebenes Dreieck
- • Optionale Unterstützung für Instanztransformationen vor dem „Traversierung startend von einem Complet“ und „Schnittpunkt eines Strahls mit einem Bereich von Dreiecken“.
A small number of batch initializers can also be provided to start a new query of a given type, for example: - • Traversing starting from a complete
- • Intersection of a ray with a range of triangles
- • Intersection of a ray with a range of triangles, followed by traversing that starts from a complete
- • Vertex retrieval from a triangle buffer for a given triangle
- • Optional support for instance transformations before "traversing starting from a complete" and "intersection of a ray with a range of triangles".
Vertex-Abruf ist eine einfache Abfrage, die mit Anforderungsdaten spezifiziert werden kann, die aus einem Stapelinitialisierer und sonst nichts besteht. Andere Abfragetypen können die Spezifikation eines Strahls oder Strahlenbündels erfordern, zusammen mit dem Stapel oder Stapelinitialisierer und verschiedenen Strahl-Flags, die Details der Abfrage beschreiben. Ein Strahl ist durch seinen Drei-Koordinaten-Ursprung, die Drei-Koordinaten-Richtung sowie Minimal- und Maximalwerte für den t-Parameter entlang des Strahls gegeben. Ein Strahlenbündel ist zusätzlich durch einen zweiten Ursprung und eine zweite Richtung gegeben.Vertex retrieval is a simple query that can be specified with request data that consists of a batch initializer and nothing else. Other types of queries may require specification of a ray or bundle of rays, along with the stack or batch initializer and various ray flags that describe details of the query. A ray is given by its three-coordinate origin, the three-coordinate direction and minimum and maximum values for the t parameter along the ray. A beam of rays is additionally given by a second origin and a second direction.
Es können verschiedene Strahl-Flags verwendet werden, um verschiedene Aspekte des Traversierungsverhaltens, des Backface-Culling und der Behandlung der verschiedenen Kind-Knoten-Typen zu steuern, abhängig vom Bestehen/Nichtbestehen-Status eines optionalen RayOp-Tests. RayOps fügen den Fähigkeiten der TTU Flexibilität hinzu. In manchen Ausführungsbeispielen führt der RayOps-Teil zwei Strahl-Flag-Versionen ein, die auf Basis einer spezifizierten Operation an Daten, die mit dem Strahl übertragen werden, und Daten, die im Complet gespeichert sind, dynamisch ausgewählt werden können. Um solche Flags zu erkunden, ist es zunächst hilfreich, die verschiedenen Typen von Kind-Knoten zu verstehen, die innerhalb einer BVH erlaubt sind, sowie die verschiedenen Treffertypen, die die TTU 700 an den SM zurückgeben kann. Beispiel-Knoten-Typen sind:
- ■ Ein Kind-Complet (d. h. ein interner Knoten)
Standardmäßig setzt die TTU 700 die Traversierung fort, indem sie in die Kind-Complets absteigt.
- ■ Ein Dreieck-Bereich, der einem zusammenhängenden Satz von Dreiecken innerhalb eines Dreieck-Puffers entspricht.
- (1) Standardmäßig werden Dreieck-Bereiche, auf die ein Strahl trifft, von der TTU 700 nativ behandelt, indem die Dreiecke auf Schnittpunkte getestet und der Strahl entsprechend verkürzt wird. Wenn die Traversierung abgeschlossen ist und ein Dreieck getroffen worden ist, wird standardmäßig die Dreieck-ID zusammen mit dem t-Wert und baryzentrischen Koordinaten des Schnittpunkts an den SM 1840 zurückgegeben. Dies ist der Treffertyp „Dreieck“.
- (2) Standardmäßig werden geschnittene Dreiecke mit dem Alpha-Bit-Set an den SM 1840 zurückgegeben, auch wenn die Traversierung noch nicht abgeschlossen ist. Der zurückgegebene Traversierungsstapel enthält den Status, der erforderlich ist, um die Traversierung fortzusetzen, wenn die Software bestimmt, dass das Dreieck tatsächlich transparent war.
- (3) Dreieck-Schnittpunkte in manchen Ausführungsformen werden für Strahlenbündel nicht unterstützt, so dass getroffene Dreieck-Bereiche standardmäßig an den SM 1840 als Treffertyp „TriRange“ oder „DreiBereich“ zurückgegeben werden, der einen Zeiger auf den ersten Dreieck-Block, der den Bereich überlappt, Parameter, die den Bereich spezifizieren, und den t-Wert des Schnittpunkts mit dem Blatt-Begrenzungskasten enthält.
- ■ Ein Element-Bereich, bestehend aus einem Index (abgeleitet von einer vom Benutzer bereitgestellten „Element-Bereich-Basis“, die im Complet gespeichert ist) und einer Zählung von Elementen.
Different ray flags can be used to control different aspects of traversal behavior, backface culling and handling of the different child node types, depending on the pass / fail status of an optional RayOp test. RayOps add flexibility to the capabilities of the TTU. In some embodiments, the RayOps section introduces two beam flag versions that can be dynamically selected based on a specified operation on data transmitted with the beam and data stored in the complete. To explore such flags, it is first helpful to understand the different types of child nodes that are allowed within a BVH, as well as the different types of hits that the TTU 700 can return to the SM. Example node types are: - ■ A child complete (ie an internal node)
The TTU sets by default 700 the traversal continues by descending into the child completes. - ■ A triangle area that corresponds to a contiguous set of triangles within a triangle buffer.
- (1) By default, triangle areas that a beam hits are identified by the TTU 700 treated natively by testing the triangles for intersections and shortening the beam accordingly. When traversing is complete and a triangle has been hit, by default the triangle ID is sent to the SM along with the t-value and barycentric coordinates of the intersection 1840 returned. This is the "triangle" hit type.
- (2) By default, cut triangles are sent to the SM using the alpha bit set 1840 returned, even if the traversal has not yet been completed. The returned traversal batch contains the status required to continue traversing when the software determines that the triangle was actually transparent.
- (3) Triangle intersections in some embodiments are not supported for beams, so triangle areas hit by default on the SM 1840 returned as the hit type "TriRange" or "ThreeRange", which contains a pointer to the first triangle block that overlaps the area, parameters that specify the area, and the t-value of the intersection with the leaf boundary box.
- ■ An element area, consisting of an index (derived from a user-provided "element area base", which is stored in the complete) and a count of elements.
Standardmäßig werden Element-Bereiche als Treffertyp „ItemRange“ oder „ElementBereich“ an den SM 1840 zurückgegeben, bestehend aus z. B. einem Index, einer Zählung und dem t-Wert des Schnittpunkts mit dem Blatt-Begrenzungskasten.
By default, element areas are sent to the SM as the "ItemRange" or "Element Area" type 1840 returned consisting of z. An index, a count, and the t-value of the intersection with the leaf bounding box.
Die TTU 700 kann in manchen Ausführungsformen eine Instanzierungsebene nativ bearbeiten, indem sie den Strahl in das Koordinatensystem der Instanz-BVH transformiert. Zusätzliche Instanzierungsebenen (oder jede andere Instanzierungsebene, je nach Strategie) können in der Software behandelt werden. Zu diesem Zweck wird der Treffertyp „InstanceNode“ oder „InstanzKnoten“ bereitgestellt, der aus einem Zeiger auf den Instanzknoten und dem t-Wert des Schnittpunkts mit dem Blattbegrenzungskasten besteht. In anderen Implementierungen kann die Hardware zwei, drei oder mehr Instanzierungsebenen verarbeiten.The TTU 700 can, in some embodiments, edit an instantiation level natively by transforming the beam into the coordinate system of the instance BVH. Additional levels of instantiation (or any other level of instantiation, depending on the strategy) can be handled in the software. For this purpose, the "InstanceNode" or "InstanceNode" hit type is provided, which consists of a pointer to the instance node and the t-value of the intersection with the leaf delimitation box. In other implementations, the hardware can process two, three, or more levels of instantiation.
Zusätzlich zu den knotenspezifischen Treffertypen wird ein generischer „NodeRef“-Treffertyp bereitgestellt, der aus einem Zeiger auf das Eltern-Element selbst, sowie einer ID, die angibt, welches Kind geschnitten worden ist, und dem t-Wert des Schnittpunkts mit dem Begrenzungskasten dieses Kindes besteht.In addition to the node-specific hit types, a generic "NodeRef" hit type is provided, which consists of a pointer to the parent element itself, an ID indicating which child has been cut and the t-value of the point of intersection with the bounding box Child exists.
Ein Treffertyp „Fehler“ kann für Fälle vorgesehen werden, in denen die Abfrage oder der BVH unsachgemäß gebildet worden ist oder wenn die Traversierung während der Traversierung Problemen begegnet ist.A hit type "error" can be provided for cases in which the query or the BVH was improperly formed or if the traversal encountered problems during the traversal.
Für den Fall, dass der Strahl oder das Strahlenbündel die gesamte Geometrie in der Szene verfehlt, kann ein „Kein“-Treffer-Typ vorgesehen werden.In the event that the ray or the ray bundle misses the entire geometry in the scene, a “no” hit type can be provided.
Wie die TTU mit jedem der vier möglichen Knoten-Typen umgeht, wird durch einen Satz von knotenspezifischen Modus-Flags bestimmt, die als Teil der Abfrage für einen bestimmten Strahl gesetzt werden. Das oben erwähnte „Vorgabe“-Verhalten entspricht dem Fall, dass die Modus-Flags auf alle Nullen gesetzt sind.How the TTU deals with each of the four possible node types is determined by a set of node-specific mode flags that are set as part of the query for a particular ray. The "default" behavior mentioned above corresponds to the case where the mode flags are set to all zeros.
Alternative Werte für die Flags ermöglichen es, alle Knoten eines bestimmten Typs einem Culling zu unterziehen, Knoten eines bestimmten Typs als Treffertyp NodeRef („KnotenVerweis“) an den SM zurückzugeben oder Dreieck-Bereiche oder Instanzknoten unter Verwendung ihrer entsprechenden Treffertypen an den SM zurückzugeben, statt sie nativ innerhalb der TTU 700 zu verarbeiten.Alternative values for the flags make it possible to cull all nodes of a certain type, return nodes of a certain type to the SM as hit type NodeRef ("node reference") or return triangle areas or instance nodes to the SM using their corresponding hit types, instead of them natively within the TTU 700 to process.
Zusätzliche Modus-Flags können für die Steuerung der Behandlung von Alpha-Dreiecken vorgesehen werden.Additional mode flags can be provided to control the treatment of alpha triangles.
Beispiel-RechensystemExample computing system
Systeme mit mehreren GPUs und CPUs werden in mannigfachen Branchen eingesetzt, da Entwickler mehr Parallelität bei Anwendungen wie z. B. künstlicher Intelligenz enthüllen und nutzen. Leistungsstarke 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 Verarbeitungsgeräten innerhalb der Hochleistungssysteme müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandübertragung zwischen den Verarbeitungsgeräten zu unterstützen.Systems with multiple GPUs and CPUs are used in a variety of industries because developers have more parallelism in applications such as B. Reveal and use artificial intelligence. Powerful GPU-accelerated systems with tens of thousands of computing nodes are used in data centers, research facilities and supercomputers to solve ever bigger problems. As the number of processing devices within the high-performance systems increases, the communication and data transmission mechanisms have to be scaled to support the increased band transfer between the processing devices.
21 ist ein Konzeptdiagramm eines unter Verwendung der PPU 1700 von 15 implementierten Verarbeitungssystems 2000 gemäß einer Ausführungsform. Das Beispiel-System 2000 kann so konfiguriert sein, dass es eines oder mehrere der in dieser Anmeldung offenbarten Verfahren implementiert. Das Verarbeitungssystem 2000 enthält eine CPU 1930, einen Switch 1910 und jeweils mehrere PPUs 1700 und entsprechende Speicher 1704. Der NVLink 1710 stellt Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 1700 bereit. Obwohl in 21 eine bestimmte Anzahl von Verbindungen mittels NVLink 1710 und Verbindung 1702 gezeigt ist, kann die Anzahl der Verbindungen zu jeder PPU 1700 und der CPU 1930 variieren. Der Switch 1910 bildet eine Schnittstelle zwischen der Verbindung 1702 und der CPU 1930. Die PPUs 1700, der Speicher 1704 und die NVLinks 1710 können sich auf einer einzelnen Halbleiterplattform befinden, um ein Parallelverarbeitungsmodul 1925 zu bilden. In einer Ausführungsform unterstützt der Switch 1910 zwei oder mehr Protokolle zur Schnittstellenbildung zwischen verschiedenen unterschiedlichen Verbindungen und/oder Links. 21 is a conceptual diagram of one using the PPU 1700 of 15 implemented processing system 2000 according to one Embodiment. The example system 2000 may be configured to implement one or more of the methods disclosed in this application. The processing system 2000 contains a CPU 1930 , a switch 1910 and several PPUs each 1700 and corresponding memory 1704 , The NVLink 1710 provides high speed communication links between each of the PPUs 1700 ready. Although in 21 a certain number of connections via NVLink 1710 and connection 1702 shown is the number of connections to each PPU 1700 and the CPU 1930 vary. The switch 1910 forms an interface between the connection 1702 and the CPU 1930 , The PPUs 1700 , the memory 1704 and the NVLinks 1710 can reside on a single semiconductor platform around a parallel processing module 1925 to build. In one embodiment, the switch supports 1910 two or more protocols for interfacing between different different connections and / or links.
In einer weiteren Ausführungsform (nicht gezeigt) stellt der NVLink 1710 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 1700 und der CPU 1930 bereit, und der Switch 1910 bildet Schnittstellen zwischen der Verbindung 1702 und jeder der PPUs 1700. Die PPUs 1700, die Speicher 1704 und die Verbindung 1702 können sich auf einer einzelnen Halbleiterplattform befinden, um ein Parallelverarbeitungsmodul 1925 zu bilden. In noch einer Ausführungsform (nicht gezeigt) stellt die Verbindung 1702 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 1700 und der CPU 1930 bereit, und der Switch 1910 bildet Schnittstellen zwischen jeder der PPUs 1700 unter Verwendung des NVLinks 1710, um eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den PPUs 1700 bereitzustellen. In noch einer Ausführungsform (nicht gezeigt) stellt der NVLink 1710 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den PPUs 1700 und der CPU 1930 über den Switch 1910 bereit. In noch einer Ausführungsform (nicht gezeigt) stellt die Verbindung 1702 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 1700 direkt bereit. Eine oder mehrere der Hochgeschwindigkeits-Kommunikationsverbindungen NVLink 1710 können als physische NVLink-Verbindung oder als On-Chip- oder On-Die-Verbindung unter Verwendung des gleichen Protokolls wie der NVLink 1710 implementiert werden.In another embodiment (not shown), the NVLink provides 1710 one or more high speed communication links between each of the PPUs 1700 and the CPU 1930 ready, and the switch 1910 forms interfaces between the connection 1702 and each of the PPUs 1700 , The PPUs 1700 who have favourited Memory 1704 and the connection 1702 can reside on a single semiconductor platform around a parallel processing module 1925 to build. In yet another embodiment (not shown) the connection 1702 one or more communication links between each of the PPUs 1700 and the CPU 1930 ready, and the switch 1910 forms interfaces between each of the PPUs 1700 using the NVLink 1710 to establish one or more high-speed communication links between the PPUs 1700 provide. In yet another embodiment (not shown), the NVLink provides 1710 one or more high speed communication links between the PPUs 1700 and the CPU 1930 via the switch 1910 ready. In yet another embodiment (not shown) the connection 1702 one or more communication links between each of the PPUs 1700 ready right away. One or more of the high-speed communication links NVLink 1710 can be a physical NVLink connection or an on-chip or on-die connection using the same protocol as the NVLink 1710 be implemented.
Im Kontext der vorliegenden Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung beziehen, die auf einem Die oder Chip hergestellt wird. Man beachte, dass sich der Begriff einzelne Halbleiterplattform auch auf Multichip-Module mit erhöhter Konnektivität beziehen kann, die On-Chip-Betrieb simulieren und wesentliche Verbesserungen gegenüber herkömmlicher Bus-Implementierung vornehmen. Natürlich können die verschiedenen Schaltungen oder Geräte nach den Wünschen des Benutzers auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen angeordnet sein. Alternativ kann das Parallelverarbeitungsmodul 1925 als ein Leiterplattensubstrat implementiert sein und kann jede(r) der PPUs 1700 und/oder Speicher 1704 als gepacktes Gerät ausgeführt sein. In einer Ausführungsform befinden sich die CPU 1930, der Switch 1910 und das Parallelverarbeitungsmodul 1925 auf einer einzelnen Halbleiterplattform.In the context of the present description, a single semiconductor platform can refer to a single unitary semiconductor-based integrated circuit that is fabricated on a die or chip. It should be noted that the term single semiconductor platform can also refer to multichip modules with increased connectivity, which simulate on-chip operation and make significant improvements compared to conventional bus implementation. Of course, the various circuits or devices can also be arranged separately or in different combinations of semiconductor platforms as desired by the user. Alternatively, the parallel processing module 1925 can be implemented as a circuit board substrate and any of the PPUs 1700 and / or storage 1704 be designed as a packed device. In one embodiment, the CPU is located 1930 , the switch 1910 and the parallel processing module 1925 on a single semiconductor platform.
In einer Ausführungsform beträgt die Signalübertragungsrate jedes NVLink 1710 20 bis 25 Gigabit/Sekunde und enthält jede PPU 1700 sechs NVLink 1710 Schnittstellen (wie in 22 gezeigt, sind fünf NVLink 1710 Schnittstellen für jede PPU 1700 enthalten). Jeder NVLink 1710 bietet eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jede Richtung, wobei sechs Links 1700 Gigabyte/Sekunde liefern. Die NVLinks 1710 werden möglicherweise ausschließlich für PPU-zu-PPU-Kommunikation verwendet, wie in 21 gezeigt, oder für irgendeine Kombination von PPU-zu-PPU und PPU-zu-CPU, wenn die CPU 1930 ebenfalls eine oder mehrere NVLink 1710 Schnittstellen enthält.In one embodiment, the signal transmission rate of each NVLink is 1710 20 to 25 gigabits / second and contains each PPU 1700 six NVLink 1710 Interfaces (as in 22 shown are five NVLink 1710 Interfaces for every PPU 1700 contain). Any NVLink 1710 offers a data transfer rate of 25 gigabytes / second in each direction, with six links 1700 Deliver gigabytes / second. The NVLinks 1710 may be used only for PPU-to-PPU communication, as in 21 shown, or for any combination of PPU-to-PPU and PPU-to-CPU if the CPU 1930 also one or more NVLink 1710 Contains interfaces.
In einer Ausführungsform ermöglicht der NVLink 1710 direkten Lade-/Speicher-/atomischen Zugriff von der CPU 1930 auf den Speicher 1704 jeder PPU 1700. In einer Ausführungsform unterstützt der NVLink 1710 Kohärenz-Operationen, so dass aus den Speichern 1704 gelesene Daten in der Cache-Hierarchie der CPU 1930 gespeichert werden können, was die Cache-Zugriffslatenz für die CPU 1930 reduziert. In einer Ausführungsform enthält der NVLink 1710 Unterstützung für Adressenübersetzungsdienste (ATS), so dass die PPU 1700 direkt auf Seitentabellen innerhalb der CPU 1930 zugreifen kann. Einer oder mehrere der NVLinks 1710 können auch für Betrieb in einem Niedrigverbrauchsmodus konfiguriert sein.In one embodiment, the NVLink enables 1710 direct load / memory / atomic access from the CPU 1930 to the store 1704 any PPU 1700 , In one embodiment, the NVLink supports 1710 Coherence operations so that from the memories 1704 read data in the cache hierarchy of the CPU 1930 can be saved, which is the cache access latency for the CPU 1930 reduced. In one embodiment, the NVLink includes 1710 Support for address translation services (ATS), so the PPU 1700 directly on page tables within the CPU 1930 can access. One or more of the NVLinks 1710 can also be configured to operate in a low consumption mode.
22 veranschaulicht ein Beispiel-System 1965, in dem die verschiedene Architektur und/oder Funktionalität der verschiedenen früheren Ausführungsformen implementiert sein kann. Das Beispiel-System 1965 kann so konfiguriert sein, dass es eines oder mehrere der in dieser Anmeldung offenbarten Verfahren 250 implementiert. 22 illustrates an example system 1965 in which the different architecture and / or functionality of the various previous embodiments can be implemented. The example system 1965 can be configured to use one or more of the methods disclosed in this application 250 implemented.
Wie gezeigt, ist ein System 1965 vorgesehen, das mindestens eine Zentralverarbeitungseinheit 1930 enthält, die mit einem Kommunikationsbus 1975 verbunden ist. Der Kommunikationsbus 1975 kann unter Verwendung irgendeines geeigneten Protokolls implementiert werden, wie z. B. PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport oder irgendeinem anderen Bus oder Punkt-zu-Punkt-Kommunikationsprotokoll(en). Das System 1965 enthält auch einen Hauptspeicher 1940. Steuerlogik (Software) und Daten werden im Hauptspeicher 1940 gespeichert, der als Direktzugriffsspeicher (RAM) ausgeführt sein kann.As shown, is a system 1965 provided the at least one central processing unit 1930 contains that with a communication bus 1975 connected is. The communication bus 1975 can be implemented using any suitable protocol, e.g. B. PCI ( Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport or any other bus or point-to-point communication protocol (s). The system 1965 also contains a main memory 1940 , Control logic (software) and data are in main memory 1940 stored, which can be designed as a random access memory (RAM).
Das System 1965 enthält auch Eingabegeräte 1960, das Parallelverarbeitungssystem 1925 und Display-Geräte 1945, d. h. ein herkömmliches CRT- (Kathodenstrahlröhre), LCD- (Flüssigkristallanzeige), LED- (Leuchtdioden), Plasma-Display oder dergleichen. Benutzereingaben können von den Eingabegeräten 1960 empfangen werden, z. B. einer Tastatur, einer Maus, einem Touchpad, einem Mikrofon und dergleichen. Jedes der vorgenannten Module und/oder Geräte kann sich sogar auf einer einzelnen Halbleiterplattform befinden, um das System 1965 zu bilden. Alternativ können die verschiedenen Module auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Anwenders angeordnet werden.The system 1965 also contains input devices 1960 , the parallel processing system 1925 and display devices 1945 , ie a conventional CRT (cathode ray tube), LCD (liquid crystal display), LED (light emitting diodes), plasma display or the like. User input can be from the input devices 1960 are received, e.g. B. a keyboard, a mouse, a touchpad, a microphone and the like. Each of the aforementioned modules and / or devices can even reside on a single semiconductor platform around the system 1965 to build. Alternatively, the different modules can also be arranged separately or in different combinations of semiconductor platforms according to the wishes of the user.
Weiterhin kann das System 1965 zu Kommunikationszwecken über eine Netzschnittstelle 1935 mit einem Netz (z. B. einem Telekommunikationsnetz, Lokalen Netz (LAN), Drahtlosnetz, Weitverkehrsnetz (WAN) wie z. B. das Internet, Peer-to-Peer-Netz, Kabelnetz oder dergleichen) gekoppelt sein.Furthermore, the system 1965 for communication purposes via a network interface 1935 be coupled to a network (e.g. a telecommunications network, local area network (LAN), wireless network, wide area network (WAN) such as the Internet, peer-to-peer network, cable network or the like).
Das System 1965 kann auch einen Sekundärspeicher enthalten (nicht gezeigt). Der Sekundärspeicher enthält zum Beispiel ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein CD-Laufwerk, ein DVD-Laufwerk, ein Aufzeichnungsgerät oder einen USB-Flashspeicher repräsentiert. Das Wechselspeicherlaufwerk liest und/oder schreibt in einer bekannten Weise von einer bzw. auf eine Wechselspeicher-Einheit.The system 1965 may also include secondary storage (not shown). The secondary storage contains, for example, a hard disk drive and / or a removable storage drive, which represents a floppy disk drive, a magnetic tape drive, a CD drive, a DVD drive, a recording device or a USB flash memory. The removable storage drive reads and / or writes from or to a removable storage unit in a known manner.
Computerprogramme oder Computer-Steuerlogikalgorithmen können in dem Hauptspeicher 1940 und/oder dem Sekundärspeicher gespeichert werden. Solche Computerprogramme ermöglichen es dem System 1965, verschiedene Funktionen durchzuführen, wenn sie ausgeführt werden. Der Speicher 1940, der Sekundärspeicher und/oder irgendwelche anderen Speicher sind mögliche Beispiele von computerlesbaren Medien.Computer programs or computer control logic algorithms can be in main memory 1940 and / or the secondary storage can be stored. Such computer programs enable the system 1965 to perform various functions when they are performed. The memory 1940 , secondary storage and / or any other storage are possible examples of computer readable media.
Die Architektur und/oder Funktionalität der verschiedenen vorhergehenden Figuren kann im Kontext eines allgemeinen Computersystems, eines Platinensystems, eines Spielkonsolensystems für Unterhaltungszwecke, eines anwendungsspezifischen Systems und/oder irgendeines anderen gewünschten Systems implementiert werden. Das System 1965 kann zum Beispiel die Form eines Desktop-Computers, eines Laptop-Computers, eines Tablet-Computers, von Servern, Supercomputern, eines Smartphones (z. B. eines drahtlosen, tragbaren Geräts), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, eines am Kopf angebrachten Displays, eines tragbaren elektronischen Geräts, eines Mobiltelefongeräts, eines Fernsehgeräts, einer Workstation, einer Spielkonsole, eines eingebetteten Systems und/oder eines anderen Typs von Logik annehmen.The architecture and / or functionality of the various previous figures can be implemented in the context of a general computer system, a board system, a game console system for entertainment purposes, an application specific system and / or any other desired system. The system 1965 can take the form of, for example, a desktop computer, a laptop computer, a tablet computer, servers, supercomputers, a smartphone (e.g. a wireless, portable device), a personal digital assistant (PDA), a digital camera, a vehicle, a head-mounted display, a portable electronic device, a cellular phone, a television, a workstation, a game console, an embedded system, and / or other type of logic.
Maschinelles LernenMachine learning
Tiefe neuronale Netze (DNNs), die auf Prozessoren wie z. B. der PPU 1700 entwickelt wurden, hat man für verschiedene Anwendungsfälle eingesetzt, von selbstfahrenden Automobilen bis hin zu schnellerer Medikamentenentwicklung, von automatischer Bilderfassung in Online-Bilddatenbanken bis hin zur intelligenter Echtzeit-Sprachübersetzung in Video-Chat-Anwendungen. Deep Learning ist eine Technik, die den neuronalen Lernprozess des menschlichen Gehirns modelliert, kontinuierlich lernt, kontinuierlich intelligenter wird und im Laufe der Zeit schneller genauere Ergebnisse liefert. Ein Kind wird zunächst von einem Erwachsenen gelehrt, verschiedene Formen richtig zu identifizieren und zu klassifizieren, um schließlich ohne Nachhilfe Formen identifizieren zu können. Ähnlich muss ein System für Deep Learning oder neuronales Lernen in Objekterkennung und -klassifizierung trainiert werden, damit es intelligenter und effizienter wird, grundlegende Objekte, verdeckte Objekte usw. zu identifizieren und den Objekten auch Kontext zuzuweisen.Deep neural networks (DNNs) that are based on processors such. B. the PPU 1700 have been used for various applications, from self-driving automobiles to faster drug development, from automatic image capture in online image databases to intelligent real-time voice translation in video chat applications. Deep learning is a technique that models the neural learning process of the human brain, learns continuously, becomes increasingly intelligent and, over time, provides more accurate results. A child is first taught by an adult to correctly identify and classify different forms in order to be able to identify forms without tutoring. Similarly, a deep learning or neural learning system needs to be trained in object recognition and classification so that it becomes smarter and more efficient to identify basic objects, hidden objects, etc., and to assign context to the objects.
Auf der einfachsten Ebene betrachten Neuronen im menschlichen Gehirn verschiedene Eingaben, die empfangen werden, jedem dieser Inputs werden Wichtigkeitsstufen zugewiesen, und Ausgaben werden an andere Neuronen weitergeleitet, um darauf zu reagieren. Ein künstliches Neuron oder Perzeptron ist das grundlegendste Modell eines neuronalen Netzes. In einem Beispiel kann ein Perzeptron eine oder mehrere Eingaben empfangen, die verschiedene Merkmale eines Objekts repräsentieren, für die das Perzeptron trainiert wird, sie zu erkennen und zu klassifizieren, und jedem dieser Merkmale wird ein bestimmtes Gewicht zugewiesen, das auf der Wichtigkeit dieses Merkmals für die Definition der Form eines Objekts basiert.At the simplest level, neurons in the human brain look at various inputs that are received, each of these inputs are assigned levels of importance, and outputs are forwarded to other neurons to respond to. An artificial neuron or perceptron is the most basic model of a neural network. In one example, a perceptron may receive one or more inputs that represent various features of an object for which the perceptron is trained to recognize and classify them, and each of these features is assigned a specific weight based on the importance of that feature for the definition of the shape of an object is based.
Ein DNN-Modell enthält mehrere Schichten vieler verbundener Perzeptronen (z. B. Knoten), die mit enormen Mengen Eingabedaten trainiert werden können, um komplexe Probleme schnell und mit hoher Genauigkeit zu lösen. In einem Beispiel zerlegt eine erste Schicht des DNN-Modells ein Eingabebild eines Automobils in verschiedene Teile und sucht nach Grundmustern wie z. B. Linien und Winkeln. Die zweite Schicht setzt die Linien zusammen, um nach Mustern höherer Ebenen wie z. B. Rädern, Windschutzscheiben und Spiegeln zu suchen. Die nächste Schicht identifiziert den Fahrzeugtyp, und die letzten paar Schichten erzeugen ein Etikett für das Eingabebild, welches das Modell einer bestimmten Fahrzeugmarke identifiziert.A DNN model contains several layers of many connected perceptrons (e.g. nodes) that can be trained with enormous amounts of input data in order to solve complex problems quickly and with high accuracy. In one example, a first layer of the DNN model breaks down an input image of an automobile into different parts and searches for basic patterns such as e.g. B. lines and angles. The the second layer composes the lines to create patterns of higher levels such B. Search wheels, windshields and mirrors. The next layer identifies the vehicle type, and the last few layers create a label for the input image that identifies the model of a particular vehicle brand.
Sobald das DNN trainiert ist, kann das DNN eingesetzt und verwendet werden, um Objekte oder Muster in einem als Schlussfolgerung bekannten Prozess zu identifizieren und zu klassifizieren. Beispiele für eine Schlussfolgerung (den Prozess, durch den ein DNN nützliche Informationen aus einer gegebenen Eingabe extrahiert) umfassen das Identifizieren von handschriftlichen Zahlen auf in Geldautomaten gelegten Schecks, das Identifizieren von Bildern von Freunden auf Fotos, das Liefern von Filmempfehlungen an über fünfzig Millionen Benutzer, das Identifizieren und Klassifizieren von verschiedenen Arten von Automobilen, Fußgängern und Straßengefahren in fahrerlosen Fahrzeugen oder das Übersetzen von menschlicher Sprache in Echtzeit.Once the DNN is trained, the DNN can be used and used to identify and classify objects or patterns in a process known as a conclusion. Examples of a conclusion (the process by which a DNN extracts useful information from a given input) include identifying handwritten numbers on ATM checks, identifying pictures of friends in photos, providing movie recommendations to over fifty million users , identifying and classifying different types of automobiles, pedestrians and road hazards in driverless vehicles or translating human speech in real time.
Während des Trainings fließen Daten in einer Vorwärtsfortpflanzungssphase durch das DNN, bis eine Vorhersage erzeugt wird, die ein der Eingabe entsprechendes Etikett anzeigt. Wenn das neuronale Netz die Eingabe nicht korrekt etikettiert, werden Fehler zwischen dem korrekten Etikett und dem vorhergesagten Etikett analysiert und werden die Gewichte für jedes Merkmal während einer Rückwärtsfortpflanzungssphase angepasst, bis der DNN die Eingabe und andere Eingaben in einem Trainingsdatensatz korrekt etikettiert. Das Training komplexer neuronaler Netze erfordert enorme Mengen an Parallelrechenleistung, einschließlich Gleitkomma-Multiplikationen und -Additionen, die von der PPU 1700 unterstützt werden. Schlussfolgerung ist weniger rechenintensiv als Training, da es sich um einen latenzsensitiven Prozess handelt, bei dem ein trainiertes neuronales Netz auf neue Eingaben angewendet wird, die es vorher nicht gesehen hat, um Bilder zu klassifizieren, Sprache zu übersetzen und allgemein neue Informationen zu schlussfolgern.During training, data flows through the DNN in a forward propagation phase until a prediction is generated that indicates a label corresponding to the input. If the neural network does not correctly label the input, errors between the correct label and the predicted label are analyzed and the weights for each feature are adjusted during a backward propagation phase until the DNN correctly labels the input and other inputs in a training record. Training complex neural networks requires enormous amounts of parallel computing power, including floating point multiplications and additions, by the PPU 1700 get supported. Conclusion is less computationally intensive than training because it is a latency-sensitive process in which a trained neural network is applied to new inputs that it has not seen before to classify images, translate speech, and generally infer new information.
Neuronale Netze sind stark auf mathematische Matrix-Operationen angewiesen, und komplexe mehrschichtige Netze erfordern enorme Mengen an Gleitkommaleistung und Bandbreite für Effizienz und Geschwindigkeit. Mit Tausenden von Verarbeitungs-Rechenkernen, die für mathematische Matrix-Operationen optimiert sind und mehrere zehn bis Hunderte TFLOPS Leistung liefern, ist die PPU 1700 eine Computerplattform, die in der Lage ist, die für tiefe neuronale netzbasierte künstliche Intelligenz und Anwendungen für maschinelles Lernen erforderliche Leistung zu liefern.Neural networks rely heavily on mathematical matrix operations, and complex multilayer networks require enormous amounts of floating point power and bandwidth for efficiency and speed. With thousands of processing cores optimized for mathematical matrix operations and delivering tens to hundreds of TFLOPS performance, the PPU is 1700 a computing platform capable of delivering the performance required for deep neural network-based artificial intelligence and machine learning applications.
Alle oben genannten Patente und Veröffentlichungen werden durch Bezugnahme aufgenommen, als wenn sie ausdrücklich dargelegt wären.All of the above patents and publications are incorporated by reference as if they were expressly stated.
Die Erfindung wurde zwar im Zusammenhang damit beschrieben, was gegenwärtig als die praktischsten und bevorzugten Ausführungsformen angesehen wird, jedoch erkennt man, dass die Erfindung nicht auf die offenbarten Ausführungsformen einzuschränken ist, sondern im Gegenteil verschiedene Modifizierungen und äquivalente Anordnungen abdecken sollen, die im Geist und Schutzumfang der beigefügten Ansprüche enthalten sind.While the invention has been described in connection with what is currently considered to be the most practical and preferred embodiments, it will be appreciated that the invention is not to be limited to the disclosed embodiments, but on the contrary is intended to cover various modifications and equivalent arrangements that are spiritually and Scope of protection of the appended claims are included.
ZITATE ENTHALTEN IN DER BESCHREIBUNG QUOTES INCLUDE IN THE DESCRIPTION
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of documents listed by the applicant has been generated automatically and is only included for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.
Zitierte PatentliteraturPatent literature cited
-
US 14563872 [0001]US 14563872 [0001]
-
US 9582607 [0001, 0017, 0107]US 9582607 [0001, 0017, 0107]
-
US 9552664 [0001]US 9552664 [0001]
-
US 9569559 [0001, 0017]US 9569559 [0001, 0017]
-
US 10025879 [0001]US 10025879 [0001]
-
US 14737343 [0001]US 14737343 [0001]
-
US 16101066 [0001, 0113]US 16101066 [0001,0113]
-
US 16101247 [0001]US 16101247 [0001]
-
US 16101180 [0001]US 16101180 [0001]
-
US 16101148 [0001, 0113]US 16101148 [0001,0113]
-
US 16101196 [0001]US 16101196 [0001]
-
US 16101232 [0001]US 16101232 [0001]
-
US 20160070820 [0017]US 20160070820 [0017]
-
US 20160070767 [0017]US 20160070767 [0017]
-
US 14697480 [0106]US 14697480 [0106]
Zitierte Nicht-PatentliteraturNon-patent literature cited
-
Hery et al., „Towards Bidirectional Path Tracing at Pixar“ (2016) [0011]Hery et al., Towards Bidirectional Path Tracing at Pixar (2016) [0011]