-
KREUZBEZUG AUF BETREFFENDE ANMELDUNGEN
-
Diese Anmeldung ist eine Konversion von und beansprucht Priorität und den Vorteil der Provisional Patentanmeldung Nr. 61/609,156, betitelt „FULLY PARALLEL IN-PLACE CONSTRUCTION OF 3D ACCELERATION STRUCTURES ON A GPU”, welche das Anmeldedatum vom 9. März 2012 hat, welche hiermit mittels Bezugnahme in ihrer Gänze inkorporiert ist.
-
HINTERGRUND
-
Neuerdings hat eine Allgemeinzweck-Rechung bzw. -Berechnung Anlass für eine Anzahl von Verfahren zum Konstruieren von Begrenzungs-Volumen-Hierarchien (BVHs), Octrees und k-d-Bäume für Millionen von Primitiven in Echtzeit gegeben. Einige Verfahren haben zum Ziel, die Qualität des resultierenden Baumes unter Benutzung der Oberflächen-Heuristik (surface area heuristic) zu maximieren, während andere wählen, Baumqualität gegen erhöhte Konstruktionsgeschwindigkeit auszuhandeln bzw. zu tauschen (trade for).
-
Der richtige-Qualität-Versus-Geschwindigkeits-Kompromiss hängt schwerwiegend von der Anwendung ab. Baumqualität ist gewöhnlich bevorzugt in Raytracing, wo dieselbe Beschleunigungs-Struktur häufig für Millionen von Strahlen wieder benutzt wird. Breite-Phase-Kollisions-Detektion (broad-phase collision detection) und Teilchen-Interaktion in Echtzeit-Physik repräsentieren das andere Extrem, wo Konstruktions-Geschwindigkeit von primärer Wichtigkeit ist – die Beschleunigungs-Struktur muss auf jedem Zeitschritt rekonstruiert werden, und die Anzahl von Queries ist gewöhnlich relativ klein. Ferner stützen sich gewisse Anwendungen, wie etwa Voxel-basierte globale Illumination und Oberflächen-Rekonstruktion, insbesondere auf reguläre Octrees und k-d-Bäume, wo die Baum-Qualität fixiert ist.
-
Der Haupt-Nachteil mit existierenden Verfahren, welche zum Ziel haben, Konstruktions-Geschwindigkeit zu maximieren, ist, dass sie die Knoten-Hierarchie in einer sequentiellen Weise erzeugen, gewöhnlich ein Niveau zu einer Zeit, da jede Runde einer Verarbeitung vollenden muss, bevor die nächste beginnen kann. Dies begrenzt die Menge von Parallelismus, welche sie bei den obersten Niveaus des Baums erreichen können, und kann zu einer ernsthaften Minderbenutzung der parallelen Kerne führen. Das sequentielle Verarbeiten ist immer ein Flaschenhals mit kleinen Arbeitsbelastungen auf momentanen GPUs, was erfordert, dass Zehntausende von unabhängigen parallelen Threads vollständig ihre Rechen-Leistungsfähigkeit benutzen. Es kann erwartet werden, dass das Problem sogar in der Zukunft signifikanter wird, wenn die Anzahl von parallelen Kernen weiter ansteigt. Eine andere Implikation von sequentiellem Verarbeiten ist, dass die existierenden Verfahren die Hierarchie in einer Breite-zuerst-(breadth-first)-Ordnung ausgeben, obwohl eine Tiefe-Zuerst-(depth-first)-Ordnung gewöhnlich bevorzugt sein würde, wenn die Daten-Lokalität und Zwischenspeicher-Trefferraten betrachtet werden.
-
ZUSAMMENFASSUNG
-
Ein Computer-implementiertes Verfahren und System zum Maximieren von Parallelismus in der Konstruktion von hierarchischen Bäumen, wie etwa Begrenzungs-Volumen-Hierarchien (BVHs), Octrees, und k-d-Bäumen. Ausführungsformen der vorliegenden Erfindung stellen ein schnelles Verfahren zum Konstruieren von BVHs, Octrees, und k-d-Bäumen bereit, so dass die Gesamtperformance linear mit der Anzahl von verfügbaren Kernen skaliert und so dass die resultierende Datenstruktur immer in einer strengen Tiefe-Zuerst-(depth-first)-Ordnung ist. Das neue Verfahren umfasst Konstruieren eines binären Wurzel-Baumes (radix trees) in einer Voll-Daten-parallelen Weise. Der binäre Wurzel-Baum wird dann als ein Baustein zum effektiven Konstruieren anderer Typen von Bäumen benutzt.
-
In einer Ausführungsform ist ein nicht-transitorisches Computer-lesbares Speichermedium offenbart, welches Computer-ausführbare Anweisungen hat, zum Veranlassen eines Computer-Systems, ein Verfahren durchzuführen. Das Verfahren umfasst Bestimmen einer Mehrzahl von Primitiven, welche eine Totalanzahl von Primitive-Knoten aufweisen, welche indiziert sind, wobei die Mehrzahl von Primitiven Blatt-Knoten (leaf nodes) eines hierarchischen Baumes entspricht. Das Verfahren umfasst Sortieren der Mehrzahl von Primitiven. Das Verfahren umfasst Bauen des hierarchischen Baumes in einer Weise, welche höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert. Das Verfahren umfasst auch Bauen eines internen Knotens des hierarchischen Baumes parallel mit einem oder mehreren von seinen Vorgänger-Knoten. D. h. ein oder mehrere interne Knoten des hierarchischen Baumes werden parallel mit einem oder mehreren ihrer jeweiligen Vorgänger-Knoten gebaut.
-
In einer anderen Ausführungsform ist ein Computer-System offenbart, welches einen Prozessor, einen Speicher aufweist, welcher mit dem Prozessor gekoppelt ist und darin Anweisungen gespeichert hat, welche, wenn mittels des Computer-Systems ausgeführt, das Computer-System veranlassen, ein Verfahren auszuführen. Das Verfahren umfasst Bestimmen einer Mehrzahl von Primitiven, welche eine Gesamtanzahl von Primitive-Knoten aufweisen, welche indiziert sind, wobei die Mehrzahl von Primitiven Blatt-Knoten eines hierarchischen Baumes entspricht. Das Verfahren umfasst Sortieren der Mehrzahl von Primitiven. Das Verfahren umfasst Bauen des hierarchischen Baums in einer Weise, welche höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert. Das Verfahren umfasst auch Bauen eines internen Knotens des hierarchischen Baums parallel mit einem oder mehreren von seinen Vorgänger-Knoten. Das heißt, ein oder mehrere interne Knoten des hierarchischen Baumes werden parallel mit einem oder mehreren ihrer jeweiligen Vorgänger-Knoten gebaut.
-
In noch einer anderen Ausführungsform ist ein System offenbart, welches Mittel zum Zuweisen eines Morton-Codes an eine Mehrzahl von Primitiven aufweist, welche eine Gesamtanzahl von Primitive-Knoten aufweisen, welche indiziert sind, wobei die Mehrzahl von Primitiven Blatt-Knoten eines hierarchischen Baumes entspricht. Das System umfasst Mittel zum Sortieren der Mehrzahl von Primitiven. Das System umfasst Mittel zum Bauen des hierarchischen Baumes in einer Weise, welche höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert. Das System umfasst auch Mittel zum Bilden eines internen Knotens des hierarchischen Baumes parallel mit einem oder mehreren von seinen Vorgänger-Knoten. Das heißt, ein oder mehrere interne Knoten des hierarchischen Baumes werden parallel mit einem oder mehreren ihrer jeweiligen Vorgänger-Knoten gebaut.
-
In einer Ausführungsform ist ein nicht-transitorisches Computer-lesbares Speichermedium offenbart, welches Computer-ausführbare Anweisungen hat, um ein Computer-System zu veranlassen, ein Verfahren zum Konstruieren von Begrenzungs-Volumen-Hierarchien von binären Bäumen auszuführen. Das Verfahren umfasst Bereitstellen eines binären Baumes, welcher eine Mehrzahl von Blatt-Knoten und eine Mehrzahl von internen Knoten umfasst. Jeder der Mehrzahl von internen Knoten ist eindeutig mit zwei Kind-Knoten assoziiert, wobei jeder Kind-Knoten entweder einen internen Knoten oder einen Blatt-Knoten aufweist. Das Verfahren umfasst auch Bestimmen einer Mehrzahl von Begrenzungs-Volumina für Knoten in dem binären Baum mittels eines Traversierens des binären Baums von der Mehrzahl von Blatt-Knoten nach oben zu einem Wurzel-Knoten hin, wobei jeder Eltern-Knoten einmal mittels eines später ankommenden entsprechenden Kind-Knotens verarbeitet ist.
-
In einer anderen Ausführungsform ist ein System zum Bauen einer Begrenzungs-Volumen-Hierarchie von einer hierarchischen Baum-Struktur offenbart. Das System umfasst einen hierarchischer-Baum-Generator zum Bauen eines binären Baums, welcher eine Mehrzahl von Blatt-Knoten und eine Mehrzahl von internen Knoten aufweist. Jeder der Mehrzahl von internen Knoten ist eindeutig mit zwei Kind-Knoten assoziiert, wobei jeder Kind-Knoten entweder einen internen Knoten oder einen Blatt-Knoten aufweist. Das System umfasst auch ein Beziehungs-Modul zum Erzeugen von Eltern-Zeigern für jeden Knoten in dem binären Baum. Das heißt, wenn der binäre Baum gebaut wird, werden auch Eltern-Zeiger erzeugt, welche auf einen Eltern-Knoten von einem jeweiligen Kind-Knoten zeigen. Das System umfasst auch einen Planer bzw. Scheduler zum Auswählen eines oder mehrerer Blatt-Knoten zum Verarbeiten in paralleler Weise mittels einer Mehrzahl von Threads. Die Blatt-Knoten sind mit Pfaden zum Bestimmen von Begrenzungs-Volumina assoziiert, wobei die Pfade bei Blatt-Knoten beginnen und sich nach oben durch den binären Baum durch assoziierte und entsprechende Eltern-Knoten fortsetzen. Das System umfasst auch einen Begrenzungs-Volumen-Generator zum Bestimmen einer Mehrzahl von Begrenzungs-Volumina für Knoten in dem binären Baum mittels eines Traversierens des binären Baums von der Mehrzahl von Blatt-Knoten nach oben zu einem Wurzel-Knoten hin, wobei jeder Eltern-Knoten einmal mittels eines später ankommenden entsprechenden Kind-Knotens verarbeitet ist. Das System umfasst auch einen Eltern-Knoten-Traversierer zum Atomar-Traversieren (atomically traversing) zu einem ersten Eltern-Knoten von einem ersten Kind-Knoten auf einem ersten Thread, wobei der erste Eltern-Knoten mit dem ersten Kind-Knoten und einem zweiten Kind-Knoten assoziiert ist. Das System umfasst auch einen Zähler, welcher mit dem Eltern-Knoten assoziiert ist, zum Bestimmen, ob der erste Eltern-Knoten zuvor mittels des zweiten Kind-Knotens auf einem zweiten Thread traversiert worden ist. Der Begrenzungs-Volumen-Generator ist konfiguriert zum Bestimmen eines Eltern-Begrenzungs-Volumens für den ersten Eltern-Knoten unter Benutzung des ersten Threads, wenn der erste Eltern-Knoten vorher mittels des zweiten Kind-Knotens auf dem zweiten Thread traversiert worden ist.
-
Diese und andere Ziele und Vorteile der verschiedenen Ausführungsformen der vorliegenden Offenbarung werden von den gewöhnlichen Fachleuten in der Technik erkannt werden, nachdem sie die folgende detaillierte Beschreibung der Ausführungsformen gelesen haben, welche in den verschiedenen Zeichnungsfiguren illustriert sind.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die begleitenden Zeichnungen, welche in diese Spezifikation inkorporiert sind und einen Teil dieser Spezifikation bilden und in welchen ähnliche Zahlen ähnliche Elemente zeigen, illustrieren Ausführungsformen der vorliegenden Offenbarung und dienen zusammen mit der Beschreibung dazu, die Prinzipien der Offenbarung zu erläutern.
-
1 zeigt ein Blockdiagramm eines exemplarischen Computer-Systems, welches geeignet ist zum Implementieren der vorliegenden Verfahren, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
-
2 ist ein Flussdiagramm, welches ein Computer-implementiertes Verfahren zum Konstruieren von hierarchischen Bäumen in paralleler Weise illustriert, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
-
3 ist ein Diagramm eines geordneten binären Wurzel-Knotens, welcher während der Konstruktion des Wurzel-Knotens benutzt wird, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
-
4 ist ein Diagramm eines Knoten-Hierarchie-Layouts für einen binären Wurzel-Knoten, welcher zuerst in 3 eingeführt ist, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
-
5 ist ein Flussdiagramm, welches ein Verfahren zum Konstruieren von binären Wurzel-Knoten in paralleler Weise illustriert, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
-
6 ist eine Illustration von Pseudo-Code zum Konstruieren eines binären Wurzel-Knotens in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
-
7 ist ein Blockdiagramm eines Systems, welches konfiguriert ist, um BVHs zu konstruieren, in Übereinstimmung mit einer Ausführungsform der Erfindung.
-
8 ist ein Flussdiagramm, welches ein Computer-implementiertes Verfahren zum Konstruieren von BVHs in paralleler Weise illustriert, in Übereinstimmung mit einer Ausführungsform der Erfindung.
-
9 ist ein Flussdiagramm 900, welches ein Computer-implementiertes Verfahren zum Konstruieren von BVHs in paralleler Weise illustriert, wobei ein interner, Eltern-Knoten mittels eines später ankommenden Kind-Knotens verarbeitet wird, in Übereinstimmung mit einer Ausführungsform der Erfindung.
-
DETAILLIERTE BESCHREIBUNG
-
Bezug wird nun im Detail auf die verschiedenen Ausführungsformen der vorliegenden Offenbarung genommen, von welchen Beispiele in den begleitenden Zeichnungen illustriert sind. Während sie im Zusammenhang mit diesen Ausführungsformen beschrieben, wird es verstanden werden, dass sie nicht beabsichtigt sind, die Offenbarung auf diese Ausführungsformen zu begrenzen. Im Gegenteil ist die Offenbarung beabsichtigt, Alternativen, Modifikationen und Äquivalente zu umfassen bzw. abzudecken, welche innerhalb des Geistes und des Geltungsbereiches der Offenbarung umfasst sein können, wie mittels der angehängten Ansprüche definiert ist. Ferner werden in der folgenden detaillierten Beschreibung der vorliegenden Offenbarung zahlreiche spezifische Details ausgeführt, um ein durchgängiges Verständnis der vorliegenden Offenbarung bereitzustellen. Es wird jedoch verstanden werden, dass die vorliegende Offenbarung ohne diese spezifischen Details praktiziert werden kann. In anderen Fällen sind wohl bekannte Verfahren, Prozeduren, Komponenten und Schaltungen nicht im Detail beschrieben wurden, um nicht unnötiger Weise Aspekte der vorliegenden Offenbarung zu verschleiern.
-
Notation und Nomenklatur
-
Einige Teile der detaillierten Beschreibungen, welche folgen, sind in Begriffen von Prozeduren, logischen Blöcken, Verarbeitung und anderen symbolischen Repräsentationen von Operationen auf Daten-Bits innerhalb eines Computer-Speichers präsentiert. Diese Beschreibungen und Repräsentationen sind die Mittel, welche von den Fachleuten in der Daten-Verarbeitungs-Technik benutzt werden, um am effektivsten die Substanz ihrer Arbeit an andere Fachleute in der Technik zu befördern. In der vorliegenden Anwendung ist eine Prozedur, ein logischer Block, Prozess oder dergleichen gedacht oder angenommen, eine selbstkonsistente Sequenz von Schritten oder Anweisungen zu sein, welche zu einem gewünschten Ergebnis führen. Die Schritte sind diejenigen, welche physikalische Modifikationen von physikalischen Quantitäten benutzen. Gewöhnlicherweise, obwohl nicht notwendigerweise, nehmen diese Quantitäten die Form von elektrischen oder magnetischen Signalen an, welche fähig sind, gespeichert, transferiert, kombiniert, verglichen oder auf andere Weise in einem Computer-System manipuliert zu werden. Es hat sich zu Zeiten als bequem erwiesen, sich prinzipiell aus Gründen eines gemeinen Gebrauchs auf diese Signale als Transaktionen, Bits, Werte, Elemente, Symbole, Zeichen, Proben, Pixel oder dergleichen zu beziehen.
-
Es sollte jedoch berücksichtigt bzw. in Gedanken gehalten sein, dass diese und ähnliche Begriffe mit dem geeigneten physikalischen Quantitäten zu assoziieren sind und dass sie nur bequeme Bezeichnungen sind, welche für diese Quantitäten angewendet sind. Es sei denn, es ist spezifisch andererseits als von den folgenden Diskussionen ersichtlich behauptet, wird durch die vorliegende Offenbarung hindurch geschätzt sein, dass sich Diskussionen, welche Ausdrücke, wie etwa „Sortieren”, „Bestimmen”, „Bauen”, „Zuweisen” oder dergleichen benutzen, auf Aktionen und Prozesse (z. B. Flussdiagramme 200 und 500 von 2 bzw. 5) eines Computer-Systems oder eines ähnlichen elektronischen Rechengeräts oder Prozessors (z. B. System 100 von 1) beziehen. Das Computer-System oder ein ähnliches elektronisches Rechengerät manipuliert und transformiert Daten, welche als physikalische (elektronische) Quantitäten innerhalb der Computer-System-Speicher, -Register oder einem anderen solchen Informations-Speicher, Transmissions- oder Anzeige-Geräten repräsentiert sind.
-
2 ist ein Flussdiagramm von Beispielen von Computer-implementierten Verfahren zum Verarbeiten von Daten gemäß Ausführungsformen der vorliegenden Erfindung. Obwohl spezifische Schritte in den Flussdiagrammen offenbart sind, sind solche Schritte exemplarisch. Das heißt, Ausführungsformen der vorliegenden Erfindung sind gut geeignet zum Durchführen von verschiedenen anderen Schritten oder Variationen der Schritte, welche in den Flussdiagrammen rezitiert sind.
-
Ausführungsformen der vorliegenden Erfindung, welche hierin beschrieben sind, sind innerhalb des Kontextes von Hardware-basierten Komponenten diskutiert, welche zum Überwachen und Ausführen von Anweisungen konfiguriert sind. Das heißt, Ausführungsformen der vorliegenden Erfindung sind innerhalb von Hardware-Geräten einer Mikro-Architektur implementiert und sind zum Überwachen für kritische Unterbrechungs-Bedingungen (stall conditions) und zum Durchführen von geeigneter Taktgebung (clock-gating) für Zwecke von Energie-Management konfiguriert.
-
Andere Ausführungsformen, welche hierin beschrieben sind, können in dem allgemeinen Kontext von Computer-ausführbaren Anweisungen diskutiert sein, welche auf einer gewissen Form von Computer-lesbarem Speichermedium ansässig sind, wie etwa Programm-Module, welche mittels eines oder mehrerer Computer oder anderer Geräte ausgeführt werden. Als Beispiel und nicht als Begrenzung können Computer-lesbare Speichermedien nicht-transitorische Computer-Speichermedien und Kommunikations-Medien aufweisen. Im Allgemeinen umfassen Programm-Module Routinen, Programme, Objekte, Komponenten, Daten-Strukturen, etc., welche bestimmte Aufgaben durchführen oder bestimmte abstrakte Daten-Typen implementieren. Die Funktionalität der Programm-Module kann kombiniert oder verteilt werden, wie in verschiedenen Ausführungsformen gewünscht ist.
-
Computer-Speichermedien umfassen volatile und nicht-volatile, entfernbare und nicht-entfernbare Medien, welche in irgendeinem Verfahren oder irgendeiner Technologie zur Speicherung von Information implementiert sind, wie etwa Computer-lesbare Anweisungen, Daten-Strukturen, Programm-Module oder andere Daten. Computer-Speichermedien umfassen, sind aber nicht darauf beschränkt, willkürlicher-Zugriff-Speicher (RAM), Nur-Lese-Speicher (ROM), elektrisch löschbarer programmierbarer ROM (EEPROM), Flash-Speicher oder andere Speicher-Technologie, Kompakt-Disk-ROM (CD-ROM), digitale versatile Platten (DVDs) oder anderer optischer Speicher, magnetische Kassetten, magnetisches Band, magnetische Platten-Speicherung oder andere magnetische Speicher-Geräte, oder irgendein anderes Medium, welches benutzt werden kann, die gewünschte Information zu speichern und auf welches zugegriffen werden kann, um diese Information abzurufen.
-
Kommunikations-Medien können Computer-ausführbare Anweisungen verkörpern, Daten-Strukturen, und Programm-Module und umfassen irgendwelche Informations-Lieferungs-Medien. Als Beispiel und nicht als eine Begrenzung umfassen Kommunikations-Medien drahtgebundene Medien, wie etwa ein drahtgebundenes Netzwerk oder eine direkt-drahtgebundene Verbindung, und drahtlose Medien, wie etwa akustische Radiofrequenz (RF), Infrarot- und andere drahtlose Medien. Kombinationen von irgendeinem der obigen können auch innerhalb des Geltungsbereichs der Computer-lesbaren Medien umfasst sein.
-
1 ist ein Blockdiagramm eines Beispiels eines Computer-Systems 100, welches in der Lage ist, Ausführungsformen der vorliegenden Offenbarung zu implementieren. Computer-System 10 repräsentiert in breiter Weise irgendein Einzel- oder Mehr-Prozessor-Rechengerät oder -System, welches in der Lage ist, Computer-lesbare Anweisungen auszuführen. Beispiele von Computer-System 100 umfassen, ohne Begrenzung, Arbeitsstationen, Laptops, klientenseitige Stationen oder Terminals, Server, verteilte Rechen-Systeme, handgehaltene Geräte oder irgendein anderes Rechen-System oder -Gerät. In seiner grundlegenden Konfiguration kann Computer-System 100 zumindest einen Prozessor 110 und einen System-Speicher 140 umfassen.
-
Sowohl die Zentral-Verarbeitungs-Einheit (CPU) 110 als auch die Grafik-Verarbeitungs-Einheit (GPU) 120 sind mit Speicher 140 gekoppelt. System-Speicher 140 repräsentiert im Allgemeinen irgendeinen Typ oder Form von volatilem oder nicht-volatilem Speicher-Gerät oder -Medium, welches in der Lage ist, Daten zu speichern und/oder andere Computer-lesbare Anweisungen zu speichern. Beispiele von System-Speicher 140 umfassen, ohne Begrenzung, RAM, ROM, Flash-Speicher, oder irgendein anderes geeignetes Speicher-Gerät. In dem Beispiel von 1 ist Speicher 140 ein geteilter bzw. gemeinsamer (shared) Speicher, wobei der Speicher Anweisungen und Daten sowohl für die CPU 110 als auch für die GPU 120 speichert. Alternativ können separate Speicher, welche für die CPU 110 bzw. die GPU 120 dediziert sind, vorhanden sein. Der Speicher kann einen BildPuffer (frame buffer) zum Speichern von Pixel-Daten, welche einen Anzeige-Schirm 130 treiben, umfassen.
-
Das System 100 umfasst eine Benutzer-Schnittstelle 160, welche in einer Implementierung ein Auf-Schirm-Eingabe-Zeiger-Steuerungs-Gerät umfasst. Die Benutzer-Schnittstelle kann eine Tastatur, eine Maus und/oder ein Berühr-Schirmgerät (ein Berührfeld) umfassen.
-
CPU 110 und/oder GPU 120 repräsentieren im Allgemeinen irgendeinen Typ oder Form von Verarbeitungs-Einheit, welche in der Lage ist, Daten zu verarbeiten oder Anweisungen zu interpretieren und auszuführen. In gewissen Ausführungsformen können Prozessoren 110 und/oder 120 Anweisungen von einer Software-Anwendung oder einem Hardware-Modul empfangen. Diese Anweisungen können die Prozessoren 110 und/oder 120 veranlassen, die Funktionen von einer oder mehreren der Beispiel-Ausführungsformen, welche hierin beschrieben und/oder illustriert sind, durchführen. Zum Beispiel können Prozessoren 110 und/oder 120 durchführen und/oder ein Mittel zum Durchführen sein, entweder allein oder in Kombination mit anderen Elementen, von einem oder mehr von Überwachen, Bestimmen, Gating und Detektieren oder dergleichen, wie hierin beschrieben ist. Prozessoren 110 und/oder 120 können auch irgendwelche anderen Schritte, Verfahren oder Prozesse, welche hierin beschrieben und/oder illustriert sind, durchführen oder ein Mittel zum Durchführen derselben sein.
-
In einigen Ausführungsformen kann das Computer-lesbare Medium, welches ein Computer-Programm beinhaltet, in Computer-System 100 geladen werden. Eine Gänze oder ein Teil des Computer-Programms, welches auf dem Computer-lesbaren Medium gespeichert ist, kann im System-Speicher 140 und/oder verschiedenen Teilen von Speicher-Geräten gespeichert sein bzw. werden. Wenn es mittels der Prozessoren 110 und/oder 120 ausgeführt wird, kann ein in das Computer-System 100 geladenes Computer-Programm Prozessor 110 und/oder 120 veranlassen, die Funktionen der Beispiel-Ausführungsformen, welche hierin beschrieben und/oder illustriert sind, durchführen und/oder ein Mittel zum Durchführen dieser Funktionen sein. Zusätzlich oder alternativ können die Beispiel-Ausführungsformen, welche hierin beschrieben und/oder illustriert sind, in Firmware und/oder Hardware implementiert sein.
-
Parallele Konstruktion von 3D-Beschleunigungs-Strukturen
-
2 ist ein Flussdiagramm 200, welches ein Computer-implementiertes Verfahren zum Konstruieren von hierarchischen Bäumen in paralleler Weise illustriert, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung. In einer anderen Ausführungsform ist Flussdiagramm 200 innerhalb eines Computer-Systems implementiert, welches einen Prozessor und Speicher aufweist, welcher mit dem Prozessor gekoppelt ist und darin Anweisungen gespeichert hat, welche, wenn mittels des Computer-Systems ausgeführt, das System veranlassen, ein Verfahren zum Konstruieren von hierarchischen Bäumen in paralleler Weise auszuführen. In noch einer anderen Ausführungsform sind Anweisungen zum Durchführen eines Verfahrens auf einem nicht-transitorischen Computer-lesbaren Speichermedium gespeichert, welches Computer-ausführbare Anweisungen zum Veranlassen eines Computer-Systems hat, ein Verfahren zum Konstruieren von hierarchischen Bäumen in paralleler Weise durchzuführen. Das in Flussdiagramm 200 umrissene Verfahren ist mittels einer oder mehrerer Komponenten des Computer-Systems 100 von 1 implementierbar.
-
In der Praxis werden hierarchische Bäume z. B. in Grafiken benutzt, um Pfad-Nachverfolgung (path tracking), Echtzeit-Raytracing, Kollisions-Detektion, Photon-Abbildung (photon mapping), Voxel-basierte Szene-Repräsentationen, etc. zu beschleunigen. In Ausführungsformen sind die Bäume schnell in einer parallelen Weise konstruiert. Das heißt, es ist in Ausführungsformen der vorliegenden Erfindung möglich, dass alle Niveaus des hierarchischen Baums parallel von dem Beginn verarbeitet werden. Dies vermeidet eine Unterverwendung bzw. Minderverwendung und führt dazu, dass die Performance linear mit der Größe der GPU skaliert.
-
Zur Klarheit ist das Verfahren von 2 innerhalb des Kontextes von einem Bauen von Begrenzungs-Volumen-Hierarchien oder BVHs beschrieben, aber es ist gut geeignet zum Bauen von Punkt-basierten Octrees, und k-d-Bäumen.
-
Bei 210 umfasst das Verfahren Bestimmen einer Mehrzahl von Primitiven. Die Mehrzahl ist assoziiert und weist eine Gesamtzahl von Primitive-Knoten auf, welche indiziert sind. Die Mehrzahl von Primitiven entsprechend Blatt-Knoten eines hierarchischen Baums, welcher erzeugt ist.
-
In einer Ausführungsform ist jeder der Mehrzahl von Primitiven ein Morton-Code zugewiesen. Innerhalb des Kontextes von BVHs ist z. B. ein Morton-Code für jede Primitive dadurch erzeugt, dass der Zentroid-Punkt von ihrer Begrenzungs-Box gefunden wird und dass auf ihre Bit-Repräsentation relativ zu der Szene-Begrenzungs-Box geschaut wird. Die Idee ist, die Bits jeder Koordinate zu expandieren und sie dann zu verschachteln (interleave), um eine einzelne Bit-Kette bzw. -Strang (string) zu bilden.
-
Um das Beispiel unter Benutzung von BVHs fortzuführen, ist der Morton-Code für einen gegebenen Punkt, welcher innerhalb eines dreidimensionalen (3D)-Einheitswürfel beinhaltet ist, mittels des Bit-Strangs X0Y0Z0X1Y1Z1 definiert, wobei die X-Koordinate des Punktes repräsentiert ist als 0:X0X1X2, etc. und ähnlich für Y- und Z-Koordinaten. Der Morton-Code einer beliebigen 3D-Primitive kann in Begriffen des Zentroids seiner Achse-ausgerichteten-Begrenzungs-Box (AABB) definiert werden. In der Praxis können die Morton-Codes auf 30 oder 63 Bits begrenzt werden, um sie als 32-Bit oder 34-Bit-Ganzzahlen zu speichern, in Ausführungsformen.
-
Bei 220 umfasst das Verfahren Sortieren der Mehrzahl der Primitiven gemäß ihrer Morton-Codes. In dem Falle von BVHs ordnet sie dies z. B. entlang einer Raum füllenden Kurve, so dass Primitive, welche in 3D nahe beieinander sind, wahrscheinlich nah benachbart in der sortierten Sequenz enden.
-
Bei 230 umfasst das Verfahren Bauen des hierarchischen Baumes, was höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert. Das heißt, der hierarchische Baum ist in einer Weise gebaut, welcher nur eine lineare Menge von Speicher bezüglich der Anzahl von Eingabe-Primitiven in Ausführungsformen der vorliegenden Erfindung erfordert. Zusätzlich ist in einer Ausführungsform der hierarchische Baum in paralleler Weise gebaut oder konstruiert.
-
Bei 240 umfasst das Verfahren Bauen eines internen Knotens des hierarchischen Baumes in paralleler Weise mit einem oder mehreren von seinen Vorgänger-Knoten. Das heißt, ein oder mehrere interne Knoten des hierarchischen Baums werden in paralleler Weise mit einem oder mehreren ihrer jeweiligen Vorgänger-Knoten gebaut. Als solches wird in Ausführungsformen der vorliegenden Erfindung zumindest ein Knoten parallel mit zumindest einem seiner Vorgänger-Knoten konstruiert.
-
In Ausführungsformen der vorliegenden Erfindung ist die Konstruktion des hierarchischen Baums dadurch durchgeführt, dass ein binärer Wurzel-Baum konstruiert wird, welcher über der Menge von Morton-Codes definiert ist. Zum Beispiel ist im Falle von BVHs eine Knoten-Hierarchie erzeugt, wobei jeder Unter-Baum einem linearen Bereich von geordneten Primitiven entspricht. Im Stand der Technik wird ein binärer Baum gewöhnlicher Weise zum Indizieren von Strang-Daten bzw. Zeichen-Ketten-Daten (string data) benutzt. In einer Ausführungsform ist die Eingabe der Satz bzw. die Menge von Primitiven, oder eine Mehrzahl von Primitiven, welche die Blatt-Knoten definieren. In der vorliegenden Ausführungsform ist die Eingabe die sortierten Morton-Codes. Ferner weist der binäre Wurzel-Baum die Primitive-Knoten und einen oder mehrere interne Knoten auf. Jeder interne Knoten entspricht dem längsten gemeinsamen Präfix, welcher mittels der Primitiven von entsprechenden Primitive-Knoten in einem jeweiligen Unter-Baum gemeinsam benutzt bzw. geteilt wird.
-
3 ist ein Diagramm eines binären Wurzel-Baums 300 in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung. Insbesondere ist der Wurzel-Baum 300 ein geordneter binärer Wurzel-Baum, welcher acht Blatt-Knoten umfasst, mit einer Index-Nummerierung „0–7”. Die Blatt-Knoten speichern einen Satz von 5-Bit-Schlüsseln in lexikografischer Ordnung. Die Blatt-Knoten oder Primitive sind gezeigt, 5-Bits zu umfassen aus Illustrations-Zwecken, aber können von irgendeiner Länge sein, wie vorhergehend beschrieben ist. Die internen Knoten repräsentieren ihre gemeinsamen Präfixe. Ferner überdeckt jeder interne Knoten einen linearen Bereich von Schlüsseln, welcher in zwei Unterbereiche gemäß ihrem ersten sich unterscheidenden Bit partitioniert ist, wie unten in Bezug auf 4 beschrieben wird.
-
Insbesondere, gegeben einen Satz von n Schlüsseln k0, .... kn–1, repräsentiert als Bit-Zeichen-Ketten, ist ein binärer Wurzel-Baum (auch ein Patrizia-Baum genannt) eine hierarchische Repräsentation ihrer gemeinsamen Präfixe. Die Schlüssel sind mittels der Blatt-Knoten repräsentiert und jeder interne Knoten entspricht dem längsten gemeinsamen Präfix, welches mittels der Schlüssel in ihrem jeweiligen Unter-Baum geteilt ist, wie in 3 gezeigt ist.
-
Im Gegensatz zu einem Präfix-Baum, welcher einen internen Knoten für jedes gemeinsame Präfix beinhaltet, ist ein Wurzel-Baum in dem Sinne kompakt, dass er Knoten mit nur einem Kind auslässt bzw. vermeidet. Daher beinhaltet jeder binäre Wurzel-Baum mit n Blatt-Knoten genau n–1 interne Knoten, wie in 3 gezeigt ist. In einer Ausführungsform ist ein Kind-Knoten ein Blatt-Knoten. Doppelte Schlüssel erfordern spezielle Vorsicht, in einer Ausführungsform.
-
Insbesondere sind in einer Ausführungsform nur geordnete Bäume betrachtet, wo die Kinder jedes Knotens und konsequenter Weise die Blatt-Knoten in einer lexikografischen Ordnung sind. Dies ist äquivalent zu dem Erfordernis, dass die Sequenz von Schlüsseln sortiert ist, was ermöglicht, die Schlüssel, welche mittels jedes Knotens abgedeckt sind, als einen linearen Bereich [i, j] zu repräsentieren. Unter Benutzung von δ(i, j), um die Länge des längsten gemeinsamen Präfix zwischen Schlüsseln ki und kj zu bezeichnen, impliziert die Ordnung, dass δ(i', j') ≥ δ(i, j) für irgendwelche i', j' ∊ [i, j]. Das Präfix, welches einem gegebenen Knoten entspricht, ist dadurch bestimmt, dass sein erster und sein letzter Schlüssel verglichen werden, wobei die anderen Schlüssel garantiert sind, dasselbe Präfix zu teilen.
-
Im Effekt partitioniert jeder interne Knoten seine Schlüssel gemäß ihres ersten sich unterscheidenden Bits, d. h. demjenigen, welches δ(i, j) erfolgt. Dieses Bit wird Null sein für eine gewisse Anzahl von Schlüsseln, welche von ki starten, und eins für die übrigen bis kj. Der Index des letzten Schlüssels, wo das Bit Null ist, wird als eine „Teilungs-Position” (split position) gekennzeichnet, welche mittels γ ∊ [i, j – 1] bezeichnet ist. Da das Bit für ky Null ist und für ky+1 eins ist, muss die Teilungs-Position δ(γ; γ + 1) = δ(i, j) erfüllen. Die resultierenden Unter-Bereiche sind durch [i, γ] und [γ + 1, j] gegeben, und sind ferner mittels des linken bzw. des rechten Kind-Knotens partitioniert.
-
Wie in 3 gezeigt ist, entspricht die Wurzel dem vollen Bereich von Schlüsseln [0; 7]. Da k3 und k4 bei ihrem ersten Bit differieren, wird der Bereich bei γ = 3 geteilt, was in Unterbereiche [0, 3] und [4, 7] resultiert. Das linke Kind spaltet ferner [0, 3] bei γ = 1 basierend auf dem dritten Bit auf, und das rechte Kind spaltet [4, 7] bei γ = 4 basierend auf dem zweiten Bit auf.
-
4 und 5 sind Diagramme, welche die Konstruktion von binären Wurzel-Bäumen illustrieren, welche nachfolgend benutzt werden, um sekundäre Bäume, wie etwa BVHs, Octrees, k-d-Bäume, etc. zu konstruieren. Insbesondere ist 4 ein Diagramm eines Knoten-Hierarchie-Layouts für einen binären Wurzel-Raum, welcher zuerst in 3 eingeführt ist, und 5 ist ein Flussdiagramm, welches ein Verfahren zum Konstruieren von binären Wurzel-Knoten in paralleler Weise illustriert, in Übereinstimmung mit Ausführungsformen der vorliegenden Offenbarung.
-
4 ist ein Diagramm eines geordneten binären Wurzel-Baums 400, als erstes in 3 eingeführt, wobei die Blatt-Knoten „0–7” nummeriert sind und mit einem Satz von 5-Bit-Schlüsseln (z. B. Morton-Codes) assoziiert sind, welche in lexikografischer Ordnung sortiert sind, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung. Zum Beispiel ist Blatt-Knoten „1” mit einem 5-Bit-Morton-Code „0-0-0-1-0” und Blatt-Knoten „2” ist mit einem 5-Bit-Morton-Code „0-0-1-0-0” assoziiert.
-
Wie in 4 gezeigt ist, um eine parallele Konstruktion des binären Wurzel-Baums 400 zu ermöglichen, ist eine Verbindung zwischen interner-Knoten-Indizes 410 und den Primitive-Indizes (der Blatt-Knoten) 420 durch das in 4 gezeigte Layout etabliert. Das heißt, Indizes der internen Knoten sind in einer Weise zugewiesen, um ein Finden ihrer Kinder ohne ein Abhängen von früheren Resultaten zu ermöglichen. Insbesondere, wie es in 4 gezeigt ist, hat jeder interne Knoten einen Index zwischen „0–6” zugewiesen und ist horizontal mit einem Blatt-Knoten desselben Index ausgerichtet. Zum Beispiel ist interner-Knoten-Index 3 450 horizontal mit Blatt-Knoten oder Primitive-Index 3 450 ausgerichtet.
-
Auch ist der Bereich von Schlüsseln (z. B. Blatt-Knoten), welcher mittels jedes internen Knotens abgedeckt ist, mittels eines horizontalen Stabes (bar) indiziert und die Teilungsposition, welche dem ersten Bit entspricht, welches zwischen den Schlüsseln differiert, ist mittels eines Kreises angezeigt. Zum Beispiel ist für interner-Knoten-Index „3” 440 mit Bereich 445 (mittels des horizontalen Stabes gezeigt) assoziiert, welcher Blatt-Knoten „0–3” umfasst. Die Teilungsposition ist mittels des Kreises 447 gezeigt und zeigt an, dass das höchste sich unterscheidende Bit zwischen Blatt-Knoten-Indizes „1” 460 und „2” 470 ist.
-
Die Blatt-Knoten und die internen Knoten sind in zwei separaten Feldern, L bzw. I, zur Klarheit und Zwecke der Illustration gespeichert. Das Knoten-Layout in 4 ist so definiert, dass der Wurzel-Knoten 430 bei I0 lokalisiert ist und die Indizes seiner Kinder, sowie die Kinder von irgendeinem internen Knoten, sind gemäß ihrer jeweiligen Teilungsposition zugewiesen, wie vollständiger in Bezug auf 5 beschrieben wird. Zum Beispiel ist das linke Kind bei Iy lokalisiert, wenn es mehr als einen Schlüssel abdeckt, oder bei Ly, wenn es ein Blatt ist. Ähnlich ist das rechte Kind bei Iy+1 oder Iy+1 lokalisiert, wie in 4 gezeigt ist.
-
Eine wichtige Eigenschaft des in 4 gezeigten Knoten-Layouts ist, dass der Bereich von Primitive-Indizes, welche zu jedem internen Knoten gehören, mit entweder ihrer ersten Primitive oder Blatt-Knoten oder ihrer letzten Primitive oder Blatt-Knoten umfasst und koinzidiert. Auch ist der Wurzel-Knoten „0” 430 bei dem Beginn seines Bereichs [0; n – 1] lokalisiert, so dass das linke Kind von irgendeinem internen Knoten bei dem Ende seines Bereiches [i, γ] lokalisiert ist und das rechte Kind bei dem Beginn seines Bereichs [γ + 1; j] lokalisiert ist.
-
5 ist ein Flussdiagramm 500, welches ein Computer-implementiertes Verfahren zum Konstruieren von binären Wurzel-Bäumen paralleler Weise illustriert, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung. In einer anderen Ausführungsform ist das Flussdiagramm 500 innerhalb eines Computer-Systems implementiert, welches einen Prozessor und Speicher umfasst, welcher mit dem Prozessor gekoppelt ist und darin Anweisungen gespeichert hat, welche, wenn mittels des Computer-Systems ausgeführt, das Computer-System veranlassen, ein Verfahren zum Konstruieren hierarchischer Bäume in paralleler Weise auszuführen. In noch einer anderen Ausführungsform sind Anweisungen zum Durchführen eines Verfahrens auf einem nicht-transitorischen Computer-lesbaren Speichermedium gespeichert, welches Computer-ausführbare Anweisungen hat zum Veranlassen eines Computer-Systems, ein Verfahren zum Konstruieren von hierarchischen Bäumen in paralleler Weise durchzuführen. Das im Flussdiagramm 500 skizzierte Verfahren ist mittels einer oder mehrerer Komponenten des Computer-Systems 100 von 1 implementierbar.
-
Das in 4 skizzierte Verfahren expandiert den Prozess, welcher in 230 von 2 skizziert ist, um den hierarchischen Baum zu bauen, in einer Ausführungsform. Insbesondere bzw. spezifisch wird die Knoten-Hierarchie dadurch erzeugt, dass die Primitiven oder Blatt-Knoten partitioniert werden. In einer Ausführungsform ist das Partitionieren mittels eines Konstruierens eines Wurzel-Baums durchgeführt, welcher über den Satz von Morton-Codes definiert ist, welche die Blatt-Knoten repräsentieren. Insbesondere wird eine parallele Konstruktion der Knoten-Hierarchie dadurch durchgeführt, dass eine Verbindung zwischen den internen-Knoten-Indizes und den Primitive-Indizes der Blatt-Knoten durch das in 3 und 4 gezeigte Baum-Layout etabliert wird. Das heißt, Indizes für die internen Knoten werden in einer Weise zugewiesen, welche ein Finden ihrer Kind-Knoten ohne ein Abhängen von früheren Resultaten ermöglicht. In dieser Weise ist keine Synchronisation zwischen Schichten der Knoten-Hierarchie durchgeführt. Auch in dieser Weise werden eine oder mehrere interne Knoten des hierarchischen Baums in paralleler Weise mit einem oder mehreren ihrer jeweiligen Vorgänger-Knoten gebaut.
-
Um einen binären Wurzel-Baum zu konstruieren, bestimmt der in 5 skizzierte Prozess insbesondere den Bereich von Schlüsseln, welche mittels jedes internen Knotens abgedeckt sind, und bestimmt Kinder (zwei, da dies ein binärer Wurzel-Baum ist) jedes internen Knotens. Da der Bereich von Primitive-Indizes, welche zu jedem internen Knoten gehören, umfasst und koinzidiert mit entweder seiner ersten Primitive oder Blatt-Knoten, oder seiner letzten Primitive oder Blatt-Knoten, wie oben beschrieben ist, ist ein Ende des Bereichs bestimmt. Das andere Ende des Bereichs wird dadurch bestimmt, dass bei benachbarten Primitive-Indizes geschaut wird. Danach können die Kinder dadurch identifiziert werden, dass die Teilungs-Position gefunden wird, mittels des Knoten-Layouts, wie in 4 z. B. gezeigt ist, und wie ferner unten beschrieben ist.
-
In einer Ausführungsform wird der in 5 skizzierte Prozess unter Benutzung von Pseudo-Code 600 durchgeführt, welcher in 6 illustriert ist, wobei Pseudo-Code 600 einen binären Wurzel-Baum konstruiert. Zur Einfachheit ist in Pseudo-Code 600 δ(i, j) = –1 wenn j ∉ [0,n – 1] ist. Insbesondere wird jeder interne Knoten Ii in paralleler Weise verarbeitet, in einer Ausführungsform.
-
Bei 510 umfasst, für einen gegebenen Knoten-Index, welcher einem internen Knoten entspricht, das Verfahren von 5 Bestimmen einer Richtung eines entsprechenden Bereiches von Primitive-Indizes der Mehrzahl von Primitiven basierend auf dem Knoten-Index. Innerhalb des Wurzel-Baumes gehört jeder interne Knoten zu einem Bereich von Primitive-Indizes. Insbesondere existiert eine Beziehung zwischen einem internen Knoten eines zugewiesenen Index und einem Primitive-Index mit derselben Index-Nummer. Insbesondere ist der Primitive-Index mit derselben Index-Nummer in dem entsprechenden Bereich von Primitive-Indizes umfasst. Ferner weist der gegebene Knoten-Index einen beginnenden Primitive-Index oder einen endenden Primitive-Index in dem entsprechenden Bereich auf.
-
Insbesondere ist die Richtung des Bereiches von benachbarten Primitive-Indizes bestimmt. Das heißt, die „Richtung” des Bereiches ist dadurch bestimmt, dass bei dem benachbarten Schlüsseln ki–1, ki, ki+1 geschaut wird. Die Richtung wird durch d bezeichnet, so dass d = +1 einen Bereich anzeigt, welcher bei i beginnt und d = –1 einen Bereich anzeigt, welcher bei i endet. Weil jeder interne Knoten zumindest zwei Schlüssel abdeckt, ist es als eine Eigenschaft der Baum-Struktur von 5 bestimmt, dass ki und k+d zu Ii–d gehören müssen. Zusätzlich ist es als eine Eigenschaft der Baum-Struktur von 5 bestimmt, dass ki–d zu einem Geschwister-Knoten Ii–d gehört, da Geschwister immer nächst zueinander lokalisiert sind.
-
Insbesondere ist die Richtung eines Bereiches basierend darauf bestimmt, welche benachbarte Primitive die meisten Index-Übereinstimmungen hat. Zum Beispiel beginnt oder endet in 4 der Bereich für den internen Knoten-Index oder „3” 440 mit dem Primitive-Index oder Blatt-Knoten „3” 450. Die Richtung ist bestimmt, indem die benachbarten Indizes oder Blatt-Knoten, wie etwa Primitive-Index „2” 470 oder Primitive-Index „4” 480, mit dem Primitive-Index verglichen werden, welcher denselben Index wie der interne Knoten hat (z. B. Primitive-Index „3” 450). Als solches hat Primitive-Index „2” 470 eine Morton-Code-Sequenz von „0-0-1-0-0”, Primitive-Index „3” 450 hat eine Morton-Code-Sequenz von „0-0-1-0-1”, und Primitive-Index „4” hat eine Morton-Code-Sequenz von „1-0-0-1-1”. Der Primitive-Index mit den meisten Übereinstimmungen mit Primitive-Index „3” 450 ist Primitive-Index „2” 470. Als solches geht die Richtung des Bereiches 445 nach links, um Primitive-Index „2” 470 zu umfassen, so dass Bereich 445 Primitive-Index-Indizes „0–3” umfasst.
-
Zum Beispiel ist die Richtung in Linien 2–3 von Pseudo-Code 600 bestimmt. Das heißt, die Schlüssel, welche zu Ii gehören, teilen einen gemeinsamen Präfix, welcher von dem einen in dem Geschwister durch Definition verschieden ist. Dies impliziert, dass eine kleinere Begrenzung für die Länge des Präfix gegeben ist durch δmin = δ(i, i – d), so dass δ(i, j) > δmin für irgendein kj zugehörig zu Ii. Diese Bedingung wird dadurch erfüllt, indem δ(i, i – 1) mit δ(i, i + 1) verglichen wird, und indem δ so gewählt ist, dass δ(i, i + d) dem Größeren entspricht, wie in Zeile 3 von Pseudo-Code 600 gezeigt ist.
-
Bei 520 umfasst das Verfahren Bestimmen einer Länge des entsprechenden Bereiches. Insbesondere wird ein Maximal-Wert oder eine obere Grenze für die Länge in Ausführungsformen bestimmt. Zusätzlich wird der aktuelle Wert für die Länge dadurch bestimmt, dass eine binäre Suche in Ausführungsformen durchgeführt wird. Insbesondere wird das andere Ende des Bereiches dadurch bestimmt, dass nach dem größten I gesucht wird, welches δ(i, i + Id) > δmin erfüllt, wie in Pseudo-Code 600 bereitgestellt ist. In einer Ausführungsform wird Eine-Potenz-von-zwei-obere-Begrenzung Imax > I für die Länge dadurch bestimmt, dass von dem Wert „2” gestartet wird und der Wert exponentiell erhöht wird, bis er nicht länger die Ungleichung erfüllt, wie in Zeilen 6–8 von Pseudo-Code 600 gezeigt ist. Sobald die obere Grenze bestimmt ist, wird die Länge „I” unter Benutzung einer binären Suche in dem Bereich [0; Imax–1] bestimmt. Die Idee ist, jedes Bit von I wiederum bzw. nacheinander (in turn) zu betrachten, beginnend von dem höchsten, und es auf eins zu setzen, es sei denn, der neue Wert würde daran scheitern, die Ungleichung zu erfüllen, wie in Zeilen 10–13 von Pseudo-Code 600 gezeigt ist. Das andere Ende des Bereiches ist dann gegeben durch j = i + ld.
-
Bei 530 umfasst das Verfahren Bestimmen eines höchsten differierenden Bits zwischen Primitive-Indizes in dem entsprechenden Bereich, zu Zwecken eines Bestimmens der Kind-Indizes für den gegebenen Index, welcher dem internen Knoten entspricht. Zum Beispiel bezeichnet in Pseudo-Code 600 δ(i, j) die Länge von dem Präfix, welches Il entspricht, welches mittels δKnoten bezeichnet ist. Dies wird benutzt, um die Teilungs-Position γ dadurch zu finden, dass eine ähnliche binäre Suche für das größte s ∊ [0; l – 1], was δ(i, i + sd) > δnode erfüllt, durchgeführt wird, wie in Zeilen 17–20 von Pseudo-Code 600 gezeigt ist. Wenn d = +1, dann ist γ gegeben durch i + sd, da dies der höchste Index ist, welcher zu dem linken Kind gehört. Wenn d = –1 ist, dann wird der Wert um den Wert eins dekrementiert, um das invertierte Indizieren zu berücksichtigen.
-
Zum Beispiel ist die Teilungs-Position für den internen Knoten „43” 440 in 4. Wie gezeigt ist, ist das höchste differierende Bit zwischen Primitive-Indizes „0–3” von Bereich 445 zwischen Primitive-Indizes „1” 460 und „2” 470. Das heißt, Primitive-Index „1” 460 hat eine Morton-Code-Sequenz von „0-0-0-1-0” und Primitive-Index „2” 470 hat eine Morton-Code-Sequenz von „0-0-1-0-0”. Das höchste differierende Bit tritt bei dem dritten Bit auf, gezeigt mittels Zeile 490.
-
Auch umfasst bei 540 das Verfahren ein Zuweisen von Kind-Knoten-Indizes für den gegebenen Knoten-Index, welcher den Primitive-Indizes entspricht, welche mit dem höchsten differierenden Bit assoziiert sind, wie oben bestimmt ist. Zum Beispiel decken in Pseudo-Code 600 von 6, gegeben i, j und y, die Kinder von Ii die Bereiche [min(i, j); y] und [y + 1; max (i, j)] ab. Für jedes Kind wird der Beginn und das Ende seines Bereiches verglichen, um zu sehen, ob es ein Blatt ist und um dann den entsprechenden Knoten bei Index y oder y + 1 in Übereinstimmung mit dem Knoten-Layout (z. B. 4) zu referenzieren, wie in Zeilen 23–24 von Pseudo-Code 600 von 6 gezeigt ist.
-
In einer Ausführungsform ist der in Pseudo-Code 600 von 6 präsentierte Algorithmus auf einer GPU als ein einzelnes Kernel-Anstoßen (launch) implementiert, wobei jeder Thread für einen internen Knoten verantwortlich ist. Unter der Annahme, dass die Länge der Schlüssel fixiert ist, kann δ(i, j) dadurch effizient evaluiert werden, dass ein logisches XOR zwischen den zwei Schlüsseln berechnet wird und die führenden Null-Bits in der resultierenden ganzen Zahl gezählt werden.
-
Der in 1–6 konstruierte binäre Wurzel-Baum wird benutzt, um sekundäre Bäume zu konstruieren, in Ausführungsformen der Erfindung. In einer Ausführungsform wird ein BVH von dem binären Wurzel-Baum konstruiert, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung. Insbesondere wird ein BVH für einen Satz von 3D-Primitiven wie folgt konstruiert: (1) Weise einen Morton-Code für jede Primitive gemäß ihrem Zentroid zu, (2) Sortiere die Morton-Codes, (3) Konstruiere einen binären Wurzel-Baum, und (4) Weise eine Begrenzungs-Box für jeden internen Knoten zu.
-
Wenn die Morton-Codes aller Primitiven eindeutig sind, ist es bemerkt, dass der binäre Wurzel-Baum identisch in seiner Struktur mit der entsprechenden linearen BVH ist – wobei Identifizieren der gemeinsamen Präfixe zwischen den Morton-Codes äquivalent ist zu dem rekursiven Abfüllen oder Einteilen (bucketing) der Primitiven gemäß jedem Bit. Der Fall von Doppel-Morton-Codes ist explizit gehandhabt, da sich der Konstruktions-Algorithmus von 6 darauf stützt, dass die Schlüssel eindeutig sind. Dies wird in einer Ausführungsform dadurch erreicht, dass jeder Schlüssel mit einer Bit-Repräsentation seines Index vermehrt wird (augmenting), d. h. k0 i = ki_i, wobei _ eine Zeichenkette-Konkatenierung anzeigt. In Praxis gibt es keinen Bedarf, die vergrößerten Schlüssel tatsächlich zu speichern, weil es ausreichend ist, einfach i und j als einen Rückgriff zu benutzen, wenn ki = kj, wenn δ(i; j) evaluiert wird.
-
Vorhergehende Verfahren für lineare BVHs berechnen die Begrenzungs-Boxen sequentiell in einer Weise von unten nach oben, wobei sie sich auf die Tatsache stützen, dass der Satz von Knoten, welcher auf jedem Niveau lokalisiert ist, a priori bekannt ist. In einer Ausführungsform ist eine verschiedene Zugangsweise präsentiert, wo die Pfade von Blatt-Knoten zu der Wurzel parallel prozessiert werden. Jeder Thread startet von einem Blatt-Knoten und läuft den Baum hoch unter Benutzung von Eltern-Zeigern, welche wir während der Wurzel-Baum-Konstruktion aufzeichnen. Threads werden nachverfolgt (tracked), um zu bestimmen, wie viel Threads jeden internen Knoten besucht haben unter Benutzung von atomaren Zählern, derart, dass der erste Thread unmittelbar terminiert, während der zweite den Knoten zum Prozessieren bekommt. Auf diese Weise wird jeder Knoten mittels genau eines Threads verarbeitet, was zu einer O(n)-Zeit-Komplexität führt. Die Anzahl von globalen Atomiken kann dadurch reduziert werden, dass schnellere geteilter-Speicher-Atomiken benutzt werden, wenn immer detektiert ist, dass alle die Blätter, welche durch einen gegebenen internen Knoten abgedeckt sind, mittels desselben Thread-Blocks prozessiert sind.
-
Der in 1–6 konstruierte binäre Wurzel-Baum wird benutzt, um sekundäre Bäume, wie etwa Octrees zu konstruieren. Um einen Octree für einen Satz von Punkten zu konstruieren, bildet jedes 3k-Bit-Präfix eines gegebenen Morton-Codes direkt auf einen Octree-Knoten bei Niveau k ab. Diese Präfixe werden dadurch durchgezählt, dass bei den Kanten eines entsprechenden binären Wurzel-Baums geschaut wird, derart dass eine Kante, welche einen Eltern-Teil mit einem Präfix von Länge δEltern mit einem Kind mit einem Präfix der Länge δKind verbindet, alle Unter-Präfixe von Länge δEltern + 1, ..., δKind repräsentiert. Von diesen sind [δKind/3] – [δEltern/3] durch 3 teilbar. Diese Zähler werden während der Wurzel-Baum-Konstruktion evaluiert und dann wird eine parallele Präfix-Summe durchgeführt, um die Octree-Knoten zu allozieren. Die Eltern der Octree-Knoten werden dadurch gefunden, dass bei den unmittelbaren Vorgängern jedes Wurzel-Baum-Knotens geschaut wird.
-
Das Verarbeiten besteht somit aus sieben Schritten: (1) Berechne Morton-Codes für die Punkte, (2) Sortiere die Morton-Codes, (3) Identifiziere Duplikate, d. h. Punkte, welche innerhalb desselben Blatt-Knotens fallen, indem jedes Paar von angrenzenden Morton-Codes verglichen wird, (4) Entferne die Duplikate unter Benutzung von einer parallelen Kompaktion, (5) Konstruiere einen binären Wurzel-Baum, (6) Führe eine parallele Präfix-Summe durch, um die Octree-Knoten zu allozieren, und (7) Finde den Elter bzw. Eltern-Teil jedes Knotens.
-
Der binäre Wurzel-Baum, welcher in 1–6 konstruiert ist, wird benutzt, um sekundäre Bäume, wie etwa k-d-Bäume zu konstruieren, in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung. Der Wurzel-Baum, welcher durch Schritt 5 oben erzeugt ist, kann direkt als ein k-d-Baum über den Punkten interpretiert werden, in einer Ausführungsform. Jeder interne Knoten partitioniert die Punkte gemäß dem nächsten Bit in den Morton-Codes nach ihrem gemeinsamen Präfix, welches äquivalent ist, sie auf irgendeiner Seite einer Achsen-ausgerichteten Ebene in 3D zu klassifizieren. Ein Präfix von Länge δ entspricht einer Ebene senkrecht zu der d-ten Hauptachse, wobei d = δ mod. 3. Die Position der Ebene ist gegeben durch 0.BdBd+3 ... Bδ–31, wobei Bi das i-te Bit des Präfix repräsentiert.
-
Konstruieren einer Begrenzungs-Volumen-Hierarchie für einen Satz von 3D-Primitiven
-
In einer Ausführungsform der vorliegenden Erfindung wird eine Begrenzungs-Volumen-Hierarchie (BVH) für einen Satz von dreidimensionalen (3D)-Primitiven konstruiert. In anderen Ausführungsformen können die Primitive aus einer willkürlichen Dimensionalität (z. B. 2D, 4D, usw.) sein. In einer Implementierung ist die BVH von einem Wurzel-Baum, welcher vorher in Bezug auf 1–6 diskutiert ist, konstruiert. Zum Beispiel wird eine Begrenzungs-Volumen-Hierarchie benutzt zum Indizieren einer Mehrzahl von 3D-Primitiven, wie etwa Dreiecke. Die Primitiven werden in Knoten gruppiert und jeder Knoten speichert ein Begrenzungs-Volumen, welches vollständig die darunter liegenden Primitiven beinhaltet. Die Gruppierung wird hierarchisch wiederholt, so dass der Wurzel-Knoten die gesamte Szene abdeckt. Die Begrenzungs-Volumina sind nützlich, um zusätzliche Information zu bestimmen, wie etwa wann Kollisions-Detektion oder Raytracing, etc. durchgeführt wird.
-
In Ausführungsformen der vorliegenden Erfindung beinhaltet ein Begrenzungs-Volumen vollständig den Satz von Primitiven, welche beabsichtigt sind, innerhalb des Volumens beinhaltet zu sein. In einer Implementierung weist das Begrenzungs-Volumen eine Achsen-ausgerichtete-Begrenzungs-Box (AABB) auf.
-
7 ist ein Blockdiagramm eines Systems 700, welches konfiguriert ist, BVHs zu konstruieren, in Übereinstimmung mit einer Ausführungsform der Erfindung. Insbesondere umfasst das System 400 einen hierarchischer-Baum-Generator 710, welcher konfiguriert ist, einen binären Baum, welcher eine Mehrzahl von Blatt-Knoten und eine Mehrzahl von internen Knoten aufweist, zu bauen. Jeder der Mehrzahl von internen Knoten ist eindeutig mit zwei Kind-Knoten assoziiert, wobei jeder Kind-Knoten entweder einen internen oder einen Blatt-Knoten aufweist. In einer Ausführungsform ist der binäre Baum ein Wurzel-Baum, welcher unter Benutzung der Verfahren und Systeme gebaut ist, welche vorher in 1–6 beschrieben sind. In anderen Ausführungsformen ist irgendein Typ von binärem Baum geeignet zum Bereitstellen einer Hierarchie für Begrenzungs-Volumen-Konstruktionen, wie etwa wenn ein vorher gebauter binärer Baum oder Hierarchie zum Bauen von mehreren Begrenzungs-Volumen-Hierarchien über mehrere Szenen benutzt wird.
-
Das System 700 umfasst auch ein Beziehungs-Modul 720 zum Erzeugen von Eltern-Zeigern für jeden Knoten in dem binären Baum. Das heißt, der vorher erzeugte binäre Baum, wie etwa derjenige, welcher von dem System und Verfahren von 1–6 erzeugt ist, stellt Kind-Beziehungen und/oder Zeiger für einen bestimmten Knoten bereit. Das Beziehungs-Modul 720 kehrt die Beziehung um, so dass Kind-Knoten mit Eltern-Zeigern assoziiert sind, welche zu jeweiligen Eltern-Knoten zeigen. In dieser Weise werden die Eltern-Zeiger benutzt, wenn BVHs unter Benutzung eines von-unten-nach-oben-Traversierungs-Verfahrens gebaut werden.
-
Das System 700 umfasst auch einen Begrenzungs-Volumen-Generator 740 zum Bestimmen einer Mehrzahl von Begrenzungs-Volumina für Knoten in dem binären Baum. Insbesondere wird der binäre Baum von einer Mehrzahl von Blatt-Knoten des Baumes nach oben zu einem Wurzel-Knoten traversiert, wenn die Begrenzungs-Volumina jeweiliger Knoten in dem binären Baum gebaut werden, so dass Pfade von den Blatt-Knoten zu dem Wurzel-Knoten parallel verarbeitet werden. Auch ist jeder Eltern-Knoten in dem binären Baum einmal verarbeitet mittels eines später ankommenden Threads, welcher von einem entsprechenden Kind-Knoten herrührt.
-
In einer Ausführungsform umfasst das System 700 auch einen Planer 730 zum Auswählen eines oder mehrerer Blatt-Knoten zum Verarbeiten in paralleler Weise mittels einer Mehrzahl von Threads. Das heißt, Planer 730 weist Blatt-Knoten an die Threads zu, welche mittels des Begrenzungs-Volumen-Generators 740 benutzt werden, wenn Begrenzungs-Volumina für interne Knoten des binären Baumes gebaut werden. Zum Beispiel bestimmt der Planer 730, welche Threads an welche Knoten, und insbesondere, an welche Blatt-Knoten des binären Baums zum Bauen von Begrenzungs-Volumina dieser Blatt-Knoten, und für nachfolgende Eltern-Knoten zugewiesen werden. In einer Ausführungsform ist der Planer innerhalb der Verarbeitungs-Kerne und/oder Threads umfasst oder unterstützt die Verarbeitungs-Kerne und/oder Threads, welche eine Grafik-Verarbeitungs-Einheit (GPU) aufweisen.
-
8 ist ein Flussdiagramm 800, welches ein Computer-implementiertes Verfahren zum Konstruieren von BVHs in paralleler Weise illustriert, in Übereinstimmung mit einer Ausführungsform der Erfindung. In einer anderen Ausführungsform ist Flussdiagramm 800 innerhalb eines Computer-Systems implementiert, welches einen Prozessor und Speicher umfasst, welcher mit dem Prozessor gekoppelt ist und darin Anweisungen gespeichert hat, welche, wenn mittels des Computer-Systems ausgeführt, das System veranlassen, ein Verfahren zum Konstruieren von BVHs in paralleler Weise auszuführen. In noch einer anderen Ausführungsformen sind Anweisungen zum Durchführen eines Verfahrens zum Konstruieren von BVHs in paralleler Weise auf einem nicht-transitorischen Computer-lesbaren Speichermedium gespeichert, welches Computer-ausführbare Anweisungen zum Veranlassen eines Computer-Systems hat, um ein Verfahren zum Konstruieren von BVHs in paralleler Weise durchzuführen. Das in dem Flussdiagramm skizzierte Verfahren ist mittels einer oder mehrerer Komponente der Systeme 100 und 700 von 1 und 7 implementierbar.
-
Bei 810 umfasst das Verfahren Bereitstellen eines binären Baumes. In einer Ausführungsform ist der binäre Baum ein Wurzel-Baum, welcher unter Benutzung der Systeme und Verfahren von 1–6 konstruiert ist. Zum Beispiel ist ein hierarchischer Baum gebaut, was höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert. Das heißt, der hierarchische Baum wird in einer Weise gebaut, welche nur eine lineare Menge von Speicher bezüglich der Anzahl von Eingabe-Primitiven erfordert. Insbesondere weist der binäre Baum eine Mehrzahl von Blatt-Knoten und eine Mehrzahl von internen Knoten auf. Jeder der internen Knoten ist eindeutig mit zwei Kindern assoziiert, wobei jeder Kind-Knoten entweder einen Blatt-Knoten oder einen anderen internen Knoten aufweist.
-
Bei 840 umfasst das Verfahren Zuweisen einer Begrenzungs-Box für jeden internen Knoten. Das Begrenzungs-Volumen für jeden Knoten ist so erzeugt, dass es alle der darunter liegenden Primitiven wie in dem binären Baum etabliert ist, beinhaltet. In einer Implementierung wird eine Mehrzahl von Begrenzungs-Volumina für Knoten in dem binären Baum dadurch bestimmt, dass der Baum von der Mehrzahl von Blatt-Knoten nach oben zu einem Wurzel-Knoten hin traversiert wird, wobei eine Mehrzahl von Pfaden von der Mehrzahl von Blatt-Knoten zu dem Wurzel-Knoten in paralleler Weise verarbeitet ist. Auch wird jeder Eltern-Knoten einmal mittels eines später ankommenden Threads verarbeitet, welcher von einem entsprechenden Kind-Knoten herrührt.
-
Vorhergehende Verfahren zum Konstruieren von linearen BVHs berechnen die Begrenzungs-Boxen sequentiell in einer Weise von unten-nach-oben, wobei sie sich auf die Tatsache stützen, dass der Satz von Knoten, welcher auf jedem Niveau lokalisiert ist, a priori bekannt ist. Das heißt, jedes Niveau wird zur Vollendung berechnet, bevor die Begrenzungs-Volumina für die nächste Schicht bestimmt werden. Ausführungsformen der vorliegenden Erfindung nehmen eine verschiedene Zugangsweise an, wobei die Pfade von den Blatt-Knoten zu der Wurzel in paralleler Weise verarbeitet werden. Dies ist möglich, da die Beziehung zwischen Knoten bekannt ist, auch wenn die Niveaus auf welchen jeder Knoten nicht bekannt ist. Als solches startet jeder Thread von einem Blatt-Knoten und läuft den Baum nach oben unter Benutzung von Eltern-Knoten, welche während der binärer-Baum-Konstruktion bestimmt, erzeugt und aufgezeichnet sind.
-
In einer Ausführungsform sind Eltern-Zeiger für jeden Knoten in dem binären Baum bestimmt. Wenn der binäre Baum gebaut wird, wird z. B. eine Beziehung zwischen einem internen Knoten und jedem seiner Kind-Knoten etabliert. Das heißt, Kind-Knoten innerhalb des binären Baums sind für entsprechende Eltern-Knoten bekannt. Als solches ist die umgekehrte Beziehung bestimmbar, so dass für jeden Knoten (z. B. internen Knoten oder Blatt-Knoten) ein entsprechender Eltern-Knoten bestimmbar ist, und zuweisbar ist. In einer Implementierung wird für jeden Knoten ein entsprechender Eltern-Zeiger zugewiesen, welcher zu seinem Eltern-Knoten zeigt.
-
In einer Ausführungsform werden Begrenzungs-Volumina für die Blatt-Knoten bestimmt. In einer Ausführungsform werden die Begrenzungs-Volumina für die Blatt-Knoten bestimmt, bevor der binäre Baum traversiert wird. In einer anderen Ausführungsform wird das Begrenzungs-Volumen für einen Blatt-Knoten bestimmt, wenn ein Thread einen Prozess aufgreift oder an einen Prozess zugewiesen ist, diesen Blatt-Knoten für Zwecke eines Bestimmens seines Begrenzungs-Volumens zu verarbeiten. In einer Implementierung wird das Begrenzungs-Volumen für einen Blatt-Knoten basierend auf den Vertizes eines Dreiecks bestimmt, welches mit dem entsprechenden Blatt-Knoten oder Primitive assoziiert ist.
-
Insbesondere ist 9 ein Flussdiagramm 900, welches ein Computer-implementiertes Verfahren zum Konstruieren von BVHs in paralleler Weise illustriert, wobei ein interner, Eltern-Knoten mittels eines später ankommenden Threads verarbeitet ist, in Übereinstimmung mit einer Ausführungsform der Erfindung. In einer anderen Ausführungsform ist Flussdiagramm 900 innerhalb eines Computer-Systems implementiert, welches einen Prozessor und einen Speicher umfasst, welcher mit dem Prozessor gekoppelt ist und welcher darin Anweisungen gespeichert hat, welche, wenn mittels des Computer-Systems ausgeführt, das System veranlassen, ein Verfahren zum Konstruieren von BVHs in paralleler Weise auszuführen, wobei ein interner, Eltern-Knoten mittels eines später ankommenden Kind-Knotens prozessiert wird. In noch einer anderen Ausführungsform sind Anweisungen zum Durchführen eines Verfahrens für ein Verfahren zum Konstruieren von BVHs in paralleler Weise, wobei ein interner, Eltern-Knoten mittels eines später ankommenden Kind-Knotens verarbeitet wird, auf einem nicht-transitorischen Computer-lesbaren Speichermedium gespeichert, welches Computer-ausführbare Anweisungen zum Veranlassen eines Computer-Systems hat, ein Verfahren zum Konstruieren von BVHs in paralleler Weise durchzuführen. Das in Flussdiagramm 900 skizzierte Verfahren ist mittels einer oder mehrerer Komponenten der Systeme 100 und 700 von 1 und 7 implementierbar.
-
In einer Ausführungsform wird die Anzahl von Threads, welche jeden internen Knoten besuchen, unter Benutzung von atomaren Zählern nachverfolgt. Das heißt, jeder interne Knoten ist atomar verarbeitet, wenn mittels Threads traversiert, welche mit seinen Kind-Knoten assoziiert sind. Ein erster Thread an einem internen Knoten terminiert unmittelbar, während der zweite Thread für den internen Knoten erlaubt ist, den Knoten zu verarbeiten, um sein Begrenzungs-Volumen zu bestimmen. Zum Beispiel beginnen alle Zähler in einem Falsch-Status, und wenn zuerst besucht, wird der Zähler inkrementiert, um einen Wahr-Status anzuzeigen. Ein später ankommender Thread-Pfad, welcher den internen Knoten besucht, liest nun einen Wahr-Status bei dem Knoten, was anzeigt, dass er ein später ankommender Thread ist. In dieser Weise wird jeder Knoten mittels genau eines Threads verarbeitet, wenn der binäre Baum entlang Pfaden von den Blatt-Knoten zu dem Wurzel-Knoten traversiert wird. In einer Ausführungsform führt dies zu einer O(n)-Komplexität.
-
Insbesondere umfasst bei 910 das Verfahren ein Herausgreifen eines nicht verarbeiteten Blatt-Knotens und eines Setzens dieses als den momentanen Knoten, welcher mittels eines bestimmten, ersten Threads verarbeitet wird. Das Verfahren umfasst auch ein atomares Traversieren zu einem ersten Eltern-Knoten von einem ersten Kind-Knoten (dem momentanen Knoten) auf dem ersten Thread entlang eines Pfades, welcher von einem Blatt-Knoten herrührt. Der erste Eltern-Knoten ist mit einem ersten Kind-Knoten und einem zweiten Kind-Knoten assoziiert. Mittels eines Verarbeitens von Pfaden von Blatt-Knoten zu dem Wurzel-Knoten wird der binäre Baum in paralleler Weise traversiert und jeder Knoten in dem binären Baum wird einmal verarbeitet.
-
Bei Entscheidungs-Schritt 920 umfasst das Verfahren Bestimmen, ob der Eltern-Knoten wie mittels des momentanen Threads bearbeitet ist, zuvor mittels eines seiner Kind-Knoten traversiert worden ist. Insbesondere wird bei 920 bestimmt, ob der erste Eltern-Knoten vorher mittels des zweiten Kind-Knotens auf einem verschiedenen, zweiten Thread traversiert worden ist. In einer Implementierung wird ein Zähler benutzt, um zu bestimmen, ob der Thread, welcher versucht, den Eltern-Knoten zu verarbeiten, ein später ankommender Thread an dem Eltern-Knoten ist. Andere Ausführungsformen sind gut geeignet für andere Verfahren zum Bestimmen, ob der Thread mit einem Pfad assoziiert ist, welcher den später ankommenden Kind-Knoten an den Eltern-Knoten umfasst.
-
Wenn bestimmt ist, dass der Eltern-Knoten mittels eines Threads zum ersten Mal besucht ist, dann schreitet das Verfahren zu 930 fort, wobei ein Zähler inkrementiert wird. Zum Beispiel zeigt der Zähler anfänglich einen Falsch-Status an, welcher anzeigt, dass der Eltern-Knoten nicht besucht worden ist. Nach Lesen des Falsch-Status, wird der Zähler auf einen Wahr-Status gesetzt. Danach wird der Thread, welcher zu dem ersten Eltern-Knoten traversiert, bei 950 terminiert. Terminierung erfolgt, wenn der erste Eltern-Knoten nicht mittels irgendeines von seinen Kind-Knoten traversiert worden ist, und insbesondere wenn er nicht zuvor mittels des zweiten Kind-Knoten traversiert worden ist.
-
In diesem Fall wählt der Thread, welcher terminiert ist, einen anderen nicht verarbeiteten Blatt-Knoten bei 910 aus. Der Thread, welcher den neuen Blatt-Knoten verarbeitet, traversiert den binären Baum beginnend von dem nicht verarbeiteten Blatt-Knoten. In einer Implementierung wird der Blatt-Knoten mit einem Planer bzw. Scheduler, welcher vorher beschrieben ist, ausgewählt. In einer Ausführungsform ist eine Termination von Threads auf einer Warp-Basis gesammelt. Das heißt, eine Mehr-Verarbeitungs-Einheit (z. B. GPU) umfasst mehrere Kerne und/oder Threads, wobei ein Warp einen oder mehrere Threads (z. B. 32 Threads) umfasst, welche unter Benutzen derselben Anweisung und in paralleler Weise ausführen. Zum Beispiel werden Anweisungen in einer Grafik-Pipeline an alle Threads in einem Warp zur selben Zeit (z. B. zu demselben Taktzyklus) angewendet. In einer anderen Ausführungsform werden Warps durch Blöcke gesammelt, so dass mehrere Warps in einem Thread-Block ähnlich behandelt werden. Als solches ist die Anzahl von globalen Atomiken dadurch reduziert, dass schnellere geteilte-Speicher-Atomiken verwendet werden, wenn immer wir detektieren, dass alle Blätter, welche mittels eines gegebenen internen Knotens abgedeckt sind, mittels desselben Thread-Blocks verarbeitet werden.
-
Andererseits, wenn bestimmt ist, dass der Eltern-Knoten mittels eines Threads besucht ist, welcher mit einem später ankommenden Kind-Knoten assoziiert ist, dann umfasst das Verfahren bei 940 Bestimmen eines Eltern-Begrenzungs-Volumens für den ersten Eltern-Knoten unter Benutzung des ersten Threads. In einer Ausführungsform beinhaltet das Eltern-Begrenzungs-Volumen, welches zugewiesen ist, vollständig ein erstes Begrenzungs-Volumen des ersten Kind-Knotens und ein zweites Begrenzungs-Volumen des zweiten Kind-Knotens. Ferner weist das Eltern-Begrenzungs-Volumen eine Vereinigung des ersten Kind-Begrenzungs-Volumens und des zweiten Kind-Begrenzungs-Volumens auf, in einer Ausführungsform. In einer mathematischen Definition weist die Vereinigung die Menge von allen Punkten auf, welche in sowohl dem erstes-Kind-Begrenzungs-Volumen als auch dem zweites-Kind-Begrenzungs-Volumen beinhaltet ist.
-
In einer spezifischen Ausführungsform weist das erste-Kind-Begrenzungs-Volumen eine erste-Achse-ausgerichtete-Kind-Begrenzungs-Box auf oder eine erstes-Kind-AABB. Auch das zweite-Kind-Begrenzungs-Volumen weist ein zweites-Kind-AABB auf. Das Eltern-Begrenzungs-Volumen ist dadurch bestimmt, dass Minimum und Maximum x-, y- und z-Werte des ersten- und zweiten-Kind-AABBs zugewiesen werden.
-
Zum Beispiel ist das Eltern-Begrenzungs-Volumen dadurch bestimmt, dass ein Minimum-x-Wert und ein Maximum-x-Wert des ersten- und zweiten-Kind-AABBs zugewiesen werden. Das heißt, entlang der x-Achse, wird der minimale x-Wert von entweder dem erstes- oder dem zweites-Kind-AABBs als der Minimum-x-Wert für das Eltern-Begrenzung-Volumen ausgewählt. Ähnlich wird der maximale x-Wert entweder von dem erstes- oder dem zweites-Kind-AABBs als der Maximum-x-Wert für das Eltern-Volumen gewählt.
-
Auch ein Minimum-y-Wert und ein Maximum-y-Wert des erstes- und des zweites-Kind-AABBs ist für das Eltern-Begrenzungs-Volumen zugewiesen. Das heißt, entlang der y-Achse, wird der minimale y-Wert von entweder dem erstes- oder dem zweites-Kind-AABBs ist als der Minimum-y-Wert für das Eltern-Begrenzungs-Volumen gewählt. Ähnlich ist der maximale y-Wert von entweder dem erstes- und dem zweites-Kind-AABBs als der Maximum-y-Wert für das Eltern-Begrenzungs-Volumen gewählt.
-
Auch wird ein Minimum-z-Wert und ein Maximum-z-Wert des erstes- und zweites-Kind-AABBs für das Eltern-Begrenzungs-Volumen zugewiesen. Das heißt, entlang der z-Achse wird der minimale z-Wert entweder von dem erstes- oder dem zweites-Kind-AABBs als der Minimum-z-Wert für das Eltern-Begrenzungs-Volumen gewählt. Ähnlich wird der maximale z-Wert von entweder dem erstes- und dem zweites-Kind-AABBs als der Maximal-z-Wert für das Eltern-Begrenzungs-Volumen gewählt.
-
Das Verfahren von Flussdiagramm 900 setzt bei 960 dadurch fort, dass der Eltern-Knoten als der neue momentane Knoten gesetzt wird. Danach schreitet der Thread zurück zu 920 fort, um zu bestimmen, ob der neue Eltern-Knoten des neuen momentanen Knotens vorher mittels eines der Kind-Knoten traversiert worden ist. In dieser Weise traversiert der Thread nach oben durch den binären Baum.
-
Somit werden, gemäß Ausführungsformen der vorliegenden Offenbarung, Systeme und Verfahren beschrieben, welche ein Maximieren von Parallelismus in der Konstruktion von Begrenzungs-Volumen-Hierarchien von binären Bäumen bereitstellen.
-
Während die vorangehende Offenbarung verschiedene Ausführungsformen unter Benutzung spezifischer Blockdiagramme, Flussdiagramme und Beispiele ausführt, kann jede Blockdiagramm-Komponente, jeder Flusskarte-Schritt, Operation und/oder Komponente, welche hierin beschrieben und/oder illustriert ist, individuell und/oder kollektiv unter Benutzung eines breiten Bereichs von Hardware, Software oder Firmware(oder irgendeiner Kombination davon)-Konfigurationen implementiert werden. Zusätzlich sollte irgendeine Offenbarung von Komponenten, welcher innerhalb anderer Komponenten beinhaltet sind, als Beispiele betrachtet werden, weil viele andere Architekturen implementiert werden können, um dieselbe Funktionalität zu erreichen.
-
Die Prozess-Parameter und Sequenz von Schritten, welche hierin beschrieben sind und/oder illustriert sind, sind nur als Beispiel gegeben und können wie gewünscht variiert werden. Während die hierin illustrierten und/oder beschriebenen Schritte z. B. in einer bestimmten Ordnung gezeigt oder diskutiert sind, müssen diese Schritte nicht notwendiger Weise in der illustrierten oder diskutierten Ordnung durchgeführt werden. Die verschiedenen Beispiel-Verfahren, welche hierin beschrieben und/oder illustriert sind, können auch einen oder mehrere der Schritte, welche hierin beschrieben oder illustriert sind, auslassen oder zusätzliche Schritte zusätzlich zu denjenigen, welche offenbart sind, umfassen.
-
Exemplarische Ausführungsformen der vorliegenden Erfindung umfassen die folgenden Konzepte:
- Konzept 1. Ein nicht-transitorisches Computer-lesbares Speichermedium, welches Computer-ausführbare Anweisungen hat, um ein Computer-System zu veranlassen, ein Verfahren durchzuführen, aufweisend: Bestimmen einer Mehrzahl von Primitiven, welche eine Gesamtanzahl von Primitive-Knoten hat, welche indiziert sind, wobei die Mehrzahl von Primitiven Blatt-Knoten eines hierarchischen Baumes entspricht; Sortieren der Mehrzahl von Primitiven; und Bauen des hierarchischen Baumes, was höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert; und Bauen eines internen Knotens des hierarchischen Baumes in paralleler Weise mit einem oder mehreren seiner Vorgänger-Knoten.
- Konzept 2. Computer-lesbares Speichermedium von Konzept 1, wobei das Bestimmen einer Mehrzahl von Primitiven in dem Verfahren aufweist: Zuweisen eines Morton-Codes an jede Primitive.
- Konzept 3. Computer-lesbares Speichermedium von Konzept 1, wobei das Bauen eines hierarchischen Baumes in dem Verfahren aufweist: Bauen eines binären Wurzel-Baums, welcher die Primitive-Knoten und einen oder mehrere interne Knoten aufweist, derart, dass jeder interne Knoten dem längsten gemeinsamen Präfix entspricht, welcher unter Primitiven der entsprechenden Primitive-Knoten in einem jeweiligen Unter-Baum geteilt wird.
- Konzept 4. Computer-lesbares Speichermedium von Konzept 3, wobei das Bauen eines binären Wurzel-Baumes in dem Verfahren aufweist: Verarbeiten einer willkürlichen Untermenge von internen Knoten in paralleler Weise.
- Konzept 5. Computer-lesbares Speichermedium von Konzept 3, wobei das Bauen eines binären Wurzel-Baumes in dem Verfahren aufweist: Für einen gegebenen Knoten-Index, welcher einem internen Knoten entspricht, Bestimmen einer Richtung eines entsprechenden Bereiches von Primitive-Indizes der Mehrzahl von Primitiven basierend auf dem Knoten-Index, wobei der gegebene Knoten-Index einen beginnenden Primitive-Index oder einen endenden Primitive-Index in dem entsprechenden Bereich aufweist; Bestimmen einer Länge des entsprechenden Bereiches; Bestimmen eines höchsten differierenden Bits zwischen Primitive-Indizes in dem entsprechenden Bereich; und Zuweisen von Kind-Knoten-Indizes für den gegebenen Knoten-Index, welcher den Primitive-Indizes entspricht, welche mit dem höchsten differierenden Bit assoziiert sind.
- Konzept 6. Computer-lesbares Speichermedium von Konzept 5, wobei das Bestimmen einer Richtung in dem Verfahren ferner aufweist: Bestimmen der Richtung basierend darauf, welche benachbarte Primitive die meisten Index-Übereinstimmungen hat.
- Konzept 7. Computer-lesbares Speichermedium von Konzept 5, wobei das Bestimmen einer Länge in dem Verfahren aufweist: Bestimmen eines Maximal-Wertes für die Länge; und Durchführen einer binären Suche, um einen aktuellen Wert der Länge zu bestimmen.
- Konzept 8. Computer-lesbares Speichermedium von Konzept 5, wobei in dem Verfahren einer der Kind-Knoten-Indizes einen Blatt-Knoten aufweist.
- Konzept 9. Computer-lesbares Speichermedium von Konzept 5, wobei das Verfahren ferner aufweist: Nummerieren von Indizes für die Mehrzahl von Primitiven; Nummerieren von Indizes für zumindest einen internen Knoten mit demselben Nummerierungs-Schema, welches für die Mehrzahl von Primitiven benutzt ist, wobei eine Gesamtanzahl des zumindest einen internen Knotens die Gesamtanzahl von Primitiven minus eins aufweist, und wobei ein Bereich von Primitive-Indizes für eine Index-Zahl für einen internen Knoten dieselbe Index-Zahl in der Mehrzahl von Primitiven umfasst.
- Konzept 10. Computer-System, aufweisend: einen Prozessor; und Speicher, welcher an den Prozessor gekoppelt ist und darin Anweisungen gespeichert hat, welche, wenn mittels des Computer-Systems ausgeführt, das Computer-System veranlassen, ein Verfahren auszuführen, welches aufweist: Bestimmen einer Mehrzahl von Primitiven, welche eine Gesamtanzahl von Primitive-Knoten aufweist, welche indiziert sind, wobei die Mehrzahl von Primitiven Blatt-Knoten eines hierarchischen Baumes entspricht; Sortieren der Mehrzahl von Primitiven; und Bauen des hierarchischen Baumes, was höchstens eine lineare Menge von temporärem Speicher bezüglich der Gesamtanzahl von Primitive-Knoten erfordert; und Bauen eines internen Knotens des hierarchischen Baumes in paralleler Weise mit einem oder mehreren von seinen Vorgänger-Knoten.
- Konzept 11. Computer-System von Konzept 10, wobei das Bestimmen einer Mehrzahl von Primitiven in dem Verfahren aufweist: Zuweisen eines Morton-Codes an jede Primitive.
- Konzept 12. Computer-System von Konzept 10, wobei das Bauen eines hierarchischen Baumes in dem Verfahren aufweist: Bauen eines binären Wurzel-Baumes, welcher die Primitive-Knoten und einen oder mehrere interne Knoten aufweist, derart, dass jeder interne Knoten dem längsten gemeinsamen Präfix entspricht, welcher unter den Primitiven in einem jeweiligen Unter-Baum geteilt wird.
- Konzept 13. Computer-System von Konzept 12, wobei das Verfahren ferner aufweist: Bauen eines zweiten Baumes basierend auf dem Wurzel-Baum.
- Konzept 14. Computer-System von Konzept 12, wobei das Bauen eines binären Wurzel-Baums in dem Verfahren aufweist: Verarbeiten einer willkürlichen Untermenge von internen Knoten in paralleler Weise.
- Konzept 15. Computer-System von Konzept 12, wobei das Bauen eines binären Wurzel-Baums in dem Verfahren aufweist: Für einen gegebenen Knoten-Index, welcher einem internen Knoten entspricht, Bestimmen einer Richtung eines entsprechenden Bereiches von Primitive-Indizes der Mehrzahl von Primitiven basierend auf dem Knoten-Index, wobei der gegebene Knoten-Index einen beginnenden Primitive-Index oder einen endenden Primitive-Index in dem entsprechenden Bereich aufweist; Bestimmen einer Länge des entsprechenden Bereichs; Bestimmen eines höchsten differierenden Bits zwischen Primitive-Indizes in dem entsprechenden Bereich; und Zuweisen von Kind-Knoten-Indizes für den gegebenen Knoten-Index, welcher den Primitive-Indizes entspricht, welche mit dem höchsten differierenden Bit assoziiert sind.
-
Während verschiedene Ausführungsformen in dem Kontext von vollständig funktionalen Computer-Systemen beschrieben und/oder hierin illustriert sind, können eine oder mehrere dieser Beispiel-Ausführungsformen als ein Programm-Produkt in einer Verschiedenheit von Formen unabhängig von dem bestimmten Typ eines Computer-lesbaren Mediums, welches benutzt wird, um tatsächlich die Verteilung auszuführen, verteilt werden. Die hierin offenbarten Ausführungsformen können auch unter Benutzung von Software-Modulen implementiert sein, welche gewisse Aufgaben durchführen. Diese Software-Module können Script-, Batch- oder andere ausführbare Dateien umfassen, welche auf einem Computer-lesbaren Speichermedium oder in einem Computer-System gespeichert sein können. Diese Software-Module können ein Rechen-System konfigurieren, eine oder mehrere der Beispiel-Ausführungsformen durchzuführen, welche hierin offenbart sind. Ein oder mehrere der Software-Module, welche hierin offenbart sind, können in einer Cloud-Computing-Umgebung implementiert sein. Cloud-Computing-Umgebungen können verschiedene Dienste und Anwendungen über das Internet bereitstellen. Diese Cloud-basierten Dienste (z. B. Software als ein Dienst, Plattform als ein Dienst, Infrastruktur als ein Dienst, etc.) können durch einen Web-Browser oder durch eine andere entfernte Schnittstelle zugreifbar sein. Verschiedene hierin beschriebene Funktionen können durch eine entfernte Schreibtisch-Umgebung (remote desktop enviroment) oder irgendeine andere Cloud-basierte Rechen-Umgebung bereitgestellt sein.
-
Die vorangehende Beschreibung ist für Zwecke einer Erklärung mit Bezug auf spezifische Ausführungsformen beschrieben worden. Die illustrativen Diskussionen oben sind jedoch nicht beabsichtigt, vollständig bzw. erschöpfend zu sein oder die Erfindung auf die präzisen offenbarten Formen zu begrenzen. Viele Modifikationen und Variationen sind in Ansicht der obigen Lehren möglich. Die Ausführungsformen wurden ausgewählt und beschrieben, um am Besten die Prinzipien der Erfindung und ihre praktischen Anwendungen zu erläutern, um dadurch andere Fachleute in der Technik in die Lage zu versetzen, am Besten die Erfindung zu benutzen und verschiedene Ausführungsformen mit verschiedenen Modifikationen können für die bestimmte ins Auge gefasste Benutzung geeignet sein.
-
Ausführungsformen gemäß der vorliegenden Offenbarung sind somit beschrieben. Während die vorliegende Offenbarung in bestimmten Ausführungsformen beschrieben worden ist, sollte es geschätzt werden, dass die Offenbarung nicht interpretiert werden sollte, durch solche Ausführungsformen begrenzt zu sein, sondern vielmehr gemäß den Ansprüchen unten interpretiert werden.