DE102014119038A1 - Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit - Google Patents

Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit Download PDF

Info

Publication number
DE102014119038A1
DE102014119038A1 DE102014119038.6A DE102014119038A DE102014119038A1 DE 102014119038 A1 DE102014119038 A1 DE 102014119038A1 DE 102014119038 A DE102014119038 A DE 102014119038A DE 102014119038 A1 DE102014119038 A1 DE 102014119038A1
Authority
DE
Germany
Prior art keywords
processing
work items
items
data elements
group
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.)
Ceased
Application number
DE102014119038.6A
Other languages
English (en)
Inventor
c/o Imagination Technologies Limit Howson John
c/o Imagination Technologies L Redshaw Jonathan
c/o Imagination Technologie Foo Yoong-Chert
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 DE102014119038A1 publication Critical patent/DE102014119038A1/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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
    • 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
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/507Low-level
    • 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
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)

Abstract

Eine SIMD-Verarbeitungseinheit verarbeitet eine Mehrzahl von Verarbeitungsvorgängen, die jeweils Arbeitselemente bis zu einer vorbestimmten Höchstanzahl umfassen. Die Arbeitselemente eines Verarbeitungsvorgangs sind ausgelegt, um eine gemeinsame Sequenz von Befehlen an entsprechenden Datenelementen auszuführen. Die Datenelemente sind in Blöcken angeordnet, wobei einige der Blöcke wenigstens ein ungültiges Datenelement umfassen. Arbeitselemente, die sich auf ungültige Datenelementen beziehen, sind ungültige Arbeitselemente. Die SIMD-Verarbeitungseinheit umfasst eine Gruppe von Verarbeitungsbahnen, die ausgelegt sind, Befehle von Arbeitselementen eines bestimmten Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen auszuführen. Ein Steuermodul baut basierend auf der Gültigkeit der Arbeitselemente Arbeitselemente in die Verarbeitungsvorgänge ein, sodass ungültige Arbeitselemente des bestimmten Verarbeitungsvorgangs über die Verarbeitungsbahnen hinweg vorübergehend aufeinander ausgerichtet sind. Auf diese Weise kann die Anzahl ungenutzter Verarbeitungsschlitze aufgrund ungültiger Arbeitselemente verringert werden.

