DE102016104108A1 - Systeme und Verfahren zur verteilten skalierbaren Strahlenverarbeitung - Google Patents

Systeme und Verfahren zur verteilten skalierbaren Strahlenverarbeitung Download PDF

Info

Publication number
DE102016104108A1
DE102016104108A1 DE102016104108.4A DE102016104108A DE102016104108A1 DE 102016104108 A1 DE102016104108 A1 DE 102016104108A1 DE 102016104108 A DE102016104108 A DE 102016104108A DE 102016104108 A1 DE102016104108 A1 DE 102016104108A1
Authority
DE
Germany
Prior art keywords
packet
identifiers
node
ray
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102016104108.4A
Other languages
English (en)
Inventor
Joseph Richards
Luke Peterson
Steven Clohset
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102016104108A1 publication Critical patent/DE102016104108A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/121Frame memory handling using a cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

Strahlenverfolgungs-Systeme werden hier beschrieben, wobei Recheneinheiten (“RACs”) ausgelegt sind, um Strahlenverfolgungs-Operationen (z.B. Prüfen auf Kreuzung) durchzuführen. Es gibt mehrere RACs. Es wird eine zentralisierte Paketeinheit bereitgestellt, um die Zuteilung und das Prüfen von Strahlen durch die RACs zu steuern. Diese ermöglicht RACs, ohne CAMs(Content Addressable Memories) implementiert zu werden, die aufwändig zu implementieren sind, wobei jedoch die Funktionalität von CAMs noch erreicht werden kann, indem sie in dem zentralisierten Controller implementiert werden.

