DE102009038454A1 - System und Verfahren zum Reduzieren einer Ausführungsdivergenz in Parallelverarbeitungsarchitekturen - Google Patents

System und Verfahren zum Reduzieren einer Ausführungsdivergenz in Parallelverarbeitungsarchitekturen Download PDF

Info

Publication number
DE102009038454A1
DE102009038454A1 DE102009038454A DE102009038454A DE102009038454A1 DE 102009038454 A1 DE102009038454 A1 DE 102009038454A1 DE 102009038454 A DE102009038454 A DE 102009038454A DE 102009038454 A DE102009038454 A DE 102009038454A DE 102009038454 A1 DE102009038454 A1 DE 102009038454A1
Authority
DE
Germany
Prior art keywords
execution
threads
type
record
preferred
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.)
Withdrawn
Application number
DE102009038454A
Other languages
English (en)
Inventor
Timo Santa Clara Aila
Samuli Santa Clara Laine
David Santa Clara Lübke
Michael Santa Clara Garland
Jared Santa Clara Hoberock
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102009038454A1 publication Critical patent/DE102009038454A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • G06F9/38885Divergence aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Image Processing (AREA)

Abstract

Ein Verfahren zum Reduzieren von Ausführungsdivergenz zwischen einer Mehrzahl von Threads, die innerhalb einer Parallelverarbeitungsarchitektur ausführbar sind, weist eine Operation des Bestimmens, zwischen einer Mehrzahl von Datensätzen, die als Operanden für eine Mehrzahl von verschiedenen Ausführungsbefehlen dienen, eines bevorzugten Ausführungstypen für die gesammelte Mehrzahl von Datensätzen auf. Ein Datensatz wird von einem Datensatzpool einem Thread zugeteilt, der durch die Parallelverarbeitungsarchitektur ausgeführt werden soll, wobei der zugeteilte Datensatz von dem bevorzugten Ausführungstypen ist, wobei die Parallelverarbeitungsarchitektur betreibbar ist, um eine Mehrzahl von Threads gleichzeitig auszuführen, wobei die Mehrzahl von gleichzeitig ausführbaren Threads den Thread aufweist, der den zugeteilten Datensatz aufweist. Ein Ausführungsbefehl, für den die zugeteilten Daten als ein Operand fungieren, wird auf jeden der Mehrzahl von Threads angewendet.