Description

  • Hintergrund
  • SIMD(Single Instruction Multiple Data)-Verarbeitungseinheiten sind ausgelegt, denselben Vorgang auf mehreren Datenelementen gleichzeitig auszuführen. Dies ermöglicht es SIMD-Verarbeitungseinheiten, Datenelemente parallel zu verarbeiten, was effizienter sein kann als ein aufeinanderfolgendes Verarbeiten jedes Datenelements. SIMD-Verarbeitungseinheiten sind besonders nützlich, wenn derselbe Befehl an einer großen Anzahl von Datenelementen auszuführen ist, was in Multimediaanwendungen häufig der Fall ist. Zum Beispiel kann eine Grafikverarbeitungseinheit (GPU) eine SIMD-Verarbeitungseinheit verwenden, um Vorgänge an jedem einer großen Anzahl von Pixeln eines computergenerierten Bilds durchzuführen. Auf ähnliche Weise kann eine Bildverarbeitungseinheit zum Verarbeiten von Bilddateien (die z. B. durch eine Kamera aufgenommen wurden), die zum Beispiel Teil einer Kameraverarbeitungspipeline sein können, eine SIMD-Verarbeitungseinheit verwenden, um Vorgänge auf jedem einer großen Anzahl von Pixeln eines Bilds durchzuführen.
  • Ein Verarbeitungsvorgang kann aus einer Mehrzahl von ”Arbeitselementen” bestehen, wobei die Arbeitselemente eines Verarbeitungsvorgangs ausgeführt werden können, um dadurch eine gemeinsame Sequenz von Befehlen an entsprechenden Datenelementen auszuführen. Das heißt, ein Arbeitselement kann eine Sequenz von Befehlen umfassen, die an einem Datenelement auszuführen sind, wobei eine Gruppe von Arbeitselementen, die dieselbe Sequenz von auf entsprechenden Datenelementen auszuführenden Befehlen umfassen, in einem Verarbeitungsvorgang gruppiert sind. Jeder Verarbeitungsvorgang kann Arbeitselemente bis zu einer vorbestimmten Höchstanzahl umfassen. Die Höchstanzahl von Arbeitselementen, die in einem Verarbeitungsvorgang enthalten sein können, kann in verschiedenen Systemen variieren, aber 1 zeigt einen Verarbeitungsvorgang 100, der bis zu zweiunddreißig Arbeitselemente 102 umfassen kann. Der Klarheit halber sind nur einige der Arbeitselemente 102 in 1 gekennzeichnet. 1 gibt auch einige der zweiunddreißig verschiedenen Positionen von Elementen im Verarbeitungsvorgang (von Position 0 bis Position 31) an, an der ein Arbeitselement eingefügt sein kann. Die verschiedenen Arbeitselemente in einem Verarbeitungsvorgang können parallel ausgeführt werden, da sie entsprechende Fälle eines auf entsprechenden Datenelementen durchzuführenden Befehls sind. Der Verarbeitungsvorgang 100 ist nicht voll von Arbeitselementen und es heißt daher, dass er „teilweise belegt” ist. Das bedeutet, dass der Verarbeitungsvorgang 100 weniger als zweiunddreißig Arbeitselemente umfasst, obwohl er eine Kapazität für zweiunddreißig Arbeitselemente aufweist. Positionen im Verarbeitungsvorgang 100, die in 1 schattiert sind, umfassen ein Arbeitselement, während Positionen im Verarbeitungsvorgang 100, die in 1 nicht schattiert sind, kein Arbeitselement umfassen. Der Verarbeitungsvorgang 100 umfasst daher siebzehn Arbeitselemente zur Ausführung auf der SIMD-Verarbeitungseinheit an den Positionen 0 bis 16 und umfasst keine Arbeitselemente an den Positionen 17 bis 31. Ferner sind die Arbeitselemente 102 an den Positionen 0 bis 6, 9, 11, 15 und 16 gültige Arbeitselemente für die Ausführung durch eine SIMD-Verarbeitungseinheit. Wie weiter unten genauer beschrieben, können jedoch einige Arbeitselemente ungültig sein. In diesem Fall werden sie von der SIMD-Verarbeitungseinheit nicht ausgeführt. Die Arbeitselemente 102 an den Positionen 7, 8, 10 und 12 bis 14 sind im in 1 gezeigten Beispiel ungültige Arbeitselemente und sind schraffiert dargestellt.
  • Eine SIMD-Verarbeitungseinheit kann eine Mehrzahl von Verarbeitungsbahnen umfassen, die jeweils ausgelegt sind, einen Befehl eines Arbeitselements in jedem einer Mehrzahl von Verarbeitungszyklen auszuführen. 2 zeigt die Verarbeitung von Verarbeitungsvorgängen unter Verwendung einer SIMD-Verarbeitungseinheit, die sechzehn Verarbeitungsbahnen, in 2 mit 200 gekennzeichnet, umfasst. Die Kombination aus einer Verarbeitungsbahn und einem Verarbeitungszyklus umfasst einen Verarbeitungs-„Schlitz”, in dem ein Befehl eines Arbeitselements verarbeitet werden kann. In diesem Fall sind die Verarbeitungszyklen Taktungszyklen, und 2 zeigt vier Taktungszyklen, die als clk0, clk1, clk2 und clk3 bezeichnet sind. Befehle der Arbeitselemente von den ersten sechzehn Positionen eines ersten Verarbeitungsvorgangs (Verarbeitungsvorgang 100) sind zur Ausführung in den sechzehn Verarbeitungsbahnen im ersten Verarbeitungszyklus (clk0) geplant; und Befehle der Arbeitselemente der nächsten sechzehn Positionen des Verarbeitungsvorgangs 100 sind zur Ausführung in den sechzehn Verarbeitungsbahnen im zweiten Verarbeitungszyklus (clk1) geplant. In den nächsten Taktungszyklen (clk2 und clk3) sind die Verarbeitungsbahnen zur Ausführung von Arbeitselementen vom nächsten Verarbeitungsvorgang geplant. Ist ein Verarbeitungsvorgang teilweise belegt, werden einige Verarbeitungsschlitze nicht genutzt, d. h. in diesen Verarbeitungsschlitzen werden keine Arbeitselemente ausgeführt. Dies geht aus 2 hervor, wo der Verarbeitungsvorgang 100 an den Positionen 17 bis 31 keine Arbeitselemente umfasst, weshalb im zweiten Taktungszyklus (clk1) ein Befehl von nur einem Arbeitselement (102 16) ausgeführt wird. Es sind daher im in 2 gezeigten Beispiel während des Taktungszyklus clk1 15 Verarbeitungsbahnen untätig. Falls ein ungültiges Arbeitselement zur Ausführung in einem Verarbeitungsschlitz geplant ist, dann bleibt außerdem auch dieser Verarbeitungsschlitz ungenutzt, da ungültige Arbeitselemente nicht verarbeitet werden. Somit sind im in 2 gezeigten Beispiel die Verarbeitungsbahnen 7, 8, 10, 12, 13 und 14 während des ersten Verarbeitungszyklus (clk0) untätig, da die Arbeitselemente 102 7, 102 8, 102 10, 102 12, 102 13 und 102 14 im Verarbeitungsvorgang 100 ungültige Arbeitselemente sind.
  • Das in 2 gezeigte System hat daher aus den oben genannten Gründen ungenutzte Verarbeitungsschlitze zur Folge.
  • Moderne Grafikschnittstellen zur Anwendungsprogrammierung (API) wie OpenGL und DirectX von Microsoft definieren Befehle, die mit Pixeln in einem Pixelquad von 2×2 arbeiten. Es ist z. B. häufig erforderlich, mittels eines „Gradienten”-Vorgangs die Änderungsrate einer variierenden Menge von verschiedenen Pixeln zu bestimmen. Die Anwesenheit dieser Befehle verhindert die Entfernung von „leeren” Pixelschlitzen (die ungültigen Arbeitselementen entsprechen), wenn Arbeitselemente in Verarbeitungsvorgängen verpackt werden.
  • Kurzfassung
  • Diese Kurzfassung wird bereitgestellt, um eine Auswahl von Konzepten in vereinfachter Form vorzustellen, die weiter unten in der detaillierten Beschreibung näher beschrieben werden. Diese Kurzfassung soll keine Schlüsselmerkmale oder wesentlichen Merkmale des beanspruchten Gegenstands identifizieren, noch den Schutzbereich des beanspruchten Gegenstands beschränken.
  • Bereitgestellt ist eine SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit, die ausgelegt ist, eine Mehrzahl von Verarbeitungsvorgängen (engl. tasks) zu verarbeiten, die jeweils Arbeitselemente bis zu einer vorbestimmten Höchstanzahl umfassen, wobei die Arbeitselemente eines Verarbeitungsvorgangs angeordnet bzw. ausgelegt sind, um eine gemeinsame Sequenz von Befehlen an bzw. auf entsprechenden Datenelementen auszuführen, wobei die Datenelemente in Blöcken von Datenelementen angeordnet sind, wobei einige der Blöcke wenigstens ein ungültiges Datenelement umfassen und wobei Arbeitselemente, die sich auf ungültige Datenelemente beziehen, ungültige Arbeitselemente sind, wobei die SIMD-Verarbeitungseinheit umfasst: eine Gruppe von Verarbeitungsbahnen (engl. processing lanes), die ausgelegt sind, Befehle von Arbeitselementen eines bestimmten Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen auszuführen; und ein Steuermodul, das ausgelegt ist, basierend auf der Gültigkeit der Arbeitselemente die Arbeitselemente in die Verarbeitungsvorgänge einzubauen, sodass ungültige Arbeitselemente des bestimmten Verarbeitungsvorgangs über die Gruppe von Verarbeitungsbahnen hinweg vorübergehend aufeinander ausgerichtet bzw. in Linie gebracht (engl. align) sind.
  • Bereitgestellt ist eine SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit, die ausgelegt ist, eine Mehrzahl von Verarbeitungsvorgängen zu verarbeiten, die jeweils Arbeitselemente bis zu einer vorbestimmten Höchstanzahl umfassen, wobei einige der Verarbeitungsvorgänge weniger als die vorbestimmte Höchstanzahl an Arbeitselementen umfassen, und wobei die Arbeitselemente eines Verarbeitungsvorgangs ausgelegt sind, um eine gemeinsame Sequenz von Befehlen an entsprechenden Datenelementen auszuführen, wobei die SIMD-Verarbeitungseinheit umfasst: eine Mehrzahl von parallelen Gruppen von Verarbeitungsbahnen, wobei jede Gruppe ausgelegt ist, Befehle von Arbeitselementen eines entsprechenden Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen auszuführen; und Logik, die mit den Gruppen von Verarbeitungsbahnen gekoppelt ist und die ausgelegt ist, eine bestimmte Gruppe von Verarbeitungsbahnen zu veranlassen, einen bestimmten Verarbeitungszyklus zu überspringen, unabhängig von den anderen Gruppen von Verarbeitungsbahnen, falls im bestimmten Verarbeitungszyklus in den Verarbeitungsbahnen der bestimmten Gruppe keine Arbeitselemente zur Ausführung geplant sind.
  • Bereitgestellt ist ein Verfahren zur Verwendung einer SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit, um eine Mehrzahl von Verarbeitungsvorgängen zu verarbeiten, die jeweils Arbeitselemente bis zu einer vorbestimmten Höchstanzahl umfassen, wobei die Arbeitselemente eines Verarbeitungsvorgangs ausgelegt sind, eine gemeinsame Sequenz von Befehlen an bzw. auf entsprechenden Datenelementen auszuführen, wobei die Datenelemente in Blöcken von Datenelementen ausgelegt sind, wobei einige der Blöcke wenigstens ein ungültiges Datenelement umfassen, wobei Arbeitselemente, die sich auf ungültige Datenelementen beziehen, ungültige Arbeitselemente sind und wobei die SIMD-Verarbeitungseinheit eine Gruppe von Verarbeitungsbahnen umfasst, die ausgelegt sind, Befehle von Arbeitselementen eines bestimmten Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen auszuführen, wobei das Verfahren umfasst: Einbauen der Arbeitselemente in die Verarbeitungsvorgänge basierend auf der Gültigkeit der Arbeitselemente, sodass ungültige Arbeitselemente des bestimmten Verarbeitungsvorgangs über die Gruppe von Verarbeitungsbahnen hinweg vorübergehend aufeinander ausgerichtet sind; und Ausführen von Befehlen von Arbeitselementen des bestimmten Verarbeitungsvorgangs unter Verwendung der Gruppe von Verarbeitungsbahnen.
  • Bereitgestellt ist ein Verfahren zur Verwendung einer SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit, um eine Mehrzahl von Verarbeitungsvorgängen zu verarbeiten, die jeweils Arbeitselemente bis zu einer vorbestimmten Höchstanzahl umfassen, wobei einige der Verarbeitungsvorgänge weniger als die vorbestimmte Höchstanzahl von Arbeitselementen umfassen, wobei die Arbeitselemente eines Verarbeitungsvorgangs ausgelegt sind, eine gemeinsame Sequenz von Befehlen an entsprechenden Datenelementen auszuführen, wobei die SIMD-Verarbeitungseinheit eine Mehrzahl von parallelen Gruppen von Verarbeitungsbahnen umfasst, wobei das Verfahren umfasst: in jeder Gruppe von Verarbeitungsbahnen Ausführen von Befehlen von Arbeitselementen eines entsprechenden Verarbeitungsvorgangs in einer Mehrzahl von Verarbeitungszyklen; und Veranlassen einer bestimmten Gruppe von Verarbeitungsbahnen, einen bestimmten Verarbeitungszyklus zu überspringen, unabhängig von den anderen Gruppen von Verarbeitungsbahnen, falls keine Arbeitselemente zur Ausführung in einer der Verarbeitungsbahnen der bestimmten Gruppe im bestimmten Verarbeitungszyklus geplant sind.
  • Es kann ein computerlesbares Speichermedium zum Erzeugen einer Single Instruction Multiple Data-Verarbeitungseinheit gemäß einem der hier beschriebenen Beispiele bereitgestellt sein. Ferner kann ein computerlesbares Speichermedium bereitgestellt sein, auf dem computerlesbare Codes zum Erzeugen einer Single Instruction Multiple Data-Verarbeitungseinheit gemäß einem der hier beschriebenen Beispiele codiert sind.
  • Die oben genannten Merkmale können nach Bedarf, wie für Fachleute offensichtlich wäre, miteinander sowie mit einem der Aspekte der hier beschriebenen Beispiele kombiniert werden.
  • Kurzbeschreibung der Zeichnungen
  • Es sollen nun in Bezug auf die beigefügten Zeichnungen Beispiele näher beschrieben werden, wobei
  • 1 einen Verarbeitungsvorgang zeigt, der bis zu 32 Arbeitselemente umfassen kann;
  • 2 die Verarbeitung von Verarbeitungsvorgängen unter Verwendung einer SIMD-Verarbeitungseinheit nach dem Stand der Technik zeigt;
  • 3 eine schematische Darstellung einer SIMD-Verarbeitungseinheit ist;
  • 4 Primitive, die Pixel eines Bilds überlagern, zeigt;
  • 5 ein Flussdiagramm eines ersten Verfahrens zur Verwendung einer SIMD-Verarbeitungseinheit zum Verarbeiten von Verarbeitungsvorgängen ist;
  • 6 die Verarbeitung von Verarbeitungsvorgängen in einer Gruppe von Verarbeitungsbahnen der SIMD-Verarbeitungseinheit in einem ersten Beispiel zeigt;
  • 7 ein Umordnen von Blöcken von Arbeitselementen in einem ersten Beispiel zeigt;
  • 8 ein Umordnen von Blöcken von Arbeitselementen in einem zweiten Beispiel zeigt;
  • 9 die Verarbeitung von Verarbeitungsvorgängen in einer Gruppe von Verarbeitungsbahnen der SIMD-Verarbeitungseinheit in einem zweiten Beispiel zeigt; und
  • 10 ein Flussdiagramm eines zweiten Verfahrens zur Verwendung einer SIMD-Verarbeitungseinheit zum Verarbeiten von Verarbeitungsvorgängen ist.
  • Die beigefügten Zeichnungen zeigen verschiedene Beispiele. Fachleute werden erkennen, dass die gezeigten Elementabgrenzungen (z. B. Kästen, Gruppen von Kästen oder sonstige Formen) in den Zeichnungen ein Beispiel von Abgrenzungen zeigen. Es ist möglich, dass in einigen Beispielen ein Element als mehrere Elemente dargestellt ist oder dass mehrere Elemente als ein Element gekennzeichnet sind. In den Figuren werden gemeinsame Bezugszeichen verwendet, um, wenn angebracht, ähnliche Merkmale anzuzeigen.
  • Detaillierte Beschreibung
  • Es sollen nun auf rein beispielhafte Weise Ausführungsformen beschrieben werden. Die hier beschriebenen Beispiele stellen eine SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit bereit, die ausgelegt ist, die Anzahl ungenutzter Verarbeitungsschlitze aufgrund ungültiger Arbeitselemente in Verarbeitungsvorgängen und/oder aufgrund von teilweise belegten Verarbeitungsvorgängen zu verringern. Das kann erreicht werden, indem ungültige Arbeitselemente in einer Gruppe von Verarbeitungsbahnen, die ausgelegt sind, Arbeitselemente von einem Verarbeitungsvorgang auszuführen, aufeinander ausgerichtet werden. Falls in einem bestimmten Verarbeitungszyklus keine gültigen Arbeitselemente für die Ausführung in den Verarbeitungsbahnen der Gruppe geplant sind, kann der bestimmte Verarbeitungszyklus übersprungen werden, sodass die Verarbeitungsschlitze im bestimmten Verarbeitungszyklus nicht ungenutzt bleiben.
  • In einem weiteren Beispiel kann ferner eine Mehrzahl von Gruppen von Verarbeitungsbahnen vorliegen, wobei jede Gruppe von Verarbeitungsbahnen Arbeitselemente eines entsprechenden Verarbeitungsvorgangs in einer Mehrzahl von Verarbeitungszyklen ausführt. In diesem Fall kann eine bestimmte Gruppe von Verarbeitungsbahnen einen bestimmten Verarbeitungszyklus überspringen, unabhängig von den anderen Gruppen von Verarbeitungsbahnen, falls keine Arbeitselemente für die Ausführung in den Verarbeitungsbahnen der bestimmten Gruppe im bestimmten Verarbeitungszyklus geplant sind, ungeachtet dessen, ob im bestimmten Verarbeitungszyklus in einer anderen Gruppe (d. h. Arbeitselemente von einem anderen Verarbeitungsvorgang) Arbeitselemente zur Ausführung geplant sind.
  • 3 zeigt ein beispielhaftes System, das eine SIMD-Verarbeitungseinheit 302 und einen Speicher 304 umfasst. In einem hier detailliert beschriebenen Beispiel ist die SIMD-Verarbeitungseinheit 302 in einer GPU implementiert, die Bilddaten verarbeitet, um eine Szene wiederzugeben. Es können zum Beispiel Primitive verwendet werden, um Gegenstände in einer Szene zu definieren, wodurch die Primitive durch Primitivdaten definiert werden, die zum Beispiel die Stelle und Textur von den Primitiven in der Szene bestimmen. Der Speicher 304 kann ein Systemspeicher oder ein auf dem Chip befindlicher Speicher sein. Die SIMD-Verarbeitungseinheit 302 umfasst ein Verarbeitungsmodul 306, ein Steuermodul 308, ein Ausführungsmodul 310 und einen Speicher 312. Das Ausführungsmodul 310 umfasst ein Vorverarbeitungsmodul 313, eine Gruppe von Verarbeitungsbahnen 314 und Logik 316, die mit den Verarbeitungsbahnen 314 gekoppelt ist. Der Speicher 312 ist mit einer Speicherlogik 318 gekoppelt, die das Speichern von Daten im Speicher 312 steuern kann. Die SIMD-Verarbeitungseinheit 302, insbesondere das Verarbeitungsmodul 306, ist ausgelegt, um Primitivdaten vom Speicher 304 zu empfangen, wobei die Primitivdaten Informationen umfassen, die die Positionen von Primitiven definieren, die in einem Bild wiederzugeben sind (z. B. Standortdaten für Scheitelpunkte der Primitive). Ein Ausgang des Verarbeitungsmoduls 306 ist mit einem Eingang des Steuermoduls 308 gekoppelt. Das Steuermodul 308 ist ausgelegt, um Verarbeitungsvorgänge von Arbeitselementen zu bilden, die ausgelegt sind, um eine gemeinsame Sequenz von Befehlen auf entsprechenden Datenelementen auszuführen. Ein Ausgang des Steuermoduls 308 ist an einen Eingang des Ausführungsmoduls 310 gekoppelt, um Verarbeitungsvorgänge aus dem Steuermodul 308 an das Verarbeitungsmodul 310 auszugeben. Das Ausführungsmodul 310 ist auch ausgelegt, um Datenelemente aus dem Speicher 304 zu empfangen, um die Arbeitselemente auf den entsprechenden Datenelementen auszuführen. Das Vorverarbeitungsmodul 313 ist ausgelegt, um die Arbeitselemente teilweise vorzuverarbeiten, bevor sie an die Verarbeitungsbahnen 314 weitergegeben werden. Die Verarbeitungsbahnen 314 des Verarbeitungsmoduls 310 sind ausgelegt, um die Arbeitselemente auszuführen. Das Ausführungsmodul 310 ist an den Speicher 312 gekoppelt und ausgelegt, um verarbeitete Datenelemente, die aus der Ausführung der Verarbeitungsvorgänge resultieren, zur Speicherung im Speicher 312 bereitzustellen. In diesem Beispiel sind die Datenelemente Pixelwerte. In anderen Beispielen könnten die Datenelemente andere Arten von Datenelementen sein, die von einer SIMD-Verarbeitungseinheit zu verarbeiten sind. Zum Beispiel kann die SIMD-Verarbeitungseinheit 302 ausgelegt sein, um Befehle auf Fragmentwerten oder Scheitelwerten auszuführen, wobei die Datenelemente jeweils Fragmentwerte oder Scheitelwerte sein können.
  • 4 zeigt einen Renderingraum (Rasterungsraum) bzw. Wiedergaberaum 402, der von einer GPU verwendet wird, um ein Bild wiederzugeben. Der Renderingraum 402 umfasst eine Mehrzahl von Pixeln, von denen einige in 4 nummeriert sind (0 bis 35). Wie in 4 gezeigt, sind die Pixel in Pixelblöcken angeordnet. Insbesondere sind in diesem Beispiel die Pixel in Pixelquads angeordnet, sodass jeder Block vier der Pixel umfasst, die in einem Block von 2×2 angeordnet sind. Zwei der Pixelquads sind in 4 als 404 1 und 404 2 bezeichnet. Pixel eines Pixelquads werden von der SIMD-Verarbeitungseinheit 302 insofern zusammen verarbeitet, als dass, falls einer oder mehrere der Pixel in einem Pixelquad zu verarbeiten ist/sind, alle der Pixel im Pixelquad zur Verarbeitung von der SIMD-Verarbeitungseinheit 302 eingeplant werden. 4 zeigt auch zwei Primitive 406 und 408, die im Renderingraum 402 wiederzugeben sind. Wie in 4 zu sehen ist, überlagern die Primitive 406 und 408 einige, aber nicht alle der Pixel im Renderingraum 402. Ein Primitiv kann als ein Pixel überlagernd angesehen werden, falls das Primitiv den Abtastpunkt des Pixels bedeckt, der als in der Mitte des dem Pixel zugewiesenen Bereichs liegend vorausgesetzt wird. Pixel, die ein Primitiv 406 überlagern, können von der SIMD-Verarbeitungseinheit 302 verarbeitet werden, z. B. um eine Texturierung für das Primitiv 406 auf die entsprechenden Pixel anzuwenden. Es ist zu erkennen, dass der Gegenstand 406 einige der Pixel (z. B. Pixel 0, 2, 5 oder 7) nicht überlagert, wie in 4 gezeigt, aber da der Gegenstand andere Pixel der Pixelquads 404 1 und 404 2 überlagert, werden alle Pixelwerte in den Pixelquads 404 1 und 404 2 an die SIMD-Verarbeitungseinheit 302 zur Verarbeitung gesendet, obwohl für einige der Pixelwerte möglicherweise keine Verarbeitung durchzuführen ist. Die Pixelwerte, für die keine Verarbeitung durchzuführen ist, die aber an die SIMD-Verarbeitungseinheit 302 zur Verarbeitung gesendet werden (z. B. Pixel 0, 2, 5 und 7) können insofern als „ungültig” betrachtet werden, als ein Befehl (z. B. Anwendung der Texturierung des Primitivs 406) für diese Pixelwerte nicht durchzuführen ist. Es wird jedoch angemerkt, dass diese ungültigen Pixel nicht verworfen werden könnten, da einige von Standard-API wie OpenGL definierte Befehle möglicherweise erfordern, dass Daten von mehreren Pixeln miteinander zu kombinieren sind, z. B. aus den vier Pixeln in einem Pixelquad. Zum Beispiel kann das Vorverarbeitungsmodul 313 die Arbeitselemente im Verarbeitungsvorgang teilweise verarbeiten, z. B. um durch einen „Gradienten”-Vorgang die Änderungsrate einer variierenden Menge von verschiedenen Pixeln in einem Pixelquad zu bestimmen, bevor die Verarbeitungsvorgänge an die Verarbeitungsbahnen 314 weitergegeben werden. In diesem Fall werden die ungültigen Arbeitselemente, die in den Verarbeitungsvorgängen umfasst sind, verwendet, um die Vorverarbeitung im Modul 313 durchzuführen, sodass die Verarbeitungsvorgänge Befehle für die gültigen Arbeitselemente korrekt in den Verarbeitungsbahnen 314 umsetzen können. Mit anderen Worten, ungültige Arbeitselemente für ungültige Pixel eines Pixelquads, das einen oder mehrere gültige Pixel umfasst, sind in einem Verarbeitungsvorgang enthalten, sodass der/die gültige(n) Pixel im Pixelquad im Ausführungsmodul 310 korrekt verarbeitet werden kann/können. In den hier beschriebenen Beispielen ist es jedoch so, dass, falls es in einem Pixelquad gar keine gültigen Pixel gibt, keine Arbeitselemente für irgendeinen der Pixel im Pixelquad in einem vom Ausführungsmodul 310 auszuführenden Verarbeitungsvorgang umfasst sind.
  • Es wird angemerkt, dass das in 4 gezeigte Beispiel ausschließlich der Veranschaulichung dient, und die in 4 gezeigte Anordnung der Primitive 406 und 408 über den Pixeln nicht der Anordnung von ungültigen Arbeitselementen entspricht, wie sie in 1, 2, 6, 7 oder 8 gezeigt ist.
  • Der Betrieb der SIMD-Verarbeitungseinheit 302 in einem Beispiel ist in Bezug auf ein in 5 gezeigtes Flussdiagramm beschrieben. Wie oben beschrieben, werden Primitivdaten im Verarbeitungsmodul 306 vom Speicher 304 empfangen. In diesem Beispiel ist das Verarbeitungsmodul 306 ausgelegt, um eine Entfernung verdeckter Oberflächen zu implementieren, wie sie nach Stand der Technik bekannt ist, um Primitive in Pixelpositionen zu entfernen, falls diese Primitive von anderen Primitiven in der Szene verdeckt sind und daher nicht zum endgültigen wiedergegebenen Bild beitragen. Die Details des Betriebs des Verarbeitungsmoduls 306 liegen außerhalb des Schutzbereichs dieser Patentanmeldung, außer dass das Verarbeitungsmodul 306 für jede einer Mehrzahl von Pixelpositionen einen Primitivenidentifikator an das Steuermodul 308 weitergibt, der ein zu verarbeitendes sichtbares Primitiv identifiziert.
  • In Schritt S502 gruppiert das Steuermodul 308 Arbeitselemente zu Verarbeitungsvorgängen, die vom Ausführungsmodul 310 verarbeitet werden sollen, d. h. das Steuermodul 308 stellt die Arbeitselemente zu den Verarbeitungsvorgängen zusammen. Die Arbeitselemente eines Verarbeitungsvorgangs sind ausgelegt, um einen gemeinsamen Befehlsstrom an entsprechenden Pixelwerten auszuführen. Zum Beispiel können sich die Arbeitselemente eines Verarbeitungsvorgangs auf ein Anwenden der Textur des Primitivs 406 auf entsprechende Pixeln im Renderingraum 402 beziehen. Weitere Details zur Zusammenstellung der Arbeitselemente zu Verarbeitungsvorgänge werden weiter unten in verschiedenen Beispielen beschrieben. Die Verarbeitungsvorgänge werden an das Ausführungsmodul 310 weitergegeben.
  • Das Ausführungsmodul 310 empfängt auch die Datenelemente (z. B. die Pixelwerte), um die Arbeitselemente aus den Verarbeitungsvorgängen auf den Datenelementen auszuführen. Im in 3 gezeigten Beispiel werden die Datenelemente im Ausführungsmodul 310 aus dem Speicher 304 empfangen. Es wird angemerkt, dass in anderen Beispielen die Datenelemente vom Verarbeitungsmodul 306 an das Steuermodul 308 und dann an das Ausführungsmodul 310 weitergegeben werden können, aber der Effizienz halber werden im in 3 gezeigten Beispiel die Datenelemente nur dann aus dem Speicher 304 abgerufen, wenn sie gebraucht werden, d. h. vom Ausführungsmodul 310 und nicht vom Verarbeitungsmodul 306 oder dem Steuermodul 308.
  • In Schritt S504 werden die Arbeitselemente der Verarbeitungsvorgänge im Ausführungsmodul 310 ausgeführt. Wie oben beschrieben, kann ein Teil der Vorverarbeitung an den Arbeitselementen vom Verarbeitungsmodul 313 durchgeführt werden, z. B. um durch einen „Gradienten”-Vorgang die Änderungsrate einer variierenden Menge von verschiedenen Pixeln in einem Pixelquad zu bestimmen, bevor die Arbeitselemente der Verarbeitungsvorgänge an die Verarbeitungsbahnen 314 weitergegeben werden. In manchen Beispielen ist das Vorverarbeitungsmodul 313 nicht in der SIMD-Verarbeitungseinheit implementiert und/oder es wird vor der Weitergabe der Arbeitselemente an die Verarbeitungsbahnen 314 keine Vorverarbeitung durchgeführt. Die Arbeitselemente werden dann von den Verarbeitungsbahnen 314 ausgeführt. 6 zeigt ein Ausführungsschema 600, das definiert, wie in einem Beispiel Befehle der Arbeitselemente eines Verarbeitungsvorgangs Verarbeitungsschlitzen in den Verarbeitungsbahnen 314 zugewiesen werden. In diesem in 6 gezeigten Beispiel werden entsprechende Befehle der zweiunddreißig möglichen Arbeitselemente eines Verarbeitungsvorgangs (z. B. Verarbeitungsvorgang 100) zur Ausführung über eine Gruppe von vier Verarbeitungsbahnen und acht aufeinanderfolgenden Verarbeitungszyklen eingeplant. Es kann im Ausführungsmodul 310 mehr als vier Verarbeitungsbahnen 314 geben, von denen einige verwendet werden können, um simultan zur Verarbeitung des Verarbeitungsvorgangs 100 Arbeitselemente von anderen Verarbeitungsvorgängen zu verarbeiten. Wie oben beschrieben, kann es zum Beispiel sechzehn parallele Verarbeitungsbahnen geben, die in vier Gruppe von jeweils vier Verarbeitungsbahnen unterteilt werden können, die ausgelegt sind, um Befehle von Arbeitselementen von entsprechenden Verarbeitungsvorgängen über acht Verarbeitungszyklen zu verarbeiten. Falls alle Verarbeitungsvorgänge voll von Arbeitselementen sind (z. B. falls sie jeweils zweiunddreißig Arbeitselemente umfassen), könnten daher Befehle von allen Arbeitselementen in den vier Verarbeitungsvorgängen in acht Verarbeitungszyklen verarbeitet werden. Dies entspricht der Anzahl von Verarbeitungsvorgängen über acht Verarbeitungszyklen des in 2 gezeigten Beispiels, in dem Befehle von allen Arbeitselementen in einem Verarbeitungsvorgang über alle Verarbeitungsbahnen über zwei Verarbeitungszyklen ausgeführt werden können.
  • 6 zeigt jedoch die Zuweisung des Verarbeitungsvorgangs 100 (der in 1 gezeigt ist) an die Verarbeitungsschlitze der ersten Gruppe von vier Verarbeitungsbahnen. Wie oben beschrieben, umfasst der Verarbeitungsvorgang 100 nur siebzehn Arbeitselemente, und die Arbeitselemente 7, 8, 10, 12, 13 und 14 sind ungültig. In diesem Fall umfassen, wie in 6 gezeigt, drei Verarbeitungszyklen (clk5, clk6, clk 7) keine eingeplanten Arbeitselemente des Verarbeitungsvorgangs 100. Falls in einem bestimmten Verarbeitungszyklus für eine Gruppe von Verarbeitungsbahnen, die dem Verarbeitungsvorgang 100 zugeordnet sind, keine gültigen Arbeitselemente enthalten sind, bewirkt die Logik 316, dass die Gruppe von Verarbeitungsbahnen den bestimmten Verarbeitungszyklus überspringt. Das Überspringen der Verarbeitungszyklen kann für verschiedene Gruppen von Verarbeitungsbahnen unabhängig durchgeführt werden. Daher können im in 6 gezeigten Beispiel die Verarbeitungszyklen „clk5”, „clk6”, und „clk7”, als 602 gekennzeichnet, übersprungen werden, da vom Verarbeitungsvorgang 100 keine Arbeitselemente zur Ausführung in diesen Verarbeitungszyklen eingeplant sind. Das Überspringen erfolgt unabhängig von den anderen Gruppen von Verarbeitungszyklen, daher können einige andere Verarbeitungsvorgänge Arbeitselemente umfassen, die zur Ausführung in anderen Gruppen von Verarbeitungsbahnen in den Verarbeitungszyklen „clk5”, „clk6”, und „clk7” eingeplant sind, doch verhindert dies nicht, dass diese Verarbeitungszyklen für die Gruppe von Verarbeitungsbahnen, die den Verarbeitungsvorgang 100 verarbeiten, übersprungen werden. Arbeitselemente, die zur Ausführung von der in 6 gezeigten Gruppe von Verarbeitungsbahnen im nächsten Verarbeitungszyklus (clk8, der in 6 nicht gezeigt ist) eingeplant sind, können dann vorwärts bewegt werden, um im Verarbeitungszyklus (clk5) ausgeführt zu werden. Obwohl der Verarbeitungsvorgang 100 nur siebzehn Arbeitselemente (von möglichen zweiunddreißig Arbeitselementen) umfasst, kann daher erkannt werden, dass nur drei Verarbeitungsschlitze aufgrund der teilweisen Belegung des Verarbeitungsvorgangs 100 ungenutzt bleiben. Dies steht im Gegensatz zum in 2 gezeigten Ausführungsschema, das denselben Verarbeitungsvorgang 100 verarbeitet, in dem jedoch 15 Verarbeitungsschlitze aufgrund der teilweisen Belegung des Verarbeitungsvorgangs 100 ungenutzt bleiben. Es liegt daher auf der Hand, dass durch Teilen der Verarbeitungsbahnen 314 in Gruppen und Verwenden einer Gruppe zum Verarbeiten der Arbeitselemente eines bestimmten Verarbeitungsvorgangs weniger Verarbeitungsschlitze aufgrund der teilweisen Belegung von Verarbeitungsvorgängen ungenutzt bleiben. Es wird angemerkt, dass dies erreicht wird, indem den Gruppen von Verarbeitungsbahnen ermöglicht wird, Verarbeitungszyklen unabhängig von anderen Gruppen von Verarbeitungsbahnen zu überspringen. Es wird auch angemerkt, dass bezugnehmend auf das in 2 gezeigte Beispiel dies erreicht wird, ohne die Gesamtzahl von Verarbeitungsbahnen oder die Anzahl von Arbeitselementen in einem Verarbeitungsvorgang zu verändern.
  • Im in 6 gezeigten Beispiel ist ein Block von Arbeitselementen (der einem Pixelquad, d. h. einem Block von Datenelementen, entspricht) ausgelegt, um in einer Verarbeitungsbahn über aufeinanderfolgenden Verarbeitungszyklen auszuführen. Zum Beispiel führt die erste Verarbeitungsbahn die Arbeitselemente 0 bis 3 über die ersten vier Verarbeitungszyklen aus, und die zweite Verarbeitungsbahn führt die Arbeitselemente 4 bis 7 über die ersten vier Verarbeitungszyklen aus usw. Das bedeutet, dass die Blöcke von Arbeitselementen in einer Spalte-zuerst-Ordnung angeordnet sind, wobei die Höhe der Spalten der Anzahl an Arbeitselementen in einem Block (z. B. vier Arbeitselemente für Pixelquads) entspricht. In weiteren Beispielen kann die Höhe der Spalten unterschiedlich sein, z. B. können die Spalten acht Arbeitselemente umfassen, sodass die erste Verarbeitungsbahn die Arbeitselemente 0 bis 7 über die ersten acht Verarbeitungszyklen ausführt. In einem Extrembeispiel kann die Höhe der Spalten der Anzahl an Arbeitselementen in einem Verarbeitungsvorgang (z. B. zweiunddreißig) entsprechen, sodass die Gruppe von Verarbeitungsbahnen nur eine Bahn breit ist und die Arbeitselemente eines Verarbeitungsvorgangs der Reihe nach von einer einzigen Verarbeitungsbahn ausgeführt werden. Dies kann helfen, ein Überspringen mehrerer Verarbeitungszyklen zu ermöglichen, doch es würden die Vorteile der Durchführung desselben Befehls auf mehreren Datenelementen auf SIMD-Weise eingebüßt werden, sodass die Verarbeitungseinheit komplexer und/oder weniger effizient sein kann. Wie nachstehend detaillierter beschrieben wird, ermöglicht ein Auslegen der Blöcke von Arbeitselementen in einer Spalte-zuerst-Ordnung eine teilweise Umordnung der Arbeitselemente innerhalb eines Blocks von zu implementierenden Arbeitselementen, um ungültige Arbeitselemente über die Verarbeitungsbahnen hinweg aufeinander auszurichten.
  • Es kann viele Gründe dafür geben, warum ein Verarbeitungsvorgang unter Umständen nicht die Höchstanzahl von Arbeitselementen umfassen (z. B. zweiunddreißig Arbeitselemente in den hier beschriebenen Beispielen) kann. Zum Beispiel kann eine Verzögerung in der Verarbeitungspipeline vorliegen, z. B. aufgrund einer Verzögerung bei der Verarbeitung von Primitivdaten im Verarbeitungsmodul 306, sodass nicht genug Arbeitselemente bereit für die Ausführung sind, um einen Verarbeitungsvorgang zu füllen, wenn ein Verarbeitungsvorgang an das Verarbeitungsmodul 310 gesendet werden soll. In diesem Fall kann es als besser angesehen werden, ohne weitere Verzögerungen dem Ausführungsmodul 310 einen Verarbeitungsvorgang zu senden, der nicht vollständig gefüllt ist, anstatt den Verarbeitungsvorgang zu verzögern, um abzuwarten, dass ausreichend Arbeitselemente zur Ausführung bereit sind, um den Verarbeitungsvorgang zu füllen.
  • Wie oben in einem Beispiel, in dem die Datenelemente Pixel sind, beschrieben, können die Datenelemente (z. B. Pixel) in Blöcken von Datenelementen (z. B. Pixelquads) angeordnet sein. Im in 6 gezeigten Beispiel ist jede der Verarbeitungsbahnen der Gruppe ausgelegt, um Befehle von Arbeitselementen, die sich auf einen jeweiligen Block von Datenelementen beziehen, über eine Mehrzahl von aufeinanderfolgenden Verarbeitungszyklen auszuführen. Das heißt, dass Befehle eines ersten Blocks von Arbeitselementen (Arbeitselemente 0 bis 3), die sich auf einen ersten Pixelquad beziehen, eingeplant sind, in einer ersten Verarbeitungsbahn in den ersten vier Verarbeitungszyklen ausgeführt zu werden; Befehle eines zweiten Blocks von Arbeitselementen (Arbeitselemente 4 bis 7), die sich auf einen zweiten Pixelquad beziehen, eingeplant sind, in einer zweiten Verarbeitungsbahn in den ersten vier Verarbeitungszyklen ausgeführt zu werden; Befehle eines dritten Blocks von Arbeitselementen (Arbeitselemente 8 bis 11), die sich auf einen dritten Pixelquad beziehen, eingeplant sind, in einer dritten Verarbeitungsbahn in den ersten vier Verarbeitungszyklen ausgeführt zu werden; und Befehle eines vierten Blocks von Arbeitselementen (Arbeitselemente 12 bis 15), die sich auf einen vierten Pixelquad beziehen, eingeplant sind, in einer vierten Verarbeitungsbahn in den ersten vier Verarbeitungszyklen ausgeführt zu werden. Aus 6 ist ersichtlich, dass der erste Block von Arbeitselementen (Arbeitselemente 0 bis 3) alle gültig sind; der zweite Block von Arbeitselementen (Arbeitselemente 4 bis 7) drei gültige Arbeitselemente und ein ungültiges Arbeitselement umfasst; der dritte Block von Arbeitselementen (Arbeitselemente 8 bis 11) zwei gültige Arbeitselemente und zwei ungültige Arbeitselemente umfasst; und der vierte Block von Arbeitselementen (Arbeitselemente 12 bis 15) ein gültiges Arbeitselement und drei ungültige Arbeitselemente umfasst.
  • Falls alle Arbeitselemente, die zur Ausführung in der Gruppe von Verarbeitungsbahnen in einem Verarbeitungszyklus eingeplant sind, ungültige Arbeitselemente sind, dann kann die Logik 316 die Gruppe von Verarbeitungsbahnen veranlassen, die Ausführung der ungültigen Arbeitselemente zu überspringen. Dies erfolgt auf dieselbe Weise wie das Überspringen der Verarbeitungszyklen, für die keine Arbeitselemente eingeplant wurden. Im in 6 gezeigten Beispiel gibt es keine Verarbeitungszyklen, für die nur ungültige Arbeitselemente eingeplant sind, weshalb keiner der ersten fünf Verarbeitungszyklen (clk0 bis clk4) übersprungen werden kann. Da jedoch in der Gruppe nur vier Verarbeitungsbahnen existieren, ist es wahrscheinlicher, dass alle Arbeitselemente in einem Verarbeitungszyklus in der Gruppe von Verarbeitungszyklen ungültig sind, verglichen mit dem in 2 gezeigten System, in dem sechzehn Arbeitselemente ungültig sein müssten, damit ein Verarbeitungszyklus von diesem Verfahren übersprungen wird.
  • Außerdem kann die Wahrscheinlichkeit, dass alle Arbeitselemente, die in einem bestimmten Verarbeitungszyklus in einer Gruppe von Verarbeitungszyklen eingeplant sind, ungültige Arbeitselemente sind, auf die Weise, wie das Steuermodul 308 in Schritt S502 die Arbeitselemente zu den Verarbeitungsvorgängen bzw. Arbeitsvorgängen zusammenstellt, erhöht werden. Insbesondere stellt das Steuermodul 308 die Arbeitselemente zu den Verarbeitungsvorgängen basierend auf der Gültigkeit der Arbeitselemente zusammen, sodass ungültige Arbeitselemente eines bestimmten Verarbeitungsvorgangs über eine Gruppe von Verarbeitungsbahnen hinweg aufeinander ausgerichtet sind. Eine diesbezügliche Einschränkung ist, dass das Steuermodul 308 die Arbeitselemente zu den Verarbeitungsvorgängen zusammenstellt, sodass Arbeitselemente eines Blocks von Arbeitselementen, die sich auf einen Block von Datenelementen beziehen, zum selben Verarbeitungsvorgang gruppiert werden. Das heißt, dass die Blöcke von Arbeitselementen (die sich z. B. auf Pixelquads beziehen) nicht getrennt werden, sodass sie in verschiedenen Verarbeitungsvorgängen enthalten sind. Das „Zusammenstellen” der Arbeitselemente in den Verarbeitungsvorgängen kann umfassen: i) Gruppieren von Arbeitselementen zu bestimmten Verarbeitungsvorgängen und/oder ii) Anordnen der Arbeitselemente in einem bestimmten Verarbeitungsvorgang.
  • Indem die Anzahl von überspringbaren Verarbeitungszyklen erhöht wird, erhöht sich die Effizienz der Ausführung der Verarbeitungsvorgänge, da weniger Verarbeitungsschlitze ungenutzt bleiben. Es wird angemerkt, dass viele Blöcke von Arbeitselementen (z. B. mehr als in einen einzigen Verarbeitungsvorgang passen) zur Ausführung bereit sein können, und dass das Steuermodul 308 bestimmen kann, wie die Arbeitselemente in Verarbeitungsvorgängen gruppiert werden. Eine Art und Weise, wie das Steuermodul 308 die Arbeitselemente basierend auf der Gültigkeit der Arbeitselemente in den Verarbeitungsvorgängen zusammenstellen kann, ist, die Blöcke basierend auf der Anzahl ungültiger Arbeitselemente in den entsprechenden Blöcken von Arbeitselementen zu Verarbeitungsvorgängen zu gruppieren. Vollständig gültige Blöcke von Arbeitselementen (d. h. Blöcke, die nur gültige Arbeitselemente umfassen) können zum Bespiel zusammen in bestimmte Verarbeitungsvorgänge verpackt werden, sodass diese Verarbeitungsvorgänge keine ungültigen Arbeitselemente umfassen. Im Gegensatz dazu können Blöcke von Arbeitselementen, die wenigstens ein ungültiges Arbeitselement umfassen, zusammen zu anderen Verarbeitungsvorgängen verpackt werden. Dies kann hilfreich sein, um die Wahrscheinlichkeit, dass diese anderen Verarbeitungsvorgänge ungültige Arbeitselemente aufweisen, die zur Ausführung in einer ganzen Gruppe von Verarbeitungsbahnen in einem bestimmten Verarbeitungszyklus eingeplant sind, zu erhöhen, sodass der bestimmte Verarbeitungszyklus übersprungen werden kann. Im in 6 gezeigten Beispiel sind alle Arbeitselemente im ersten Block (Arbeitselemente 0 bis 3) gültig, und daher kann keiner der ersten vier Verarbeitungszyklen übersprungen werden, ungeachtet der Gültigkeit der Arbeitselemente in den anderen Blöcken von Arbeitselementen, die zur Ausführung in diesen Verarbeitungszyklen eingeplant sind. Durch Aufteilen vollständig gültiger Blöcke von Arbeitselementen in verschiedene Verarbeitungsvorgänge, um teilweise gültige Blöcke von Arbeitselementen zu bilden, steigt die Wahrscheinlichkeit, dass die Verarbeitungsvorgänge für teilweise gültige Blöcke von Arbeitselementen ungültige Arbeitselemente aufweisen, die zur Ausführung in einer ganzen Gruppe von Verarbeitungsbahnen in einem bestimmten Verarbeitungszyklus eingeplant sind.
  • Diese Idee kann weiterentwickelt werden, sodass Blöcke von Arbeitselementen, die drei gültige Arbeitselemente umfassen, in bestimmten Verarbeitungsvorgängen gruppiert werden; Blöcke von Arbeitselementen, die zwei gültige Arbeitselemente umfassen, zu anderen Verarbeitungsvorgängen gruppiert werden; und Blöcke von Arbeitselementen, die ein gültiges Arbeitselement umfassen, zu weiteren Verarbeitungsvorgängen gruppiert werden. Daher kann jeder der Blöcke von Arbeitselementen in einem bestimmten Verarbeitungsvorgang dieselbe Anzahl von gültigen Arbeitselementen umfassen.
  • Ferner kann das Steuermodul 308 ausgelegt sein, um Arbeitselemente in einem Block von Arbeitselementen umzuordnen, um die ungültigen Arbeitselemente aus verschiedenen Blöcken von Arbeitselementen in einem Verarbeitungsvorgang aufeinander auszurichten. 7 zeigt ein Beispiel, in dem Blöcke von Arbeitselementen von einer ersten Konfiguration 702 ausgehend umgeordnet werden, um eine zweite Konfiguration 704 zu ergeben, in der ungültige Arbeitselemente von den Blöcken von Arbeitselementen vorübergehend über die Gruppe von Verarbeitungsbahnen hinweg aufeinander ausgerichtet sind. Das in 7 gezeigte Beispiel betrifft einen Fall, in dem ein Verarbeitungsvorgang Blöcke von Arbeitselementen umfasst, die jeweils ein ungültiges Arbeitselement umfassen. Wie in 7 gezeigt, gibt es vier Blöcke von Arbeitselementen, die als 706 1, 706 2, 706 3 und 706 4 gekennzeichnet sind, die in den vier Verarbeitungsbahnen einer Gruppe in vier Verarbeitungszyklen auszuführen sind. Die Arbeitselemente 0, 6, 9 und 15 sind ungültig, während die anderen Arbeitselemente gültig sind. Vor dem Umordnen der Arbeitselemente kann gemäß der Konfiguration 702 keiner der Verarbeitungszyklen übersprungen werden, weil sie alle wenigstens ein gültiges Arbeitselement von einem der Blöcke 706 umfassen.
  • Das Steuermodul 308 ordnet die Arbeitselemente in einigen der Blöcke 706 um, z. B. durch Rotation der Arbeitselemente in den Blöcken. Zum Beispiel werden die Arbeitselemente im Block 706 1 dreimal rotiert. Jeder Rotationsvorgang beinhaltet ein Verschieben der Arbeitselemente eine Position weiter nach unten, wobei das unterste Arbeitselement ganz oben platziert wird. Das Ergebnis der drei Rotationsvorgänge ist im Rotationsblock 708 1 gezeigt, sodass das ungültige Arbeitselement sich an der untersten Position des Blocks 708 1 befindet. Es wird angemerkt, dass die Arbeitselemente in Gegenrichtung um eine Position weiterrotiert werden könnten, um dasselbe Ergebnis zu erzielen. Allgemein ist, falls n die Anzahl von Rotationsvorgängen in eine erste Richtung und W die Anzahl von Arbeitselementen in einem Block ist, die Anzahl von Rotationsvorgängen m in die Gegenrichtung, die zu den n Rotationen in die erste Richtung, äquivalent ist, gegeben durch m = W – n.
  • Das Steuermodul 308 führt an den Arbeitselementen des zweiten Blocks 706 2 außerdem einen Rotationsvorgang durch, um zum umgeordneten Block 708 2 zu gelangen. Daher befindet sich das ungültige Arbeitselement an der untersten Position des Blocks 708 2. Gleichermaßen führt das Steuermodul 308 außerdem zwei Rotationsvorgänge an den Arbeitselementen des dritten Blocks 706 3 aus, um zum umgeordneten Block 708 3 zu gelangen. Daher befindet sich das ungültige Arbeitselement 9 an der untersten Position des Blocks 708 3. Der vierte Block 706 4 muss nicht umgeordnet werden, da sich das ungültige Arbeitselement 15 bereits an der untersten Position des Blocks 706 4 befindet. Daher ist der Block 708 4 derselbe wie der Block 706 4. Es ist ersichtlich, dass die ungültigen Arbeitselemente der Blöcke 708 in der umgeordneten Konfiguration 704 vorübergehend aufeinander ausgerichtet sind. Wenn Verarbeitungsvorgänge zur Ausführung im Ausführungsmodul 314 eingeplant sind, wird daher die Logik 316 bestimmen, dass der Verarbeitungszyklus clk3 übersprungen werden kann, weil alle in diesem Verarbeitungszyklus zur Ausführung auf den Verarbeitungsbahnen der Gruppe eingeplanten Arbeitselemente ungültig sind und daher nicht verarbeitet werden müssen. Es ist offensichtlich, dass die Umordnung der Arbeitselemente in den Blöcken von Arbeitselementen ein Überspringen der Verarbeitung von ungültigen Arbeitselementen ermöglicht, wodurch die Anzahl ungenutzter Verarbeitungsschlitze verringert wird.
  • In dem oben beschriebenen Beispiel sind alle ungültigen Arbeitselemente an den untersten Positionen der Blöcke 708 ausgerichtet. In anderen Beispielen könnten die ungültigen Arbeitselemente an anderen Positionen in den Blöcken 708 ausgerichtet sein. Die Anzahl von Rotationsvorgängen, die an den Arbeitselementen jedes der Blöcke 706 durchgeführt werden, wird vom Steuermodul 308 bestimmt, um die ungültigen Arbeitselemente vorübergehend aufeinander auszurichten.
  • Das Steuermodul 308 setzt Indikatoren (z. B. einige Bits pro Arbeitselement oder pro Block von Arbeitselementen), die anzeigen, wie die Arbeitselemente zu den Verarbeitungsvorgängen zusammengestellt wurden. Die Indikatoren können in die Arbeitselemente eingebaut sein, da sie zum Ausführungselement 310 gesendet werden oder können in einem Speicher gespeichert werden (der ein anderer Speicher als Speicher 304 sein kann und vorzugsweise ein Speicher auf dem Chip ist, sodass das Beschreiben und Auslesen des Speichers eine kurze Verzögerung umfasst), um anschließend abgerufen zu werden, sodass die verarbeiteten Datenelemente am Ausgang der Verarbeitungsbahnen 314 umgeordnet werden können, entsprechend einer etwaigen Umordnung der Arbeitselemente, die beim Verpacken der Arbeitselemente in den Verarbeitungsvorgängen erfolgt ist. Im in 7 gezeigten Beispiel wird jeder Block von Arbeitselementen um eine Anzahl von Rotationsvorgängen zwischen null Rotationsvorgängen und drei Rotationsvorgängen rotiert. In einem Beispiel kann daher ein Indikator mit zwei Bits für jeden Block von Arbeitselementen gesetzt werden, um die Anzahl von Rotationsvorgängen anzuzeigen, die an den Arbeitselementen des Blocks 706 vorgenommen wurden. In einem weiteren Beispiel braucht einer der Blöcke von Arbeitselementen (z. B. der erste Block von Arbeitselementen im Verarbeitungsvorgang) keinen Indikator, und die Arbeitselemente in den anderen Blöcken können umgeordnet werden, um der Ausrichtung der ungültigen Arbeitselemente im besagten einen Block von Arbeitselementen zu entsprechen. Dies kann die Anzahl von Bits, die für die Indikatoren erforderlich sind, reduzieren. Die Indikatoren für die Blöcke von Arbeitselementen geben die Ordnung der Arbeitselemente in den Blöcken von Arbeitselementen an.
  • 8 zeigt ein weiteres Beispiel, in dem Blöcke von Arbeitselementen von einer ersten Konfiguration 802 ausgehend umgeordnet werden, um eine zweite Konfiguration 804 zu ergeben, in der ungültige Arbeitselemente von den Blöcken von Arbeitselementen vorübergehend über die Gruppe von Verarbeitungsbahnen hinweg aufeinander ausgerichtet sind. Das in 8 gezeigte Beispiel betrifft einen Fall, in dem ein Verarbeitungsvorgang Blöcke von Arbeitselementen umfasst, die jeweils zwei ungültige Arbeitselemente umfassen. Wie in 8 gezeigt, gibt es vier Blöcke von Arbeitselementen, die als 806 1, 806 2, 806 3 und 806 4 gekennzeichnet sind, die in den vier Verarbeitungsbahnen einer Gruppe in vier Verarbeitungszyklen auszuführen sind. Die Arbeitselemente 0, 2, 5, 7, 9, 10, 14, und 15 sind ungültig, während die anderen Arbeitselemente gültig sind. Vor dem Umordnen der Arbeitselemente kann gemäß der Konfiguration 802 keiner der Verarbeitungszyklen übersprungen werden, weil sie alle wenigstens ein gültiges Arbeitselement aus einem der Blöcke 806 umfassen.
  • Das Steuermodul 308 ordnet die Arbeitselemente in einigen der Blöcke 806 um, z. B. durch selektives Umtauschen der ersten zwei Arbeitselemente im Block und Rotieren der Arbeitselemente in den Blöcken. Zum Beispiel wird ein Umtauschvorgang durchgeführt, um die ersten zwei Arbeitselemente im Block 806 1 umzutauschen und dann werden die Arbeitselemente im Block 806 1 einmal rotiert. Wie oben beschrieben, beinhaltet der Rotationsvorgang ein Verschieben der Arbeitselemente eine Position weiter nach unten, wobei das unterste Arbeitselement dann ganz oben platziert wird. Das Ergebnis des Umtauschvorgangs und des Rotationsvorgangs ist im rotierten Block 808 1 gezeigt, sodass die ungültigen Arbeitselemente (Arbeitselemente 0 und 2) sich an den untersten zwei Positionen des Blocks 808 1 befinden. Wie oben beschrieben, wird angemerkt, dass der Rotationsvorgang in die andere Richtung durchgeführt werden könnte.
  • Das Steuermodul 308 führt auch an den ersten zwei Arbeitselementen im Block 806 2 einen Umtauschvorgang und an den Arbeitselementen des zweiten Blocks 806 2 drei Rotationsvorgänge durch, um zum umgeordneten Block 808 2 zu gelangen. Daher befinden sich die ungültigen Arbeitselemente 5 und 7 an den untersten zwei Positionen des Blocks 808 2. Das Steuermodul 308 führt keinen Umtauschvorgang an den Arbeitselementen im Block 806 3 durch, sondern einen Rotationsvorgang an den Arbeitselementen des dritten Blocks 806 3, um zum umgeordneten Block 808 3 zu gelangen. Daher befinden sich die ungültigen Arbeitselemente 9 und 10 an den untersten zwei Positionen des Blocks 808 3. Der vierte Block 806 4 muss nicht umgeordnet werden, da sich die ungültigen Arbeitselemente 14 und 15 bereits an den untersten zwei Positionen des Blocks 806 4 befinden. Daher ist der Block 808 4 derselbe wie der Block 806 4. Es ist ersichtlich, dass die ungültigen Arbeitselemente der Blöcke 808 in der umgeordneten Konfiguration 804 vorübergehend aufeinander ausgerichtet sind. Wenn Verarbeitungsvorgänge zur Ausführung im Ausführungsmodul 314 eingeplant sind, wird daher die Logik 316 bestimmen, dass die Verarbeitungszyklen clk2 und clk3 übersprungen werden können, weil alle in diesen Verarbeitungszyklen zur Ausführung auf den Verarbeitungsbahnen der Gruppe eingeplanten Arbeitselemente ungültig sind und daher nicht verarbeitet werden müssen. Es ist offensichtlich, dass die Umordnung der Arbeitselemente in den Blöcken von Arbeitselementen ein Überspringen der Verarbeitung von ungültigen Arbeitselementen ermöglicht, wodurch die Anzahl ungenutzter Verarbeitungsschlitze verringert wird.
  • In dem oben beschriebenen Beispiel sind alle ungültigen Arbeitselemente an den untersten zwei Positionen der Blöcke 808 ausgerichtet. In anderen Beispielen könnten die ungültigen Arbeitselemente an anderen Positionen in den Blöcken 808 ausgerichtet sein. Das selektive Umtauschen der ersten zwei Arbeitselemente in den Blöcken und die Anzahl von Rotationsvorgängen, die an den Arbeitselementen jedes der Blöcke 806 durchgeführt werden, werden vom Steuermodul 308 bestimmt, um die ungültigen Arbeitselemente vorübergehend aufeinander auszurichten.
  • Ferner können in anderen Beispielen verschiedene der Arbeitselemente von den Umtauschvorgängen selektiv umgetauscht werden. Die Positionen der Arbeitselemente, die umgetauscht werden können, sind jedoch in einem bestimmten Beispiel vorbestimmt, sodass keine Bits erforderlich sind, um anzuzeigen, welche Arbeitselemente umgetauscht worden sind. Jeder Indikator zum Anzeigen, wie die Arbeitselemente für eine Mehrzahl der Blöcke 808 umgeordnet wurden, kann drei Bits umfassen: zwei Bits, um eine Rotation der Arbeitselemente im Block 808 zu definieren und ein Bit, um zu definieren, ob ein Umtauschvorgang an zwei der Arbeitselemente an den vorbestimmten Positionen im Block von Arbeitselementen durchgeführt wurde.
  • Für Verarbeitungsvorgänge bzw. Arbeitsvorgänge, die Blöcke von Arbeitselementen umfassen, die jeweils drei ungültige Arbeitselemente umfassen, wird die Umordnung der Blöcke entsprechend der in 7 gezeigten und oben in Bezug auf Verarbeitungsvorgänge, die Blöcke von Arbeitselementen mit einem ungültigen Arbeitselement umfassen, beschriebenen Weise durchgeführt. Das heißt, es werden keine Umtauschvorgänge durchgeführt, aber es können einige Rotationsvorgänge durchgeführt werden, um die ungültigen Arbeitselemente aus verschiedenen Blöcken von Arbeitselementen in einem Verarbeitungsvorgang vorübergehend aufeinander auszurichten.
  • Wenn die Arbeitselemente von den Verarbeitungsbahnen 314 verarbeitet wurden, werden in Schritt S506 die aus den Verarbeitungsbahnen 314 ausgegebenen Datenelemente im Speicher 312 gespeichert. Die Speicherlogik 318 verwendet den Indikator, der anzeigt, wie die Arbeitselemente in den Verarbeitungsvorgängen zusammengestellt wurden, um Adressen zum Speichern der verarbeiteten Datenelemente im Speicher 312 zu bestimmen. Obwohl die Arbeitselemente zur Ausführung von den Verarbeitungsbahnen 314 umgeordnet werden können, wird die Speicheradresse, wenn die Ergebnisse im Speicher gespeichert werden, bestimmt, sodass die verarbeiteten Datenelemente an den korrekten Adressen im Speicher 312 gespeichert werden, z. B. als wären die Arbeitselemente nicht umgeordnet worden.
  • In den oben beschriebenen Beispielen können die Arbeitselemente eine von zwei Gültigkeitsebenen aufweisen: ein Arbeitselement ist entweder gültig oder ungültig. In anderen Beispielen können jedoch mehr als zwei Gültigkeitsebenen, die Arbeitselemente aufweisen könnten, existieren. Zum Beispiel kann an einem Pixel ein Texturierungsvorgang vorgenommen werden, der ein Verwenden der Gradienten der benachbarten Pixel (z. B. unter Ausschluss diagonaler Nachbarn) beinhalten kann. In diesem Fall, falls der Texturierungsvorgang an einem bestimmten Pixel eines Pixelquads durchzuführen ist, kann das bestimmte Pixel als gültiges Datenelement angesehen werden, auf dem eine große Anzahl von Befehlen von den Verarbeitungsbahnen 314 durchzuführen ist, um den Texturierungsvorgang zu implementieren; während die benachbarten Pixel im Pixelquad, mit Ausnahme des diagonalen Nachbarn, als teilweise ungültige Datenelemente zu betrachten sein können, auf denen eine geringere Anzahl von Befehlen von den Verarbeitungsbahnen 314 durchzuführen ist, um den Texturierungsvorgang zu implementieren; während der diagonale Nachbar im Pixelquad als vollständig ungültiges Datenelement zu betrachten sein kann, auf dem keine oder eine sehr geringe Anzahl von Befehlen von den Verarbeitungsbahnen 314 durchzuführen ist, um den Texturierungsvorgang zu implementieren. Es kann hilfreich sein, Arbeitselemente, die dieselbe Gültigkeitsebene aufweisen, aufeinander auszurichten. Auf diese Weise werden, wenn Befehle an gültigen und teilweise gültigen Datenelementen durchzuführen sind, aber keine Befehle an ungültigen Datenelementen durchzuführen sind, die ungültigen Arbeitselemente, die den ungültigen Datenelementen entsprechen, aufeinander ausgerichtet und können übersprungen werden. Wenn alle Befehle für die teilweise ungültigen Datenelemente durchgeführt worden sind, aber weiterhin Befehle an den gültigen Datenelementen durchzuführen sind, werden außerdem die teilweise ungültigen Arbeitselemente aufeinander ausgerichtet und können übersprungen werden.
  • Wie bereits festgestellt, verwenden einige Befehle Informationen von anderen Pixeln in einem 2×2-Pixelblock, zum Beispiel werden beim Texturieren Gradienten in Pixeln berechnet, um auf nach Stand der Technik bekannte Weise eine Detailebene zu bestimmen. Als solche werden Befehle, die Ergebnisse in diese Art von Befehl (z. B. Texturierungsbefehle) einspeisen, auf einigen ungültigen Pixeln in einem 2×2-Pixelblock ausgeführt, z. B. von dem Vorverarbeitungsmodul 313. Da einige Befehle nicht dazu beitragen, 2×2-Block-Befehle zu kreuzen, ist es wünschenswert, zwischen den zwei Arten von Befehlen zu unterscheiden. Dazu wird vorgeschlagen, ein Bit in den Befehl einzubauen, der codiert, um anzuzeigen, ob ein Befehl auf einer ungültigen Instanz auszuführen ist.
  • Ein weiteres Beispiel dafür, wie Arbeitselemente aus Verarbeitungsvorgängen in einer Mehrzahl von Verarbeitungsbahnen ausgeführt werden können, wird in Bezug auf 9 und 10 beschrieben. 9 zeigt ein Ausführungsschema 900, das definiert, wie die Arbeitselemente eines Verarbeitungsvorgangs in einem Beispiel Verarbeitungsschlitzen in den Verarbeitungsbahnen 314 zugeordnet werden. In diesem Beispiel gibt es sechzehn Verarbeitungsbahnen (gleich wie in den oben beschriebenen Beispielen), und die Verarbeitungsbahnen sind in vier parallele Gruppen 902 1, 902 2, 902 3, 902 4 unterteilt, die jeweils vier Verarbeitungsbahnen umfassen. Ähnlich dem oben in Bezug auf 6 beschriebenen Beispiel sind Befehle der zweiunddreißig möglichen Arbeitselemente eines Verarbeitungsvorgangs zur Ausführung über eine Gruppe von vier Verarbeitungsbahnen und acht aufeinanderfolgenden Verarbeitungszyklen eingeplant. Das heißt, dass jede Gruppe von Verarbeitungsbahnen ausgelegt ist, Arbeitselemente eines entsprechenden Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen auszuführen. 9 zeigt, wie Befehle der Arbeitselemente eines Verarbeitungsvorgangs, der nur siebzehn Arbeitselemente umfasst, in diesem Beispiel in den Verarbeitungsbahnen der Gruppe 902 1 eingeplant sind.
  • Im in 9 gezeigten Beispiel ist die Anzahl von Arbeitselementen in einem Block von Arbeitselementen (z. B. vier im Fall von Pixelquads, wie oben beschrieben) gleich der Anzahl von Verarbeitungsbahnen in jeder der Gruppen von Verarbeitungsbahnen (z. B. vier). Auf diese Weise sind die Verarbeitungsbahnen der Gruppe für jede der Gruppen in jedem der Verarbeitungszyklen ausgelegt, Befehle von Arbeitselementen in Bezug auf entsprechende Datenelemente aus einem Block von Datenelementen auszuführen. Mit anderen Worten sind die Blöcke von Arbeitselementen in einer Spalte-zuerst-Ordnung angeordnet. Zum Beispiel werden, wie in 9 gezeigt, Befehle der Arbeitselemente 0 bis 3 des ersten Blocks von Arbeitselementen eines Verarbeitungsvorgangs in einem ersten Verarbeitungszyklus (clk0) in den Verarbeitungsbahnen der Gruppe 902 1 ausgeführt; Befehle der Arbeitselemente 4 bis 7 des zweiten Blocks von Arbeitselementen eines Verarbeitungsvorgangs in einem zweiten Verarbeitungszyklus (clk1) in den Verarbeitungsbahnen der Gruppe 902 1 ausgeführt; Befehle der Arbeitselemente 8 bis 11 des dritten Blocks von Arbeitselementen eines Verarbeitungsvorgangs in einem dritten Verarbeitungszyklus (clk2) in den Verarbeitungsbahnen der Gruppe 902 1 ausgeführt; Befehle der Arbeitselemente 12 bis 15 des vierten Blocks von Arbeitselementen eines Verarbeitungsvorgangs in einem vierten Verarbeitungszyklus (clk3) in den Verarbeitungsbahnen der Gruppe 902 1 ausgeführt; und ein Befehl des Arbeitselements 16 des fünften Blocks von Arbeitselementen eines Verarbeitungsvorgangs in einem fünften Verarbeitungszyklus (clk4) in einer der Verarbeitungsbahnen der Gruppe 902 1 ausgeführt.
  • 10 zeigt die Grundschritte des Verfahrens zum Verwenden der SIMD-Verarbeitungseinheit 302 zum Verarbeiten von Verarbeitungsvorgängen unter Verwendung des in 9 gezeigten Ausführungsschemas 900. In Schritt S1002 werden die Arbeitselemente der Verarbeitungsvorgänge in den entsprechenden Gruppen von Verarbeitungsbahnen 902 gemäß dem in 9 gezeigten Ausführungsschema 900 ausgeführt. In Schritt S1004, ähnlich wie oben in Bezug auf das in 6 gezeigte Beispiel beschrieben, überspringt eine bestimmte Gruppe von Verarbeitungsbahnen einen bestimmten Verarbeitungszyklus unabhängig von den anderen Gruppen der Verarbeitungsbahnen, falls keine Arbeitselemente zur Ausführung in den Verarbeitungsbahnen der bestimmten Gruppe im bestimmten Verarbeitungszyklus eingeplant sind.
  • In Bezug auf 9 zum Beispiel umfasst der der Gruppe von Verarbeitungsbahnen 902 1 zugewiesene Verarbeitungsvorgang keine Arbeitselemente, die in den Verarbeitungszyklen clk5 bis clk7 auszuführen sind, wie in 9 durch 904 gekennzeichnet. Daher kann die Gruppe von Verarbeitungsbahnen 902 1 diese Verarbeitungszyklen 904 überspringen. Andere Arbeitselemente aus darauffolgenden Verarbeitungsvorgängen (in 9 nicht gezeigt) können in den Verarbeitungsbahnen der Gruppe 902 1 in den Verarbeitungszyklen 904 ausgeführt werden. Auf diese Weise bleiben die Verarbeitungsschlitze in der ersten Gruppe von Verarbeitungsbahnen 902 1 in den Verarbeitungszyklen 904 nicht ungenutzt. Dies entspricht dem, was weiter oben in Bezug auf 6 beschrieben wurde.
  • In einigen Fällen können im in 9 gezeigten Beispiel jedoch weniger Verarbeitungsschlitze ungenutzt bleiben als im in 6 gezeigten Beispiel. Falls zum Beispiel der der Gruppe 902 1 zugewiesene Verarbeitungsvorgang 20 Arbeitselemente umfasst, würden gemäß dem Ausführungsschema 900 die Arbeitselemente alle Verarbeitungsschlitze in der Gruppe von Verarbeitungsbahnen 902 1 in den ersten fünf Verarbeitungszyklen beanspruchen, doch wären die späteren Verarbeitungszyklen 904 weiterhin leer und könnten somit übersprungen werden. Im Gegensatz dazu würde im in 6 gezeigten Beispiel ein Verarbeitungsvorgang, der 20 Arbeitselemente umfasst, ein auszuführendes Arbeitselement in jedem der acht Verarbeitungszyklen, clk0 bis clk7, einplanen und somit zwölf Verarbeitungsschlitze ungenutzt lassen.
  • Darüber hinaus kann das in 9 gezeigte Ausführungsschema 900 besonders für die Verwendung mit der Steuerung von divergentem Fluss geeignet sein. Wie oben beschrieben ist die SIMD-Verarbeitungseinheit 302 ausgelegt, Verarbeitungsvorgänge auszuführen, die mehrere Fälle desselben, auf entsprechenden Datenelementen durchzuführenden Befehls umfassen. Das heißt, dass derselbe Befehl auf mehreren Datenelementen in einem bestimmten Verarbeitungszyklus für einen Verarbeitungsvorgang durchgeführt wird. Einige Befehle können jedoch bewirken, dass basierend auf den speziellen Datenelementen, die gerade verarbeitet werden, verschiedene aufeinanderfolgende Befehle durchgeführt werden. Zum Beispiel können WENN-DANN-SONST-Konstruktionen zur Folge haben, dass ein erster Befehl („Befehl A”) zur Ausführung auf einer ersten Gruppe von Datenelementen eingeplant wird und ein zweiter Befehl („Befehl B”) zur Ausführung auf einer zweiten Gruppe von Datenelementen eingeplant wird. In diesem Fall kann der erste Befehl auf allen Datenelementen ausgeführt werden, aber eine erste Maske wird verwendet, sodass nur die Ergebnisse der Ausführung des Befehls auf der ersten Gruppe von Datenwerten (d. h. nicht der zweiten Gruppe von Datenwerten) verwendet werden, um die Werte im Speicher 312 zu aktualisieren. Dann kann der zweite Befehl auf allen Datenelementen ausgeführt werden, es wird jedoch eine zweite Maske verwendet, sodass nur die Ergebnisse der Ausführung des Befehls auf der zweiten Gruppe von Datenwerten (d. h. nicht der ersten Gruppe von Datenwerten) verwendet werden, um die Werte im Speicher 312 zu aktualisieren. Das bedeutet, dass der Befehl zweimal durchgeführt wird und daher für mehr als zweimal die Anzahl von Verarbeitungszyklen eingeplant wird. Falls alle Arbeitselemente, die für einen Verarbeitungszyklus eingeplant sind, ausgeblendet werden, kann dieser Verarbeitungszyklus allerdings übersprungen werden. Da die Gruppe von Verarbeitungsbahnen für einen Verarbeitungsvorgang nur vier Verarbeitungsbahnen umfasst, ist es wahrscheinlicher, dass im in 2 gezeigten Beispiel alle Verarbeitungsbahnen für einen Verarbeitungsvorgang ein ausgeblendetes Arbeitselement in einem bestimmten Verarbeitungszyklus umfassen. Da Verarbeitungszyklen für Gruppen von Verarbeitungsbahnen unabhängig von anderen Verarbeitungsbahnen übersprungen werden können, können mehr Verarbeitungsschlitze durch das Unterteilen der Gesamtanzahl von Verarbeitungsbahnen in Gruppen übersprungen werden. Das bedeutet, dass das Unterteilen der Gesamtanzahl von Verarbeitungsbahnen in Gruppen, wie hier beschrieben, eine feinere Körnung bereitstellt, wenn Verarbeitungszyklen mit Steuerung von divergentem Fluss übersprungen werden.
  • Ferner kann das in 9 gezeigte Ausführungsschema 900 für den Gebrauch mit der Steuerung von divergentem Fluss noch geeigneter sein als das in 6 gezeigte Ausführungsschema 600. Grund dafür ist, dass Arbeitselemente aus demselben Block von Arbeitselementen häufig auf ähnliche Weise divergieren, und gemäß dem Ausführungsschema 900 jede Gruppe von Verarbeitungsbahnen 902 Arbeitselemente aus nur einem Block in jedem Verarbeitungszyklus verarbeitet. Falls ein Arbeitselement aus einem Block von Arbeitselementen für einen bestimmten Verarbeitungszyklus ausgeblendet wird, dann ist es daher wahrscheinlich, dass auch die anderen Arbeitselemente in diesem Block für den bestimmten Verarbeitungszyklus ausgeblendet werden, sodass der bestimmte Verarbeitungszyklus für die geeignete Gruppe von Verarbeitungsbahnen übersprungen werden kann.
  • Wie oben erwähnt, umfassen Verarbeitungsvorgänge eine Mehrzahl von Arbeitselementen, die einen gemeinsamen Befehlsstrom auf einer entsprechenden Mehrzahl von Datenelementen ausführen. Anstatt nacheinander alle Befehle eines Verarbeitungsvorgangs auszuführen und dann zum nächsten Verarbeitungsvorgang überzugehen, kann es eine Mehrzahl von Verarbeitungsvorgängen geben, für die Befehle der Reihe nach durchgeführt werden. Das heißt, dass es eine Gruppe von NVerarbeitungsvorgang Verarbeitungsvorgängen geben kann (z. B. kann NVerarbeitungsvorgang gleich 20 sein), für die Befehle der Reihe nach durchgeführt werden, sodass ein Befehl von einem ersten Verarbeitungsvorgang durchgeführt wird, dann ein Befehl vom nächsten Verarbeitungsvorgang und so weiter für alle NVerarbeitungsvorgang Verarbeitungsvorgänge der Gruppe. Dann läuft die Reihenfolge rückwärts, sodass der nächste Befehl vom ersten Verarbeitungsvorgang durchgeführt wird, dann der nächste Befehl vom nächsten Verarbeitungsvorgang und so weiter. Auf diese Weise besteht ein Zeitraum zwischen der Ausführung von Befehlen von einem bestimmten Verarbeitungsvorgang. Dies kann hilfreich sein, da es eine Latenzzeit des Prozesses (z. B. zum Ablesen oder Schreiben von Daten usw.) ermöglicht, die mit den Befehlen verbunden sein kann, die auf den Datenelementen durchgeführt werden, bevor der nächste Befehl des Verarbeitungsvorgangs ausgeführt wird.
  • Die Anzahl von Verarbeitungsvorgängen, NVerarbeitungsvorgang, die in der Gruppe von Verarbeitungsvorgängen enthalten sind, für die vor dem Wiederholen von Verarbeitungsvorgängen Arbeitselemente ausgeführt werden, können in verschiedenen Beispielen unterschiedlich sein und in verschiedenen Beispielen fest oder variabel sein. Zum Beispiel kann NVerarbeitungsvorgang abhängig von der Anzahl von z. B. aufgrund der hier beschriebenen Verfahren übersprungenen Verarbeitungszyklen variieren. Je mehr Verarbeitungszyklen übersprungen werden, desto eher wird nach Abschluss des vorhergehenden Befehls des Verarbeitungsvorgangs der nächste Befehl eines Verarbeitungsvorgangs durchgeführt, und desto weniger Zeit ist daher für die Latenzzeit des Prozesses vorhanden. Falls daher die Anzahl von in einem gegebenen Zeitraum übersprungenen Verarbeitungszyklen zunimmt, dann kann die Anzahl NVerarbeitungsvorgang erhöht werden, z. B. mit dem Ziel, einen annähernd konstanten Zeitraum zwischen der Ausführung aufeinanderfolgender Befehle von einem bestimmten Verarbeitungsvorgang bereitzustellen, um so eine bestimmte Latenzzeit des Prozesses für die Befehle des Verarbeitungsvorgangs zu ermöglichen.
  • In den oben beschriebenen Beispielen umfasst ein Verarbeitungsvorgang eine Höchstanzahl von zweiunddreißig Arbeitselementen. Allgemeiner gesagt, kann in anderen Beispielen die Höchstanzahl von Arbeitselementen in einem Verarbeitungsvorgang, NArbeit, irgendeine Zahl sein, aber der Einfachheit halber wäre NArbeit normalerweise eine Zweierpotenz.
  • In den oben beschriebenen Beispielen gibt es sechzehn Verarbeitungsbahnen 314 im Ausführungsmodul 310. Allgemeiner gesagt, kann in anderen Beispielen irgendeine Anzahl von Verarbeitungsbahnen im Ausführungsmodul vorhanden sein, doch der Einfachheit halber wäre die Anzahl von Verarbeitungsbahnen im Ausführungsmodul, NVerarb, normalerweise eine Zweierpotenz.
  • In den oben beschriebenen Beispielen sind ferner in einem Block von Datenelementen vier Datenelemente vorhanden. In den hier beschriebenen Hauptbeispielen bedeutet das, dass die Blöcke von Datenelementen Pixelquads sind. Allgemeiner gesagt, kann irgendeine Anzahl von Datenelementen in jedem Block von Datenelementen vorhanden sein, doch der Einfachheit halber wäre die Anzahl von Datenelementen in jedem Block von Datenelementen, NElemente, normalerweise eine Zweierpotenz. Darüber hinaus kann der Einfachheit halber NElemente ausgewählt sein, ein Faktor von NVerarb (d. h. NVerarb mod NElemente = 0) sein, sodass eine ganze Zahl von Blöcken von Arbeitselementen in allen Verarbeitungsbahnen in einem Verarbeitungszyklus verarbeitet werden kann.
  • Wie oben beschrieben sind außerdem die Datenelemente im Fall der SIMD-Verarbeitungseinheit 302, die Grafikdaten als Teil einer GPU verarbeitet, Pixelwerte. In anderen Beispielen könnten die Datenelemente allerdings nicht Pixelwerte sein, sondern andere Arten von Datenelementen, wie Fragmentwerte oder Scheitelwerte, oder Nicht-Grafikdatenelemente, zum Beispiel wenn die Verarbeitungseinheit 302 auf einem OpenCL-Programm läuft, um eine Parallelberechnung für allgemeine Zwecke durchzuführen. Die Datenelemente sind insofern zum Verarbeiten durch eine SIMD-Verarbeitungseinheit geeignet, als mehrere Fälle eines Befehls auf verschiedenen Datenelementen parallel durchgeführt werden.
  • In den hier beschriebenen Beispielen sind die Verarbeitungszyklen Taktungszyklen. Allgemeiner gesagt, kann in anderen Beispielen jeder Verarbeitungszyklus einen oder mehrere Taktungszyklen umfassen.
  • Im Allgemeinen können alle oben beschriebenen Funktionen, Verfahren, Techniken oder Bauteile in Modulen implementiert sein, die Software, Firmware, Hardware (z. B. Festlogikschaltungen) oder eine beliebige Kombination aus diesen Implementierungen verwenden. Die Begriffe „Modul”, „Funktionalität”, „Bauteil”, „Einheit” und „Logik” werden hier so verwendet, dass sie allgemein für eine Software, Firmware Hardware oder eine beliebige Kombination daraus stehen.
  • Im Fall einer Softwareimplementierung stellt das Modul, die Einheit, die Funktionalität, das Bauteil oder die Logik einen Programmkode dar, der spezielle Verarbeitungsvorgänge durchführt, wenn er auf einem Prozessor (z. B. einer oder mehrere CPU) ausgeführt wird. In einem Beispiel können die beschriebenen Verfahren von einem Computer durchgeführt werden, der mit einer auf einem computerlesbaren Medium gespeicherten Software in maschinenlesbarer Form konfiguriert ist. Eine solche Konfiguration eines computerlesbaren Mediums ist ein Signalübermittlungsmedium, das daher ausgelegt ist, die Befehle (z. B. als Trägerwelle) an die Berechnungsvorrichtung zu übertragen, etwa über ein Netz. Das computerlesbare Medium kann auch als ein nicht vorübergehendes computerlesbares Speichermedium ausgelegt sein und daher kein Signalübermittlungsmedium sein. Beispiele eines computerlesbaren Speicherelements umfassen einen Direktzugriffspeicher (RAM), einen Festwertspeicher (ROM), eine optische Platte, einen Flash-Speicher, einen Festplattenspeicher und sonstige Speichervorrichtungen, die Magnet-, Optik- und sonstige Techniken verwenden, um Befehle oder sonstige Daten zu speichern, und auf die eine Maschine zugreifen kann.
  • Die Software kann in Form eines Computerprogramms vorliegen, das einen Computerprogrammkode zum Konfigurieren eines Computers zur Durchführung der wesentlichen Abschnitte von beschriebenen Verfahren umfasst, oder in Form eines Computerprogramms, das Computerprogrammkodemittel umfasst, die geeignet sind, alle Schritte irgendeines der hier beschriebenen Verfahren durchzuführen, wenn das Programm auf einem Computer läuft, und wo das Computerprogramm auf einem computerlesbaren Medium vorliegen kann. Der Programmkode kann auf einem oder mehreren computerlesbaren Medien gespeichert sein. Die Merkmale der hier beschriebenen Verfahren sind plattformunabhängig, was bedeutet, dass die Techniken auf einer Mehrzahl von Berechnungsplattformen mit einer Mehrzahl von Prozessoren implementiert sein können.
  • Fachleute werden ebenfalls erkennen, dass die Gesamtheit oder ein Teil der Funktionalität, der Techniken oder der Verfahren von einer Festschaltung, einer anwendungsspeziellen integrierten Schaltung, einer programmierbaren Logikanordnung, einer feldprogrammierbaren Gatter-Anordnung oder dergleichen durchgeführt werden kann. Beispielsweise kann das Modul, die Einheit, die Funktionalität, das Bauteil oder die Logik Hardware in Form von Schaltungen umfassen. Solche Schaltungen können Transistoren und/oder andere Hardware-Elemente, die in einem Herstellungsprozess verfügbar sind, umfassen. Solche Transistoren und/oder anderen Elemente können verwendet werden, um Schaltungen oder Strukturen zu bilden, die z. B. einen Speicher wie Register, Flip-Flop-Schaltungen oder Verriegelungen, logische Operatoren wie Boolsche Operatoren, mathematische Operatoren wie Addierer, Multiplikatoren oder Verschieber und Zwischenschaltungen implementieren und/oder enthalten. Solche Elemente können als spezielle Schaltungen oder Standard-Zellenbibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt sein.
  • Solche Elemente können in einer speziellen Anordnung miteinander verbunden sein. Das Modul, die Einheit, die Funktionalität, das Bauteil oder die Logik kann Schaltungen mit einer festen Funktion und Schaltungen, die programmiert sein können, eine Funktion oder Funktionen auszuführen, umfassen; eine solche Programmierung kann von einer Firmware- oder Softwareaktualisierung oder einem Steuermechanismus bereitgestellt werden. In einem Beispiel weist eine Hardwarelogik Schaltungen auf, die einen Festfunktionsbetrieb, eine Zustandsmaschine oder einen Vorgang ausführen.
  • Ebenfalls soll Software beinhaltet sein, die die Konfiguration von Hardware „beschreibt” oder definiert, die ein Modul, eine Einheit, eine Funktionalität, ein Bauteil oder eine Logik, die oben beschrieben wurden, ausführt, wie HDL(Hardware Description Language)-Software, wie sie für das Erstellen von integrierten Schaltungen oder für das Konfigurieren von programmierbaren Chips verwendet wird, um gewünschte Funktionen auszuführen. Das heißt, es kann ein computerlesbares Speichermedium mit einem darauf kodierten computerlesbaren Programmkode zum Erstellen einer Prozessoreinheit bereitgestellt sein, um jedes der hier beschriebenen Verfahren durchzuführen oder um eine Prozessoreinheit zu erstellen, die eine der hier beschriebenen Vorrichtungen umfasst.
  • Die Begriffe „Prozessor” und „Rechner” werden hier so verwendet, dass sie sich auf jede Vorrichtung oder einen Teil davon mit einer Prozessorfähigkeit beziehen, sodass sie Befehle ausführen kann, oder dass sie sich auf eine Festschaltung beziehen, die in der Lage ist, die Gesamtheit oder einen Teil der Funktionalität oder der Verfahren oder eine beliebige Kombination daraus durchzuführen.
  • Obwohl der Gegenstand in einer Sprache beschrieben wurde, die speziell für strukturelle Merkmale und/oder methodologische Vorgänge ist, gilt zu verstehen, dass der Gegenstand, der in den beigefügten Patentansprüchen definiert ist, nicht notwendigerweise auf die oben beschriebenen speziellen Merkmale oder Vorgänge beschränkt ist. Vielmehr sind die speziellen oben beschriebenen Merkmale und Vorgänge als beispielhafte Formen zum Implementieren der Patentansprüche offenbart.
  • Es gilt zu verstehen, dass der oben beschriebene Nutzen und die Vorteile ein Beispiel oder mehrere Beispiele betreffen können.
  • Jeder beliebige Bereich oder Wert, der hier angegeben ist, kann erweitert oder verändert werden, ohne dabei den gewünschten Effekt zu verlieren, wie Fachleuten bewusst sein dürfte. Die Schritte der hier beschriebenen Verfahren können in jeder geeigneten Reihenfolge oder, falls angemessen, gleichzeitig durchgeführt werden. Aspekte jedes der oben beschriebenen Beispiele können mit Aspekten von jedem der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne den gewünschten Effekt zu verlieren.