Description

  • HINTERGRUND
  • Gebiet:
  • In einem Aspekt betrifft die Offenbarung im Allgemeinen 3D-Renderingsysteme, Systemarchitekturen und Verfahren, und in einem spezielleren Aspekt betrifft die Offenbarung Systeme, Architekturen und Verfahren zum asynchronen und gleichzeitigen hybridisierten Rendering, wie beispielsweise hybridisierte Strahlenverfolgung (Ray Tracing) und Rasterisierungs-basiertes Rendering.
  • Beschreibung der verwandten Technik:
  • Graphikverarbeitungseinheiten (GPUs = Graphics Processing Units) stellen hochparallelisierte Rasterisierungs-basierte Rendering-Hardware bereit. Eine herkömmliche Graphikverarbeitungseinheit (GPU) verwendete eine feste Pipeline lediglich für das Rendering von Polygonen mit Texturabbildungen und entwickelte sich allmählich zu einer flexibleren Pipeline, die programmierbare Vertex- und Fragmentstadien ermöglicht. Obwohl moderne GPUs mehr Programmierbarkeit von Geometrie und Pixelverarbeitung unterstützen, wird eine Vielfalt von Funktionen innerhalb einer GPU in Festfunktionshardware implementiert. Moderne GPUs können in der Komplexität variieren, wobei Hochleistungs-GPUs Transistorbudgets in der Größenordnung von 4–6 Milliarden Transistoren aufweisen. GPUs werden häufig in Echtzeit-Renderingaufgaben verwendet und Optimierungen für viele GPU-Anwendungen beinhalten das Bestimmen von Abkürzungen, um einen gewünschten Durchsatz von Bildrahmen pro Sekunde zu erreichen, während ein gewünschtes Niveau subjektiver Videoqualität aufrechterhalten wird. Beispielsweise ist in einem Videospiel ein realistisches Modellieren des Lichtverhaltens selten ein Ziel; stattdessen ist das Erreichen eines gewünschten Aussehens oder ein Renderingeffekt häufig ein hauptsächliches Ziel.
  • Herkömmlicherweise ist die Strahlenverfolgung eine Technik, die für Nicht-Echtzeit-Graphik-Renderingaufgaben hoher Qualität verwendet wird, wie beispielsweise die Erzeugung von Trickfilmen oder das Erzeugen von 2D-Bildern, die das Verhalten von Licht in unterschiedlichen Materialien wirklichkeitsgetreuer modellieren. Bei der Strahlenverfolgung waren die Steuerung des Rendering und die Pipeline-Flexibilität, um ein gewünschtes Ergebnis zu erreichen, häufig kritischere Probleme als das Aufrechterhalten einer gewünschten Bildrahmenrate. Außerdem sind einige der Arten von Verarbeitungsaufgaben, die für die Strahlenverfolgung benötigt werden, nicht zwangsläufig auf der Hardware implementierbar, die zur Rasterisierung gut geeignet ist.
  • ZUSAMMENFASSUNG
  • Verschiedene Architekturbeispiele werden beschrieben, um eine skalierbare und modularisierte Verarbeitung von diskretisierten Rechenabschnitten bereitzustellen. Diese Beispiele beziehen sich primär auf die diskretisierten Rechenabschnitte, die eine Strahlenverfolgungs-Renderingberechnung sind. Diese Beispiele sehen ebenfalls sparsame Speicherzugriffe gemäß offenbarter Techniken vor.
  • Einige der hier beschriebenen Beispiele stellen eine vollständig zentralisierte Entscheidung zum Prüfen von Strahlen gegen Knoten und der Zuteilung von Mikropaket-IDs jedoch eine verteilte Strahlenpaketspeicherung bereit (z.B. weist eine zentrale Paketeinheit Pakete von Mikropaketen auf und weist Mikropakete Prüfern zu).
  • Die Beschreibung kann den Begriff “Mikropaket” verwenden, um auf ein Paket Bezug zu nehmen, das von einer einzigen Recheneinheit verwaltet wird, und den Begriff “Paket” verwenden, um auf eine Aggregation von Mikropaketen durch ein zentrales Element Bezug zu nehmen. In einigen Fällen kann jedoch der Begriff “Paket” verwendet werden, um sich entweder auf “Mikropakete” oder “Pakete” zu beziehen, wobei jedoch der Zusammenhang Eindeutigkeit herstellt.
  • Es wird ein maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen bereitgestellt, umfassend:
    bei jeder einer Mehrzahl von Recheneinheiten, Verarbeiten von Strahlen auf Kreuzung mit Knoten einer Beschleunigungsstruktur, wobei jeder Knoten der Beschleunigungsstruktur einer jeweiligen Knotenkennung zugeordnet ist und jede der Recheneinheiten einen jeweiligen Strahlendefinitionsspeicher umfasst, der Definitionsdaten für Strahlen speichert,
    Ausgeben einer Knotenkennung und einer Anzahl von Strahlen;
    an einem zentralen Sammler, der mit jeder der Mehrzahl von Recheneinheiten gekoppelt ist,
    Empfangen der Knotenkennung und der Anzahl von Strahlen,
    Zuteilen einer oder mehrerer Strahlenpaketkennungen basierend auf der Anzahl von Strahlen,
    Zurückgeben der zugeteilten einen oder mehreren Strahlenpaketkennungen an die Recheneinheit, die die Knotenkennung und die Anzahl von Strahlen ausgegeben hat,
    Aktualisieren oder Erzeugen, in einem Paketspeicher, einer Sammlung von Strahlenpaketkennungen, die durch eine Knotenkennung indiziert wurden, die von der empfangenen Knotenkennung bestimmt wurde, um die zugeteilte eine oder mehreren Strahlenpaketkennungen zu umfassen, um dadurch den Knoten, der durch die empfangene Knotenkennung gekennzeichnet wurde, der zugeteilten einen oder mehreren Strahlenpaketkennungen zuzuordnen,
    Empfangen durch die jeweilige Recheneinheit, welche die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, der von dem zentralen Sammler zugeteilten Strahlenpaketkennungen, und Speichern in einem Strahlenpaketindexspeicher lokal zu dieser Recheneinheit von Daten, die eine Kennung jedem Strahl zuordnen, der in der Anzahl von Strahlen gezählt wurde, mit wenigstens einer der Strahlenpaketkennungen.
  • Das Verfahren kann ferner umfassen: Bestimmen, durch die jeweilige Recheneinheit, jede der Strahlenkennungen gemäß einer Adresse im Strahlendefinitionsspeicher, der Definitionsdaten für diesen Strahl speichert oder speichern wird.
  • Die Strahlen können virtuelle Strahlen sein.
  • Einmal zugewiesen, können die Strahlenkennungen während der Verarbeitung jedes Strahls invariant sein und jeder Strahl kann Definitionsdaten in einem einzigen Strahlendefinitionsspeicher unter allen der Recheneinheiten aufweisen.
  • Das Verfahren kann ferner umfassen: Ausführen eines Schattierers durch einen mit der jeweiligen Recheneinheit gekoppelten Allzweck-Prozessor, der die von der Recheneinheit verarbeiteten Strahlen erzeugt.
  • Das Verfahren kann ferner umfassen: Bestimmen durch den zentralen Sammler jeder Strahlenpaketkennung gemäß einem Ort des Eintrags in dem Strahlenpaketindexspeicher der Recheneinheit, der Daten speichern wird, welche die Strahlenkennungen der einen oder mehreren Paketkennungen zuordnen.
  • Das Verfahren kann ferner umfassen: Auswählen von zu verarbeitenden Strahlen an einer oder mehreren der Recheneinheiten durch ein Verfahren, das umfasst: Indizieren des Strahlenpaketindexspeichers dieser Recheneinheit unter Verwendung einer aus dem zentralen Sammler empfangenen Strahlenpaketkennung, um eine Liste von Strahlenkennungen zu erhalten, Verwenden der Strahlenkennungen, um Definitionsdaten für Strahlen, die von der Liste von Strahlenkennungen gekennzeichnet wurden, aus dem Strahlendefinitionsdatenspeicher dieser Recheneinheit zu erhalten, und Prüfen der bezeichneten Strahlen auf Kreuzung unter Verwendung der Definitionsdaten mit dem Knoten der Beschleunigungsstruktur, welcher der Strahlenpaketkennung durch den zentralen Sammler zugeordnet wurde.
  • Das Verfahren kann ferner umfassen: Auswählen, durch den zentralen Sammler, einer oder mehrerer der Sammlungen von Strahlenpaketkennungen und Ausgeben der Strahlenpaketkennungen in der einen oder mehreren ausgewählten Sammlungen an die Mehrzahl von Recheneinheiten und Bestimmen, bei jeder der Recheneinheiten, welche der Strahlenpaketkennungen sich auf einen Ort innerhalb des Strahlenpaketindexspeichers dieser Recheneinheit bezieht.
  • Das Verfahren kann ferner umfassen: Melden, durch jede der Recheneinheiten, der Paketkennungen für welche die Verarbeitung abgeschlossen wurde, und darauf reagierend Zurückgeben, durch den zentralen Sammler, von gemeldeten Paketkennungen an eine freie Liste.
  • Das Verfahren kann ferner umfassen: Pflegen, durch den zentralen Sammler, einer freien Paketkennungsliste für jede Recheneinheit, die angibt, welche Paketkennungen zur Zuweisung für diese Recheneinheit verfügbar sind.
  • Jede Paketkennung kann einen Ort in dem Paketindexspeicher einer jeweiligen Recheneinheit kennzeichnen, der bis zu einer vorbestimmten maximalen Anzahl von Strahlenkennungen speichern kann, und das Verfahren kann ferner umfassen: Ziehen, durch den zentralen Sammler, einer Anzahl von Paketkennungen aus der jeweiligen freien Liste der Recheneinheit, welche die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, um auf genug Speicher Bezug zu nehmen, um Strahlenkennungen für die Anzahl von Strahlen zu speichern.
  • Das Verfahren kann ferner umfassen: Implementieren jeder der freien Listen als einen Satz von Paketkennungen und Bereitstellen eines Bits für jede Paketkennung, das angibt, ob diese Paketkennung frei ist oder verwendet wird.
  • Jede der Mehrzahl von Recheneinheiten kann einen Auswahlprozess ausführen, um eine Reihenfolge der Strahlenverarbeitung durch diese Recheneinheit zu bestimmen. Der Auswahlprozess kann umfassen: Verwenden des Empfangs einer Strahlenpaketkennung aus dem zentralen Sammler als einen Indikator, dass Daten, die den Knoten definieren, dem diese Strahlenpaketkennung zugeordnet war, in einem Cache gespeichert werden, aus dem diese Recheneinheit lesen kann. Der Auswahlprozess kann umfassen: Priorisieren der Verarbeitung von Strahlen, für die Strahlenpaketkennungen innerhalb eines Zeitfensters nach Empfang derselben empfangen wurden.
  • Das Verfahren kann ferner umfassen: Aufnehmen, durch den zentralen Sammler, in einem Speicherort von Daten, welche die Sammlung in dem Speicher definieren, eines Bezugs auf einen anderen Ort in dem Speicher, der weitere Strahlenpaketkennungen dieser Sammlung speichert.
  • Das Verfahren kann ferner umfassen: Bestimmen, durch den zentralen Sammler, eine weitere Verarbeitung einer ausgewählten Sammlung von Strahlenpaketkennungen zu veranlassen, Abrufen der Strahlenpaketkennungen und Veranlassen der Mehrzahl von Recheneinheiten, Strahlenpaketkennungen zu empfangen, die Orten im Strahlenpaketindexspeicher dieser Recheneinheit entsprechen.
  • Der zentrale Sammler kann das Aktualisieren oder Erzeugen durch ein Verfahrens durchführen, das umfasst: Bestimmen eines Satzes von Knotenkennungen für Kindknoten der empfangenen Knotenkennung und Erstellen einer jeweiligen Sammlung für jeden der Kindknoten.
  • Der zentrale Sammler kann das Aktualisieren oder Erzeugen durch ein Verfahren durchführen, das umfasst: Verwenden der empfangenen Knotenkennung, um eine Sammlung zu erzeugen oder zu aktualisieren, die von dieser Knotenkennung indiziert wurde, und wenn der zentrale Sammler bestimmt, eine bestimmte Sammlung zu prüfen, der zentrale Sammler die Abfrage von Daten veranlasst, die einen Satz von Kindknoten des Beschleunigungsstrukturknotens definieren, welcher der bestimmten Sammlung zugeordnet ist.
  • Es wird ein Renderingsystem bereitgestellt, umfassend:
    eine Mehrzahl von Recheneinheiten, die jeweils einen Strahlendefinitionsspeicher und einen Strahlenpaketindexspeicher umfassen, wobei jede der Recheneinheiten ausgelegt wird, um:
    Strahlen auf Kreuzung mit Knoten einer Beschleunigungsstruktur zu verarbeiten, wobei jeder Knoten der Beschleunigungsstruktur einer jeweiligen Knotenkennung zugeordnet ist,
    Definitionsdaten für Strahlen in ihrem Definitionsspeicher zu speichern, und
    eine Knotenkennung und eine Anzahl von Strahlen auszugeben;
    einen zentralen Sammler, der mit jeder der Mehrzahl von Recheneinheiten gekoppelt ist, wobei der zentrale Sammler einen Paketspeicher umfasst, wobei der zentrale Sammler ausgelegt ist, um:
    die Knotenkennung und die Anzahl von Strahlen zu empfangen,
    eine oder mehrere Strahlenpaketkennungen basierend auf der Anzahl von Strahlen zuzuteilen,
    die zugeteilte eine oder mehrere Strahlenpaketkennungen an die Recheneinheit zurückzugeben, welche die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, und
    im Paketspeicher eine Sammlung von
    Strahlenpaketkennungen zu aktualisieren oder zu erzeugen, die durch eine Knotenkennung indiziert wurden, die von der empfangenen Knotenkennung bestimmt wurde, um die zugeteilte eine oder mehreren Strahlenpaketkennungen zu umfassen, um dadurch dem Knoten, der von der empfangenen Knotenkennung gekennzeichnet wurde, den zugeteilten einen oder mehreren Strahlenpaketkennungen zuzuordnen,
    wobei jede der Recheneinheiten ausgelegt ist, um die Strahlenpaketkennungen zu empfangen, die dieser Recheneinheit durch den zentralen Sammler zugeteilt wurden, und im Strahlenpaketindexspeicher lokal zu dieser Recheneinheit Daten zu speichern, die eine Kennung für jeden Strahl, der in der Anzahl von Strahlen gezählt wurde, wenigstens einer der Strahlenpaketkennungen zuordnen.
  • Einige der hier beschriebenen Beispiele stellen vollständig verteilte Entscheidungen zum Prüfen von Strahlen gegen Knoten bereit.
  • Beispielsweise wird ein maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen bereitgestellt, umfassend:
    bei einer Recheneinheit einer Mehrzahl von Recheneinheiten,
    Auswählen einer Gruppe von Strahlen, die auf Kreuzung mit einem Element einer Beschleunigungsstruktur zu verarbeiten sind, wobei jedes Element der Beschleunigungsstruktur eine jeweilige Auswahl von in einem 3D-Raum lokalisierter Geometrie begrenzt, und wobei das Element der Beschleunigungsstruktur mit einer Kennung kennzeichenbar ist,
    Angeben der Kennung an die anderen Recheneinheiten der Mehrzahl von Recheneinheiten,
    Einleiten des Abrufs aus einem Speicher von Daten, die das Element der Beschleunigungsstruktur definieren,
    Erhalten der Daten, die die Strahlen der Gruppe von Strahlen definieren, aus einem Speicher lokal zur Recheneinheit,
    Bestimmen, ob jeder der Strahlen das Element der Beschleunigungsstruktur trifft oder verfehlt, und an den anderen Recheneinheiten der Mehrzahl von Recheneinheiten,
    Indizieren eines Speichers unter Verwendung der Kennung, um zu bestimmen, ob ein jeweiliger lokaler Speicher zu dieser Recheneinheit Definitionsdaten für eine Gruppe von Strahlen enthält, die auf Kreuzung mit dem Element der Beschleunigungsstruktur zu prüfen sind, das mit der Kennung kennzeichenbar ist;
    Bestimmen, ob das Prüfen dieser Gruppe von Strahlen auf Kreuzung in dieser Recheneinheit, oder einer anderen Gruppe von Strahlen, für die Definitionsdaten im jeweiligen lokalen Speicher dieser Recheneinheit gespeichert sind, auf Kreuzung mit einen oder mehreren anderen Beschleunigungsstrukturelementen zeitlich zu steuern ist.
  • Das Einleiten des Abrufs aus dem Speicher von Daten, die das Element der Beschleunigungsstruktur definieren, kann umfassen: Laden der Daten aus einem Hauptspeicher in einen Cache, und falls irgendwelche der anderen Recheneinheiten bestimmen, eine jeweilige Gruppe von Strahlen auf Kreuzung mit diesem Element der Beschleunigungsstruktur zu prüfen, jede von diesen Recheneinheiten die Daten aus dem Cache abrufen kann, um das Prüfen durchzuführen.
  • Der Einleiten des Abrufs aus dem Speicher von Daten, welche das Element der Beschleunigungsstruktur definieren, kann umfassen: Laden der Daten aus einem Hauptspeicher in einen Cache, und falls irgendwelche der anderen Recheneinheiten bestimmen, eine jeweilige Gruppe von Strahlen auf Kreuzung mit diesem Element der Beschleunigungsstruktur zu prüfen, kann jede von diesen Recheneinheiten die Daten aus der Recheneinheit empfangen, die anfangs die Gruppe von Strahlen auswählte.
  • Das Verfahren kann ferner umfassen: Pflegen, bei jeder der Recheneinheiten, einer Warteschlange von Kennungen, die aus anderen Recheneinheiten empfangen wurden.
  • Das Verfahren kann ferner umfassen: Bereitstellen bei jeder der Recheneinheiten einer jeweiligen Gelegenheit, um eine Auswahl eines Elements der Beschleunigungsstruktur vorzunehmen, für welche diese Recheneinheit eine oder mehrere Gruppen von Strahlen auf Kreuzung prüfen wird, und danach Wählen durch die andere der Recheneinheiten, ob oder nicht sie dieses gleiche Element der Beschleunigungsstruktur in einer Kreuzungsprüfung verwendet.
  • Einige hier beschriebene Beispiele stellen teilweise verteilte und teilweise zentralisierte Entscheidungen zum Prüfen von Strahlen gegen Knoten bereit.
  • Beispielsweise wird ein maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen bereitgestellt, umfassend:
    bei jeder einer Mehrzahl von Recheneinheiten, wobei jede der Recheneinheiten einen jeweiligen privaten Speicher umfasst, der Definitionsdaten für Strahlen speichert
    Bestimmen für jeden Strahl einer Gruppe von Strahlen, ob oder nicht dieser Strahl einen Knoten einer Beschleunigungsstruktur kreuzt,
    für jeden Knoten der Beschleunigungsstruktur, Gruppieren jedes der Strahlen der Gruppe von Strahlen, die diesen Knoten kreuzen, in eine jeweilige Gruppe,
    Zuordnen einer oder mehrerer Mikropaketkennungen der Gruppe von Strahlen,
    Speichern in einem Mikropaketspeicher an Orten, die durch die eine oder mehreren Mikropaketkennungen angegeben werden, einer jeweiligen Kennung für jeden Strahl in der Gruppe von Strahlen,
    Ausgeben, für jede Gruppe von Strahlen, einer Knotenkennung und einer Mikropaketkennung der einen oder mehreren Mikropaketkennungen, die der Gruppe von Strahlen zugeordnet sind,
    an einem zentralen Sammler, der mit jeder der Mehrzahl von Recheneinheiten gekoppelt ist,
    Empfangen der Knotenkennung und der einen Mikropaketkennung,
    Bestimmen eines Orts in einem Paketspeicher, der von der Knotenkennung indizierbar ist oder sein wird,
    Speichern der Mikropaketkennung in dem Paketspeicher an dem bestimmten Ort,
    Auswählen eines Knoten zur weiteren Verarbeitung,
    Bestimmen eines oder mehrerer Orte in dem Paketspeicher, der Mikropaketeinträge basierend auf der aufrechterhaltenen Zuordnung zwischen Knotenkennungen und Orten in dem Paketspeicher speichert, und
    Ausgeben der Mikropaketkennungen, die von dem einen oder mehreren Orten im Paketspeicher erhalten wurden, zum Empfang durch jeweilige Recheneinheiten der Mehrzahl, die ursprünglich derartige Mikropaketkennungen dem zentralen Sammler bereitstellten.
  • Das Verfahren kann ferner umfassen: Erstellen bei jeder der Mehrzahl von Recheneinheiten, einer Kette von Bezügen auf Mikropaketkennungen, die Strahlenkennungen für Strahlen speichern, die weiter zusammen zu verarbeiten sind.
  • Jede Strahlenkennung kann eine Speicheradresse in einem Speicher sein, bei der Definitionsdaten für diesen Strahl gespeichert sind.
  • Renderingsysteme können ausgelegt sein, um irgendeines der hier beschriebenen Verfahren zu implementieren.
  • Beispielsweise wird für die verteilte Verfolgung und zentralisierten Zeitablaufsteuerungsangaben (engl. scheduling indications) (d.h., die dazwischenliegend verteilte Option) ein Renderingsystem bereitgestellt, umfassend:
    eine Mehrzahl von Recheneinheiten mit jeweils einem jeweiligen lokalen Speicher, der Definitionsdaten für Strahlen speichert und auslegbar ist, um einen Strahl, der seine Definitionsdaten aus dem lokalen Speicher verwendet, auf Kreuzung mit einer geometrischen Form zu prüfen, und Sammlungen von Strahlenkennungen zu pflegen, wobei jede Sammlung durch eine Kennung für ein Element einer Beschleunigungsstruktur indizierbar ist, um auf Kreuzung mit Strahlen geprüft zu werden, die durch die Strahlenkennungen dieser Sammlung gekennzeichnet werden;
    ein zentrales Sammlungselement, das mit der Mehrzahl von Recheneinheiten gekoppelt ist, wobei das zentrale Sammlungselement ausgelegt ist, um Elemente der Beschleunigungsstruktur anzugeben, die von der Mehrzahl von Recheneinheiten mit Strahlen zu prüfen sind, für die Definitionsdaten in den jeweiligen lokalen Speichern der Mehrzahl von Recheneinheiten gespeichert sind;
    wobei jede der Mehrzahl von Recheneinheiten ausgelegt ist, um dem zentralen Sammlungselement eine Kennung für ein Element der Beschleunigungsstruktur und eine Anzahl von Strahlen anzugeben, die in dem lokalen Speicher dieser Recheneinheit gespeichert sind, die auf Kreuzung mit diesem gekennzeichneten Element der Beschleunigungsstruktur geprüft werden müssen, und
    das zentrale Sammlungselement ausgelegt ist, um einen Speicher zu aktualisieren, der die gekennzeichneten Elemente der Beschleunigungsstruktur und eine jeweilige Anzahl von Strahlen verfolgt, die auf Kreuzung mit jedem der gekennzeichneten Elemente geprüft werden müssen, und der Mehrzahl von Recheneinheiten Kennungen für Elemente der Beschleunigungsstruktur anzugeben, und wobei jede der Recheneinheiten ausgelegt ist, um die Sammlungen mit den Kennungen für die Elemente der Beschleunigungsstruktur zu indizieren und den zeitlichen Ablauf des Prüfens von Strahlen gemäß den Ergebnissen des Indizierens zu steuern.
  • Jede der Recheneinheiten kann einen Paketspeicher getrennt von dem Speicher umfassen, der die Strahlendefinitionsdaten speichert, der Strahlenkennungen jeder Sammlung in Verbindung mit der Kennung für das Element der Beschleunigungsstruktur speichert, das dieser Sammlung zugeordnet ist.
  • Jede der Recheneinheiten kann umfassen: einen Paketindexspeicher, wobei der Paketindexspeicher die Kennung für das Element der Beschleunigungsstruktur speichert, und eine oder mehrere Mikropaketkennungen, wobei jede Mikropaketkennung einen Speicherort angibt, der einen Satz von Strahlenkennungen in der Sammlung von Strahlenkennungen speichert, die dieser Beschleunigungsstruktur-Elementkennung zugeordnet sind.
  • Systeme und Verfahren werden hier beschrieben, die sich auf die Rückgabe von Ergebnissen für die Verarbeitung beziehen. Die Systeme und Verfahren variieren gemäß der Implementierung. Der zentrale Sammler kann mehrere Bänke aufweisen. Es kann eine Arbitrierung für einen Bankzugriff geben. Es kann eine zufällige, pseudozufällige oder geplante Verzögerung geben, so dass Bankzugriffe verteilter sind. Es kann einen Bus geben, auf dem unterschiedliche Recheneinheiten eine Absicht angeben, eine Bank des Sammlers zu adressieren, und unterschiedliche Datenbusbahnen zu dieser Bank können von unterschiedlichen Recheneinheiten besetzt werden. Eine gewisse Menge an Außer-der-Reihe-Pufferung oder Umordnung kann in jeder Recheneinheit bereitgestellt werden, um irgendeine Arbitrierung oder Backoff von einigen Recheneinheiten zu ermöglichen, um die Konkurrenz auf eine gemeinsam genutzte Ressource zu verringern. Die Recheneinheiten können hier als “Strahlenverfolgungs-Beschleuniger” oder “Ray-Cluster” oder einfach als “RACs” bezeichnet werden. Der zentrale Sammler kann das Abrufen von Daten und die Verteilung an diejenigen RACs veranlassen, welche die Daten verwenden werden.
  • Die hier beschriebenen Renderingsysteme können in Hardware auf einer integrierten Schaltung verkörpert sein. Es kann ein Verfahren zur Herstellung, bei einem Herstellungssystem für eine integrierte Schaltung, eines Renderingsystems bereitgestellt werden. Es kann ein Definitionsdatensatz für eine integrierte Schaltung bereitgestellt werden, der, wenn in einem Herstellungssystem für eine integrierte Schaltung verarbeitet, das System konfiguriert, ein Renderingsystem herzustellen. Es kann ein nicht vorübergehendes computerlesbares Speichermedium bereitgestellt werden, das darauf gespeichert eine computerlesbare Beschreibung einer integrierten Schaltung aufweist, die, wenn verarbeitet, ein Layout-Verarbeitungssystem veranlasst, eine Schaltungs-Layout-Beschreibung zu erzeugen, die in einem Herstellungssystem für eine integrierte Schaltung verwendet wird, um ein Renderingsystem herzustellen.
  • Es kann ein Herstellungssystem für eine integrierte Schaltung bereitgestellt werden, umfassend: ein nicht vorübergehendes computerlesbares Speichermedium, das darauf gespeichert eine computerlesbare Beschreibung für eine integrierte Schaltung aufweist, die ein Renderingsystem beschreibt, wie hier beschrieben; ein Layout-Verarbeitungssystem, das ausgelegt ist, um die Beschreibung für eine integrierte Schaltung zu verarbeiten, um eine Schaltungs-Layout-Beschreibung einer integrierten Schaltung zu erzeugen, die das Renderingsystem verkörpert; und ein Erzeugungssystem für eine integrierte Schaltung, das ausgelegt ist, um das Renderingsystem gemäß der Schaltungs-Layout-Beschreibung herzustellen.
  • Es kann ein Computerprogrammcode zum Durchführen irgendeines der hier beschriebenen Verfahren bereitgestellt werden. Es kann ein nicht vorübergehendes computerlesbares Speichermedium bereitgestellt werden, das darauf gespeichert computerlesbare Anweisungen aufweist, die, wenn an einem Computersystem ausgeführt, das Computersystem veranlassen, irgendeines der hier beschriebenen Verfahren durchzuführen.
  • Die obigen Merkmale können geeignet kombiniert werden, wie es für einen Fachmann offensichtlich sein würde, und können mit irgendeinem der Aspekte der hier beschriebenen Beispiele kombiniert werden.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Für ein vollständigeres Verständnis von hier offenbarten Aspekten und Beispielen wird Bezug auf die begleitenden Zeichnungen in der folgenden Beschreibung genommen.
  • 1 stellt einen Überblick eines Systems von verteilten Strahlenverfolgungs-Beschleunigern (RAy Clusters (RACs)) mit einer zentralisierten Einheit anschaulich dar;
  • 2 stellt eine Beispielimplementierung eines RAC von 1 anschaulich dar;
  • 3 stellt eine Beispielimplementierung der zentralisierten Einheit von 1 anschaulich dar;
  • 4 stellt Aspekte eines Beispielablaufs von Daten in der zentralisierten Einheit von 3 anschaulich dar;
  • 5 stellt Aspekte eines beispielhaften Prozesses zur Pflege des Paketspeichers anschaulich dar, der von der zentralisierten Einheit von 3 implementiert wird;
  • 69 stellen Beispiele von anderen Prozessen anschaulich dar, die von der zentralisierten Einheit von 3 implementiert werden können;
  • 10 stellt ein Beispiel eines Prozesses anschaulich dar, der von der RAC von 2 implementiert werden kann;
  • 11 stellt einen Beispielprozess anschaulich dar, der in einer zentralisierten Einheit gemäß der Offenbarung implementiert werden kann;
  • 12 stellt eine alternative Beispielimplementierung des Systems von 1 dar, bei der jede RAC Mikropaketkennungen für ihren Gebrauch pflegt und zuweist, jedoch Mikropaketkennungen der zentralisierten Einheit zum Indizieren mit Bezug auf Knotenkennungen meldet (wohingegen das Beispiel von 23 vorsieht, dass das zentrale Paket Mikropaketkennungen für die RACs zuweist und unterhält);
  • 13 stellt einen Beispielprozess anschaulich dar, der in einem System unter Verwendung des RAC von 12 implementiert wird;
  • 14 stellt eine RAC anschaulich dar, bei der jede RAC einen Knoten-ID-zu-Mikropaketindex pflegt und Knotenkennungen zur Zeitablaufsteuerung von Strahlen aus der zentralisierten Einheit empfängt;
  • 15 stellt eine Beispielimplementierung eines verteilten Satzes von RACs anschaulich dar, bei der jede RAC bestimmt, welcher Knoten zu prüfen ist, mit Bezug auf ihre eigenen lokalen Strahlendaten, jedoch anderen RACs ihre Zeitablaufsteuerungsentscheidungen (scheduling decisions) angibt;
  • 16 stellt einen für 15 implementierten Beispielprozess anschaulich dar;
  • 17 stellt einen weiteren für 15 implementierten Beispielprozess anschaulich dar;
  • 18 stellt ein Beispiel des Pufferns von Knoten-IDs in einer RAC gemäß dem Beispiel von 15 anschaulich dar;
  • 19A und 19B stellen Beispiele einer pipelinemäßigen Verarbeitung für eine Führen/Folgen-Implementierung gemäß 15 anschaulich dar;
  • 20 stellt ein Computersystem dar, in welchem ein Graphikverarbeitungssystem implementiert ist; und
  • 21 stellt ein Herstellungssystem für eine integrierte Schaltung zur Erzeugung einer integrierten Schaltung, die ein Renderingsystem verkörpert, dar.
  • DETAILLIERTE BESCHREIBUNG
  • Die folgende Beschreibung wird vorgestellt, um einem Fachmann zu ermöglichen, verschiedene Aspekte der Erfindung herzustellen und zu verwenden. Beschreibungen von spezifischen Techniken, Implementierungen und Anwendungen werden lediglich als Beispiele bereitgestellt. Verschiedene Modifikationen an hier beschriebenen Beispielen können Fachleuten offensichtlich sein und die hier definierten allgemeinen Prinzipien können auf andere Beispiele und Anwendungen angewendet werden, ohne vom Schutzumfang der Erfindung abzuweichen.
  • In einem Aspekt der Offenbarung schreiten Strahlenverfolgungs-Aufgaben gleichzeitig mit Rasterisierungsaufgaben voran. Techniken werden offenbart, um das Durchführen von Strahlenverfolgungs-Aufgaben zu vermeiden, die bestimmt werden können, nicht zu einem endgültigen Renderingprodukt beizutragen.
  • Strahlenverfolgungs-Systeme werden hier beschrieben, wobei Recheneinheiten (“RACs”) angepasst werden, Strahlenverfolgungs-Operationen (z.B. Kreuzungsprüfen) durchzuführen. Es gibt mehrere RACs. Es wird eine zentralisierte Paketeinheit bereitgestellt, um die Zuteilung und das Prüfen von Strahlen durch die RACs zu steuern. Diese ermöglicht RACs, in einigen Beispiele mit wenigen oder keinen CAMs(Content Adressable Memories) implementiert zu werden, die aufwändig zu implementieren sind, wobei jedoch die Funktionalität von CAMs noch erreicht werden kann, indem sie im zentralisierten Controller implementiert werden. Ein CAM ist eine Hardwarestruktur, die bestimmt, ob ein Wert darin enthalten ist, und wenn ja, bildet den Wert zurück in Zusatzdaten ab. Sie kann als eine Hashing-Funktion implementiert werden, um eine Adresse abzurufen, und dann kann ein Satz von Slots an jeder Adresse, die geprüft werden kann, und/oder andere Verhaltenseisen, implementiert werden, um Hash-Platz-Kollisionen zu handhaben. CAMs werden verwendet, um Caches zu implementieren, wobei jedoch die Idee eines CAM allgemeiner als nur auf Caches anwendbar ist.
  • 1 stellt Elemente anschaulich dar, die nummeriert und deskriptiv etikettiert sind. Rechen-Cluster (Compute Clusters) (z.B. 221224) sind beispielsweise im Allgemeinen programmierbare Elemente, die an programmierbaren Arbeitsbelastungen, wie beispielsweise einen Prozessorkern, einen Satz von Kernen, Schattierungseinheiten eines Graphikprozessors und so weiter, arbeiten können. In einigen Beispielen führen diese Einheiten Vertex- und Pixel-Schattierer für die Rasterisierung sowie auch Schattierer für die Strahlenverfolgung aus. Die Strahlenverfolgungs-Beschleuniger (RACs) 205208 (die hier ebenfalls als “Recheneinheiten” bezeichnet werden können) handhaben die spezialisierte Verarbeitung, die zum Durchqueren von Strahlen durch eine Beschleunigungsstruktur und zum Prüfen von Strahlen auf Kreuzung mit Szenengeometrie erforderlich ist. Mit anderen Worten sind die RACs in einer Art und Weise angeordnet, um eine effiziente Ausführung von Strahlenverfolgungs-Aufgaben, wie beispielsweise Kreuzungsprüfungen, zu erleichtern. Die RACs können in Festfunktions-Hardware (z.B. fest zugeordnete Schaltungen) implementiert sein, um Strahlenverfolgungs-Operationen, wie beispielsweise Kreuzungsprüfen, zu beschleunigen. Jeder der RACs ist mit einem jeweiligen Rechen-Cluster gekoppelt, wie in 1 gezeigt. Außerdem gibt es mit jedem Paar RAC/Rechen-Cluster-Paar eine Speicherschnittstelle (230233), um zu ermöglichen, dass Daten zwischen einer Speicherhierarchie 245 und den RACs und/oder den Rechen-Cluster übergeben werden können. Ein grobkörniger Scheduler 270 ist mit jedem der Rechen-Cluster (Compute Cluster) 221224 gekoppelt, um den zeitlichen Planungsablauf (schedule) der daran durchgeführten Schattierungsoperationen zu steuern. Jede der RACs ist mit einer zentralen Paketeinheit 203 gekoppelt, auf die hier als einen “zentralen Sammler” oder manchmal einfach “Zentrale” Bezug genommen werden kann.
  • 2 zeigt ein Beispielblockdiagramm der RAC 205. Jede der RACs wird eine entsprechende Struktur aufweisen. Jede RAC verbindet sich über eine Schnittstelle 315 mit der zentralen Paketeinheit 203. Eine Speicherschnittstelle 335 verbindet sich schnittstellenmäßig mit der Speicherhierarchie 245. Implementierungen können diese Schnittstellen aufweisen, die über den gleichen Bus oder durch Punkt-zu-Punkt-Verbindungen oder irgendeinem anderen geeigneten Mechanismus implementiert sind. Die RAC 205 umfasst einen Strahlendefinitionsspeicher 320 (der als ein Strahlen-RAM 320 bezeichnet werden kann), der Daten speichert, die sich auf Strahlen beziehen, die auf Kreuzung mit Geometrie in einer Szene zu prüfen sind. Die RAC 205 umfasst ebenfalls einen Strahlenpaketindexspeicher 339, der Strahlenkennungen (oder “Strahlen-IDs” oder einfach “RIDs”) speichert.
  • Ein Block 327 stellt Strahlen-IDs dar, die von dem Strahlenpaketindexspeicher 339 gekennzeichnet wurden und verwendet werden können, um Orte im Strahlen-RAM 320 zu kennzeichnen, bei denen Definitionsdaten für diesen Strahl gespeichert sind. Ein mit “Fertige-Strahlen 326” in 2 bezeichneter Speicher speichert Strahlen, die ihre Definitionsdaten verfügbar haben und fertig sind, in der Prüferanordnung 330 geprüft zu werden. Auf den Fertige-Strahlen-Speicher 326 kann gemäß einem geeigneten Schema, z.B. einem FIFO oder einem seriellen Schema, zugegriffen werden. In einer Implementierung ist der Strahlen-RAM 320 grundsätzlich eine Registerdatei, auf die von der Prüferanordnung 330 zugegriffen werden kann, und Fertige-Strahlen 326 oder anderes Zurückspeichern oder lokales Caching oder Warteschlangenbildung wird nicht benötigt. Die Prüferanordnung 330 umfasst eine Anzahl von Ausführungseinheiten 331333 zum Ausführen von Operationen, z.B. Kreuzungsprüfungen zwischen Strahlen und Knoten einer Beschleunigungsstruktur oder zwischen Strahlen und Geometrieelementen. In einer Implementierung prüft die Prüferanordnung 330 unterschiedliche Strahlen (in unterschiedlichen Ausführungseinheiten) gegen das gleiche Geometrieelement oder das gleiche Beschleunigungsstrukturelement. Definitionsdaten für das, was geprüft wird, kommen von der Speicherschnittstelle 335. Mit anderen Worten steuert die zentrale Paketeinheit 203 mittels einer RAC, welche Prüfungen durchgeführt werden, so dass die RACs zentral gesteuert werden können. Jede RAC kann jedoch ihre Kreuzungsprüfungen unabhängig von anderen RACs durchführen.
  • Wie in späteren Figuren gezeigt, arbeitet die RAC 205, um Strahlen durch Empfangen einer Mikropaketkennung durch die Schnittstelle 315 zu prüfen. Die RAC 205 verwendet diese Mikropaket-ID als einen Index, um eine Strahlenkennung von dem Strahlenpaketindexspeicher 339 zu bestimmen. Die gekennzeichneten Strahlen sind gegen einen Knoten oder ein Stück Geometrie in der Prüferanordnung 330 zu prüfen. Der Strahlenpaketindexspeicher 339 kann einfach ein Speicher sein, so dass die Mikropaket-ID ein Ort im Speicher ist (d.h., es wird keine inhaltsassoziative Suche in diesem Beispiel erforderlich). Mikropakete können zusammen verkettet werden, so dass Daten von dem Ort, der von der empfangenen Mikropaket-ID gekennzeichnet wurde, weitere Orte im Strahlenpaketindexspeicher 339 kennzeichnen können. Diese weiteren Orte speichern ebenfalls Strahlenkennungen, die gegen den gleichen Knoten zu prüfen sind. In einigen Implementierungen kann sich eine Knoten-ID auf ein Elternteil eines Kindknotens beziehen, der als nächstes geprüft werden muss, und nicht auf Knoten-IDs, die ein zu prüfendes Beschleunigungsstrukturelement direkt bezeichnen. So kann beispielsweise ein Paket, das einer Knoten-ID zugeordnet ist, auf Kreuzung mit vier Kindknoten des Knotens geprüft werden, der durch die Knoten-ID gekennzeichnet wurde, und dann können Sammlungen für jeden dieser Kindknoten mit Strahlen, die jeden treffen, zur weiteren Durchquerung festgelegt werden.
  • Alle RIDs, die durch dieses gekennzeichnet sind, werden verwendet, um Definitionsdaten für die entsprechenden Strahlen aus dem Strahlen-RAM 320 zu erhalten. RIDs können lediglich Orte in 320 kennzeichnen und dies muss ebenfalls nicht inhaltsassoziativ sein. Beim Abrufen von Strahlendaten von Orten im Strahlen-RAM 320, die durch die Mikropaket-ID(s) gekennzeichnet wurde(n), können Informationen bezogen auf gekennzeichnete Strahlen an die zentrale Paketeinheit 203 entweder einzeln oder in Gruppen zurück gemeldet werden. Beispielsweise kann eine freie Liste 329 frei gemachte Kennungen zur Gruppenmeldung akkumulieren. Dies ist ein optionales Merkmal.
  • Eine Prüferanordnung 330 führt ihre Verarbeitung aus, um Kreuzungsprüfungen für Strahlen von dem Fertige-Strahlen-Speicher 326 zu implementieren. Falls Knoten einer Beschleunigungsstruktur geprüft werden, dann erhält der Packer 325 Ergebnisse, um zu bestimmen, welche Strahlen zum Prüfen zusammen zu packen sind. Falls ein Satz von Strahlen beispielsweise gegen einen Knoten geprüft wurde, dann werden Strahlen, die treffen, zur weiteren Durchquerung von Kindern des Knotens, der getroffen wurde, zusammen gepackt und nicht treffende Strahlen nicht zusammen gepackt. Zwecks Klarheit der Beschreibung werden Strahlenkennungen gepackt, jedoch keine Strahlendefinitionsdaten, die im Strahlen-RAM 320 stationär sind. Orte im Indexspeicher 339 können lediglich eine maximale Anzahl von Strahlenkennungen speichern, so dass in einigen Fällen mehrere Mikropaket-IDs verwendet werden, um Prüfergebnisse zu propagieren. Die RAC 205 meldet die Anzahl von Strahlen, die propagiert werden müssen, an die zentrale Paketeinheit 203, und die Zentrale 203 stellt diese von einer freien Liste bereit (es sei bemerkt, dass andere Beispiele eine unterschiedliche Vorgehensweise zum Verwalten von Mikropaket-IDs bereitstellen können.) Damit die Zentrale 203 dies tut, meldet der RAC 205 ebenfalls die Knoten-ID, die geprüft wurde, so dass die Zentrale 203 ihren Knoten auf Mikropaket-ID-Indizieren aktualisieren kann. Auf diese Weise kann die zentrale Paketeinheit 203 die Verteilung der Mikropakete von Strahlen zwischen den unterschiedlichen RACs 205208 verwalten.
  • 3 zeigt die Strukturen in der zentralen Paketeinheit 203 in einem Beispiel. Ein Paketspeicherindex 420 ist ein CAM (Content Adressable Memory), so dass er inhaltsassoziatives Indizieren von Paketen durch Knoten-ID implementiert. Eine Ausgabe von dem Paketspeicherindex 420 ist ein Ort in einem Paketspeicher 430, der eine Liste von Mikropaket-IDs speichert. Ein Strahlenzählwert kann im Index 420 oder mit jedem Paketeintrag im Paketspeicher 430 gespeichert werden. 3 zeigt die Strahlenzählwerte, die im Paketspeicher 430 gespeichert werden. Die Zentrale 203 weist ebenfalls freie und fertige Stapel 452 und 450 für ihre Paketkennungen auf. Diese werden konsumiert und frei gemacht gemäß Orten, die im Paketspeicher 430 konsumiert oder frei gemacht werden. Einige Implementierungen können ebenfalls eine freie Liste pro RAC und eine einheitliche fertige Liste oder fertige Liste pro RAC aufweisen. In einigen Vorgehensweisen gibt es keinen fertigen Stapel für Mikropakete, sondern stattdessen besteht der fertige Stapel lediglich aus Paket-IDs, und der fertige Stapel wird verwendet, um den Paketspeicher zu indizieren direkt bevor Daten vom Eintrag an der Schnittstelle 460 ausgegeben werden. Eine Steuereinheit 415 implementiert einen Paketräumungsprozess, der eine Reihenfolge von Mikropaket-IDs bestimmt, die an RACs über die Schnittstelle 460 ausgegeben werden. Dies entspricht nicht notwendigerweise genau einer Reihenfolge des Prüfens in den RACs. Dieser Räumungsprozess kann die Strahlenzählwerte verwenden, um zu bestimmen, welche Knoten der Beschleunigungsstruktur eine geeignete Anzahl von Strahlen aufweisen, um die Verarbeitung fortzusetzen. Beispielsweise kann ein Knoten mit einer hohen Anzahl von zu prüfenden Strahlen veranlassen, dass ein oder mehrere Mikropakete zum Kreuzungsprüfen durch die RACs zu räumen sind, während ein Knoten mit einer niedrigeren Anzahl von zu prüfenden Strahlen auf das Kreuzungsprüfen warten kann. Dies kann die durchschnittliche Anzahl von Strahlen erhöhen, die jeweils gegen einen Knoten zu prüfen sind, was den Wirkungsgrad des Strahlenverfolgungs-Prozesses erhöhen kann. Andere Informationen können bei einer Räumungsentscheidung verwendet werden, einschließlich beim Entscheiden, Pakete zu priorisieren, die Blattknoten referenzieren, da nach dem Blattknoten-Geometrieprüfen diese Strahlen zu der Schattierung weitergehen oder wegen fehlender Kreuzung fallen gelassen werden. Die Zentrale 203 kann einen Vorabruf (Pre-fetch) von Knotendaten entsprechend der Mikropaket-IDs-Ausgabe initiieren. Ein derartiger Vorabruf kann mittels eines erwarteten Zählwerts für Leseoperationen näher bestimmt werden, die für diese Daten auftreten werden. Dieser Zählwert kann auf der Cache-Ebene installiert werden, um bestimmte Leseoperationen durch RACs zu erfassen, und in Reaktion auf Leseoperationen dekrementiert werden, und schließlich in einem Räumungsentscheidungsprozess am Cache verwendet werden. Diese verschiedenen Prozesse und Maßnahmen können als unabhängig arbeitende Prozesse konzeptualisiert werden, die durch 69 beispielhaft dargestellt sind.
  • 6 zeigt die von der zentralen Paketeinheit 203 durchgeführte Pflege des fertigen Stapels 450. In Schritt 705 liest die zentrale Paketeinheit 203 Zählwerte für Mikropakete in den Paketspeicher 705. In Schritt 707 wird ein Paket zur Verarbeitung ausgewählt (z.B. basierend auf den Zählwerten). Ein Paket umfasst ein oder mehrere Mikropakete. In Schritt 709 wird die ID des ausgewählten Pakets zum fertigen Stapel 450 hinzugefügt, die angibt, dass ein oder mehrere Mikropakete des Pakets fertig sind, um an eine RAC gesendet zu werden.
  • 7 zeigt einen von der zentralen Paketeinheit 203 durchgeführten Paketabsendeprozess. In Schritt 713 wird eine Paket-ID aus dem fertigen Stapel 450 erhalten. In Schritt 717 werden Daten für das Paket aus dem Paketspeicher 430 abgerufen. In Schritt 720 wird die eine oder mehrere Mikropaket-IDs für das Paket über die Schnittstelle 460 an eine oder mehrere RACs ausgegeben. In Schritt 722 wird der Vorabruf von Knotendaten eingeleitet.
  • 8 zeigt einen Prozess zur Pflege der leeren Mikropaketliste 453 an der zentralen Paketeinheit 203. In Schritt 725 werden Mikropaket-IDs für das zu versendende Paket empfangen. In Schritt 727 werden die empfangenen Mikropaket-IDs dem freien Stapel 453 zurückgegeben. Die zurückgegebenen Mikropaket-IDs können daher anschließend erneut zugeteilt werden.
  • 9 zeigt einen Prozess zum Pflegen des leeren Paketstapels 452 an der zentralen Paketeinheit 203. In Schritt 730 wird eine Paket-ID für das zu versendende Paket empfangen. In Schritt 732 wird die empfangene Paket-ID dem freien Stapel 452 zurückgegeben. Die zurückgegebenen Paket-IDs können daher anschließend erneut zugeteilt werden.
  • 45 stellen Beispiele eines Datenflusses durch die zentrale Paketeinheit 203 anschaulich dar. Eine Knoten-ID (z.B. von einer der RACs empfangen, die einen zu prüfenden Knoten angibt) wird verwendet, um einen CAM (Content Adressable Memory) 421 zu indizieren, der Paketspeicherindizes (471) erzeugt, die verwendet werden, um Daten aus dem Paketspeicher 430 abzurufen, die Mikropaket-IDs angeben (die mit der Knoten-ID aufgrund von Paketzuordnung korreliert sind). Paket-IDs können zur freien Liste zurückgehen. Mikropaket-IDs können zu einem Puffer gehen, wo sie auf die Übertragung an eine RAC warten. 5 zeigt dies ausführlicher. Das heißt, eine Knoten-ID und eine Mikropaket-ID werden an einer Schnittstelle 460 empfangen und die Knoten-ID wird dem Paketspeicherindex 420 bereitgestellt, der Paketspeicherindizes erzeugt, die verwendet werden können, um auf ein Paket aus dem Paketspeicher 430 zuzugreifen. Die Paketbeschreibungen werden verwendet, um die Paketdaten zu aktualisieren, z.B. um eine Mikropaket-ID an den Paketspeicher 430 anzuhängen und einen Zählwert zu aktualisieren, der einem Knoten zugeordnet ist. Freie Listen für Mikropakete können wiederum pro RAC sein oder nicht; einige Implementierungen sehen Striping von Mikropaket-IDs unter den RACs vor, so dass irgendeine gegebene Mikropaket-ID in eine RAC mittels einer geeigneter Maskierung abgebildet werden kann, und folglich können freie Mikropaket-IDs für eine bestimmte RAC von einer einheitlichen freien Liste durch derartiges Maskieren oder eine äquivalente Operation gekennzeichnet werden.
  • 10 ist ein Beispielprozess, der von der RAC 205 gemäß dem obigen implementiert wird. Ein entsprechender Prozess kann von irgendeiner der RACs 205208 implementiert werden. In Schritt 810 empfängt die RAC 205 einen oder mehrere Mikropaket-IDs von der zentralen Paketeinheit 203. In Schritt 814 werden eine oder mehreren Strahlen-IDs vom Strahlenindexspeicher 339 unter Verwendung der Mikropaket-IDs als Indizes bestimmt. In Schritt 816 werden Strahlen-IDs (327) aus dem Strahlenindexspeicher 339 ausgegeben. In Schritt 818 werden Strahlendefinitionsdaten aus dem Strahlen-RAM 320 unter Verwendung der Strahlen-IDs als ein Index abgerufen. In Schritt 820 wird bestimmt, ob es mehrere zu verarbeitende Mikropakete gibt (z.B., ob es eine Kette von Mikropaketen gibt). Wenn ja, geht das Verfahren zu Schritt 814 zurück und das Verfahren wiederholt sich für das nächste Mikropaket; falls jedoch nicht, geht das Verfahren zu Schritt 810 und wartet auf eine andere Mikropaket-ID, die von der zentralen Paketeinheit 203 zu empfangen ist, die das nächste zu verarbeitende Mikropaket angibt.
  • Des Weiteren werden im Anschluss an Schritt 818 in Schritt 822 Formdaten (z.B. Geometriedaten oder Knotendaten) an der RAC 205, z.B. über die Speicherschnittstelle 335, empfangen, um geprüft zu werden. In Schritt 824 führt die Prüferanordnung 330 das Prüfen an den Strahlen auf Kreuzungen mit den Formen durch. Fall die Formen Geometrie in der Szene sind (z.B. Grundelemente, die Oberflächen von Objekten in der Szene darstellen), dann können in Schritt 826 die nächstliegenden Trefferabstände für Strahlentreffer aktualisiert werden, wenn ein Strahl die Geometrie kreuzt. Im Anschluss an Schritt 826 geht das Verfahren zu Schritt 810 zurück und wartet auf eine andere Mikropaket-ID, die von der zentralen Paketeinheit 203 zu empfangen ist, die das nächste zu verarbeitende Mikropaket angibt.
  • Falls die Formdaten ein Knoten einer Beschleunigungsstruktur sind, dann geht das Verfahren von Schritt 824 zu Schritt 828, in dem Strahlen gemäß dem gruppiert werden, welche Strahlen welche Formen treffen. In Schritt 830 werden Mikropaket-IDs für jede Gruppe von der zentralen Paketeinheit 203 angefordert und in Schritt 832 werden Mikropaket-IDs aus der zentralen Paketeinheit 203 empfangen. In Schritt 834 wird der Mikropaketspeicherindex 339 mit dem empfangenen Mikropaket und Strahlen-IDs aktualisiert. Dann geht das Verfahren zu Schritt 810 zurück, um das(die) neu empfangene(n) Mikropaket(e) zu verarbeiten.
  • 11 ist eine linearere Darstellung von Maßnahmen, die von der zentralen Paketeinheit 203 getroffen wurden, die obenstehend beschrieben wurden. In Schritt 752 empfängt die zentrale Paketeinheit 203 von einer bestimmten RAC (z.B. der RAC 205) eine Knotenkennung und eine Anzahl von Strahlen, die gegen den gekennzeichneten Knoten zu prüfen sind. Beispielsweise werden die Knotenkennung und die Anzahl von Strahlen als ein Ergebnis von Schritt 828 empfangen, der durch die RAC 205 implementiert wurde. In Schritt 754 werden Mikropaket-IDs von dem freien Stapel 453 erhalten und in Schritt 756 werden diese Mikropaket-IDs aus dem freien Stapel 453 entfernt (weil sie nicht länger “frei” sind). In Schritt 758 wird eine Paket-ID aus dem paketfreien Stapel 452 erhalten und in Schritt 760 werden diese Paket-IDs aus dem freien Stapel 452 entfernt (weil sie nicht länger “frei” sind). Es sei bemerkt, dass ein “Mikropaket” einer bestimmten RAC bereitzustellen ist, wohingegen ein “Paket” eine Sammlung von einem oder mehreren Mikropaketen enthalten kann, die einer oder mehreren der RACs bereitzustellen ist. In Schritt 762 wird ein Paketeintrag im Paketspeicher 430 erzeugt, um Daten bezogen auf das Paket zu speichern, wie beispielsweise den Strahlenzählwert und Kennungen der unterschiedlichen Mikropakete, die in dem Paket umfasst sind. In Schritt 764 wird der Paketspeicherindex 420 aktualisiert, um die Mikropakete widerzuspiegeln, die in dem Paket umfasst sind, so dass die Knoten-ID für den gekennzeichneten Knoten verwendet werden kann, um den Paketspeicherindex des Pakets zu bestimmen, das zum Paketspeicher 430 neu hinzugefügt wurde. In Schritt 768 wird ein Paketräumungsprozess durchgeführt, um das Paket zu räumen, was das Senden der Mikropakete innerhalb des Pakets an die passenden RACs umfasst.
  • Die obigen Figuren und die Erläuterung beziehen sich meistens auf eine Vorgehensweise, wobei die zentrale Paketeinheit 203 Mikropaket-IDs für die RACs 205208 unterhält, die Mikropaket-IDs 19 basierend auf dem Prüfen aktualisierter Daten zuweist, die von den RACs empfangen wurden, entscheidet, welche Knoten zu prüfen sind, und diese Daten durch Mikropaket-ID-Übertragung an die RACs kommuniziert. Als solches stellt dies eine vollständig zentralisierte Entscheidung eines Prüfens und einer Zuteilung von Mikropaket-IDs jedoch eine verteilte Strahlenpaketspeicherung dar. RACs benötigen keine inhaltsassoziative Datenstrukturen (wie beispielsweise CAMs, die hinsichtlich Siliziumgröße und Verarbeitungsleistung aufwändig zu implementieren sind) und die Mikropaket-IDs-Referenzorte in einem Speicher (z.B. 339), und diese Orte im Speicher speichern wiederum Strahlen-IDs (z.B. 327), die sich auf Orte in einem Speicher (z.B. 320) beziehen, die Definitionsdaten (z.B. Strahlendefinitionsdaten) speichern. Einige Implementierungen können vorsehen, dass alle Speicher in RACs vereinheitlicht sind (z.B. Speicher 320 und 339), jedoch andere physikalisch unterschiedliche Speicher für jeden Datentyp ermöglichen (Strahlendaten, Mikropaket-ID-zu-Strahlen-ID-Abbildungen, und können ebenfalls ein Caching von Knoten und/oder Geometriedaten vorsehen.)
  • 12 stellt demgemäß einen alternativen Prozess und Datenfluss durch RACs anschaulich dar. Ein Hauptunterschied zwischen diesem Beispiel und den oben beschriebenen Beispielen besteht darin, dass jede RAC ihre eigene Mikropaket-ID-freie Liste pflegt, Mikropaket-IDs gemäß einem Bedarf von ihrer lokalen Prüfanordnung zuweist und gemäß einem Prüffortschritt freigibt, wohingegen in den oben beschriebenen Beispielen diese Funktionalität von der zentralen Paketeinheit 203 zentral durchgeführt wurde. Da Mikropaket-IDs verkettet werden können (d.h. eine Mikropaket-ID kann sich mit einer anschließenden verbinden und so weiter), kann eine Sammlung von Strahlen, die auf Kreuzung gegen den gleichen Knoten oder Knoten von Beschleunigungsstruktur geprüft werden müssen, durch die erste Mikropaket-ID in einer derartigen Kette gekennzeichnet werden. Diese Mikropaket-ID wird von der RAC der zentralen Paketeinheit zusammen mit einem Strahlenzählwert und einer Knoten-ID gemeldet (falls der zentralen Paketeinheit nicht anderweitig verfügbar ist). Der Strahlenzählwert ermöglicht somit der zentralen Paketeinheit, zu verfolgen, wie viele Strahlen das Prüfen gegen einen bestimmten Knoten oder Knoten erwarten. In dieser Implementierung verwendet die zentrale Paketeinheit die Knoten-ID, um existierende Sammlungen (Pakete) für diese Knoten-ID zu kennzeichnen, und hängt die Mikropaket-ID entweder an eine existierende Sammlung (Paket) an, falls es Platz gibt, startet eine neue Sammlung (Paket), oder verkettet einen neuen Ort im Paketspeicher mit der existierenden Sammlung und fügt eine Mikropaket-ID zu dem neuen Ort in Paketspeicher hinzu. Die zentrale Paketeinheit würde somit diese “Berichte” von einer oder mehreren RACs abhängig von der Systemimplementierung bedienen.
  • In 12 umfasst eine RAC 902 einen Mikropaketspeicher 910, für den Mikropaket-IDs als ein Index verwendet werden können, um Strahlen-IDs 951 zu bestimmen, die einer Strahlenprüfwarteschlange 912 bereitgestellt werden können. Eine Prüfanordnung 914 ruft Strahlen-IDs von der Warteschlange 912 ab und kann auf Definitionsdaten der gekennzeichneten Strahlen aus dem Strahlenspeicher 918 zugreifen. Die Prüfanordnung 914 führt Strahlenverfolgungs-Operationen, wie beispielsweise Kreuzungsprüfen, an den Strahlen durch. Die Steuer/Pack-Einheit 920 pflegt die Mikropakete (d.h. welche Strahlen in welchen Mikropaketen umfasst sind) unter Verwendung der Mikropaket-freien-Liste 916. Die Ergebnisse des von der Prüfanordnung 914 durchgeführten Prüfens können zu weiteren zu prüfenden Strahlen führen, die in Mikropakete von der Steuer/Pack-Einheit 920 gepackt werden können, und die gepackten Mikropakete können zu dem Mikropaketspeicher 910 zurück geliefert werden, wenn sie zu verarbeiten sind (z.B. wenn die Mikropakete voll genug sind). Die Schnittstelle 924 ermöglicht der Steuer/Pack-Einheit 920 mit einem Paketspeicher 928 und einem Paketindexspeicher 932 zu kommunizieren. Eine Mikropaket-ID 953 und ein Strahlenzählwert 954 werden dem Paketspeicher 928 und eine Knoten-ID 956 wird dem Paketindex 932 bereitgestellt. Der Paketindex verwendet die Knoten-ID als einen Index, um eine Paket-ID zu bestimmen, welche dem Paketspeicher 928 bereitgestellt wird, so dass die Mikropaket-ID 953 und der Strahlenzählwert 954 in einem Paket im Paketspeicher 928 gespeichert werden können, dem die Paket-ID von dem Paketindex 932 bereitgestellt wird. Dies kann das Anhängen (d.h. Aktualisieren) der Daten an ein Paket in dem Paketspeicher 928, falls das Paket bereits in dem Paketspeicher 928 existiert, oder das Erzeugen des Pakets im Paketspeicher 928, falls das Paket nicht bereits in dem Paketspeicher 928 existiert, beinhalten.
  • Einige Implementierungen können eine Zwischenkonsolidierung der Daten von unterschiedlichen RACs bereitstellen. Beispielsweise können vor dem Indizieren Berichte, die sich auf die gleiche Knoten-ID beziehen, konsolidiert werden, wobei weniger getrennte Indizes einer inhaltsassoziativen Struktur erlaubt werden. Zählwerte können beibehalten oder zusammen addiert werden. Es sei bemerkt, dass diese Addition parallel mit dem Indizieren stattfinden kann. In einigen Implementierungen wird es einen einzigen Zählwert für eine einzige Knoten-ID geben, so dass mehrere Additionen auftreten würden, falls Meldungen getrennt addiert würden, womit in einigen Implementierungen eine parallele Zwischenadditionen eine Verringerung in einer Gasamtzykluszeit ermöglichen würden. Es sei ebenfalls bemerkt, dass die Zählwerte keine reinen Strahlzählwerte von Anzahlen von Mikropaket-IDs sein können. Beispielsweise kann jede RAC angeben, wie viele Mikropaket-IDs mit einer bestimmten gemeldeten Mikropaket-ID verbunden sind. Falls ein Mikropaketeintrag im RAC-Speicher beispielsweise 16 Strahlen-IDs speichern kann, dann wird der Zählwert nach oben verfälscht (biased), falls teilweise volle Mikropakete gemeldet werden. Ein Runden nach oben oder unten kann implementiert werden. Da diese Zählwerte primär für Räumungslogik verwendet werden können, wäre zu erwarten, dass sich die gleiche Verfälschung (bias) über alle Mikropakete effektiv aufwiegen würde. Diese Erwartung kann empirisch geprüft und Einzelheiten der Implementierung demgemäß bestimmt werden.
  • 13 stellt einen Prozess anschaulich dar, der durch ein System implementiert wird, das gemäß 12 arbeitet (wobei 10101024 von RACs und 10261030 von einer zentralen Paketeinheit implementiert werden). In Schritt 1010 prüft die Prüfanordnung 914 einen oder mehrere Strahlen auf Kreuzung mit einem Knoten einer Beschleunigungsstruktur. Wenn das Prüfen abgeschlossen ist, werden in Schritt 1024 die Mikropaket-IDs für die Strahlen, die geprüft wurden, zu dem freien Stapel 916 zurückgegeben, so dass sie erneut für andere Strahlen verwendet werden können. Des Weiteren werden im Anschluss an Schritt 1010 in Schritt 1012 Kreuzungstreffer pro Kindknoten zusammen gepackt (die Kindknoten sind Kinder des Knoten, der in Schritt 1010 in der Beschleunigungsstruktur geprüft wurde). In Schritt 1014 zählt die Steuereinheit die Treffer pro Kindknoten von den Strahlen, die geprüft wurden. In Schritt 1016 werden Mikropaket-IDs zum Speichern der Strahlen-IDs für jeden Kindknoten angefordert. In Schritt 1018 werden Mikropaket-IDs verbunden, wo es mehrere Mikropakete für einen Kindknoten gibt. In Schritt 1020 wird die erste Mikropaket-ID für jeden Kindknoten der zentralen Paketeinheit gemeldet. Dann werden in Schritt 1022 die Mikropaket-IDs für die Kindknoten aus dem freien Stapel 916 entfernt. In Schritt 1026 korreliert die zentrale Paketeinheit die empfangene Mikropaket-ID mit der Knoten-ID. In Schritt 1028 wird der Paketspeicher 928 (z.B. aktualisiert oder erzeugt) gemäß der Mikropaket-ID gepflegt, und in Schritt 1030 wird der Zählwert, welcher der Knoten-ID oder einem Paket in dem Paketspeicher 928 zugeordnet ist, gepflegt (z.B. aktualisiert oder erzeugt).
  • 14 stellt eine Variation an 1213 anschaulich dar. 14 zeigt eine RAC 205, wobei die anderen RACs eine ähnliche Struktur aufweisen können. In 14 unterhält jede RAC einen inhaltsassoziativen Speicher, der Mikropaket-IDs mit Knoten-IDs indiziert. Jede RAC meldet Ergebnisse des Prüfen von Knoten-ID(s) als einen Zählwert von Strahlen/Mikropaketen und einer zugeordneten Knoten-ID oder -ID(s). Die zentrale Paketeinheit gibt durch Aussenden von Knoten-IDs an, welche Knotendefinitionsdaten vorabgerufen werden. Die Knoten-IDs werden dann für das inhaltsassoziative Indizieren verwendet. Diese Implementierung ermöglicht der zentralen Paketeinheit, Zählwerte dafür aufzuweisen, wie viele Strahlen (einen) bestimmte(n) Knoten der Beschleunigungsstruktur durchlaufen müssen.
  • Die Knotendaten können sich in einem vorübergehenden Cache oder einer ähnlichen Struktur aufhalten, bis sie von all den RACs vollständig konsumiert sind, die einen Zugriff auf dieselben erfordern. Diese Struktur kann Lesezugriff-Zählwerte verfolgen, um die Knotendaten freizugeben, wenn sie nicht länger benötigt werden. Alternativ könnte die Zentrale die Knotendaten rundsenden und dann könnte die RAC relevante Knotendaten in lokalen Speichern behalten.
  • Wie in 14 gezeigt, umfasst die RAC 205 eine Schnittstelle 339 zum Empfangen von Prüfzuständen, eine Steuereinheit 337 zum Steuern der RAC 205, einen Mikropaketspeicher 302, der indiziert werden kann, um Strahlen-IDs 327 auszugeben, die verwendet werden können, um einen Strahlenspeicher 320 zu indizieren, um zu prüfende Strahlen zu bestimmen. Zu prüfende Strahlen werden in dem Fertige-Strahlen-Speicher 326 gespeichert, der von der Prüferanordnung 330 abgefragt werden kann, um zu prüfende Strahlen zu bestimmen (z.B. von den Ausführungseinheiten 331333 auf Kreuzung geprüft). Ein Knoten-ID/Paket-ID-Indexspeicher 306 kann eine eingegebene Knoten-ID als einen Index verwenden, um eine Mikropaket-ID zu bestimmen, die als ein Index dem Mikropaketspeicher 302 über einen Puffer 304 bereitgestellt wird.
  • 15 stellt eine verteilte Führen/Folgen-Architektur anschaulich dar, die kein zentralisiertes Element aufweist, die Knoten-IDs zugeordnete Zählwerte verfolgt. In einem Beispiel weisen RACs 12011203 ein Round-Robin-Token auf, das angibt, welche RAC dazu kommt, zu entscheiden, welche Verarbeitung als nächstes durchzuführen ist. Implementierungen müssen nicht notwendigerweise RACs veranlassen, streng dem zu folgen, was die Token-haltende RAC tut. Stattdessen kann jede RAC die Informationen als einen Hinweis verwenden, welche Daten in einem gemeinsam genutzten Cache oder einer Cache-Hierarchie verfügbar sein können.
  • 16 stellt Beispielaspekte eines Prozesses vor, der von einem System gemäß 15 implementiert werden kann. In Schritt 1250 wird das Token an eine RAC (oder einen “Prüfer”) weitergeleitet. In Schritt 1252 kennzeichnet die aktuelle RAC (z.B. der Prüfer 1201) die zu prüfenden Mikropaket-IDs und die zugeordneten Knoten-IDs der zu prüfenden Knoten gegen die in dem Mikropaket bezeichneten Strahlen. In Schritt 1254 werden bezeichneten Knoten-IDs auf der Zwischenverbindung 121 an die anderen Prüfer (z.B. 1202 und 1203) rundgesendet. In Schritt 1256 prüft der Prüfer 1201 die Strahlen mit dem(den) Knoten. In Schritt 1257 wird das Token an einen anderen Prüfer, z.B. den Prüfer 1202, weitergegeben, der dann der “aktuelle Prüfer” wird. Das Verfahren geht zu Schritt 1252 zurück und wiederholt sich für den Prüfer 1202. Des Weiteren aktualisiert im Anschluss an Schritt 1257 in Schritt 1258 der Prüfer 1201 lokal seinen Strahlenstatus. In Schritt 1260 verwenden die anderen Prüfer (1202 und 1203) die rundgesendeten Knoten-IDs, um Mikropakete nachzuschlagen, und in Schritt 1262 steuern die Prüfer 1202 und 1203 den zeitlich Ablauf des Prüfens in Abhängigkeit von den Ergebnissen des Nachschlagens. In Schritt 1264 werden Formdaten aus der Speicherhierarchie 1210 abgerufen, um von den Prüfern 1202 und 1203 geprüft zu werden.
  • 17 stellt eine alternative 16 anschaulich dar. Ein hauptsächlicher Unterschied besteht darin, dass in 17 eine RAC Daten aus einer Speicherhierarchie abrufen und sie an die anderen RACs weiterleiten kann, anstatt von jeder RAC die gleichen Daten zu erhalten. In Schritt 1250 wird das Token an eine RAC (oder einen “Prüfer”) weitergeleitet. In Schritt 1252 bezeichnet die aktuelle RAC (z.B. der Prüfer 1201) zu prüfende Mikropaket-IDs und die zugeordneten Knoten-IDs der zu prüfenden Knoten gegen die im Mikropaket gekennzeichneten Strahlen. In Schritt 1254 werden bezeichnete Knoten-IDs auf der Zwischenverbindung 121 zu den anderen Prüfern (z.B. 1202 und 1203) rundgesendet (gebroadcastet). In Schritt 1256 prüft der Prüfer 1201 die Strahlen mit dem(den) Knoten. In Schritt 1258 aktualisiert der Prüfer 1201 seinen Strahlenstatus lokal. In Schritt 1261 verwenden die anderen Prüfer (1202 und 1203) die rundgesendeten Knoten-IDs, um Mikropakete nachzuschlagen und die Knotendaten zwischen zu speichern, und in Schritt 1262 planen bzw. steuern die Prüfer 1202 und 1203 den zeitlichen Ablauf des Prüfens in Abhängigkeit von den Ergebnissen des Nachschlagens. In Schritt 1265 werden die zwischengespeicherten Knotendaten für das Prüfen von den Prüfern 1202 und 1203 verwendet.
  • In Systemen, die 17 implementieren, kann es wünschenswert sein, festzulegen, dass lediglich ein oder eine Auswahl von RACs Zugriff auf die Speicherhierarchie aufweist, und tatsächlich, wenn RACs, die keinen Zugriff auf die Speicherhierarchie aufweisen, einen zu prüfenden Knoten-ID bestimmen, wird eine RAC, die einen derartigen Zugriff aufweist, für das Erhalten dieser Daten verantwortlich sein. Eine derartige Vorgehensweise kann einer Speicherhierarchie ermöglichen, weniger Ports zu RACs aufzuweisen, und einer lokalen Zwischenverbindung ermöglichen, um diesen Austausch/Nutzen von Daten zu handhaben.
  • 18 stellt anschaulich dar, dass eine gegebene RAC eine Warteschlange, ein FIFO oder eine andere Datenstruktur aufweisen kann, die Knotenkennungen zwischenspeichert, die auf einem Bus oder einer anderen Zwischenverbindung zwischen den RACs von 15 übertragen wurden. Jede RAC würde dann eine inhaltsassoziative Suche durchführen, um Informationen über ihren Status für diese Knoten-ID zu erhalten. Beispielsweise können derartige Informationen eine Mikropaket-ID (Kette davon) sowie auch einen Zählwert von Mikropaket-IDs oder Strahlen umfassen, die eine Verarbeitung relativ zu dieser Knoten-ID erwarten. In einigen Fällen kann es keine Strahlen in einer bestimmten RAC geben, die einer Knoten-ID entsprechen. Eine derartige Knoten-ID könnte fallen gelassen werden. In einigen Situationen könnte sie gepuffert jedoch zugunsten anderen Knoten-IDs entpriorisiert werden, die durchzuführende Arbeiten oder mehr durchzuführende Arbeiten aufweisen. Ähnliche Funktionen können für Knoten-IDs implementiert werden, die relativ wenig durchzuführende Arbeiten aufweisen.
  • 19A und 19B stellen Beispiele von zwei unterschiedlichen Pipelineprozessen anschaulich dar. In einem Beispiel kann das Indizieren von Tags mit der Knoten-ID (oder Teil davon) ebenfalls einen Zählwert oder eine Angabe eines Arbeitsaufwands an der RAC erzeugen, der noch mit dieser Knoten-ID als Teil des erzeugten Ergebnisses erledigt werden muss. Alternativ kann ein Indizieren einer unterschiedlichen Struktur parallel, vor oder nach dem Indizieren der Mikropaket-ID stattfinden. In einigen Implementierungen wird, indem man einfach eine Mikropaket-ID aus dem Indizieren ausgeben lässt, eine Zeitablaufsteuerung zum Prüfen bewirkt, so dass die Verfolgung von gesamten Mikropaketen oder Strahlen für diese Knoten-ID nicht durchgeführt wird. 19A zeigt eine In-Reihe-Verarbeitung und 19B zeigt einen Neuordnungsschritt, der einen Zählwert als eine Eingabe verwenden kann.
  • In sämtlichen der obigen Beispiele ist es nicht notwendigerweise erforderlich, die Gesamtheit einer Knoten-ID bereitzustellen, noch ist es notwendig, den Durchquerungsfortschritt mit einer Granularität der Knoten durch Knotenprüfen zu verfolgen. Stattdessen können Sammlungen von Strahlen von der Knotenkennung verfolgt werden, die sich auf Leaflets einer Beschleunigungsstruktur beziehen, die eine relativ kleine Anzahl von Elementen aufweisen, und RACs durchlaufen das gesamte Leaflet beim Einleiten des Prüfens. In manchen Implementierungen kann ein Leaflet auf eine Cache-Zeile der Implementierung oder irgendeine Anzahl von Cache-Zeilen abgestimmt werden. Manche Implementierungen können allen Kindern eines bestimmten Knotens ermöglichen, von weniger als allen Bits einer Knoten-ID referenziert zu werden, und das Bereitstellen einer gegebenen Anzahl von Bits einer Knoten-ID kann angeben, dass alle Kinder zu prüfen sind. Daten, welche die Kindknoten darstellen, können angeordnet sein, um Situationen anzugeben, wobei weniger als alle mögliche Slots der Beschleunigungsstruktur Kindknoten in einer speziellen Situation aufweisen.
  • Mikropaket-ID(s)-Referenzen, Knotenkennungen und Strahlenkennungen können bereichsgemäß komprimiert werden.
  • In einer Vorgehensweise werden die Strukturen von 1 mit Verarbeitungselementen in einer GPU wie folgt verbunden. Eine GPU weist programmierbare Schattierungselemente auf. Eine RAC (z.B. 205) kann einem oder mehreren Schattierungselementen zugeordnet sein. In einem Beispiel kann ein Schattierungs-Cluster (z.B. Cluster 221 bis 224) eine 1:1 Korrespondenz mit einer RAC aufweisen (z.B. jeweilige RACs 205 bis 208). Der Schattierungs-Cluster (z.B. 221) und die RAC (z.B. 205) können in geeigneter Weise dimensioniert sein, um für Arbeitsbelastungen/Schattierung der erwarteten Strahlenverarbeitung ausgeglichen zu sein. Diese Schattierungselemente können zu verarbeitende Strahlen emittieren. Von einem bestimmten Schattierungs-Cluster emittierte Strahlen werden der RAC bereitgestellt, die diesem Cluster zugeordnet ist. Definitionsdaten für diese Strahlen werden anfangs gespeichert und bleiben im lokalen RAC-Speicher für die Lebensdauer des Strahls. Falls eine Kreuzung für einen Strahl durch die RAC 205 gefunden wird, wird sie durch den zugeordneten Cluster 221 schattiert. Eine übergeordnete Steuerung kann entscheiden, welche Teile eines gerenderten Bildrahmens an welche Cluster/RACs zu senden sind, als eine übergeordnete Steuerung über die RAC-Verwendung. Die Rechen-Cluster (z.B. 221) können Schattierer für sowohl Rasterisierung als auch Strahlenschattierung ausführen. Die übergeordnete Arbeitsablaufsteuerung kann Probleme der Schattierungskomplexität sowie auch der Statusinformationen für sowohl Schattierungs-Cluster als auch zugeordnete RACs berücksichtigen. Steuersignale können von der übergeordneten Steuerung an RACs bereitgestellt werden, um die Strahlenschattierungslast opportunistisch zu erhöhen. Beispielsweise kann durch Priorisieren von Mikropaket-IDs, die sich auf Blattknoten einer Beschleunigungsstruktur beziehen, die zu verarbeitende Geometrie definiert, mehr Strahlenschattierungsarbeit für den Cluster erzeugt werden, wobei die Umkehrung ebenfalls gilt.
  • Aspekte der Offenbarung wurden mit Bezug auf eine Arbeitsbelastung von Graphiken und genauer gesagt auf Graphiken beschrieben, die Strahlenverfolgung verwenden. Aspekte der Offenbarung können auf unterschiedliche Arbeitsbelastungen angewendet werden. Derartige Arbeitsbelastungen können andere Graphikarbeitsbelastungen oder Arbeitsbelastungen für andere Zwecke, wie beispielsweise Mustererkennung und Datenbanksuche, sein. Ein weiteres Beispiel einer Graphikarbeitsbelastung ist Photonen-Abfrageauflösung (engl. photon query resolution). Beispielsweise können RACs stattdessen (oder zusätzlich) Photonenabfragen bedienen, die k(k >= 1) Photonen nächstliegend einem Ort (Punkt im Raum) zurückgeben können. Dies kann wiederum auf eine Abfrage verallgemeinert werden, um k Elemente eines Satzes zu kennzeichnen, die am ähnlichsten zu einem spezifizierten Speicher, oder zu einem spezifizierten Satz von Charakteristika oder zu Werten für einen Satz von Parametern sind, die einen Suchraum parametrisieren.
  • In einigen Implementierungen arbeiten die Prüfanordnungen in SIMD, so dass jede Zelle der Anordnung die gleiche Verarbeitung an unterschiedlichen Elementen eines Satzes durchführt. Maskierungstechniken können verwendet werden, um eine SIMD-Verarbeitung partieller Breite zu erreichen. In einigen Situationen wird eine Eingabe in die Prüfanordnung unter allen Zellen konstant sein, während eine andere Eingabe variieren wird. In anderen Situationen können sich alle Eingaben unterscheiden, obwohl eine derartige Implementierung mehr Eingangsbandbreite erfordern würde.
  • Während Knoten-IDs als kennzeichnende Elemente einer Beschleunigungsstruktur beschrieben wurden, können Knoten-IDs ebenfalls Punkte in einem auszuführenden Code oder Modul eines Codes oder einer bestimmten Untermenge von Schlüsseln in einer Datenbank (einen Bereich von Werten) oder andere Untermengen eines zu suchenden Raums oder einer auszuführenden Arbeitsbelastung kennzeichnen.
  • Implementierungen können unterschiedliche Anzahlen von RACs aufweisen, und/oder RACs können unterschiedliche Anzahlen von Prüfzellen in ihren Anordnungen aufweisen. Bandbreite und Größen von anderen Strukturen können demgemäß dimensioniert werden.
  • Der Klarheit wegen werden bei der Beschreibung Daten für einen bestimmten Typ von Objekt, z.B. ein Grundelement (z.B. Koordinaten für drei Eckpunkte eines Dreiecks), häufig einfach als das Objekt selber beschrieben, statt auf die Daten für das Objekt zu verweisen. Falls beispielsweise auf “Abrufen eines Grundelements” verwiesen wird, sei zu verstehen, dass Daten geholt werden, die dieses Grundelement darstellen.
  • 20 zeigt ein Computersystem, bei dem die hier beschriebenen Graphikverarbeitungssysteme implementiert werden können. Das Computersystem umfasst eine CPU 2002, eine GPU 2004, einen Speicher 2006 und andere Vorrichtungen 2008, wie beispielsweise eine Anzeige 2010, einen Lautsprecher 2012 und eine Kamera 2014. Die Bauteile des Computersystems können miteinander über einen Kommunikationsbus 2016 kommunizieren. Die hier beschriebenen Systeme können auf der GPU 2004 implementiert werden.
  • Die hier beschriebenen Renderingsysteme werden in den Figuren gezeigt, wie sie eine Anzahl von Funktionsblöcken umfassen. Dies ist lediglich schematisch und nicht dazu bestimmt, eine strenge Teilung zwischen unterschiedlichen Logikelementen von derartigen Entitäten zu definieren. Jeder Funktionsblock kann in irgendeiner geeigneten Art und Weise bereitgestellt werden. Es sei zu verstehen, dass hier beschriebene dazwischenliegende Werte, wie durch ein Renderingsystem gebildet, nicht von dem Renderingsystem 26 an irgendeinem Punkt physisch erzeugt werden müssen und lediglich Logikwerte darstellen können, die zweckmäßigerweise die Verarbeitung beschreiben, die von dem Renderingsystem zwischen seinem Eingang und Ausgang durchgeführt wird.
  • Die hier beschriebenen Renderingsysteme können in Hardware auf einer integrierten Schaltung verkörpert sein. Die hier beschriebenen Renderingsysteme können ausgelegt sein, um irgendeines der hier beschriebenen Verfahren durchzuführen. Im Allgemeinen können irgendwelche der oben beschriebenen Funktionen, Verfahren, Techniken oder Bauteile in Software, Firmware, Hardware (z.B. feste Logikschaltungen) oder irgendeine Kombination davon implementiert sein. Die Begriffe “Modul”, “Funktionalität”, “Bauteil”, “Element”, “Einheit”, “Block” und “Logik” können hier verwendet werden, um Software, Firmware, Hardware oder irgendeine Kombination davon allgemein darzustellen. Im Fall einer Softwareimplementierung stellen das Modul, die Funktionalität, das Bauteil, das Element, die Einheit, der Block oder die Logik einen Programmcode dar, der die spezifizierten Aufgaben durchführt, wenn auf einem Prozessor ausgeführt. Die hier beschriebenen Algorithmen und Verfahren könnten von einem oder mehreren Prozessoren durchgeführt werden, die einen Code ausführen, der den(die) Prozessor(en) veranlasst, die Algorithmen/Verfahren durchzuführen. Beispiele eines computerlesbaren Speichermediums umfassen einen Direktzugriffsspeicher (RAM), einen Nurlesespeicher (ROM), eine optische Platte, einen Flash-Speicher, einen Festplattenspeicher und andere Speichervorrichtungen, die magnetische, optische und andere Techniken verwenden können, um Anweisungen oder andere Daten zu speichern und die mittels einer Maschine abgerufen werden können.
  • Die Begriffe Computerprogrammcode und computerlesbare Anweisungen, wie hier verwendet, beziehen sich auf eine Art von ausführbarem Code für Prozessoren, einschließlich eines in einer Maschinensprache, einer interpretierten Sprache oder einer Skriptsprache ausgedrückten Codes. Ein ausführbarer Code umfasst Binärcode, Maschinencode, Bytecode, Code, ein eine integrierte Schaltung beschreibender Code (wie beispielsweise eine Hardwarebeschreibungssprache oder Netzliste) und Code, der in einem Programmiersprachen-Code, wie beispielsweise C, Java oder OpenCL, ausgedrückt ist. Ein ausführbarer Code kann beispielsweise irgendeine Art von Software, Firmware, Skript, Modul oder Bibliothek sein, der, wenn er an einer virtuellen Maschine oder anderen Softwareumgebung geeignet ausgeführt, verarbeitet, interpretiert, kompiliert oder ausgeführt wird, einen Prozessor des Computersystems veranlasst, bei dem der ausführbare Code unterstützt wird, die durch den Code spezifizierten Aufgaben durchzuführen.
  • Ein Prozessor, ein Computer oder ein Computersystem kann irgendeine Art von Vorrichtung, Maschine oder dedizierte Schaltung, oder Sammlung oder Teil davon mit Verarbeitungsfähigkeit sein, so dass er/sie Anweisungen ausführen kann. Ein Prozessor kann irgendeine Art von Allzweck- oder dedizierter Prozessor, wie beispielsweise eine CPU, eine GPU, ein System-auf-Chip, eine Zustandsmaschine, ein Medienprozessor, eine anwendungsspezifische integrierte Schaltung (ASIC), eine programmierbare logische Anordnung, ein Field Programmable Gate Array (FPGA) oder dergleichen sein. Ein Computer oder Computersystem kann einen oder mehrere Prozessoren umfassen.
  • Es ist ebenfalls beabsichtigt, Software einzuschließen, die eine Konfiguration von Hardware definiert, wie hier beschrieben, wie beispielsweise HDL(Hardwarebeschreibungssprache)-Software, wie zum Gestalten von integrierten Schaltungen oder zum Auslegen von programmierbaren Chips verwendet wird, um gewünschte Funktionen auszuführen. Das heißt, es kann ein computerlesbares Speichermedium bereitgestellt werden, das darauf codiert einen computerlesbaren Programmcode in der Form eines Definitionsdatensatzes für eine integrierte Schaltung aufweist, der, wenn in einem Herstellungssystem für eine integrierte Schaltung verarbeitet, das System auslegt, um ein Renderingsystem herzustellen, das ausgelegt ist, um eines der hier beschriebenen Verfahren durchzuführen, oder um ein Renderingsystem herzustellen, das eines der hier beschriebenen Geräte umfasst. Ein Definitionsdatensatz für eine integrierte Schaltung kann beispielsweise eine Beschreibung für eine integrierte Schaltung sein.
  • Ein Definitionsdatensatz für eine integrierte Schaltung kann in der Form eines Computercodes, beispielsweise als eine Netzliste, eines Codes zum Auslegen eines programmierbaren Chips, als eine Hardwarebeschreibungssprache sein, die eine integrierte Schaltung auf irgendeinem Niveau, einschließlich als RTL(register transfer level)-Code, als High-Level-Schaltungsdarstellung, wie beispielsweise Verilog oder VHDL, und als Low-Level-Schaltungsdarstellung, wie beispielsweise OASIS (RTM) und GDSII, definiert. Übergeordnete Darstellungen, die eine integrierte Schaltung logisch definieren (wie beispielsweise RTL), können bei einem Computersystem verarbeitet werden, das zum Erzeugen einer Herstellungsdefinition einer integrierten Schaltung im Kontext einer Softwareumgebung ausgelegt ist, die Definitionen von Schaltungselementen und Regeln zum Kombinieren dieser Elemente umfasst, um die Herstellungsdefinition einer integrierten Schaltung zu erzeugen, die so durch die Darstellung definiert ist. Wie es typischerweise der Fall mit Software ist, die auf einem Computersystem ausgeführt wird, um eine Maschine zu definieren, können ein oder mehrere dazwischenliegende Benutzerschritte (z.B. Bereitstellen von Befehlen, Variablen usw.) erforderlich sein, damit ein Computersystem, das zum Erzeugen einer Herstellungsdefinition einer integrierten Schaltung ausgelegt ist, einen Code auszuführt, der eine integrierte Schaltung definiert, um die Herstellungsdefinition dieser integrierten Schaltung zu erzeugen.
  • Ein Beispiel der Verarbeitung eines Definitionsdatensatzes für eine integrierte Schaltung an einem Herstellungssystem für eine integrierte Schaltung, um das System auszulegen, um ein Renderingsystem herzustellen, wird nun mit Bezug auf 21 beschrieben.
  • 21 zeigt ein Beispiel eines Herstellungssystems für eine integrierte Schaltung (IC) 2102, das ein Layout-Verarbeitungssystem 2104 und ein Erzeugungssystem für eine integrierte Schaltung 2106 umfasst. Das IC-Herstellungssystem 2102 ist ausgelegt, einen IC-Definitionsdatensatz zu empfangen (z.B. Definieren eines Renderingsystems, wie in irgendeinem der hier beschriebenen Beispiele), den IC-Definitionsdatensatz zu verarbeiten und ein IC gemäß dem IC-Definitionsdatensatz zu erzeugen (z.B. der ein Renderingsystem verkörpert, wie in irgendeinem der hier beschriebenen Beispiele). Die Verarbeitung des IC-Definitionsdatensatzes konfiguriert das IC-Herstellungssystem 2102, eine integrierte Schaltung herzustellen, die ein Renderingsystem verkörpert, wie in einem der hier beschriebenen Beispiele.
  • Das Layout-Verarbeitungssystem 2104 ist ausgelegt, um den IC-Definitionsdatensatz zu empfangen und zu verarbeiten, um ein Schaltungs-Layout zu bestimmen. Verfahren zum Bestimmen eines Schaltungs-Layouts aus einem IC-Definitionsdatensatz sind im Stand der Technik bekannt und können beispielsweise ein Synthetisieren eines RTL-Codes beinhalten, um eine Darstellung auf Gatterebene einer zu erzeugenden Schaltung, z.B. was logische Bauteile (z.B. NAND, NOR, AND, OR, MUX und FLIP-FLOP-Bauteilen) angeht, zu bestimmen. Ein Schaltungs-Layout kann von der Darstellung auf Gatterebene der Schaltung durch Bestimmen von Positionsinformation für die logischen Bauteile bestimmt werden. Dies kann automatisch oder mit Benutzerbeteiligung durchgeführt werden, um das Schaltungs-Layout zu optimieren. Wenn das Layout-Verarbeitungssystem 2104 das Schaltungs-Layout bestimmt hat, kann es eine Schaltungs-Layout-Definition an das IC-Erzeugungssystem 2106 ausgeben. Eine Schaltungs-Layout-Definition kann beispielsweise eine Beschreibung für ein Schaltungs-Layout sein.
  • Das IC-Erzeugungssystem 2106 erzeugt ein IC gemäß der Schaltungs-Layout-Definition, wie in der Technik bekannt ist. Beispielsweise kann das IC-Erzeugungssystem 2106 einen Halbleitervorrichtung-Fertigungsprozess implementieren, um das IC zu erzeugen, der eine Mehrschrittfolge von photolithographischen und chemischen Verarbeitungsschritten beinhalten kann, während derselben elektronische Schaltungen allmählich auf einem Wafer erzeugt werden, der aus einem Halbleitermaterial hergestellt ist. Die Schaltungs-Layout-Definition kann in der Form einer Maske sein, die in einem lithographischen Prozess zum Erzeugen eines IC gemäß der Schaltungsdefinition verwendet werden kann. Alternativ kann die dem IC-Erzeugungssystem 2106 bereitgestellte Schaltungs-Layout-Definition in der Form eines computerlesbaren Codes sein, den das IC-Erzeugungssystem 2106 verwenden kann, um eine geeignete Maske zum Gebrauch bei der Erzeugung eines IC zu bilden.
  • Die von dem IC-Herstellungssystem 2102 durchgeführten unterschiedlichen Prozesse können alle in einem Ort, z.B. von einem Teilnehmer, implementiert werden. Alternativ kann das IC-Herstellungssystem 2102 ein verteiltes System sein, so dass einige der Prozesse an unterschiedlichen Orten und von unterschiedlichen Teilnehmern durchgeführt werden können. Beispielsweise können einige der folgenden Stufen: (i) Synthetisieren des RTL-Codes, der den IC-Definitionsdatensatz darstellt, um eine Darstellung auf Gatterebene einer zu erzeugenden Schaltung zu bilden, (ii) Erzeugen eines Schaltungs-Layouts basierend auf der Darstellung auf Gatterebene, (iii) Bilden einer Maske gemäß dem Schaltungs-Layout und (iv) Anfertigen einer integrierten Schaltung unter Verwendung der Maske, in unterschiedlichen Orten und/oder von unterschiedlichen Teilnehmern durchgeführt werden.
  • In anderen Beispielen kann eine Verarbeitung des Definitionsdatensatzes für eine integrierte Schaltung bei einem Herstellungssystem für eine integrierte Schaltung das System auslegen, um ein Renderingsystem herzustellen, ohne dass der IC-Definitionsdatensatz verarbeitet wird, um ein Schaltungs-Layout zu bestimmen. Beispielsweise kann ein Definitionsdatensatz für eine integrierte Schaltung die Konfiguration eines rekonfigurierbaren Prozessors definieren, wie beispielsweise eines FPGA, und die Verarbeitung dieses Datensatzes kann ein IC-Herstellungssystem auslegen, um einen rekonfigurierbaren Prozessor zu erzeugen, der diese definierte Konfiguration aufweist (z.B. durch Laden von Konfigurationsdaten in den FPGA).
  • In einigen Ausführungsformen kann ein Herstellungsdefinitionsdatensatz für integrierte Schaltung, wenn in einem Herstellungssystem für eine integrierte Schaltung verarbeitet, ein Herstellungssystem für eine integrierte Schaltung veranlassen, eine Vorrichtung zu erzeugen, wie hier beschrieben. Beispielsweise kann die Konfiguration eines Herstellungssystems für eine integrierte Schaltung in der oben beschriebenen Art und Weise mit Bezug auf 21 mittels eines Herstellungsdefinitionsdatensatz für eine integrierte Schaltung veranlassen, dass eine Vorrichtung, wie hier beschrieben, hergestellt wird.
  • In einigen Beispielen könnte ein Definitionsdatensatz für eine integrierte Schaltung Software umfassen, die auf Hardware läuft, die bei dem Datensatz oder in Kombination mit Hardware definiert ist, die bei dem Datensatz definiert ist. In dem in 21 gezeigten Beispiel kann das IC-Erzeugungssystem ferner von einem Definitionsdatensatz für eine integrierte Schaltung ausgelegt sein, um beim Herstellen einer integrierten Schaltung Firmware auf diese integrierte Schaltung gemäß einem Programmcode zu laden, der bei dem Definitionsdatensatz für eine integrierte Schaltung definiert ist, oder anderweitig einen Programmcode mit der integrierten Schaltung zur Verwendung mit der integrierten Schaltung bereitstellt.
  • Die Anmelderin offenbart hiermit in Isolation jedes hier beschriebene einzelne Merkmal und jede beliebige Kombination aus zwei oder mehr derartigen Merkmalen in dem Ausmaß, dass solche Merkmale oder Kombinationen auf der Basis der vorliegenden Beschreibung als Ganzes angesichts des üblichen allgemeinen Wissens eines Fachmanns ausgeführt werden können, ungeachtet dessen, ob solche Merkmale oder Kombinationen von Merkmalen etwaige hier offenbarte Probleme lösen. Angesichts der vorausgegangenen Beschreibung ist es für einen Fachmann offensichtlich, dass innerhalb des Schutzbereichs der Erfindung verschiedenartige Modifikationen vorgenommen werden können.