Description

  • FELD DER ERFINDUNG
  • Die vorliegende Erfindung bezieht sich auf Parallelverarbeitung und insbesondere auf Systeme und Verfahren zum Reduzieren von Ausführungsdivergenz bzw. -abweichung in Parallelverarbeitungsarchitekturen.
  • HINTERGRUND
  • Prozessorkerne von aktuellen Grafikverarbeitungseinheiten (GPUs) sind hochparallele Multiprozessoren, die zahlreiche Threads bzw. Ausführungsstränge der Programmausführung („Threads” in Zukunft) gleichzeitig ausführen. Threads solcher Prozessoren sind oft zusammen in Gruppen verpackt, die Warps bzw. Ketten genannt werden, die in einer Single-Instruction-Multiple-Data(SIMD)-Weise bzw. einer Eine-Anweisung-Mehrere-Daten-Weise ausgeführt werden. Die Anzahl der Threads in einem Warp wird als SIMD-Breite bezeichnet. Zu irgendeinem Augenblick können alle Threads in einem Warp denselben Befehl bzw. dieselbe Anweisung anwenden, wobei jeder Thread die Anweisung auf seine eigenen bestimmten Datenwerte anwendet. Wenn die Verarbeitungseinheit bzw. der Prozessor eine Anweisung ausführt, die manche Threads nicht ausführen wollen (zum Beispiel aufgrund von bedingter Anweisung, etc.), sind diese Threads frei bzw. unbeschäftigt bzw. Leerbefehle. Dieser Zustand, bekannt als Divergenz, ist nachteilig, da die Threads im Leerlauf ungenutzt laufen, wodurch der Gesamtrechnerdurchsatz reduziert wird.
  • Es gibt verschiedene Situationen, wo verschiedene Arten von Daten verarbeitet werden müssen, wobei jede Art eine Berechnung erfordert, die spezifisch für sie ist. Ein Beispiel einer solchen Situation ist das Verarbeiten von Elementen in einer Liste, die verschiedene Arten von Elementen aufweist, wobei jede Elementart eine unterschiedliche Berechnung zur Verarbeitung erfordert. Ein anderes Beispiel ist eine Statusmaschine bzw. ein Automat, die einen internen Zustand bzw. Status aufweist, der bestimmt, welche Art von Berechnung erforderlich ist, und der nächste Zustand hängt von Eingangsdaten und dem Ergebnis der Berechnung ab. In all diesen Fällen verursacht die SIMD-Divergenz wahrscheinlich eine Reduktion des Gesamtrechendurchsatzes.
  • Eine Anwendung, in der Parallelverarbeitungsarchitekturen eine breite Verwendung finden, ist in dem Feld der Grafikverarbeitung und Grafikrenderung und genauer bei Strahlverfolgungsverfahren bzw. Operationen bzw. Transaktionen. Strahlverfolgung bzw. Ray Tracing bedeutet eine Technik zum Bestimmen der Sichtbarkeit eines Primitivs bzw. einer Grundform von einem gegebenen Punkt im Raum, beispielsweise ein Auge oder Kameraperspektive. Primitiven einer bestimmten Szene, die gerendert werden sollen, werden über eine Datenstruktur, wie ein Gitter oder einen hierarchischen Baum, lokalisiert. Solche Datenstrukturen sind im Allgemeinen räumlicher Natur, aber können auch andere Informationen (winkelig, funktionell, semantisch usw.) über die Primitiven oder die Szene aufnehmen. Elemente dieser Datenstruktur, so wie Zellen in einem Gitter oder Knoten in einem Baum, werden als „Knoten” bezeichnet. Die Strahlverfolgung schließt eine erste Handlung bzw. Operation von „Knotentraversal”, wobei Knoten der Datenstruktur in einer bestimmten Weise durchlaufen werden, in einem Bestreben, Knoten, die Primitive aufweisen, zu lokalisieren, und eine zweite Handlung bzw. Operation von „Primitivenüberschneidung” ein, in der ein Strahl mit einem oder mehreren Primitiven innerhalb eines lokalisierten Knotens überschnitten wird, um einen bestimmten visuellen Effekt zu erzeugen. Die Ausführung einer Strahlverfolgungsoperation weist eine wiederholte Anwendung dieser zwei Operationen in irgendeiner Reihenfolge auf.
  • Ausführungsdivergenz kann während der Ausführung der Strahlverfolgungsoperationen auftreten, beispielsweise wenn manche Threads des Warps Knotentraversal-Operationen benötigen und manche Threads Primitivenüberschneidungsoperationen benötigen. Ausführung einer Instruktion bzw. Anweisung, die auf eine dieser Operationen gerichtet ist, wird darin resultieren, dass manche der Threads verarbeitet werden, während der andere Thread im Leerlauf bleibt, dadurch Ausführungstyp-Nachteile und Unterauslastung der SIMD erzeugend.
  • Daher wird ein System und Verfahren zum Reduzieren der Ausführungsdivergenz in Parallelverarbeitungsarchitekturen benötigt.
  • ZUSAMMENFASSUNG
  • Ein Verfahren zum Reduzieren von Ausführungsdivergenz zwischen einer Mehrzahl von Threads, die durch eine Parallelverarbeitungsarchitektur gleichzeitig ausführbar sind, weist eine Operation zum Bestimmen, zwischen einer Mehrzahl von Datensätzen, die als Operanden für eine Mehrzahl von unterschiedlichen Ausführungsbefehlen fungieren, eines bevorzugten Ausführungstyps für die gesammelte Mehrzahl von Datensätzen auf. Ein Datensatz wird von einem Datensatzpool bzw. Bestand einem Thread zugeteilt, der von der Parallelverarbeitungsarchitektur ausgeführt werden soll, wobei der zugeteilte Datensatz von dem bevorzugten Ausführungstyp ist, wobei die Parallelverarbeitungsarchitektur betreibbar ist, um gleichzeitig eine Mehrzahl von Threads auszuführen, wobei die Mehrzahl von Threads den Thread mit dem zugeteilten Datensatz aufweist. Ein Ausführungsbefehl, für den die zugeteilten Daten als ein Operand dienen bzw. fungieren, wird auf jeden der Mehrzahl der Threads angewendet.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 stellt ein beispielhaftes Verfahren des Reduzierens der Ausführungsdivergenz zwischen einer Mehrzahl von Threads, die von einer Parallelverarbeitungsarchitektur ausgeführt werden, gemäß der vorliegenden Erfindung dar.
  • 2 stellt eine erste beispielhafte Ausführungsform des Verfahrens nach 1 dar, in der ein geteilter Pool und ein oder mehrere Threads der Parallelverarbeitungsarchitektur Datensätze von verschiedenen Ausführungstypen aufweisen.
  • 3 stellt ein beispielhaftes Verfahren der Ausführungsform gezeigt in 2 dar.
  • 4 stellt eine zweite beispielhafte Ausführungsform des Verfahrens nach 1 dar, in der geteilte Speicherbestände zum Speichern von Datensätzen von verschiedenen Ausführungstypen oder Bezeichnern bzw. Identifizierern davon implementiert sind.
  • 5 stellt ein beispielhaftes Verfahren der Ausführungsform gezeigt in 4 dar.
  • 6 stellt ein beispielhaftes System dar, das betreibbar ist, um die Operationen dargestellt in 15 durchzuführen.
  • DETAILLIERTE BESCHREIBUNG VON BEISPIELHAFTEN AUSFÜHRUNGSFORMEN
  • 1 stellt ein beispielhaftes Verfahren 100 des Reduzierens der Ausführungsdivergenz zwischen einer Mehrzahl von Threads, die gleichzeitig durch eine Parallelverarbeitungsarchitektur ausführbar sind, gemäß der vorliegenden Erfindung dar. Von unter einer Mehrzahl von Datensätzen, die Threads einer Parallelverarbeitungsarchitektur zuteilbar sind, wobei die Datensätze als Operanden für verschiedene Ausführungsbefehle dienen, wird bei 102 ein bevorzugter Ausführungstyp für die gesammelte Mehrzahl von Datensätzen bestimmt. Bei 104 werden ein oder mehrere Datensätze, die von dem bevorzugten Ausführungstyp sind, von einem Pool bzw. Bestand von Datensätzen einem oder mehreren jeweiligen Threads, die von Parallelverarbeitungsarchitektur ausgeführt werden sollen, zugeteilt. Die Parallelverarbeitungsarchitektur ist betreibbar, um gleichzeitig eine Mehrzahl von Threads auszuführen, wobei eine solche Mehrzahl von Threads den einen oder die mehreren Threads aufweisen, die zugeteilte Datensätze haben. Bei 106 wird ein Ausführungsbefehl, für den der zugeteilte Datensatz als ein Operand dient, auf eine Mehrzahl von Threads angewendet, um eine Datenausgabe zu erzeugen.
  • In einer beispielhaften Ausführungsform ist die Parallelverarbeitungsarchitektur eine Single-Instruction-Multiple-Data(SIMD)- bzw. Eine-Anweisung-Mehrere-Daten-Architektur. Weiter beispielhaft ist der Pool bzw. der Bestand ein lokaler geteilter Speicher oder eine Registerdatei, die innerhalb der Parallelverarbeitungsarchitektur resident ist. In einer bestimmten Ausführungsform, die unten gezeigt ist, basiert die Bestimmung eines bevorzugten Datensatzausführungstyps auf der Anzahl von Datensätzen, die in dem Pool und innerhalb der Parallelverarbeitungsarchitektur resident sind. In einer anderen Ausführungsform basiert die Bestimmung eines bevorzugten Datensatzausführungstyps auf der komparativen bzw. verhältnismäßigen Anzahl von Datensätzen, die in zwei oder mehr Speicherbeständen resident sind, wobei jeder Speicherbestand betreibbar ist, um einen Identifizierer bzw. Bezeichner von Datensätzen, die in einem geteilten Speicherpool gespeichert sind, zu speichern, wobei jeder Speicherbestand betreibbar ist, um Bezeichner eines bestimmten Ausführungstyps zu speichern. Des Weiteren insbesondere kann eine volle SIMD-Verwendung sichergestellt werden, wenn die gesammelte Anzahl von verfügbaren Datensätzen zumindest M(N – 1) + 1 ist, wobei M die Anzahl von unterschiedlichen Ausführungstypen ist und N die SIMD-Breite der Parallelverarbeitungsarchitektur ist.
  • In einer beispielhaften Anwendung von Strahlverfolgung bzw. Raytracing ist ein Datensatz ein „Strahlzustand”, wobei der Strahlzustand aus einer „Strahlverfolgungsentität” bzw. „Strahlverfolgungseinheit” zusätzlich zu einer Zustandsinformation über die Strahlverfolgungsentität gebildet ist. Eine „Strahlverfolgungsentität” weist einen Strahl, eine Gruppe von Strahlen, ein Segment, eine Gruppe von Segmenten, einen Knoten, eine Gruppe von Knoten, ein Bounding-Volumen (zum Beispiel eine Bounding-Box bzw. Quader bzw. Würfel, eine Bounding-Sphere bzw. Kugel, ein Achsen-Bounding-Volumen, etc.), ein Objekt (zum Beispiel ein geometrisches Primitiv), eine Gruppe von Objekten oder eine andere Entität, die in dem Zusammenhang von Strahlverfolgung verwendet wird, auf. Zustandsinformation weist einen gegenwärtigen Knotenbezeichner, die bisher nächste Überschneidung, und optional einen Stapel in einer Ausführungsform, in der eine hierarchische Beschleunigungsstruktur implementiert ist, auf. Der Stapel wird implementiert, wenn ein Strahl mehr als einen Kindknoten während einer Knotentraversal-Operation überschneidet. Zum Beispiel begibt sich das Traversal bzw. die Durchquerung zu dem nächsten Kindknoten (ein Knoten weiter weg von der Wurzel verglichen mit einem Elternknoten), und die anderen überschnittenen Kindknoten werden zu dem Stapel geschoben bzw. gestoßen. Weiter beispielhaft ist ein Datensatz eines bevorzugten Ausführungstyps ein Datensatz, der beim Durchführen einer Knotentraversal-Operation oder einer Primitivenüberschneidungsoperation verwendet wird.
  • Beispielhafte Ausführungsformen der Erfindung werden nun in Begriffen einer beispielhaften Anwendung für Strahlverfolgungsalgorithmen beschrieben. Der Fachmann wird anerkennen, dass die Erfindung nicht darauf beschränkt ist und sich auch auf andere Anwendungsfelder erstreckt.
  • Pool und Prozessor-Thread(s) weisen Datensätze von verschiedenen Ausführungstypen auf
  • 2 stellt eine erste beispielhafte Ausführungsform der Erfindung dar, in der ein geteilter Pool und ein oder mehrere Threads der Parallelverarbeitungsarchitektur Datensätze von verschiedenen Ausführungstypen aufweisen.
  • Die verwendete Parallelverarbeitungsarchitektur ist eine Single-Instruction-Multiple-Data- bzw. Eine-Anweisung-Mehrere-Daten-Architektur (SIMD). Die Datensätze sind als „Strahlzustände”, wie oben beschrieben, implementiert, obwohl jeder andere Typ bzw. jede andere Art von Datensatz in Übereinstimmung mit der Erfindung verwendet werden kann.
  • Jeder Strahlzustand ist als einer von zwei unterschiedlichen Ausführungstypen charakterisiert: Strahlzustände, die Operanden in Primitiven-Überschneidungsoperationen sind, werden als „I”-Strahlzustände bezeichnet, und Strahlzustände, die Operanden in Knotentraversaloperationen sind, werden als „T”-Strahlzustände beschrieben. Strahlzustände beider Ausführungstypen befüllen den geteilten Pool 210 und die SIMD 220 wie gezeigt, obwohl in anderen Ausführungsformen entweder der Pool 210 oder die SIMD Strahlzustand(e) nur eines Ausführungstyps aufweisen können. Die SIMD 220 ist nur aus Darstellungszwecken 5 Threads 2021 2025 aufweisend gezeigt und der Fachmann wird anerkennen, dass jede Anzahl von Threads zum Einsatz kommen könnte, beispielsweise 32, 64 oder 128 Threads. Strahlzustände von zwei Ausführungstypen sind dargestellt, obwohl Strahlzustände von drei oder mehr Ausführungstypen in einer alternativen Ausführungsform unter der Erfindung implementiert werden können.
  • Operation bzw. Transaktion 102, in der ein bevorzugter Ausführungstyp bestimmt wird, ist als ein Prozess des Zählens, für jeden Ausführungstypen bzw. für jede Ausführungsart, der Sammelanzahl bzw. gemeinsamen Anzahl von Strahlzuständen, die in dem Pool 210 und der SIMD 220 resident sind, implementiert, wobei die SIMD 220 zumindest einen Thread aufweist, der einen Strahlzustand beibehält (Referenzzeichen 102 in 2, das die Operation 102 anzeigt, wirkt auf den Pool 210 und die SIMD 220 ein). Der Ausführungstyp, der die größte gemeinsame Anzahl von Datensätzen darstellt, gilt als der bevorzugte Ausführungstyp (zum Beispiel Knotentraversal) für die Ausführungsoperation der SIMD 220. In der dargestellten Ausführungsform ist die Anzahl von „T”-Strahlzuständen (sechs) höher als die Anzahl von „I”-Strahlzuständen (vier) in Stufe 232 des Prozessors, und dementsprechend sind der bevorzugte Ausführungstyp Strahlzustände, beschäftigt mit Knotentraversaloperationen, und ein Befehl zum Durchführen einer Knotentraversalberechnung wird bei Operation 106 angewendet.
  • Die Anzahl von Strahlzuständen, die innerhalb der SIMD 220 resident sind, können gewichtet werden (zum Beispiel mit einem Faktor größer als 1), um eine Ausrichtung bzw. Tendenz hinzuzufügen, wie der bevorzugte Ausführungstyp bestimmt wird. Die Gewichtung kann verwendet werden, um widerzuspiegeln, dass Strahlzustände, die innerhalb des SIMD 210 resident sind, rechnerisch über Strahlzustände bevorzugt werden, die in dem Pool 210 angesiedelt sind, da der letztere eine Zuordnung zu einem der Threads 2021 202n in der SIMD 210 benötigt. Alternativ kann die Gewichtung auf die Poolresidenten Strahlzustände angewendet werden, in welchem Fall die angewendete Gewichtung ein Faktor kleiner als 1 sein kann (annehmend, dass die SIMD-residenten Strahlzustände als ein Faktor 1 gewichtet sind, und dass Prozessor-residente Strahlzustände bevorzugt sind).
  • Der „bevorzugte” Ausführungstyp kann durch eine andere Metrik als das Bestimmen, welcher Ausführungstyp die größte Anzahl (möglicherweise gewichtet wie oben erwähnt) zwischen den unterschiedlichen Ausführungstypen darstellt, definiert werden. Beispielsweise, wenn zwei oder mehr Ausführungstypen dieselbe Anzahl von zugeordneten bzw. zugeteilten Strahlzuständen aufweisen, kann einer dieser Ausführungstypen als der bevorzugte Ausführungstyp definiert werden. Nach wie vor alternativ kann ein Strahlzustand-Ausführungstyp als der bevorzugte Ausführungstyp bei Operation 102 vorausgewählt werden, auch wenn er nicht die größte Anzahl der Strahlzustände darstellt. Optional kann die Anzahl der verfügbaren Strahlzustände von unterschiedlichen Ausführungstypen auf die SIMD-Breite limitiert sein, wenn die größte Anzahl bestimmt wird, da die aktuelle Anzahl von verfügbaren Strahlzuständen nicht für die Entscheidung relevant sein kann, ob sie größer oder gleich der SIMD-Breite ist. Wenn die Anzahl von verfügbaren Strahlzuständen ausreichend zahlreich für jeden Ausführungstyp ist, kann der „bevorzugte” Typ als der Ausführungstyp von jenen Strahlzuständen definiert werden, die die geringste Zeit zum Verarbeiten benötigen.
  • Operation 104 weist den Prozess des Zuteilens bzw. Zuordnens einer oder mehrere Strahlzustände von Pool 210 auf ein oder mehrere jeweilige Threads in der SIMD 220 auf. Dieser Prozess ist in 2 dargestellt, in der Thread 2023 einen Strahlzustand eines nicht bevorzugten Ausführungstyps aufweist, das heißt einen Strahlzustand, der mit einer primitiven Überschneidungsoperation betreibbar ist, wenn der bevorzugte Ausführungstyp ein Strahlzustand ist, der mit einer Knotentraversaloperation betreibbar ist. Der nicht bevorzugte Datensatz (Strahlzustand „I”) wird an Pool 210 übermittelt, und durch einen bevorzugten Ausführungstypdatensatz (Strahlzustand „T”) ersetzt. Weiterhin beispielhaft können ein oder mehrere der Threads (zum Beispiel 2025 bei Stufe 232) inaktiv (das heißt beendet) sein, in welchem Fall solche Threads keinen Strahlzustand bei Stufe 232 aufweisen können. Wenn der Pool 210 eine ausreichende Anzahl von Strahlzuständen aufweist, weist Operation 104 weiterhin das Zuteilen eines Strahlzustands zu einem vorher beendeten Thread auf. In der dargestellten Ausführungsform ist ein Strahlzustand „T” dem Thread 2025 zugeteilt. In einer anderen Ausführungsform, in der eine unzureichende Anzahl von Strahlzuständen in dem Pool 210 gespeichert ist, können ein oder mehrere beendete Threads leer bleiben. Nach Beendigung der Operation 104 ist die SIMD-Zusammensetzung wie bei Stufe 234 gezeigt, in der zwei Knotentraversal-Strahlzustände von dem Pool 210 abgerufen wurden, und ein Primitivenüberschneidungs-Strahlzustand dorthin hinzugefügt wurde. Somit weist der Pool 210 vier „I”-Strahlzustände und nur einen „T”-Strahlzustand auf.
  • Eine volle SIMD-Verwendung ist vollbracht, wenn alle SIMD-Threads einen Strahlzustand des bevorzugten Typs implementieren und der korrespondierende Ausführungsbefehl auf die SIMD angewendet wird. Die Minimalanzahl von Strahlzuständen, die benötigt werden, um eine volle SIMD-Verwendung sicherzustellen, pro Ausführungsoperation, ist: M(N – 1) + 1wobei M die Anzahl von unterschiedlichen Ausführungstypen für die Mehrzahl von Strahlzuständen ist und N die SIMD-Breite ist. In der dargestellten Ausführungsform, M = 2 und N = 5, ist somit die Gesamtanzahl von verfügbaren Strahlzuständen, die benötigt werden, um eine volle SIMD-Verwendung zu garantieren, neun. Eine Gesamtzahl von 10 Strahlzuständen ist in der dargestellten Ausführungsform verfügbar, und damit ist die volle SIMD-Verwendung sichergestellt.
  • Operation 106 weist das Anwenden eines Ausführungsbefehls auf jeden der Parallelprozessorthreads auf, wobei der Ausführungsbefehl beabsichtigt ist, auf den Strahlzuständen des bevorzugten Ausführungstyps zu operieren. In der vorhergehenden beispielhaften Strahlverfolgungsausführungsform wird ein Befehl zum Durchführen einer Knotentraversaloperation auf jeden der Threads angewendet. Die resultierende SIMD-Zusammensetzung ist bei Stufe 236 gezeigt.
  • Jeder Thread, der die bevorzugten Ausführungsstrahlzustände verwendet, wird gleichzeitig darauf durch den Knotentraversalbefehl betrieben und Daten werden von dort ausgegeben. Jeder ausgeführte Thread bringt eine Ausführungsoperation voran und ein resultierender Strahlzustand erscheint für jeden. Typischerweise werden ein oder mehrere Datenwerte, die in dem resultierenden Strahlzustand enthalten sind, einen Wechsel im Wert bei Ausführung der angewendeten Anweisung erfahren haben, obwohl manche resultierenden Strahlzustände einen oder mehrere Datenwerte aufweisen können, die unverändert bleiben, abhängig von der angewendeten Anweisung, den ausgeführten Operationen und den anfänglichen Datenwerten des Strahlzustands. Während keine solche Threads in 2 gezeigt sind, bleiben Threads, die nicht bevorzugte Ausführungstyp-Strahlzustände aufweisen (zum Beispiel einen Strahlzustand, der mit Primitivenüberschneidungsoperation in der dargestellten Ausführungsform betreibbar ist) während des Ausführungsprozesses leer. Sobald die Operation 106 vollendet ist, können die Operationen des Bestimmens, welcher der Strahlzustände bevorzugt werden sollte (Operation 102), des Zuteilens solcher Datensätze zu den Prozessor-Threads (Operation 104) und des Anwendens eines Ausführungsbefehls zum Operieren auf den Datensätzen zugeteilt zu den Threads (Operation 106) wiederholt werden.
  • Weiterhin beispielhaft können zwei oder mehr aufeinanderfolgende Ausführungsoperationen bei 106 durchgeführt werden, ohne Durchführen der Operationen 102 und/oder 104. Durchführen von Operation 106 zwei oder mehrere Male in Folge (während Operation 102 oder Operation 104 oder beide übersprungen werden) kann vorteilhaft sein, da der bevorzugte Ausführungstyp von folgenden Strahlzuständen innerhalb der Threads sich nicht ändern kann und als solches das Überspringen von Operationen 102 und 104 rechnerisch vorteilhaft sein kann. Beispielsweise können Befehle zum Ausführen von zwei Knotentraversaloperationen aufeinanderfolgend ausgeführt werden, wenn erwartet wird, dass eine Mehrheit von Strahlzuständen in einer nachfolgenden Ausführungsoperation erwartende Knotentraversaloperationen sind. Bei Stufe 236 beispielsweise weist eine Mehrzahl der dargestellten Threads (2021 bis 2023 und 2025 , Thread 2024 hat beendet) resultierende Strahlzustände für Knotentraversaloperationen auf und unter einem solchen Umstand könnte eine zusätzliche Operation 106, zum Durchführen einer Knotentraversaloperation ohne Operationen 102 und 104, vorteilhaft sein, abhängend von relativen Ausführungskosten der Operationen 102, 104 und 106. Es sollte beachtet werden, dass das Ausführen der Operation 106 mehrere Male in Folge die SIMD-Verwendung verringert, wenn ein oder mehrere Strahlzustände sich entwickeln, so dass sie einen anderen Ausführungstypen als den bevorzugten Ausführungstypen benötigen.
  • Weiterhin beispielhaft kann der Pool 210 periodisch wiederaufgefüllt werden, um eine konstante Anzahl von Strahlzuständen in dem Pool zu behalten. Detail 210a zeigt die Zusammensetzung des Pools 210, nachdem ein neuer Strahlzustand in ihn bei Stufe 238 geladen wurde. Beispielsweise kann das Wiederauffüllen nach jeder Ausführungsoperation 106 durchgeführt werden, oder nach jeder n-ten Ausführungsoperation 106. Weiterhin beispielhaft können neue Strahlzustände gleichzeitig in dem Pool 210 durch andere Threads in dem System hinterlegt werden. Ein oder mehrere Strahlzustände können in dem Pool 210 auch in alternativen Ausführungsformen geladen werden.
  • 3 stellt ein beispielhaftes Verfahren der Ausführungsform gezeigt in 2 dar. Operationen 302, 304, 306 und 308 stellen eine spezifische Implementierung der Operation 102 dar, wobei für jeden Ausführungstypen die Anzahl von Datensätzen, die in der SIMD und dem geteilten Pool resident sind, gezählt werden. Bei 304 wird eine Bestimmung darüber gemacht, ob die Datensatzzählung für jeden der SIMD und des geteilten Pools größer als 0 ist, das heißt ob es irgendwelche Datensätze entweder in der SIMD oder dem geteilten Pool vorhanden sind. Wenn nicht, endet das Verfahren bei 306. Wenn zumindest ein Datensatz in einem oder beiden des SIMD oder des geteilten Pools ist, fährt der Prozess bei 308 fort, wobei der Ausführungstyp, der die größte Unterstützung hat, das heißt der die größte Anzahl von korrespondierenden Datensätzen hat, als der bevorzugte Ausführungstyp ausgewählt ist. Die Operation bei 308 kann durch Anwenden von Gewichtungsfaktoren auf die Prozessor-residenten Datensätze und die Pool-residenten Datensätze (ein unterschiedlicher Gewichtungsfaktor kann auf jeden angewendet werden) wie oben erwähnt modifiziert werden. In einer solchen Ausführungsform, in der zwei unterschiedliche Ausführungstypen implementiert werden, würde die Berechnung bei 308 sein: Score A = w1·[Anzahl der Typ A Datensätze im Prozessor] + w2·[Anzahl der Typ A Datensätze im Pool] Score B = w3·[Anzahl der Typ B Datensätze im Prozessor] + w4·[Anzahl der Typ B Datensätze im Pool]wobei Score A and Score B bzw. Wert A und Wert B die gewichtete Anzahl von Datensätzen gespeichert innerhalb des Prozessors und Pools für jeweils Ausführungstypen A und B darstellen. Gewichtungskoeffizienten w1, w2, w3, w4 stellen einen Tendenz/Gewichtungsfaktor für/gegen die Prozessor- residenten Datensätze jeweils der Ausführungstypen A und B dar. Operation 308 wird durch Auswählen zwischen dem höchsten des Werts A und Werts B implementiert.
  • Operation 310 stellt eine spezifische Implementierung von Operation 104 dar, in der ein nicht bevorzugter Datensatz (Datensatz nicht des bevorzugten Ausführungstyps) zu dem geteilten Pool transferiert bzw. übermittelt wird, und ein Datensatz des bevorzugten Ausführungstyps zu dem Thread an seiner Stelle zugeteilt wird. Operation 312 ist wie in Operation 106 beschrieben implementiert, wobei zumindest ein Ausführungsbefehl, der mit dem zugeteilten Datensatz betreibbar ist, auf die Threads angewendet wird. Ein resultierender Strahlzustand wird dementsprechend für jeden Thread produziert, außer wenn der Thread beendet hat.
  • Bei Operation 314 wird eine Bestimmung darüber gemacht, ob eine abgekürzte Verarbeitung durchgeführt werden soll, in der ein nachfolgender Ausführungsbefehl korrespondierend zu dem bevorzugten Ausführungstyp durchgeführt werden soll. Wenn nicht, fährt das Verfahren durch Zurückkehren zu 302 für eine weitere Iteration fort. Wenn, kehrt das Verfahren zu 312 zurück, wo ein weiterer Ausführungsbefehl auf die Threads angewendet wird. Die dargestellten Operationen fahren fort, bis alle der verfügbaren Datensätze innerhalb der Parallelverarbeitungsarchitektur und des geteilten Pools beendet sind.
  • Separate Speicherbestände für verschiedenartige Ausführungstypen
  • 4 stellt eine zweite beispielhafte Ausführungsform der Erfindung dar, wobei separate Speicherbestände für Datensätze von verschiedenartigen Ausführungstypen oder Identifizierern bzw. Bezeichnern davon implementiert sind.
  • Die Datensätze sind als „Strahlzustände”, wie oben beschrieben, implementiert, obwohl jede beliebige Art von Datensätzen in Übereinstimmung mit der Erfindung verwendet werden kann. Jeder Strahlzustand ist charakterisiert als einer von zwei verschiedenen Ausführungstypen: Der Strahlzustand kommt entweder in einer Knotentraversaloperation oder in einer Primitivenüberschneidungsoperation zum Einsatz. Jedoch können drei oder mehr Ausführungstypen in alternativen Ausführungsformen der Erfindung definiert werden. Strahlzustände, die mit Primitivenüberschneidung und Knotentraversaloperationen betreibbar sind, werden jeweils als „I” und „T” beschrieben.
  • In der dargestellten Ausführungsform von 4 sind separate Speicherbestände 412 und 414 betreibbar, um Identifizierer bzw. Bezeichner (zum Beispiel Indizes) der Strahlzustände zu speichern, und die Strahlzustände selbst werden in einem geteilten Pool 410 gespeichert. Zwei separate Speicherbestände sind dargestellt, wobei ein Speicherbestand bzw. Speicher 412 betreibbar ist, um Indizes 413 von Strahlzuständen zu speichern, die mit Primitivenüberschneidungsoperationen („I”) betreibbar sind, und wobei ein zweiter Speicherbestand bzw. Speicher 414 betreibbar ist, um Indizes 415 für Strahlzustände zu speichern, die mit den Knotentraversaloperationen („T”) betreibbar sind. Speicher 412 und 414 können First-In-First-Out (FIFO) bzw. Erster-Rein-Erster-Raus-Register sein, und der geteilte Pool 410 ist ein Hochbandbreiten-, lokaler geteilter Speicher. In einer anderen Ausführungsform werden die Strahlzustände „I” und „T” selbst auch in den Speichern (Speicher 412 und 414) gespeichert, zum Beispiel in Hochgeschwindigkeits-Hardwaregemanagten FIFOs oder FIFOs, die beschleunigten Zugriff über spezielle Anweisungen haben. Zwei Speicher 412 und 414, die zwei verschiedenen Ausführungstypen entsprechen, sind in der beispielhaften Ausführungsform beschrieben, obwohl verstanden werden wird, dass drei oder mehr Speicher, die drei oder mehr Ausführungstypen entsprechen, ebenfalls zum Einsatz kommen können. Speicher 412 und 414 können als nicht geordnete Liste, Pool oder irgendeine Art von Speicher in alternativen Ausführungsformen der Erfindung implementiert werden. Die Implementierung der Speicherpools, die Identifizierer speichern, stellt Vorteile bereit, insofern als der Prozess des Zählens der Anzahl von Strahlzuständen vereinfacht wird. Beispielsweise in der Ausführungsform, in der Hardwaregemanagte FIFOs als Speicher 412 und 414 implementiert werden, ist die Anzahl von Identifizierern und dementsprechend die Anzahl von Strahlzuständen mit einem bestimmten Ausführungstyp von jeder FIFO, ohne einen Zählprozess zu verlangen, verfügbar.
  • Die Ausführungsform von 4 wird weiter durch die Threads 4021 bis 4025 der SIMD 420 veranschaulicht, die keine zugeteilten Strahlzustände in bestimmten Phasen seines Betriebs (zum Beispiel bei Stufe 432) aufweisen. Strahlzustände werden bei Stufe 434 vor der Ausführungsoperation 106 zugeteilt und danach werden Zuteilungen von den Threads 4021 bis 4025 des SIMD 420 entfernt. Die SIMD 420 ist zu Zwecken der Darstellung nur mit fünf Threads 4021 bis 4025 gezeigt, und der Fachmann wird anerkennen, dass jede beliebige Anzahl von Threads zum Einsatz kommen könnte, beispielsweise 32, 64 oder 128 Threads.
  • Beispielhaft wird die Operation 102 des Bestimmens des bevorzugten Ausführungstyps unter I und T Strahlzuständen des geteilten Pools 410 durch Bestimmen, welcher der Speicher 412 oder 414 die größte Anzahl von Einträgen hat, implementiert. In der dargestellten Ausführungsform speichert der Speicher 414 vier Indizes für Strahlzustände, die mit Knotentraversaloperationen betreibbar sind, und enthält die meisten Einträge, so dass sein korrespondierender Ausführungstyp (Knotentraversal) als der bevorzugte Ausführungstyp ausgewählt ist. In einer alternativen Ausführungsform kann ein Gewichtungsfaktor auf einen oder mehrere der Eintragszählungen angewendet werden, wenn es beispielsweise einen Unterschied in der Geschwindigkeit oder den Ressourcen, die benötigt werden, um irgendeinen der Strahlzustände von dem geteilten Pool 410 abzurufen, gibt oder wenn das finale Bild, das angezeigt werden soll, schneller einen zufriedenstellenden Qualitätslevel bzw. Qualitätsniveau erreichen wird, wenn manche Strahlzustände zuerst verarbeitet werden. Weiterhin alternativ kann der bevorzugte Ausführungstyp vordefiniert werden, zum Beispiel definiert durch einen Benutzerbefehl, unabhängig davon, welcher der Speicher die größte Anzahl von Einträgen aufweist. Optional können die Eintragszählungen der verschiedenen Speicher auf die SIMD-Breite gekappt werden, wenn die größte Anzahl bestimmt wird, da die aktuelle Eintragszählung nicht relevant sein kann für die Entscheidung, ob sie größer oder gleich der SIMD-Breite ist.
  • Operation 104 weist den Prozess des Abholens eines oder mehrerer Indizes von einem „bevorzugten” der Speicher 412 oder 414 auf und das Zuordnen der korrespondierenden Strahlzustände zu jeweiligen Threads der SIMD 420 zur Ausführung der nächsten angewendeten Anweisung auf. In einer Ausführungsform ist der „bevorzugte” Speicher einer, der die größte Anzahl von Indizes aufweist, somit anzeigend, dass dieser bestimmte Ausführungstyp die meiste Unterstützung hat. In einer solchen Ausführungsform weist der Speicher 414 mehr Einträge (vier) verglichen mit dem Speicher 412 (drei) auf und dementsprechend gilt als der bevorzugte Ausführungsform das Knotentraversal und jeder der vier Indizes wird verwendet, um korrespondierende „T” Strahlzustände von dem geteilten Pool 410 auf jeweilige SIMD-Threads 4021 bis 4024 zuzuteilen. Wie bei Stufe 434 gezeigt, sind nur vier „T”-Strahlzustände den SIMD-Threads 4021 bis 4024 zugeteilt, da der Speicher 414 nur diese Anzahl von Indizes für die aktuelle Ausführungsstufe der SIMD aufweist. In einer solchen Situation wird keine volle SIMD-Verwendung bereitgestellt. Wie oben erwähnt, wird eine volle SIMD-Verwendung sichergestellt, wenn die gesammelte Anzahl von verfügbaren Strahlzuständen zumindest ist: M(N – 1) + 1 wobei M die Anzahl von unterschiedlichen Ausführungstypen für die Mehrzahl der Strahlzustände ist und N die SIMD-Breite ist. In der dargestellten Ausführungsform, M = 2 and N = 5, ist somit die Gesamtanzahl der verfügbaren Strahlzustände, die benötigt wird, um eine volle SIMD-Verwendung zu garantieren, neun. Eine Gesamtheit von sieben Strahlzuständen ist dem geteilten Pool 410 verfügbar, so dass eine volle SIMD-Verwendung nicht sichergestellt werden kann. In der dargestellten Ausführungsform ist der Thread 4025 ohne einen zugeteilten Strahlzustand für die vorliegende Ausführungsoperation.
  • Operation 106 wird durch Anwenden eines Ausführungsbefehls implementiert, der dem bevorzugten Ausführungstyp entspricht, dessen Strahlzustände in Operation 104 zugeteilt wurden. Jeder Thread 4021 4024 , der die bevorzugten Ausführungsstrahlzustände verwendet, wird betrieben durch den Knotentraversalbefehl und Daten werden davon ausgegeben. Jeder ausgeführte Thread bringt eine Ausführungsoperation voran und ein resultierender Strahlzustand erscheint für ihn. Wie in Stufe 436 gezeigt, werden drei resultierende „T”-Strahlzustände für 4021 4023 erzeugt, aber der Strahlzustand für Thread 4024 hat mit der Ausführungsoperation beendet. Thread 4025 bleibt leer während des Ausführungsprozesses.
  • Nach Operation 106 werden die resultierenden „T”-Strahlzustände gezeigt bei Stufe 436 auf den geteilten Pool 414 geschrieben und die dazu korrespondierenden Indizes werden auf den Speicher 412 geschrieben. In einer bestimmten Ausführungsform überschreiben die resultierenden Strahlzustände die vorherigen Strahlzustände an demselben Speicherort und in einer solchen Instanz sind die Identifizierer (zum Beispiel Indizes) für die resultierenden Strahlzustände dieselben wie die Identifizierer für den vorherigen Strahlzustand, das heißt die Indizes bleiben unverändert.
  • Nach Operation 106 wird jeder der Speicher 412 und 414 drei Indexeinträge aufweisen und der geteilte Pool wird drei „I” und „T” Strahlzustände aufweisen. Nachdem jeder der resultierenden Strahlzustände von den SIMD-Threads 4021 4025 entfernt wurde, kann das Verfahren bei Stufe 432 beginnen, in der eine Bestimmung darüber gemacht wird, welcher Ausführungstyp für die nächste Ausführungsoperation bevorzugt werden soll. Da es eine gleiche Anzahl von Einträgen in jedem Speicher 412 und 414 (drei) gibt, kann einer der zwei Speicher ausgewählt werden, diesen bevorzugten Ausführungstyp aufzuweisen, und der Prozess fährt wie oben erwähnt fort mit dem Abholen dieser Indizes und der Zuteilung der Strahlzustände korrespondierend dazu zu den SIMD-Threads 4021 4023 . Der Prozess kann fortfahren, bis kein Strahlzustand in dem geteilten Pool 410 verbleibt.
  • Wie oben können zwei oder mehr aufeinanderfolgende Ausführungsoperationen bei 106 durchgeführt werden, ohne durchführende Operationen 102 und/oder 104. In der dargestellten Ausführungsform könnte die Anwendung von zwei Ausführungsbefehlen bei 106 vorteilhaft sein, da die resultierenden Strahlzustände bei Stufe 436 auch T-Strahlzustandsdaten sind, die ohne die Notwendigkeit des Ausführens der Operationen 102 und 104 gültig darüber betrieben werden könnten.
  • Wie mit der obigen ersten Ausführungsform können ein oder mehrere neue Strahlzustände (für einen oder beide Ausführungstypen) in den geteilten Pool 410 geladen werden, wobei deren korrespondierende Indizes in die korrespondierenden Speicher 412 und/oder 414 geladen werden.
  • 5 stellt ein beispielhaftes Verfahren der Ausführungsform gezeigt in 4 dar. Operationen 502, 504 und 506 stellen eine spezifische Ausführungsform der Operation 102 dar, wobei jeder einer Mehrzahl von Speichern (zum Beispiel Speicher 412 und 414) verwendet wird, um Identifizierer (zum Beispiel Indizes) für jeden Datensatz eines Ausführungstyps zu speichern. In einer solchen Ausführungsform wird die Operation 102 durch Zählen der Anzahl von Identifizierern in jedem der Speicher 412 und 414 und Auswählen, als den bevorzugten Ausführungstyp, des Ausführungstyps korrespondierend zu dem Speicher, der die größte Anzahl an Identifizierern hält, implementiert. Bei 505 wird eine Bestimmung darüber gemacht, ob die Zählung von Identifizierern in beiden der Speicher 412 und 414 Null ist. Wenn, beendet das Verfahren bei 506. Wenn einer oder beide der Speicher 412 und 414 eine Identifiziererzählung von mehr als eins aufweisen, fährt der Prozess bei 508 fort. Operation 508 stellt eine spezifische Ausführungsform der Operation 104 dar, in der Datensätze des bevorzugten Ausführungstyps von einem der Mehrzahl der Speicher zu Threads der Parallelverarbeitungsarchitektur zugeteilt werden. Operation 510 stellt eine spezifische Ausführungsform der Operation 106 dar, in der ein oder mehrere Ausführungsbefehle angewendet werden, und ein oder mehrere resultierende Datensätze erhalten werden (zum Beispiel Strahlzustände erhalten bei Stufe 436), reagierend auf den angewendeten Ausführungsbefehl, wobei jeder der resultierenden Datensätze einen bestimmten Ausführungstyp aufweist.
  • Bei 512 wird eine Bestimmung darüber gemacht, ob ein abgekürztes Verfahren durchgeführt werden soll, indem ein nachfolgender Ausführungsbefehl korrespondierend zu dem bevorzugten Austausch angewendet wird. Wenn, kehrt das Verfahren auf 510 zurück, wo ein weiterer Ausführungsbefehl auf den Warp der SIMD angewendet wird. Wenn ein abgekürztes Verfahren nicht durchgeführt werden soll, fährt das Verfahren bei 514 fort, wo der eine oder die mehreren resultierenden Datensätze von der Parallelverarbeitungsarchitektur auf den Pool (zum Beispiel geteilter Pool 410) transferiert werden, und ein Identifizierer für jeden resultierenden Datensatz in einen Speicherpool gespeichert wird, der den Identifizierer für Datensätze desselben Ausführungstyps speichert. Die dargestellten Operationen fahren fort, bis kein Identifizierer in einem der Speicherpools verbleibt.
  • 6 stellt ein beispielhaftes System dar, das betreibbar ist, um die Operationen dargestellt in 1 bis 5 durchzuführen. Das System 600 weist ein Parallelverarbeitungssystem 602 auf, welches eine oder mehrere (eine Mehrzahl gezeigt) Parallelverarbeitungsarchitekturen 604 aufweist, wobei jede konfiguriert ist, um auf einer vorbestimmten Anzahl von Threads zu operieren. Dementsprechend kann jede Parallelverarbeitungsarchitektur 604 parallel operieren, während die korrespondierenden Threads auch parallel operieren können. In einer bestimmten Ausführungsform ist jede Parallelverarbeitungsarchitektur 604 eine Single-Instruction-Multiple-Data- bzw. Eine-Anweisung-Mehrere-Daten-Architektur (SIMD) einer vordefinierten SIMD-Breite oder „Warp” bzw. „Kette”, beispielsweise 32, 64 oder 128 Threads, Das Parallelverarbeitungssystem 602 kann einen Grafikprozessor, andere integrierte Schaltungen, die mit Grafikverarbeitungsfähigkeiten ausgestattet sind, oder andere Prozessorarchitekturen, zum Beispiel die Cell Broadband Engine Mikroprozessor-Architektur, aufweisen.
  • Das Parallelverarbeitungssystem 602 kann weiterhin einen lokalen geteilten Speicher 606 aufweisen, der physisch oder logisch einer korrespondierenden Parallelverarbeitungsarchitektur 604 zugeteilt sein kann. Das System 600 kann zusätzlich einen globalen Speicher 608 aufweisen, der für jeden der parallelen Prozessoren 604 zugreifbar ist. Das System 600 kann des Weiteren einen oder mehrere Treiber 610 zum Steuern der Operation des Parallelverarbeitungssystems 602 aufweisen. Der Treiber kann eine oder mehrere Bibliotheken aufweisen, um die Steuerung des Parallelverarbeitungssystems 602 zu ermöglichen.
  • In einer bestimmten Ausführungsform der Erfindung weist das Parallelverarbeitungssystem 602 eine Mehrzahl von Parallelverarbeitungsarchitekturen 604 auf, wobei jede Parallelverarbeitungsarchitektur 604 konfiguriert ist, um die Divergenz von Anweisungsprozessen, die innerhalb von Parallelverarbeitungsarchitekturen 604 ausgeführt werden, zu reduzieren, wie in 1 beschrieben. Insbesondere weist jede Parallelverarbeitungsarchitektur 604 Verarbeitungsschaltkreis auf, betreibbar zum Bestimmen zwischen einer Mehrzahl von Datensätzen, die als Operanden für eine Mehrzahl von verschiedenen Ausführungsbefehlen fungieren, eines bevorzugten Ausführungstyp des Datensatzes. Des Weiteren ist in jeder Parallelverarbeitungsarchitektur 604 ein Verarbeitungsschaltkreis enthalten, der betreibbar ist, um von einem Pool von Datensätzen einen Datensatz des bevorzugten Ausführungstyps einem Thread zuzuteilen, der von der Parallelverarbeitungsarchitektur 604 ausführbar ist. Die Parallelverarbeitungsarchitektur 640 ist betreibbar, um gleichzeitig eine Mehrzahl von Threads auszuführen, wobei eine solche Mehrzahl den Thread aufweist, der dem Datensatz des bevorzugten Ausführungstyps zugeteilt wurde. Die Parallelverarbeitungsarchitektur 604 weist zusätzlich einen Verarbeitungsschaltkreis auf, der betreibbar ist, um an jedem der Mehrzahl von Threads einen Ausführungsbefehl anzuwenden, der die Operation durchführt, für die die zugeteilten Daten als ein Operand fungieren.
  • In einer bestimmten Ausführungsform sind die in dem Pool gespeicherten Datensätze von einer Mehrzahl von verschiedenen Ausführungstypen, und in einer solchen Ausführungsform weist der Verarbeitungsschaltkreis, der betreibbar ist, um einen bevorzugten Ausführungstyp zu bestimmen, (i) einen Verarbeitungsschaltkreis, der betreibbar ist, um für jeden Ausführungstyp Datensätze zu zählen, die in der Parallelverarbeitungsarchitektur und in dem Pool resident sind, um eine Gesamtanzahl von Datensätzen für den Ausführungstyp zu bestimmen; und (ii) einen Verarbeitungsschaltkreis auf, der betreibbar ist, um den Ausführungstyp der größten Anzahl von Datensätzen als den bevorzugten Ausführungstyp auszuwählen.
  • In einer anderen Ausführungsform weist die Vorrichtung eine Mehrzahl von Speichern auf, wobei jeder Speicher betreibbar ist, um einen Identifizierer bzw. Bezeichner für jeden Datensatz eines Ausführungstyps zu speichern. In einer solchen Ausführungsform weist der Verarbeitungsschaltkreis, der betreibbar ist, um einen bevorzugten Ausführungstyp zu bestimmen, einen Verarbeitungsschaltkreis auf, der betreibbar ist, um einen Ausführungstyp des Speichers, der die größte Anzahl von Datensatz-Identifizierern speichert, als den bevorzugten Ausführungstyp auszuwählen.
  • Wie leicht von einem Fachmann anerkannt wird, können die beschriebenen Prozesse und Operationen in Hardware, Software, Firmware oder einer Kombination dieser Implementierungen dementsprechend implementiert werden. Zusätzlich können manche oder alle der beschriebenen Prozesse und Operationen als computerlesbarer Anweisungscode, der auf einem computerlesbaren Medium angesiedelt ist, implementiert werden, wobei der Anweisungscode betreibbar ist, um einen Computer oder eine andere solche programmierbare Vorrichtung zu steuern, um die beabsichtigten Funktionen auszuführen. Das computerlesbare Medium, auf dem der Anweisungscode residiert, kann verschiedene Formen annehmen, beispielsweise eine entfernbare Disk, flüchtiger oder nicht-flüchtiger Speicher, etc. oder ein Trägersignal, das mit einem modulierten Signal eingeprägt wurde, wobei das modulierte Signal Anweisungen zum Durchführen der beschriebenen Operationen korrespondiert.
  • Die Begriffe „ein” oder „eine” werden als Hinweis auf ein oder mehr als ein dadurch beschriebenes Merkmal verwendet. Des Weiteren beziehen sich die Begriffe „gekoppelt” oder „verbunden” auf Merkmale, die in Kommunikation miteinander sind, entweder direkt oder über eine oder mehrere dazwischenkommende Strukturen oder Substanzen. Die Folge von Operationen und Aktionen, auf die in Verfahrensablaufdiagrammen bezogen wird, sind beispielhaft und die Operationen und Aktionen können in einer unterschiedlichen Reihenfolge ausgeführt werden, sowie zwei oder mehrere der Operationen und Aktionen gleichzeitig ausgeführt werden können. Referenzindizes (gegebenenfalls), die in den Ansprüchen enthalten sind, dienen zur Bezugnahme auf eine beispielhafte Ausführungsform eines beanspruchten Merkmals, und das beanspruchte Merkmal ist nicht auf die bestimmte Ausführungsform, auf die durch die Referenzzeichen bezogen wird, beschränkt. Der Umfang des beanspruchten Merkmals sollte so durch den Anspruchswortlaut definiert werden, als wenn das Referenzzeichen dort fehlen würde. Alle Veröffentlichungen, Patente und andere Dokumente, auf die hierin Bezug genommen wird, werden durch Bezugnahme in ihrer Gesamtheit aufgenommen. Soweit irgendeine Inkonsistenzverwendung zwischen irgendeinem solchen aufgenommenen Dokument und diesem Dokument existiert, sollte die Verwendung in diesem Dokument gelten.
  • Die vorhergehenden beispielhaften Ausführungsformen der Erfindung wurden in ausreichendem Detail beschrieben, um es einem Fachmann zu erlauben, die Erfindung auszuüben, und es sollte verstanden werden, dass die Ausführungsformen kombiniert werden können. Die beschriebenen Ausführungsformen wurden in der Reihenfolge ausgewählt, um am besten die Prinzipien der Erfindung und ihre praktische Anwendung zu beschreiben, um es anderen Fachmännern dadurch zu erlauben, die Erfindung in verschiedenen Ausführungsformen und mit verschiedenen Modifikationen, wie sie für die bestimmte Verwendung betrachtet geeignet sind, am besten zu verwenden. Es ist beabsichtigt, dass der Umfang der Erfindung nur durch die hierin angehängten Ansprüche definiert ist.