Claims (11)

  1. SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit, die ausgelegt ist, eine Mehrzahl von Verarbeitungsvorgängen zu verarbeiten, die jeweils bis zu einer vorbestimmten Höchstanzahl von Arbeitselementen umfassen, wobei einige der Verarbeitungsvorgänge weniger als die vorbestimmte Höchstanzahl von Arbeitselementen umfassen und wobei die Arbeitselemente eines Verarbeitungsvorgangs ausgelegt sind zum Ausführen einer gemeinsamen Sequenz von Befehlen an jeweiligen Arbeitselementen, wobei die SIMD-Verarbeitungseinheit umfasst: eine Mehrzahl von parallelen Gruppen von Verarbeitungsbahnen, wobei jede Gruppe ausgelegt ist, Befehle von Arbeitselementen eines jeweiligen Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen auszuführen; und mit den Gruppen von Verarbeitungsbahnen gekoppelte Logik, die ausgelegt ist, zu bewirken, dass eine bestimmte Gruppe von Verarbeitungsbahnen einen bestimmten Verarbeitungszyklus überspringt, unabhängig von den anderen Gruppen von Verarbeitungsbahnen, wenn es keine Arbeitselemente gibt, die zur Ausführung in irgendeiner der Verarbeitungsbahnen der bestimmten Gruppe in dem bestimmten Verarbeitungszyklus eingeteilt sind.
  2. SIMD-Verarbeitungseinheit nach Anspruch 1, wobei die Datenelemente in Blöcken von Datenelementen angeordnet sind, die Anzahl der Datenelemente in jedem der Blöcke von Datenelementen gleich der Anzahl der Verarbeitungsbahnen in jeder der Gruppen von Verarbeitungsbahnen ist und wobei für jede der Gruppen in jedem der Verarbeitungszyklen die Verarbeitungsbahnen der Gruppe dafür ausgelegt sind, Befehle von Arbeitselementen in Bezug auf entsprechende Datenelemente aus einem Block von Datenelementen auszuführen.
  3. SIMD-Verarbeitungseinheit nach Anspruch 1, wobei die Datenelemente in Blöcken von Datenelementen angeordnet sind und wobei für jede der Gruppen jede der Verarbeitungsbahnen der Gruppe dafür ausgelegt ist, Befehle von Arbeitselementen in Bezug auf einen jeweiligen Block von Datenelementen über eine Mehrzahl von aufeinanderfolgenden Verarbeitungszyklen auszuführen.
  4. SIMD-Verarbeitungseinheit nach einem der vorhergehenden Ansprüche, wobei die Datenelemente Pixelwerte sind.
  5. SIMD-Verarbeitungseinheit nach Anspruch 4 bei Abhängigkeit von Anspruch 2 oder 3, wobei der Block von Datenelementen ein Pixelquad ist.
  6. Verfahren zur Verwendung einer SIMD(Single Instruction Multiple Data)-Verarbeitungseinheit, um eine Mehrzahl von Verarbeitungsvorgängen zu verarbeiten, die jeweils bis zu einer vorbestimmten Höchstanzahl von Arbeitselementen umfassen, wobei einige der Verarbeitungsvorgänge weniger als die vorbestimmte Höchstanzahl von Arbeitselementen umfassen und wobei die Arbeitselemente eines Verarbeitungsvorgangs ausgelegt sind zum Ausführen einer gemeinsamen Sequenz von Befehlen an jeweiligen Arbeitselementen, wobei die SIMD-Verarbeitungseinheit eine Mehrzahl von parallelen Gruppen von Verarbeitungsbahnen umfasst, wobei das Verfahren umfasst: Ausführen von Befehlen von Arbeitselementen eines jeweiligen Verarbeitungsvorgangs über eine Mehrzahl von Verarbeitungszyklen in jeder Gruppe von Verarbeitungsbahnen; und Bewirken, dass eine bestimmte Gruppe von Verarbeitungsbahnen einen bestimmten Verarbeitungszyklus überspringt, unabhängig von den anderen Gruppen von Verarbeitungsbahnen, wenn es keine Arbeitselemente gibt, die zur Ausführung in irgendeiner der Verarbeitungsbahnen der bestimmten Gruppe in dem bestimmten Verarbeitungszyklus eingeteilt sind.
  7. Verfahren nach Anspruch 6, wobei die Datenelemente in Blöcken von Datenelementen angeordnet sind, die Anzahl der Datenelemente in jedem der Blöcke von Datenelementen gleich der Anzahl der Verarbeitungsbahnen in jeder der Gruppen von Verarbeitungsbahnen ist und wobei für jede der Gruppen in jedem der Verarbeitungszyklen die Verarbeitungsbahnen der Gruppe Befehle von Arbeitselementen in Bezug auf entsprechende Datenelemente aus einem Block von Datenelementen ausführen.
  8. Verfahren nach Anspruch 6, wobei die Datenelemente in Blöcken von Datenelementen angeordnet sind und wobei für jede der Gruppen jede der Verarbeitungsbahnen der Gruppe Befehle von Arbeitselementen in Bezug auf einen jeweiligen Block von Datenelementen über eine Mehrzahl von aufeinanderfolgenden Verarbeitungszyklen ausführt.
  9. Verfahren nach einem der Ansprüche 6 bis 8, wobei die Datenelemente Pixelwerte sind.
  10. Verfahren nach Anspruch 9 bei Abhängigkeit von Anspruch 7 oder 8, wobei der Block von Datenelementen ein Pixelquad ist.
  11. Computerlesbares Speichermedium, auf dem computerlesbarer Code zum Erzeugen einer SIMD-Verarbeitungseinheit gemäß einem der Ansprüche 1 bis 5 codiert ist.