Claims (20)

  1. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen, umfassend: bei jeder einer Mehrzahl von Recheneinheiten, Verarbeiten von Strahlen auf Kreuzung mit Knoten einer Beschleunigungsstruktur, wobei jeder Knoten der Beschleunigungsstruktur einer jeweiligen Knotenkennung zugeordnet ist, und jede der Recheneinheiten einen jeweiligen Strahlendefinitionsspeicher umfasst, der Definitionsdaten für Strahlen speichert, Ausgeben einer Knotenkennung und einer Anzahl von Strahlen; an einem zentralen Sammler, der mit jeder der Mehrzahl von Recheneinheiten gekoppelt ist, Empfangen der Knotenkennung und der Anzahl von Strahlen, Zuteilen einer oder mehrerer Strahlenpaketkennungen basierend auf der Anzahl von Strahlen, Zurückgeben der zugeteilten einen oder mehreren Strahlenpaketkennungen an die Recheneinheit, die die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, Aktualisieren oder Erzeugen, in einem Paketspeicher, einer Sammlung von Strahlenpaketkennungen, die durch eine Knotenkennung indiziert wurden, die von der empfangenen Knotenkennung bestimmt wurde, um die zugeteilte eine oder mehrere Strahlenpaketkennungen zu umfassen, um dadurch den Knoten, der durch die empfangene Knotenkennung gekennzeichnet wurde, der zugeteilten einen oder mehreren Strahlenpaketkennungen zuzuordnen, Empfangen durch die jeweilige Recheneinheit, welche die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, der von dem zentralen Sammler zugeteilten Strahlenpaketkennungen, und Speichern in einem Strahlenpaketindexspeicher lokal zu dieser Recheneinheit, von Daten, die eine Kennung jedem Strahl zuordnen, der in der Anzahl von Strahlen gezählt wurde, mit wenigstens einer der Strahlenpaketkennungen.
  2. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß Anspruch 1, ferner umfassend: Bestimmen, durch die jeweilige Recheneinheit, jeder der Strahlenkennungen gemäß einer Adresse im Strahlendefinitionsspeicher, der Definitionsdaten für diesen Strahl speichert oder speichern wird.
  3. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß Anspruch 2, wobei, einmal zugewiesen, die Strahlenkennungen während der Verarbeitung jedes Strahls invariant sind und jeder Strahl Definitionsdaten in einem einzigen Strahlendefinitionsspeicher unter allen der Recheneinheiten aufweist.
  4. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Ausführen eines Schattierers durch einen mit der jeweiligen Recheneinheit gekoppelten Allzweck-Prozessor, der die von dieser Recheneinheit verarbeiteten Strahlen erzeugt.
  5. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Bestimmen durch den zentralen Sammler jeder Strahlenpaketkennung gemäß einem Ort des Eintrags im Strahlenpaketindexspeicher der Recheneinheit, der Daten speichern wird, welche die Strahlenkennungen der einen oder mehreren Paketkennungen zuordnen.
  6. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Auswählen von zu verarbeitenden Strahlen an einer oder mehreren der Recheneinheiten durch ein Verfahren, das umfasst: Indizieren des Strahlenpaketindexspeichers dieser Recheneinheit unter Verwendung einer von dem zentralen Sammler empfangenen Strahlenpaketkennung, um eine Liste von Strahlenkennungen zu erhalten, Verwenden der Strahlenkennungen, um Definitionsdaten für Strahlen, die von der Liste von Strahlenkennungen gekennzeichnet wurden, aus dem Strahlendefinitionsdatenspeicher dieser Recheneinheit zu erhalten, und Prüfen der bezeichneten Strahlen auf Kreuzung unter Verwendung der Definitionsdaten mit dem Knoten der Beschleunigungsstruktur, welcher der Strahlenpaketkennung von dem zentralen Sammler zugeordnet wurde.
  7. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Auswählen, durch den zentralen Sammler, einer oder mehrerer der Sammlungen von Strahlenpaketkennungen und Ausgeben der Strahlenpaketkennungen in der einen oder mehreren ausgewählten Sammlungen an die Mehrzahl von Recheneinheiten und Bestimmen, bei jeder der Recheneinheiten, welche der Strahlenpaketkennungen sich auf einen Ort innerhalb des Strahlenpaketindexspeichers dieser Recheneinheit bezieht.
  8. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Melden, durch jede der Recheneinheiten, der Paketkennungen für welche die Verarbeitung abgeschlossen wurde, und darauf reagierend Zurückgeben, durch den zentralen Sammler, von gemeldeten Paketkennungen an eine freie Liste.
  9. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß Anspruch 8, ferner umfassend: Pflegen, durch den zentralen Sammler, einer freien Paketkennungsliste für jede Recheneinheit, die angibt, welche Paketkennungen zur Zuweisung für diese Recheneinheit verfügbar sind.
  10. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß Anspruch 9, wobei jede Paketkennung einen Ort im Paketindexspeicher einer jeweiligen Recheneinheit kennzeichnet, der bis zu einer vorbestimmten maximalen Anzahl von Strahlenkennungen speichern kann, und ferner umfassend, durch den zentralen Sammler, Ziehen einer Anzahl von Paketkennungen aus der jeweiligen freien Liste der Recheneinheit, welche die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, um auf genug Speicher Bezug zu nehmen, um Strahlenkennungen für die Anzahl von Strahlen zu speichern.
  11. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem der Ansprüche 8 bis 10, ferner umfassend Implementieren jeder der freien Listen als einen Satz von Paketkennungen und Bereitstellen eines Bits für jede Paketkennung, das angibt, ob diese Paketkennung frei ist oder verwendet wird.
  12. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, wobei jede der Mehrzahl von Recheneinheiten einen Auswahlprozess ausführt, um eine Reihenfolge der Strahlenverarbeitung durch diese Recheneinheit zu bestimmen.
  13. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß Anspruch 12, wobei der Auswahlprozess umfasst: Verwenden des Empfangs einer Strahlenpaketkennung aus dem zentralen Sammler als einen Indikator, dass Daten, die den Knoten definieren, dem diese Strahlenpaketkennung zugeordnet war, in einem Cache-Speicher gespeichert werden, aus dem diese Recheneinheit lesen kann.
  14. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß Anspruch 12 oder 13, wobei der Auswahlprozess umfasst: Priorisieren der Verarbeitung von Strahlen, für die Strahlenpaketkennungen innerhalb eines Zeitfensters nach Empfang derselben empfangen wurden.
  15. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Aufnehmen, durch den zentralen Sammler, in einem Speicherort, der Daten umfasst, welche die Sammlung in dem Speicher definieren, eines Bezugs auf einen anderen Ort in dem Speicher, der weitere Strahlenpaketkennungen dieser Sammlung speichert.
  16. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, ferner umfassend: Bestimmen, durch den zentralen Sammler, eine weitere Verarbeitung einer ausgewählten Sammlung von Strahlenpaketkennungen zu veranlassen, Abrufen der Strahlenpaketkennungen und Veranlassen der Mehrzahl von Recheneinheiten, Strahlenpaketkennungen zu empfangen, die Orten im Strahlenpaketindexspeicher dieser Recheneinheit entsprechen.
  17. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, wobei der zentrale Sammler das Aktualisieren oder Erzeugen durch ein Verfahren durchführt, das ein Bestimmen eines Satzes von Knotenkennungen für Kindknoten der empfangenen Knotenkennung und ein Erstellen einer jeweiligen Sammlung für jeden der Kindknoten umfasst.
  18. Maschinenimplementiertes Verfahren zur Verarbeitung von Strahlen gemäß einem vorhergehenden Anspruch, wobei der zentrale Sammler das Aktualisieren oder Erzeugen durch ein Verfahren durchführt, welches das Verwenden der empfangenen Knotenkennung umfasst, um eine Sammlung zu erzeugen oder zu aktualisieren, die von dieser Knotenkennung indiziert wurde, und wenn der zentrale Sammler bestimmt, eine bestimmte Sammlung zu prüfen, der zentrale Sammler die Abfrage von Daten veranlasst, die einen Satz von Kindknoten des Beschleunigungsstrukturknotens definieren, welcher der bestimmten Sammlung zugeordnet ist.
  19. Renderingsystem, umfassend: eine Mehrzahl von Recheneinheiten, die jeweils einen Strahlendefinitionsspeicher und einen Strahlenpaketindexspeicher umfassen, wobei jede der Recheneinheiten ausgelegt wird, um: Strahlen auf Kreuzung mit Knoten einer Beschleunigungsstruktur zu verarbeiten, wobei jeder Knoten der Beschleunigungsstruktur einer jeweiligen Knotenkennung zugeordnet ist, Definitionsdaten für Strahlen in seinem Definitionsspeicher zu speichern, und eine Knotenkennung und eine Anzahl von Strahlen auszugeben; einen zentralen Sammler, der mit jeder der Mehrzahl von Recheneinheiten gekoppelt ist, wobei der zentrale Sammler einen Paketspeicher umfasst, wobei der zentrale Sammler ausgelegt ist, um: die Knotenkennung und die Anzahl von Strahlen zu empfangen, eine oder mehrere Strahlenpaketkennungen basierend auf der Anzahl von Strahlen zuzuteilen, die zugeteilte eine oder mehrere Strahlenpaketkennungen zu der Recheneinheit zurückzugeben, welche die Knotenkennung und die Anzahl von Strahlen ausgegeben hat, und im Paketspeicher eine Sammlung von Strahlenpaketkennungen zu aktualisieren oder zu erzeugen, die durch eine Knotenkennung indiziert wurden, der von der empfangenen Knotenkennung bestimmt wurde, um die zugeteilte eine oder mehrere Strahlenpaketkennungen zu umfassen, um dadurch den Knoten, der von der empfangenen Knotenkennung gekennzeichnet wurde, den zugeteilten einen oder mehreren Strahlenpaketkennungen zuzuordnen, wobei jede der Recheneinheiten ausgelegt ist, die Strahlenpaketkennungen zu empfangen, die dieser Recheneinheit durch den zentralen Sammler zugeteilt wurden, und in dem Strahlenpaketindexspeicher lokal zu dieser Recheneinheit Daten zu speichern, die eine Kennung für jeden Strahl, der in der Anzahl von Strahlen gezählt wurde, wenigstens einer der Strahlenpaketkennungen zuordnen.
  20. Computerlesbares Speichermedium, das darauf gespeichert eine computerlesbare Beschreibung einer integrierten Schaltung aufweist, die, wenn in einem Herstellungssystem für eine integrierte Schaltung verarbeitet, das Herstellungssystem für eine integrierte Schaltung veranlasst, ein Renderingsystem gemäß Anspruch 19 herzustellen.