Claims (10)

  1. Ein Verfahren zum Reduzieren einer Ausführungsdivergenz zwischen einer Mehrzahl von Threads, die gleichzeitig durch eine Parallelverarbeitungsarchitektur ausführbar sind, das Verfahren aufweisend: Bestimmen, zwischen einer Mehrzahl von Datensätzen, die als Operanden für eine Mehrzahl von verschiedenen Ausführungsbefehlen fungieren, eines bevorzugten Ausführungstyps eines Datensatzes; Zuteilen, von einem Pool von Datensätzen, eines Datensatzes des bevorzugten Ausführungstyps zu einem ersten Thread, der von der Parallelverarbeitungsarchitektur ausgeführt werden soll, wobei die Parallelverarbeitungsarchitektur betreibbar ist, um gleichzeitig eine Mehrzahl von Threads auszuführen, wobei die Mehrzahl von Threads den ersten Thread aufweist; und Anwenden eines Ausführungsbefehls, für den der zugeteilte Datensatz als ein Operand fungiert, auf jeden der Mehrzahl von Threads.
  2. Das Verfahren nach Anspruch 1, wobei der Pool einen lokalen Speicher innerhalb der Parallelverarbeitungsarchitektur aufweist.
  3. Das Verfahren nach Anspruch 1, wobei jeder Datensatz einen Strahlzustand aufweist, der Daten, die zu einem Strahl korrespondieren, der für ein Traversal über einen Knoten eines hierarchischen Baumes getestet wurde, und Zustandsinformationen über den Strahl aufweist.
  4. Das Verfahren nach Anspruch 1, wobei der Ausführungsbefehl von der Gruppe bestehend aus einem Befehl zum Durchführen einer Knotentraversaloperation und einem Befehl zum Durchführen einer Primitivenüberschneidungsoperation ausgewählt ist.
  5. Das Verfahren nach Anspruch 1, wobei das Anwenden eines Ausführungsbefehls das Anwenden, auf jeden der Mehrzahl von Threads, von zwei aufeinanderfolgenden Ausführungsbefehlen aufweist, für die der Datensatz, der dem ersten Thread zugeteilt ist, als ein Operand fungiert.
  6. Das Verfahren nach Anspruch 1, weiterhin aufweisend Laden von zumindest einem Datensatz in den Pool, wenn ein oder mehrere der Mehrzahl von Threads beendet haben.
  7. Das Verfahren nach Anspruch 1, wobei jeder der Mehrzahl von Datensätzen einen von M vordefinierten Ausführungstypen aufweist; wobei die Parallelverarbeitungsarchitektur betreibbar ist, um eine Mehrzahl von N parallelen Threads auszuführen; und wobei der Pool einen Speicher zum Speichern von zumindest [M(N – 1) + 1] – N Datensätzen aufweist.
  8. Das Verfahren nach Anspruch 1, wobei die Datensätze, die in dem Pool gespeichert sind, von einer Mehrzahl von verschiedenen Ausführungstypen sind, wobei das Bestimmen eines bevorzugten Ausführungstypen aufweist: für jeden Ausführungstypen Zählen von Datensätzen, die innerhalb der Parallelverarbeitungsarchitektur und innerhalb des Pools resident sind, um eine Gesamtanzahl von Datensätzen für den Ausführungstypen zu bestimmen; und Auswählen, als den bevorzugten Ausführungstypen, den Ausführungstypen der größten Anzahl von Datensätzen.
  9. Das Verfahren nach Anspruch 1, wobei die Parallelverarbeitungsarchitektur einen Thread aufweist, der einen nicht bevorzugten Datensatz aufweist, der nicht von dem bevorzugten Ausführungstypen ist, und wobei das Zuteilen aufweist: Speichern des nicht bevorzugten Datensatzes in den Pool; und Ersetzen des nicht bevorzugten Datensatzes mit einem Datensatz des bevorzugten Ausführungstypen.
  10. Das Verfahren nach Anspruch 1, weiterhin aufweisend eine Mehrzahl von Speichern, wobei jeder Speicher betreibbar ist, um einen Identifizierer für jeden Datensatz eines Ausführungstypen zu speichern; wobei das Bestimmen eines bevorzugten Ausführungstypen das Auswählen, als den bevorzugten Ausführungstypen, eines Ausführungstypen des Speichers aufweist, der die größte Anzahl von Datensatz-Identifizierern aufweist.