DE102014119038.6A 2013-12-18 2014-12-18 Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit Ceased DE102014119038A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1322388.8 2013-12-18
GB1322388.8A GB2516995B (en) 2013-12-18 2013-12-18 Task execution in a SIMD processing unit

Publications (1)

Publication Number Publication Date
DE102014119038A1 true DE102014119038A1 (de) 2015-06-18

Family

ID=50070997

Family Applications (2)

Application Number Title Priority Date Filing Date
DE102014119038.6A Ceased DE102014119038A1 (de) 2013-12-18 2014-12-18 Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit
DE102014119048.3A Ceased DE102014119048A1 (de) 2013-12-18 2014-12-18 Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE102014119048.3A Ceased DE102014119048A1 (de) 2013-12-18 2014-12-18 Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit

Country Status (4)

Country Link
US (7) US9513963B2 (de)
CN (2) CN104731561B (de)
DE (2) DE102014119038A1 (de)
GB (2) GB2516995B (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2526598B (en) 2014-05-29 2018-11-28 Imagination Tech Ltd Allocation of primitives to primitive blocks
JP6825323B2 (ja) * 2016-11-14 2021-02-03 富士通株式会社 情報処理装置、情報処理システム、および状態情報収集プログラム
GB2578932B (en) * 2019-02-14 2021-02-24 Imagination Tech Ltd Allocation of memory
US10861126B1 (en) * 2019-06-21 2020-12-08 Intel Corporation Asynchronous execution mechanism
US20210349717A1 (en) * 2020-05-05 2021-11-11 Intel Corporation Compaction of diverged lanes for efficient use of alus
GB2599451B (en) 2020-09-30 2022-11-02 Imagination Tech Ltd Building and scheduling tasks for parallel processing

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6079008A (en) * 1998-04-03 2000-06-20 Patton Electronics Co. Multiple thread multiple data predictive coded parallel processing system and method
US7233998B2 (en) * 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US6803916B2 (en) * 2001-05-18 2004-10-12 Sun Microsystems, Inc. Rasterization using two-dimensional tiles and alternating bins for improved rendering utilization
US7383427B2 (en) * 2004-04-22 2008-06-03 Sony Computer Entertainment Inc. Multi-scalar extension for SIMD instruction set processors
ATE420403T1 (de) 2004-10-25 2009-01-15 Bosch Gmbh Robert Verfahren und vorrichtung zur modusumschaltung und zum signalvergleich bei einem rechnersystem mit wenigstens zwei verarbeitungseinheiten
GB2423604B (en) * 2005-02-25 2007-11-21 Clearspeed Technology Plc Microprocessor architectures
US7861060B1 (en) * 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US8031208B2 (en) * 2005-12-26 2011-10-04 Kabushiki Kaisha Toshiba Drawing apparatus and method for processing plural pixels in parallel
US8049760B2 (en) 2006-02-06 2011-11-01 Via Technologies, Inc. System and method for vector computations in arithmetic logic units (ALUs)
EP2056212B1 (de) * 2006-08-23 2013-04-10 NEC Corporation Paralleles prozessorsystem mit mischmodus und verfahren für paralleles prozessorsystem mit mischmodus
US20080091924A1 (en) * 2006-10-13 2008-04-17 Jouppi Norman P Vector processor and system for vector processing
US7809925B2 (en) * 2007-12-07 2010-10-05 International Business Machines Corporation Processing unit incorporating vectorizable execution unit
CN101572693A (zh) * 2008-04-29 2009-11-04 国际商业机器公司 用于并行模式匹配的设备和方法
CN101799750B (zh) * 2009-02-11 2015-05-06 上海芯豪微电子有限公司 一种数据处理的方法与装置
US8335238B2 (en) * 2008-12-23 2012-12-18 International Business Machines Corporation Reassembling streaming data across multiple packetized communication channels
KR101049928B1 (ko) * 2011-02-21 2011-07-15 (주)올라웍스 파노라마 이미지를 생성하기 위한 방법, 사용자 단말 장치 및 컴퓨터 판독 가능한 기록 매체
US20130139022A1 (en) * 2011-11-28 2013-05-30 Lsi Corporation Variable Sector Size LDPC Decoder
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
CN103077008B (zh) * 2013-01-30 2014-12-03 中国人民解放军国防科学技术大学 数组相加运算汇编库程序的地址对齐simd加速方法
US20150017040A1 (en) * 2013-07-12 2015-01-15 Denso Corporation Pulsation damper and high-pressure pump having the same
US20150205609A1 (en) * 2013-12-11 2015-07-23 Mill Computing, Inc. Computer Processor Employing Operand Data With Associated Meta-Data
US9552667B2 (en) * 2013-12-13 2017-01-24 Nvidia Corporation Adaptive shading in a graphics processing pipeline

Also Published As

Publication number Publication date
GB2517055A (en) 2015-02-11
GB2517055B (en) 2015-08-19
CN104731561B (zh) 2017-05-31
CN104731562B (zh) 2019-07-30
US20150169370A1 (en) 2015-06-18
GB2516995A (en) 2015-02-11
US11734788B2 (en) 2023-08-22
US20230394615A1 (en) 2023-12-07
CN104731562A (zh) 2015-06-24
US11189004B2 (en) 2021-11-30
DE102014119048A1 (de) 2015-06-18
GB2516995B (en) 2015-08-19
US9250961B2 (en) 2016-02-02
GB201322388D0 (en) 2014-02-05
GB201410389D0 (en) 2014-07-23
US9513963B2 (en) 2016-12-06
US20190244325A1 (en) 2019-08-08
CN104731561A (zh) 2015-06-24
US20170076420A1 (en) 2017-03-16
US20150170324A1 (en) 2015-06-18
US10679319B2 (en) 2020-06-09
US10311539B2 (en) 2019-06-04
US20200265546A1 (en) 2020-08-20
US20220051363A1 (en) 2022-02-17

Similar Documents

Publication Publication Date Title
DE102014119038A1 (de) Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit
DE202017103694U1 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE102017113859A1 (de) Blockoperationen für einen Bildprozessort mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE3784050T2 (de) Ein paralleler datenprozessor.
DE60132585T2 (de) Vorrichtung und verfahren zum ausgeben der gruppierung von befehlen in einem vliw-prozessor
DE102017125348A1 (de) Vektorverarbeitungseinheit
DE112016001866T5 (de) Zeilenpuffereinheit für Bildprozessor
DE102017113735A1 (de) Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE102009012409A1 (de) Systeme und Verfahren zum Zusammenfügen von Speicherzugriffen von parallelen Threads
DE202017103727U1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE102015224026A1 (de) Indirektes Erfassen von Sampledaten zur Durchführung mehrfacher Faltungsoperationen in einem Parallelverarbeitungssystem
DE60105510T2 (de) Bilderzeugungsgerät
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
EP1175663A1 (de) Verfahren zur rasterisierung eines graphikgrundelements
DE102009046847A1 (de) Mehrklassen-Daten-Cache-Verfahren
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013114351A1 (de) System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102013018136A1 (de) Technik zur Speicherung gemeinsamer Vertices
EP1599794B1 (de) Prozessor mit verschiedenartigen steuerwerken für gemeinsam genutzte ressourcen
DE102013018135B4 (de) Adressenbit-Wiederabbildungsschema zur Reduzierung einer Zugriffsauflösung von DRAM-Zugriffen
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE102019101909A1 (de) Verfahren für überlappende speicherzugriffe
DE4430195B4 (de) Verfahren zur Auswertung von Booleschen Ausdrücken
DE602004008818T2 (de) Verfahren zur Bezugnahme auf die Adresse von Vektordaten und Vektorprozessor

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R083 Amendment of/additions to inventor(s)
R016 Response to examination communication
R082 Change of representative

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

R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final