DE102013204062A1 - Voll-Parallel-am-Platz-Konstruktion von 3D-Beschleunigungs-Strukturen in einer Grafik-Verarbeitungs-Einheit - Google Patents

Voll-Parallel-am-Platz-Konstruktion von 3D-Beschleunigungs-Strukturen in einer Grafik-Verarbeitungs-Einheit Download PDF

Info

Publication number
DE102013204062A1
DE102013204062A1 DE102013204062A DE102013204062A DE102013204062A1 DE 102013204062 A1 DE102013204062 A1 DE 102013204062A1 DE 102013204062 A DE102013204062 A DE 102013204062A DE 102013204062 A DE102013204062 A DE 102013204062A DE 102013204062 A1 DE102013204062 A1 DE 102013204062A1
Authority
DE
Germany
Prior art keywords
node
nodes
primitive
primitives
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102013204062A
Other languages
English (en)
Other versions
DE102013204062B4 (de
Inventor
Tero Karras
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102013204062A1 publication Critical patent/DE102013204062A1/de
Application granted granted Critical
Publication of DE102013204062B4 publication Critical patent/DE102013204062B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Processing Or Creating Images (AREA)

Abstract

Ein System und Verfahren zum Konstruieren von binären Wurzel-Bäumen in paralleler Weise, welche als ein Bau-Block zum Konstruieren von sekundären Bäumen benutzt werden. Ein nicht-transitorisches Computer-lesbares Speichermedium, welches Computer-ausführbare Anweisungen hat, um ein Computer-System zu veranlassen, ein Verfahren durchzuführen, ist offenbart. Das Verfahren umfasst 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. 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 Bauen eines internen Knotens des hierarchischen Baums in paralleler Weise mit einem oder mehreren von seinen Vorgänger-Knoten.

Description

  • 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 16 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 16 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 16 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 16 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 16 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 16 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 16 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.

Claims (10)

  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 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 seiner Vorgänger-Knoten.
  2. Computer-lesbares Speichermedium von Anspruch 1, wobei das Bestimmen einer Mehrzahl von Primitiven in dem Verfahren aufweist: Zuweisen eines Morton-Codes an jede Primitive.
  3. Computer-lesbares Speichermedium von Anspruch 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.
  4. Computer-lesbares Speichermedium von Anspruch 3, wobei das Bauen eines binären Wurzel-Baumes in dem Verfahren aufweist: Verarbeiten einer willkürlichen Untermenge von internen Knoten in paralleler Weise.
  5. Computer-lesbares Speichermedium von Anspruch 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.
  6. Computer-lesbares Speichermedium von Anspruch 5, wobei das Bestimmen einer Richtung in dem Verfahren ferner aufweist: Bestimmen der Richtung basierend darauf, welche benachbarte Primitive die meisten Index-Übereinstimmungen hat.
  7. Computer-lesbares Speichermedium von Anspruch 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.
  8. Computer-lesbares Speichermedium von Anspruch 5, wobei in dem Verfahren einer der Kind-Knoten-Indizes einen Blatt-Knoten aufweist.
  9. Computer-lesbares Speichermedium von Anspruch 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.
  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.
DE102013204062.8A 2012-03-09 2013-03-08 Voll-Parallel-am-Platz-Konstruktion von 3D-Beschleunigungs-Strukturen in einer Grafik-Verarbeitungs-Einheit Active DE102013204062B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201261609156P 2012-03-09 2012-03-09
US61/609,156 2012-03-09

Publications (2)

Publication Number Publication Date
DE102013204062A1 true DE102013204062A1 (de) 2013-10-10
DE102013204062B4 DE102013204062B4 (de) 2023-01-05

Family

ID=49113695

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013204062.8A Active DE102013204062B4 (de) 2012-03-09 2013-03-08 Voll-Parallel-am-Platz-Konstruktion von 3D-Beschleunigungs-Strukturen in einer Grafik-Verarbeitungs-Einheit

Country Status (4)

Country Link
US (2) US9965821B2 (de)
CN (1) CN103440238A (de)
DE (1) DE102013204062B4 (de)
TW (1) TWI546770B (de)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9014496B2 (en) * 2011-08-04 2015-04-21 Arm Limited Methods of and apparatus for encoding and decoding data in data processing systems
US9990758B2 (en) * 2014-03-31 2018-06-05 Intel Corporation Bounding volume hierarchy generation using a heterogeneous architecture
US10423693B2 (en) * 2014-09-15 2019-09-24 Autodesk, Inc. Parallel processing using a bottom up approach
US20160139924A1 (en) * 2014-11-14 2016-05-19 Intel Corporation Machine Level Instructions to Compute a 4D Z-Curve Index from 4D Coordinates
US20160139919A1 (en) * 2014-11-14 2016-05-19 Intel Corporation Machine Level Instructions to Compute a 3D Z-Curve Index from 3D Coordinates
US9772849B2 (en) * 2014-11-14 2017-09-26 Intel Corporation Four-dimensional morton coordinate conversion processors, methods, systems, and instructions
CN104331497A (zh) * 2014-11-19 2015-02-04 中国科学院自动化研究所 一种利用向量指令并行处理文件索引的方法及装置
US9984492B2 (en) * 2015-04-02 2018-05-29 Qualcomm Incorporated Efficient hierarchy traversal in ray tracing applications
WO2016171673A1 (en) * 2015-04-21 2016-10-27 Hewlett-Packard Development Company, L.P. Octree serialization
KR102537530B1 (ko) * 2015-10-26 2023-05-26 삼성전자 주식회사 가속 구조를 생성하는 방법 및 장치
KR102570584B1 (ko) * 2015-12-02 2023-08-24 삼성전자 주식회사 Bvh 트리를 구성하기 위한 방법 및 시스템
US10559125B2 (en) * 2015-12-02 2020-02-11 Samsung Electronics Co., Ltd. System and method of constructing bounding volume hierarchy tree
WO2017136081A1 (en) * 2016-02-05 2017-08-10 Google Inc. Augmenting neural networks with hierarchical external memory
US10229533B2 (en) * 2016-11-03 2019-03-12 Mitsubishi Electric Research Laboratories, Inc. Methods and systems for fast resampling method and apparatus for point cloud data
CN106776020B (zh) * 2016-12-07 2020-02-21 长春理工大学 大型三维场景的计算机集群分布式路径跟踪绘制方法
US11367160B2 (en) * 2018-08-02 2022-06-21 Nvidia Corporation Simultaneous compute and graphics scheduling
CN109345443A (zh) * 2018-10-19 2019-02-15 珠海金山网络游戏科技有限公司 数据处理方法和装置、计算设备及存储介质
GB2583061B (en) * 2019-02-12 2023-03-15 Advanced Risc Mach Ltd Data processing systems
US11460580B2 (en) * 2019-06-17 2022-10-04 Nvidia Corporation Nearest neighbor search using compressed octrees representing high definition maps for autonomous vehicles
US11023152B2 (en) 2019-07-12 2021-06-01 Arm Limited Methods and apparatus for storing data in memory in data processing systems
CN110990909B (zh) * 2019-11-29 2023-10-20 北京仿真中心 一种三维cad模型数据处理方法
US11335055B2 (en) 2020-06-26 2022-05-17 Imagination Technologies Limited Intersection testing in ray tracing systems with skipping of nodes in sub-trees of hierarchical acceleration structures
US11403803B2 (en) 2020-06-26 2022-08-02 Imagination Technologies Limited Hierarchical acceleration structures for use in ray tracing systems
US11380042B2 (en) * 2020-06-26 2022-07-05 Imagination Technologies Limited Intersection testing in ray tracing systems using hierarchical acceleration structures with implicitly represented nodes
GB2601792A (en) * 2020-12-10 2022-06-15 Imagination Tech Ltd Intersection testing for ray tracing
CN112657190A (zh) * 2020-12-28 2021-04-16 北京像素软件科技股份有限公司 一种游戏角色的寻路方法、装置及计算机设备
US11914587B2 (en) * 2021-10-13 2024-02-27 Western Digital Technologies, Inc. Systems and methods for key-based indexing in storage devices
US20230118972A1 (en) * 2021-10-18 2023-04-20 Nvidia Corporation Scalable parallel construction of bounding volume hierarchies
WO2023069911A1 (en) * 2021-10-18 2023-04-27 Nvidia Corporation Scalable parallel construction of bounding volume hierarchies

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5826262A (en) * 1996-03-22 1998-10-20 International Business Machines Corporation Parallel bottom-up construction of radix trees
US6421664B1 (en) * 1999-06-16 2002-07-16 International Business Machines Corporation Apparatus, program product and method for estimating the number of keys within an index key range
US6947931B1 (en) * 2000-04-06 2005-09-20 International Business Machines Corporation Longest prefix match (LPM) algorithm implementation for a network processor
US7952583B2 (en) 2000-06-19 2011-05-31 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
US6694323B2 (en) * 2002-04-25 2004-02-17 Sybase, Inc. System and methodology for providing compact B-Tree
US6904430B1 (en) * 2002-04-26 2005-06-07 Microsoft Corporation Method and system for efficiently identifying differences between large files
US7299317B1 (en) * 2002-06-08 2007-11-20 Cisco Technology, Inc. Assigning prefixes to associative memory classes based on a value of a last bit of each prefix and their use including but not limited to locating a prefix and for maintaining a Patricia tree data structure
US7095423B2 (en) * 2002-07-19 2006-08-22 Evans & Sutherland Computer Corporation System and method for combining independent scene layers to form computer generated environments
GB2391150B (en) 2002-07-19 2005-10-26 Autodesk Canada Inc Editing image data
US8250107B2 (en) 2003-06-03 2012-08-21 Hewlett-Packard Development Company, L.P. Techniques for graph data structure management
US7348975B2 (en) 2004-12-28 2008-03-25 Intel Corporation Applications of interval arithmetic for reduction of number of computations in ray tracing problems
US7512617B2 (en) * 2004-12-29 2009-03-31 Sap Aktiengesellschaft Interval tree for identifying intervals that intersect with a query interval
US20070073761A1 (en) * 2005-09-29 2007-03-29 International Business Machines Corporation Continual generation of index advice
US7475071B1 (en) * 2005-11-12 2009-01-06 Google Inc. Performing a parallel nearest-neighbor matching operation using a parallel hybrid spill tree
US7728841B1 (en) 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US7737974B2 (en) 2006-09-27 2010-06-15 International Business Machines Corporation Reallocation of spatial index traversal between processing elements in response to changes in ray tracing graphics workload
JP4402120B2 (ja) * 2007-01-24 2010-01-20 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
US7877258B1 (en) * 2007-03-29 2011-01-25 Google Inc. Representing n-gram language models for compact storage and fast retrieval
GB2452760A (en) * 2007-09-14 2009-03-18 Data Connection Ltd Storing and searching data in a database tree structure for use in data packet routing applications.
US8072460B2 (en) * 2007-10-17 2011-12-06 Nvidia Corporation System, method, and computer program product for generating a ray tracing data structure utilizing a parallel processor architecture
US8610706B2 (en) 2008-10-04 2013-12-17 Microsoft Corporation Parallel surface reconstruction
US9245382B2 (en) * 2008-10-04 2016-01-26 Microsoft Technology Licensing, Llc User-guided surface reconstruction
KR101610194B1 (ko) * 2008-10-15 2016-04-07 삼성전자주식회사 영상처리를 위한 데이터 처리 장치 및 방법
CN101593367B (zh) * 2009-06-25 2011-03-23 北京航空航天大学 一种基于四叉包围盒树的柔性织物自碰撞检测方法
US8669977B2 (en) 2009-10-01 2014-03-11 Intel Corporation Hierarchical mesh quantization that facilitates efficient ray tracing
US8688766B2 (en) * 2010-03-03 2014-04-01 Thomson Licensing Method for managing the allocation of data into a peer-to-peer network and peer implementing such method
US8275805B2 (en) 2010-03-26 2012-09-25 Intel Corporation Method of decreasing a total computation time for a visual simulation loop in a virtual world application
US8665266B2 (en) 2010-06-23 2014-03-04 The United States Of America, As Represented By The Secretary Of The Navy Global visualization process terrain database builder
US8880507B2 (en) * 2010-07-22 2014-11-04 Brocade Communications Systems, Inc. Longest prefix match using binary search tree
US8930391B2 (en) * 2010-12-29 2015-01-06 Microsoft Corporation Progressive spatial searching using augmented structures
US9070208B2 (en) 2011-05-27 2015-06-30 Lucasfilm Entertainment Company Ltd. Accelerated subsurface scattering determination for rendering 3D objects
US8780112B2 (en) * 2011-06-08 2014-07-15 Pacific Data Images Llc Coherent out-of-core point-based global illumination
US20120320073A1 (en) 2011-06-14 2012-12-20 Obscura Digital, Inc. Multiple Spatial Partitioning Algorithm Rendering Engine
US8542939B2 (en) 2011-08-04 2013-09-24 Arm Limited Methods of and apparatus for using tree representations for representing arrays of data elements for encoding and decoding data in data processing systems
US8738595B2 (en) * 2011-11-22 2014-05-27 Navteq B.V. Location based full text search

Also Published As

Publication number Publication date
DE102013204062B4 (de) 2023-01-05
US20130235031A1 (en) 2013-09-12
US20130235049A1 (en) 2013-09-12
TW201403542A (zh) 2014-01-16
US9965821B2 (en) 2018-05-08
US9721320B2 (en) 2017-08-01
CN103440238A (zh) 2013-12-11
TWI546770B (zh) 2016-08-21

Similar Documents

Publication Publication Date Title
DE102013204062B4 (de) Voll-Parallel-am-Platz-Konstruktion von 3D-Beschleunigungs-Strukturen in einer Grafik-Verarbeitungs-Einheit
US9396512B2 (en) Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit
DE102012213292A1 (de) System, Verfahren und Computer-Programm-Produkt zum Konstruieren einer Beschleunigungs-Struktur
Gieseke et al. Buffer kd trees: processing massive nearest neighbor queries on GPUs
US8471845B1 (en) System and method for constructing a bounding volume hierarchical structure
Karras Maximizing parallelism in the construction of BVHs, octrees, and k-d trees
DE102015113797A1 (de) Relative Kodierung für eine blockbasierte Begrenzungsvolumenhierarchie
DE112012003243T5 (de) Systeme und Verfahren für die Erzeugung und Aktualisierung für 3D-Szenenbeschleunigungsstrukturen
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102012216029A1 (de) Ein skalierbares anpassungsfähiges map-reduce-rahmenwerk mit verteilten daten
DE112012005533T5 (de) Unterstützende Abfrage und ein Abfragen
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102009038453A1 (de) System und Verfahren zum Identifizieren von Eingangspunkten einer hierarchischen Struktur
DE112020000865T5 (de) Speicherverwaltungssystem
DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE102023124837A1 (de) Reduzierung falsch positiver Strahltraversierungen in einer Begrenzungsvolumen-Hierarchie
DE102023124529A1 (de) Reduzieren falsch-positiver strahl-traversierungen unter verwenden von strahlabschneiden
CN108171785B (zh) 用于光线跟踪的sah-kd树设计方法
Hernando et al. Towards real-time visualization of detailed neural tissue models: View frustum culling for parallel rendering
DE102011014977A1 (de) Verfahren zur Verringerung einer gesamten Rechenzeit für eine visuelle Simulationsschleife in einer Anwendung der virtuellen Welt
DE102022111609A1 (de) Beschleunigte verarbeitung über eine körperbasierte rendering-maschine
Madeira et al. Gpu octrees and optimized search
DE102021122964A1 (de) Erlernen und weitergeben von visuellen attributen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final