DE102009038454A 2008-09-05 2009-08-21 System und Verfahren zum Reduzieren einer Ausführungsdivergenz in Parallelverarbeitungsarchitekturen Withdrawn DE102009038454A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/204,974 2008-09-05
US12/204,974 US20100064291A1 (en) 2008-09-05 2008-09-05 System and Method for Reducing Execution Divergence in Parallel Processing Architectures

Publications (1)

Publication Number Publication Date
DE102009038454A1 true DE102009038454A1 (de) 2010-04-22

Family

ID=41171748

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102009038454A Withdrawn DE102009038454A1 (de) 2008-09-05 2009-08-21 System und Verfahren zum Reduzieren einer Ausführungsdivergenz in Parallelverarbeitungsarchitekturen

Country Status (5)

Country Link
US (1) US20100064291A1 (de)
KR (1) KR101071006B1 (de)
DE (1) DE102009038454A1 (de)
GB (1) GB2463142B (de)
TW (1) TW201015486A (de)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100250564A1 (en) * 2009-03-30 2010-09-30 Microsoft Corporation Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution
KR101004110B1 (ko) 2009-05-28 2010-12-27 주식회사 실리콘아츠 레이 트레이싱 코어 및 이를 포함하는 레이 트레이싱 칩
US8587588B2 (en) * 2009-08-18 2013-11-19 Dreamworks Animation Llc Ray-aggregation for ray-tracing during rendering of imagery
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
GB2486485B (en) 2010-12-16 2012-12-19 Imagination Tech Ltd Method and apparatus for scheduling the issue of instructions in a microprocessor using multiple phases of execution
US8990833B2 (en) * 2011-12-20 2015-03-24 International Business Machines Corporation Indirect inter-thread communication using a shared pool of inboxes
US10169091B2 (en) * 2012-10-25 2019-01-01 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US10310973B2 (en) 2012-10-25 2019-06-04 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US10037228B2 (en) 2012-10-25 2018-07-31 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US9305392B2 (en) * 2012-12-13 2016-04-05 Nvidia Corporation Fine-grained parallel traversal for ray tracing
US9652284B2 (en) 2013-10-01 2017-05-16 Qualcomm Incorporated GPU divergence barrier
US9547530B2 (en) * 2013-11-01 2017-01-17 Arm Limited Data processing apparatus and method for processing a plurality of threads
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
KR20150136348A (ko) * 2014-05-27 2015-12-07 삼성전자주식회사 레이 트레이싱 시스템에서의 가속 구조 탐색 장치 및 그 탐색 방법
JP6907487B2 (ja) * 2016-09-09 2021-07-21 富士通株式会社 並列処理装置、並列処理装置の制御方法、及び並列処理装置に用いられる制御装置
CN108897787B (zh) * 2018-06-08 2020-09-29 北京大学 基于simd指令的图数据库中集合求交方法和装置
US20200409695A1 (en) * 2019-06-28 2020-12-31 Advanced Micro Devices, Inc. Compute unit sorting for reduced divergence

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5437032A (en) * 1993-11-04 1995-07-25 International Business Machines Corporation Task scheduler for a miltiprocessor system
JP2001075825A (ja) * 1999-09-01 2001-03-23 Nec Mobile Commun Ltd 非リアルタイムシステム、および非リアルタイムosにおけるマルチタスク処理での優先的データ読み取り方法
JP2001229143A (ja) * 2000-02-15 2001-08-24 Fujitsu Denso Ltd マルチプロセッサ・システム
US7038685B1 (en) * 2003-06-30 2006-05-02 Nvidia Corporation Programmable graphics processor for multithreaded execution of programs
US8156495B2 (en) * 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors
US8248422B2 (en) * 2008-01-18 2012-08-21 International Business Machines Corporation Efficient texture processing of pixel groups with SIMD execution unit
US8739165B2 (en) * 2008-01-22 2014-05-27 Freescale Semiconductor, Inc. Shared resource based thread scheduling with affinity and/or selectable criteria
CN104112291B (zh) * 2008-03-21 2017-03-29 想象技术有限公司 用于光线追踪渲染的并行相交测试及着色的架构
US7861065B2 (en) * 2008-05-09 2010-12-28 International Business Machines Corporation Preferential dispatching of computer program instructions
US8108867B2 (en) * 2008-06-24 2012-01-31 Intel Corporation Preserving hardware thread cache affinity via procrastination