DE102016104108.4A 2015-03-05 2016-03-07 Systeme und Verfahren zur verteilten skalierbaren Strahlenverarbeitung Pending DE102016104108A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201562128654P 2015-03-05 2015-03-05
US62/128,654 2015-03-05

Publications (1)

Publication Number Publication Date
DE102016104108A1 true DE102016104108A1 (de) 2016-09-22

Family

ID=55859089

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016104108.4A Pending DE102016104108A1 (de) 2015-03-05 2016-03-07 Systeme und Verfahren zur verteilten skalierbaren Strahlenverarbeitung

Country Status (3)

Country Link
US (6) US9830734B2 (de)
DE (1) DE102016104108A1 (de)
GB (3) GB2554587B (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10553010B2 (en) * 2017-04-01 2020-02-04 Intel IP Corporation Temporal data structures in a ray tracing architecture
GB2570744B (en) * 2018-06-29 2020-08-26 Imagination Tech Ltd Virtual memory management
US11367242B2 (en) 2020-07-30 2022-06-21 Apple Inc. Ray intersect circuitry with parallel ray testing
US11373360B2 (en) 2020-07-30 2022-06-28 Apple Inc. Grouping techniques for ray intersection traversal
GB2592285B8 (en) * 2020-08-21 2022-11-30 Imagination Tech Ltd Coherency gathering for ray tracing

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8018457B2 (en) * 2006-09-19 2011-09-13 Caustic Graphics, Inc. Ray tracing system architectures and methods
US7830379B2 (en) * 2006-09-19 2010-11-09 Caustic Graphics, Inc. Architectures for parallelized intersection testing and shading for ray-tracing rendering
US8072454B1 (en) * 2007-12-13 2011-12-06 Nvidia Corporation Parallel processing system, method, and computer program product for selecting a ray tracing entity from a group of ray tracing entities for processing
US8514232B2 (en) * 2010-06-28 2013-08-20 International Business Machines Corporation Propagating shared state changes to multiple threads within a multithreaded processing environment
US9552664B2 (en) * 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US10713059B2 (en) * 2014-09-18 2020-07-14 Advanced Micro Devices, Inc. Heterogeneous graphics processing unit for scheduling thread groups for execution on variable width SIMD units

Also Published As

Publication number Publication date
US11282262B2 (en) 2022-03-22
US10902667B2 (en) 2021-01-26
GB2538347B (en) 2018-01-03
US11715254B2 (en) 2023-08-01
GB201718205D0 (en) 2017-12-20
US20240062451A1 (en) 2024-02-22
US20210142548A1 (en) 2021-05-13
GB2564016A (en) 2019-01-02
GB201811462D0 (en) 2018-08-29
GB2554587A (en) 2018-04-04
US20200273234A1 (en) 2020-08-27
US9830734B2 (en) 2017-11-28
US20220215614A1 (en) 2022-07-07
US10657700B2 (en) 2020-05-19
US20160260193A1 (en) 2016-09-08
US20180061112A1 (en) 2018-03-01
GB2564016B (en) 2019-06-26
GB2554587B (en) 2018-09-19
GB201603878D0 (en) 2016-04-20
GB2538347A (en) 2016-11-16

Similar Documents

Publication Publication Date Title
DE102016104108A1 (de) Systeme und Verfahren zur verteilten skalierbaren Strahlenverarbeitung
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE202018104609U1 (de) Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden
DE102019103340A1 (de) Simultanes rechen- und grafik-scheduling
DE102017104220A1 (de) Aufgabenanordnung zur SIMD-Verarbeitung
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102015113797A1 (de) Relative Kodierung für eine blockbasierte Begrenzungsvolumenhierarchie
DE102021120605A1 (de) Effiziente softmax-berechnung
DE112010004083T5 (de) Verteilung von Arbeitsobjekten in einem Mehrkern-Datenverarbeitungssystem
DE102009053578A1 (de) Verfahren und Vorrichtung zum Durchführen eines parallelen Routens unter Verwendung einer Multithreaded-Routing-Prozedur
DE102012216029A1 (de) Ein skalierbares anpassungsfähiges map-reduce-rahmenwerk mit verteilten daten
DE102020101814A1 (de) Effiziente ausführung anhand von aufgabengraphen festgelegter arbeitslasten
DE102012213292A1 (de) System, Verfahren und Computer-Programm-Produkt zum Konstruieren einer Beschleunigungs-Struktur
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102014003463A1 (de) 3D-Graphik-Wiedergabe mit impliziter Geometrie
DE102017213160B4 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
DE102013208421A1 (de) Sharing einer Grafikverarbeitungseinheit unter vielen Anwendungen
DE102020118860A1 (de) Techniken zum vorladen von texturen beim rendering von graphik
DE112020000865T5 (de) Speicherverwaltungssystem
DE112018002568T5 (de) Verfahren, Systeme und Vorrichtung zur Reduzierung von Speicherlatenz beim Abrufen von Pixelkernen
DE102020127704A1 (de) Techniken zum effizienten transferieren von daten an einem prozessor
DE102012222391B4 (de) Mehrkanal-Zeitscheibengruppen
DE102018114303A1 (de) Verfahren zur grafischen Verarbeitung unter Verwendung von vordefinierten Render-Chunks

Legal Events

Date Code Title Description
R082 Change of representative

Representative=s name: WESTPHAL, MUSSGNUG & PARTNER PATENTANWAELTE MI, DE

R012 Request for examination validly filed