Also Published As

Publication number Publication date
GB2463142A (en) 2010-03-10
KR101071006B1 (ko) 2011-10-06
KR20100029055A (ko) 2010-03-15
TW201015486A (en) 2010-04-16
GB2463142B (en) 2010-11-24
GB2463142A8 (de) 2010-05-26
US20100064291A1 (en) 2010-03-11
GB0914658D0 (en) 2009-09-30

Similar Documents

Publication Publication Date Title
DE102009038454A1 (de) System und Verfahren zum Reduzieren einer Ausführungsdivergenz in Parallelverarbeitungsarchitekturen
DE102017120588A1 (de) Befehlssatzarchitektur für neuronale Netze
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102019103340A1 (de) Simultanes rechen- und grafik-scheduling
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE112013005255T5 (de) Bedarfsweise Geometrie- und Beschleunigungsstrukturerzeugung
DE102008034519A1 (de) Aufgeteilte Datenstruktur, und Verfahren zum Laden einer Partikel-basierten Simulation unter Verwendung der aufgeteilten Datenstruktur in GPU, usw.
DE3911465C2 (de) Verfahren zur automatischen Konfiguration technischer Systeme aus Komponenten
DE102019128750A1 (de) Reduzierung des detailgrades eines polygonnetzes, um eine komplexität einer bildlich wiedergegebenen geometrie innerhalb einer szene zu verringern
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE10239672A1 (de) Verfahren und Vorrichtung zur Erzeugung einer zweidimensionalen Abbildung einer dreidimensionalen Struktur
DE102018104188A1 (de) Kombiniertes Rendering- und Berechnungs-Ressourcenzuweisungsverwaltungssystem
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102017213160B4 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE112013005993T5 (de) Verfahren, Vorrichtung und computerlesbares Medium für eine optimale Bestimmung von Daten-Teilmengen
DE112019000972T5 (de) Verfahren und Systeme für vereinfachte grafische Abbildungen von bipartiten Graphen
DE102013019333A1 (de) Registerzuweisung für als cluster vorliegende mehrebenen-registerdaten
DE102020119205A1 (de) Speichervorrichtung, speichersystem und betriebsverfahren hierfür
DE102013020966A1 (de) Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten
DE112019000676T5 (de) Zentraler scheduler und anweisungszuteiler für einen neuronalen inferenzprozessor
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE112020000865T5 (de) Speicherverwaltungssystem
DE3855494T2 (de) Abfragevorrichtung und -methode
DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R016 Response to examination communication
R016 Response to examination communication
R082 Change of representative

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

R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee