DE112020005617T5 - Simd-operand permutation mit auswahl von mehreren registern - Google Patents

Simd-operand permutation mit auswahl von mehreren registern Download PDF

Info

Publication number
DE112020005617T5
DE112020005617T5 DE112020005617.1T DE112020005617T DE112020005617T5 DE 112020005617 T5 DE112020005617 T5 DE 112020005617T5 DE 112020005617 T DE112020005617 T DE 112020005617T DE 112020005617 T5 DE112020005617 T5 DE 112020005617T5
Authority
DE
Germany
Prior art keywords
register
instruction
circuitry
value
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020005617.1T
Other languages
English (en)
Inventor
Burns Christopher A.
Liang-Kai Wang
Robert D. Kenney
Terence M. Potter
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.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of DE112020005617T5 publication Critical patent/DE112020005617T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)

Abstract

Es werden Techniken in Bezug auf Operand-Routing unter SIMD-Pipelines offenbart. In einigen Ausführungsformen schließt eine Einrichtung einen Satz mehrerer Hardware-Pipelines ein, die konfiguriert sind, um eine Single-Instruction-Multiple-Data-Anweisung (SIMD-Anweisung) für mehrere Threads parallel auszuführen, wobei die Anweisung erste und zweite Architekturregister angibt. In einigen Ausführungsformen schließen die Pipelines eine Ausführungsschaltlogik ein, die konfiguriert ist, um Operationen unter Verwendung einer oder mehrerer Pipelinesstufen der Pipeline durchzuführen. In einigen Ausführungsformen schließen die Pipelines eine Routingschaltlogik ein, die konfiguriert ist, um basierend auf der Anweisung einen ersten Eingabeoperanden für die Ausführungsschaltlogik von Folgendem auszuwählen: einen Wert aus dem ersten architektonischen Register aus dem threadspezifischen Speicher für eine andere Pipeline und einen Wert aus dem zweiten Architekturregister aus dem threadspezifischen Speicher für einen einer anderen Pipeline zugeordneten Thread. In einigen Ausführungsformen kann die Routingschaltlogik eine Verschiebe- und Füllanweisung unterstützen, die Speicherung eines beliebigen Abschnitts eines Grafikrahmens in einem oder mehreren Registern erleichtert.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Diese Offenbarung bezieht sich allgemein auf die Prozessorarchitektur und insbesondere auf eine Schaltung, die konfiguriert ist, um Operand-Routing unter Single-Instruction Multiple-Data-Pipelines (SIMD-Pipelines) durchzuführen.
  • Beschreibung des Stands der Technik
  • Viele Prozessoren führen Anweisungen unter Verwendung von SIMD-Architekturen aus (die auch als Single Instruction Multiple Thread-Architekturen (SIMT-Architekturen) bezeichnet werden können), in denen eine gegebene Operation für einen Satz mehrerer Threads spezifiziert ist, die den Betrieb auf potenziell unterschiedlichen Eingabedaten durchführen. Traditionell wurden private Threads nicht unter Threads in SIMD-Architekturen geteilt, z. B. arbeitet jeder Thread auf seinen privaten Operanden und teilen sich keine Daten mit anderen Threads. Verschiedene Rechenalgorithmen können Nachbarschaftsfilteroperationen für ein Pixel verwenden, das Werte von nahen Pixeln als Eingaben verwendet. Das Erhalten der benachbarten Pixeldaten kann erhebliche Mengen an Verarbeitungsressourcen in traditionellen SIMD-Implementierungen verwenden.
  • Figurenliste
    • 1 ist ein Blockdiagramm, das eine beispielhafte Pipeline mit Routingschaltlogik veranschaulicht, die konfiguriert ist, um einen Eingabeoperanden von Operanden aus mehreren Architekturregistern aus anderen Threads auszuwählen, gemäß einigen Ausführungsformen.
    • 2 ist ein Diagramm, das ein beispielhaftes Operand-Routing für verschiedene beispielhafte Verwendungen einer Verschiebe- und Füllanweisung gemäß einigen Ausführungsformen veranschaulicht.
    • 3A-3B sind Diagramme, die beispielhafte Fenstermanipulation innerhalb eines zweidimensionalen Rahmens von Grafikdaten gemäß einigen Ausführungsformen veranschaulichen.
    • 4 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für permutierende Operanden unter SIMD-Threads veranschaulicht, einschließlich Auswählen von unter mehreren Registern, um einen Eingabeoperanden bereitzustellen, gemäß einigen Ausführungsformen.
    • 5A ist ein Blockdiagramm, das ein Beispiel für eine hierarchische Routingschaltlogik veranschaulicht, wie sie in einigen Ausführungsformen verwendet wird.
    • 5B ist ein Blockdiagramm, das eine Multi-Level-Routingschaltlogik veranschaulicht, die einen Pegel einschließt, der eine vollständige Permutation zwischen den Teilsätzen von Eingängen unterstützt, und einen Auswahlpegel, der Ausgänge auswählt, gemäß einigen Ausführungsformen.
    • 6 ist ein Blockdiagramm, das ein spezifisches Beispiel einer mehrstufigen Routingschaltlogik mit Registerauswahlschaltlogik gemäß einigen Ausführungsformen veranschaulicht.
    • 7A-7B veranschaulichen einen Überblick über einen Grafikverarbeitungsfluss und einen Grafikprozessor gemäß einigen Ausführungsformen.
    • 8 ist ein Blockdiagramm, das eine beispielhafte Vorrichtung veranschaulicht, die gemäß einigen Ausführungsformen SIMD-Pipelines einschließen kann.
    • 9 ist ein Blockdiagramm, das ein beispielhaftes computerlesbares Speichermedium veranschaulicht, das Schaltungsdesigninformationen speichert, gemäß einigen Ausführungsformen.
  • Diese Beschreibung schließt Bezugnahmen auf verschiedene Ausführungsformen ein, um anzugeben, dass die vorliegende Offenbarung sich nicht auf eine bestimmte Umsetzung beziehen soll, sondern vielmehr auf eine Reihe von Ausführungsformen, die in den Geist der vorliegenden Offenbarung fallen, einschließlich der beigefügten Ansprüche. Besondere Merkmale, Strukturen oder Eigenschaften können auf jegliche geeignete Weise kombiniert werden, die mit dieser Offenbarung im Einklang steht.
  • Innerhalb dieser Offenbarung können verschiedene Entitäten (die verschiedentlich als „Einheiten“, „Schaltungen“, andere Komponenten usw. bezeichnet werden können) als „konfiguriert“, um eine oder mehrere Aufgaben oder Operationen durchzuführen, beschrieben oder beansprucht werden. Diese Formulierung - [Entität], die konfiguriert ist, [um eine oder mehrere Aufgaben durchzuführen] - wird hierin verwendet, um sich auf eine Struktur (d. h. etwas Physisches, wie eine elektronische Schaltung) zu beziehen. Insbesondere wird diese Formulierung verwendet, um anzugeben, dass diese Struktur angeordnet ist, um die eine oder die mehreren Aufgaben während des Betriebs durchzuführen. Eine Struktur kann als „konfiguriert, um“ eine Aufgabe durchzuführen, bezeichnet werden, selbst wenn die Struktur aktuell nicht betrieben wird. Ein „Multiplexer, der so konfiguriert ist, dass er aus mehreren Eingängen einen auszugebenden Wert auswählt“ soll beispielsweise eine Schaltung abdecken, die diese Funktion während der Operation ausführt, auch wenn die betreffende Schaltung gerade nicht benutzt wird (z. B. nicht mit Strom versorgt ist). Somit bezieht sich eine Entität, die als „konfiguriert, um“ eine Aufgabe durchzuführen, beschrieben oder angegeben ist, auf etwas Physisches, wie eine Vorrichtung, eine Schaltung, einen Speicher, der Programmanweisungen speichert, die ausführbar sind, um die Aufgabe zu implementieren, usw. Diese Wendung wird hierin nicht verwendet, um auf etwas Nichtgreifbares Bezug zu nehmen.
  • Der Begriff „konfiguriert, um“ soll nicht „konfigurierbar, um“ bedeuten. Eine unprogrammierte FPGA würde zum Beispiel nicht angesehen als „konfiguriert, um“ eine bestimmte Funktion auszuführen, obwohl sie „konfigurierbar, um“ diese Funktion auszuführen, sein kann. Nach geeigneter Programmierung kann das FPGA dann konfiguriert sein, diese Funktion durchzuführen.
  • Das Angeben in den beiliegenden Ansprüchen, dass eine Struktur „konfiguriert ist, um“ eine oder mehrere Aufgaben durchzuführen, ist ausdrücklich nicht dazu gedacht, sich auf 35 U.S.C. § 112(f) für dieses Anspruchselement zu berufen. Dementsprechend soll keiner der Ansprüche in dieser Anmeldung in der eingereichten Fassung so ausgelegt werden, dass er Mittel-plus-Funktion-Elemente aufweist. Wenn sich der Anmelder während des Erteilungsverfahrens auf die Anwendung von Abschnitt 112(f) berufen möchte, gibt er Anspruchselemente unter Verwendung des Konstrukts „Mittel zum“ [Durchführen einer Funktion] an.
  • Wie hierin verwendet, wird der Begriff „basierend auf‟ verwendet, um einen oder mehrere Faktoren zu beschreiben, die eine Bestimmung beeinflussen. Dieser Begriff schließt nicht die Möglichkeit aus, dass zusätzliche Faktoren die Bestimmung beeinflussen können. Das heißt, eine Bestimmung kann ausschließlich auf angegebenen Faktoren basieren oder auf den angegebenen Faktoren sowie anderen, nicht angegebenen Faktoren basieren. Man betrachte die Wendung „A basierend auf B bestimmen“. Diese Wendung gibt an, dass B ein Faktor ist, der verwendet wird, um A zu bestimmen, oder der die Bestimmung von A beeinflusst. Diese Wendung schließt nicht aus, dass die Bestimmung von A auch auf einem anderen Faktor, wie C, basieren kann. Diese Wendung soll auch eine Ausführungsform abdecken, in der A ausschließlich basierend auf B bestimmt wird. Wie hierin verwendet, ist die Wendung „basierend auf‟ gleichbedeutend mit der Wendung „basierend mindestens teilweise auf‟.
  • Ferner implizieren, wie hierin verwendet, die Begriffe „erst(er, -e, -es)“, „zweit(er, -e, -es)“, „dritt(er, -e, -es)“ usw. nicht notwendigerweise eine Reihenfolge (z. B. zeitlich) zwischen Elementen. Beispielsweise impliziert eine Bezugnahme auf eine „erste“ Grafikoperation und eine „zweite“ Grafikoperation ohne einen zusätzlichen Sprachgebrauch, der die zeitliche Beziehung zwischen diesen Operationen beschränkt, keine Reihenfolge der Grafikoperation. Kurz gefasst werden Bezugnahmen wie „erst(er, -e, -es)“, „zweit(er, -e, -es)“ usw. als Bezeichnungen zur Vereinfachung der Bezugnahme in der Beschreibung und den beiliegenden Ansprüchen verwendet.
  • DETAILLIERTE BESCHREIBUNG
  • Überblick über Routingschaltlogik mit mehreren Operanden-Eingaben
  • Verschiedene Arten von Computerprozessoren können Sätze von Pipelines einschließen, die konfiguriert sind, um die SIMD-Anweisungen parallel auszuführen. Zum Beispiel schließen Grafikprozessoren oft programmierbare Shader-Kerne ein, die konfiguriert sind, um Anweisungen für einen Satz von verwandten Threads in einer SIMD-Weise auszuführen. In einigen Ausführungsformen wird jeder Thread einer Hardware-Pipeline zugewiesen, die Operanden für diesen Thread abruft und die spezifizierten Operationen parallel zu anderen Pipelines für den Satz von Threads durchführt. Die Gruppe von Threads kann zum Beispiel als eine SIMD-Gruppe, eine Wellenfront, eine Clique oder ein Warp bezeichnet werden. Es ist zu beachten, dass in einigen Ausführungsformen ein größerer Satz von Threads in einer Threadgruppe in mehrere SIMD-Gruppen aufgeteilt werden kann. Jeder Thread in der Threadgruppe kann dasselbe Programm ausführen, und Threads in derselben SIMD-Gruppe können einen Programmzähler gemeinsam nutzen, während dieses Programm ausgeführt wird. Prozessoren können eine große Anzahl von Shader-Pipelines aufweisen, sodass mehrere separate SIMD-Gruppen parallel ausgeführt werden können.
  • In einigen Ausführungsformen verfügt jeder Thread über einen privaten Operandenspeicher, z. B. in einer Registerdatei. Somit kann ein Lesen eines bestimmten Registers aus der Registerdatei die Version des Registers für jedes Thread in einer SIMD-Gruppe bereitstellen. Traditionell wird jeder Thread verarbeitete Daten aus seinem threadspezifischen privaten Speicher mit begrenzter Teilen von Daten unter Threads, z. B. für Gradientenoperationen, bereitgestellt. Komplexeres Teilen von Operanden kann in herkömmlichen Implementierungen Schreibvorgänge in den gemeinsam genutzten Speicher erfordern, bevor sie Daten von anderen Threads verarbeiten können. Dies kann erhebliche Leistung verbrauchen und die Leistung für Operationen beeinflussen, die Daten für andere Threads verwenden. Zum Beispiel arbeiten verschiedene Threads häufig auf verschiedenen Pixeln eines Grafikrahmens oder einer Textur, die verarbeitet werden, und Faltungsoperationen oder Nachbarschaftsfiltervorgänge können Daten für nahegelegene Pixel (und somit von anderen Threads privaten Operandenspeicher) verwenden.
  • In einigen Ausführungsformen ist die Routingschaltlogik in SIMD-Pipelines konfiguriert, um Operanden-Daten von einem oder mehreren anderen Threads in einer SIMD-Gruppe von einem threadspezifischen Speicher bereitzustellen. Dies kann die Leistung verbessern oder den Stromverbrauch für verschiedene mathematische Operationen reduzieren, bei denen die gemeinsame Nutzung von Daten unter mehreren Threads nützlich ist. In offenbarten Ausführungsformen ist die Routingschaltlogik für einen gegebenen Eingabeoperanden für ein Thread konfiguriert, um aus mehreren Quelloperanden aus verschiedenen Threads auszuwählen. In verschiedenen Ausführungsformen kann dies die Faltung oder andere Nachbarschaftsfilteroperationen erleichtern, wie nachstehend ausführlich beschrieben. Zum Beispiel können verschiedene Bereiche eines Grafikrahmens in verschiedenen Registern gespeichert werden. Eine Verschiebe- und eine Füllanweisung, die Routingschaltlogik verwendet, um Operanden von mehreren Registern über Threads zu permutieren, können verwendet werden, um Bildfilter und Faltungsoperationen zu erleichtern.
  • 1 ist ein Blockdiagramm, das beispielhafte Pipeline stufen veranschaulicht, einschließlich einer Stufe mit Routingschaltlogik, die aus mehreren Architekturregistern für einen Eingabeoperanden ausgewählt ist, gemäß einigen Ausführungsformen. In der veranschaulichten Ausführungsform schließt die Pipeline eine Routingschaltlogik 110, eine Ausführungsschaltlogik 120 und eine Operanden-Leseschaltlogik 130 ein. In diesem Beispiel ist jedes dieser Elemente in einer anderen Pipelinesstufe (wie durch die gestrichelten Linien angegeben) eingeschlossen, wobei die Routingschaltlogik 110 zwischen einer Operanden-Lesestufe und einer Ausführungsstufe, jedoch diese Konfiguration zum Zwecke der Veranschaulichung gezeigt ist und den Umfang der vorliegenden Offenbarung nicht einschränken soll. Pipelines mit verschiedenen Typen, Nummern und Bestellstufen können implementiert werden.
  • Betriebs- und Leseschaltlogik 130 ist in der veranschaulichten Ausführungsform konfiguriert, um die Operanden in threadspezifischer Lagerung für jeden Thread zuzugreifen. Zum Beispiel kann eine Anweisung Architekturregister R0, R7 und R9 als Eingabeoperanden verwenden, und die Operanden-Leseschaltlogik 130 kann Daten von diesen Registern als Quelloperund-Daten S0, S1 bzw. S2 bereitstellen. Für dieselbe SIMD-Anweisung können andere Operanden-Leseschaltungen in anderen Pipelines in ähnlicher Art und Weise zugreifen und Operanden bereitstellen. Es ist zu beachten, dass in einigen Ausführungsformen Operanden-Daten in einem oder mehreren Operanden-Caches zwischen der Registerdatei und Operanden gespeichert werden können, und Operanden können von anderen Standorten abgerufen werden, z. B. als Ergebnisse von der Ausführungsschaltlogik 120.
  • Die Ausführungsschaltlogik 120 ist in der veranschaulichten Ausführungsform konfiguriert, um eine oder mehrere Operationen durchzuführen, die durch eine Anweisung spezifiziert sind. Zum Beispiel kann die Ausführungseinheit 120 eine fusionierte Multiplikationseinheit (FMA) sein, die konfiguriert ist, um Gleitpunktoperationen durchzuführen. Wie gezeigt, arbeitet die Ausführungsschaltlogik 120 auf Operanden-Daten, die von der Operanden-Leseschaltlogik 130 und der Routingschaltlogik 110 bereitgestellt werden. Die Ausführungsschaltlogik 120 kann mehrere Einheiten einschließen, die konfiguriert sind, um verschiedene Arten von Operationen durchzuführen.
  • Die Routingschaltlogik 110 ist in der veranschaulichten Ausführungsform konfiguriert, um aus mehreren Eingängen auszuwählen, um eine S0-Operanden-Ausführungsschaltlogik 120 bereitzustellen. Insbesondere empfängt die Routingschaltlogik 110 SO-Daten von der Operanden-Leseschaltlogik 130 (für den der Pipeline zugewiesenen Thread) und SO-Daten von anderen Pipelines (z. B. von einem oder mehreren anderen Threads in derselben SIMD-Gruppe). Die Routingschaltlogik 110 empfängt auch S 1-Daten von einer oder mehreren anderen Pipelines. Es ist zu beachten, dass die verschiedenen Architekturregister S0 und S1 durch eine bestimmte Anweisung zugewiesen werden können. Somit ermöglicht die offenbarte Routingschaltlogik 110 die Auswahl eines Operanden aus einem anderen architektonischen Register von einem anderen Thread für S0 anstelle des architektonischen Registers, der tatsächlich S0 für die Operanden-Leseschaltlogik 130 zugewiesen ist. Dies kann das im Folgenden detailliert erörterte „Füllen“ der Verschiebe- und Fülloperation erleichtern.
  • In einigen Ausführungsformen kann, wenn die Ausführungsschaltlogik 120 Operationen unter Verwendung einer bestimmten Genauigkeit (z. B. eines 32-Bit-Floating-Punktformats) durchführt, die Quelle von Operanden-Leseschaltlogik 130 unter Verwendung einer anderen Präzision (z. B. eines 16-Bit-Floating-Punktformats) dargestellt werden. Daher können in einigen Ausführungsformen eine oder mehrere Umwandlungsschaltungen in der Pipeline vor oder nach der Routingschaltlogik 110 eingeschlossen sein, um einen oder mehrere Operanden für eine gegebene Operanden aus einem Format umzuwandeln, das eine Präzision auf ein Format verwendet, das eine andere Präzision verwendet (oder allgemeiner aus einem Format in ein anderes Format). Die Schaltlogik kann zum Beispiel Operandendaten hochkonvertieren oder klammern, um eine gewünschte Genauigkeit zu erreichen, die von der Ausführungseinheit, die einen Befehl ausführt, unterstützt wird.
  • Es ist zu beachten, dass in der veranschaulichten Ausführungsform die S1- und S2-Daten, die von der Schaltlogik für das Lesen von Operanden 130 bereitgestellt werden, auch an andere Pipelines gesendet werden, z. B. zur möglichen Auswahl durch die Routingschaltlogik dieser anderen Pipelines. Die Routingschaltlogik kann in einigen Ausführungsformen unabhängig für die verschiedenen Pipelines gesteuert werden.
  • Beispielhafte Verschiebe- und Füllanweisung
  • 2 ist ein Diagramm, das eine beispielhafte Operanden-Auswahl für verschiedene Beispiele einer Verschiebe- und Füllanweisung (shff) gemäß einigen Ausführungsformen veranschaulicht. Die veranschaulichte Anweisung kann die Routingschaltlogik 110 Verwenden, um Operanden von mehreren Architekturregistern unter Threads einer SIMD-Gruppe effizient zu leiten.
  • In der dargestellten Ausführungsform hat die Verschiebe- und Füllanweisung das Format „shff.Direct.optional_mod, verschobene Register, Füllregister, Verschiebungsbetrag.“ In diesem Beispiel gibt die Richtung eine rechte oder linke Verschiebung über SIMD-Spuren an, wobei das Ziel ein Register angibt, um die verschobenen Ergebnisse zu speichern, und der Verschiebungsbetrag (der in einem angezeigten Register gespeichert oder in der Anweisung codiert sein kann) angibt, dass die Anzahl von Stellen zum Verschieben angibt. Das optional mod-Feld kann angeben, ob Verschiebungen innerhalb von Teilmengen der SIMD-Gruppe erfolgen sollen, wie nachstehend ausführlich erörtert. 2 zeigt beispielhafte Werte in Registern R0 und R1 für acht verschiedene Threads/Spuren in einer SIMD-Gruppe (obwohl ähnliche Techniken mit SIMD-Gruppen verschiedener Größen verwendet werden können). 2 zeigt auch Inhalte eines Zielregisters d nach verschiedenen beispielhaften Verschiebe- und Fülloperationen. Es ist zu beachten, dass das Ziel in bestimmten Situationen derselbe wie eines der Quellregister sein kann, obwohl es in anderen Situationen wünschenswert sein kann, Quellregister unverändert zu halten, z. B. zur Verwendung in nachfolgenden Faltungsoperationen, wenn sie sich in einer oder mehreren Richtungen über einen Pixelraum bewegen.
  • Es ist zu beachten, dass in einigen Ausführungsformen die Anweisung auch eine arithmetische Operation (z. B. ein fusioniertes Multiplizieren-Hinzufügen) und eine oder mehrere zusätzliche Operanden spezifizieren kann, z. B. um als Eingabeoperationen zu einer arithmetischen Operation zusammen mit einem Verschiebe- und Füllergebnis verwendet zu werden. Als ein Beispiel kann für eine Operation A*B+C der Verschiebe- und Füllabschnitt der Anweisung den A-Operanden erzeugen und die Anweisung kann die B- und C-Operanden separat angeben. Obwohl die offenbarten Beispiele für einen Operanden Verschiebe- und Füllfunktionalität implementieren, können ähnliche Techniken verwendet werden, um Daten für mehrere Operanden einer Mate-Anweisung auszuwählen. Zum Beispiel können unter Bezugnahme auf 1 mehrere Instanzen der Routingschaltlogik 110 für ein gegebenes Thread implementiert werden, um das Routing für S 1-Daten oder S2-Daten zusätzlich zu oder anstelle von Routing für SO-Daten bereitzustellen.
  • In Beispiel A verschiebt die Anweisung „shff.links d, R0, R1, #1“ R0 Operanden nach links in der SIMD-Gruppe um eins und füllt sie mit einem Wert („I“) aus der Spur 0 R1 aus.
  • In Beispiel B verschiebt die Anweisung „shff.links d, R0, R1,#3“ R0 Operanden nach links in der SIMD-Gruppe um drei und füllt sie mit Werten („IJK“) aus R1 Operanden aus Spuren 0-2. In einigen Ausführungsformen wird die Verschiebungsmenge auf die Größe der SIMD-Gruppe geklemmt, z. B. so, dass Verschiebungen, die gleich oder größer sind, einfach die Werte von R1 zu dem Zielregister auf denselben Spuren ausbreiten, die in R1 gespeichert wurden.
  • In Beispiel C verschiebt die Anweisung „shff.rechts d, R0, R1,#2“ die RO-Operanden rechts über Threads in der SIMD-Gruppe um zwei und füllt sie mit Werten („OP“) aus R1 Operanden aus Spuren 6-7. In dieser Ausführungsform verschiebt sich auf die linke Füllung von der linken Seite des Füllregisters, während sich die rechte Füllung von der rechten Größe des Füllregisters verschiebt, aber andere Implementierungen werden in Betracht gezogen.
  • In Beispiel D verschiebt die Anweisung „shff.links.mod2 d, R0, R1,# 1“ RO-Operanden links zwischen jeder Teilmenge zweier Threads in der SIMD-Gruppe um 1. Zum Beispiel wird für die Fahrspuren 0 und 1 der „A“-Wert verschoben, der Wert „B“ wird nach links verschoben, und der „I“-Wert wird aus dem R1-Operanden der Spur 0 gefüllt. In ähnlicher Art und Weise wird für die Fahrspuren 2 und 3 der Wert „C“ verschoben, der Wert „D“ nach links verschoben und der Wert „K“ von der Spur 2 verschoben. In einigen Ausführungsformen erleichtert das „mod“-Feld Verschiebungen in mehreren Dimensionen in einem mehrdimensionalen Raum wie einem Einzelbild von Pixeldaten, wie nachstehend ausführlich unter Bezugnahme auf 3A-4B erörtert.
  • In Beispiel E verschiebt die Anweisung „shff.links.mod4 d, R0, R1,#2“ RO-Operanden links zwischen jeder Teilmenge von vier Threads in der SIMD-Gruppe um 2. Zum Beispiel werden für die Spuren 0-3 die Werte „A“ und „B“ nach links verschoben, die Werte „C“ und „D“ werden um zwei nach links verschoben, und die Werte „I“ und „J“ werden von den Rändern 0 und 1 der R1-Operanden ausgefüllt.
  • Wie vorstehend erörtert, kann in einigen Ausführungsformen eine Verschiebe- und Füllanweisung eine arithmetische Operation angeben, die an den gerouteten Operanden durchgeführt werden soll, z. B. unter Verwendung der Ausführungsschaltlogik 120, insbesondere in Ausführungsformen, in denen die Routingschaltlogik 110 in einer Pipeline-Stufe zwischen Operanden-Leseschaltlogik 130 und Ausführungsschaltlogik 120 eingeschlossen ist. In anderen Situationen kann eine Verschiebe- und Füllanweisung Operanden von mehreren Architekturregistern unter den Fahrspuren umordnen, ohne tatsächlich auf den Operanden zu arbeiten.
  • In einigen Ausführungsformen können die offenbarten Anweisungen in einer Anwendungsprogrammierschnittstelle (API) exponiert sein. In anderen Ausführungsformen können die Anweisungen interne Mikrooperationen sein, aber eine API kann Anweisungen einschließen, die solche Mikrooperationen zugeordnet sind.
  • Zum Beispiel kann eine Bildblock_LeseAPI-Anweisung verwendet werden, um einen beliebigen Abschnitt eines Grafikrahmens in ein bestimmtes Register unter Verwendung mehrerer Verschieb- und Füllanweisungen zu bewegen.
  • In einigen Ausführungsformen weist nicht-transitorisches computerlesbares Medium darauf gespeicherte Anweisungen auf, die durch eine Rechenvorrichtung ausführbar sind, um Operationen durchzuführen, die verschiedene hierin erörterte Operationen umfassen, z. B. unter Bezugnahme auf Verschieb- und Füllanweisungen. Zum Beispiel können die gespeicherten Anweisungen eine Single-Instruction-Multiple-Data-Anweisung (SIMD-Anweisung) einschließen, die erste und zweite Architekturregister und eine Verschiebungsmenge über SIMD-Threads angeben, über die Werte aus dem ersten Register zu verschieben und unter Verwendung von Werten aus dem zweiten Register zu füllen. Die Anweisung kann angeben, einen Wert aus einem ersten architektonischen Register für eine erste Teilmenge von Threads einer SIMD-Gruppe (die zusammenhängend sein kann) auszuwählen und einen Wert aus einem zweiten architektonischen Register für eine zweite Teilmenge von Threads der SIMD-Gruppe auszuwählen (die auch zusammenhängend sein kann). Ferner kann ein Programm, das eine oder mehrere der offenbarten Verschiebe- und Füllanweisungen einschließt, ein mehrdimensionales Fenster von Pixeldaten manipulieren, um verschiedene Nachbarschaftsfiltertechniken oder Faltungsvorgänge durchzuführen, wie nachstehend ausführlich erörtert. Die Anweisung kann Verschiebe- und Fülloperationen für mehrere Operanden angeben, um als Eingänge zur Ausführungsschaltlogik verwendet zu werden.
  • Beispielhafte Fenstermanipulation innerhalb eines Rahmens von Grafikdaten
  • 3A-3B sind Diagramme, die beispielhafte Fenstermanipulation innerhalb eines zweidimensionalen Rahmens von Grafikdaten gemäß einigen Ausführungsformen veranschaulichen. Es ist zu beachten, dass offenbarte Techniken mit Datenstrukturen mit verschiedenen Anzahlen von Abmessungen, z. B. dreidimensionalen Räumen und so weiter, verwendet werden können. In dem veranschaulichten Beispiel werden Daten für 128 Pixel anfänglich über vier Register gespeichert (Register 1-4), wodurch acht um sechzehn Pixelabschnitte eines Grafikrahmens aufgebaut werden. Im dargestellten Beispiel wird eine 32-Thread-SIMD-Gruppe verwendet, wobei Threads 0-31 jeweils einen Satz htreadspezifischer Register aufweisen. Zum Beispiel hat Thread 0 eine Version der Register 1-4 im veranschaulichten Beispiel, Thread 1 hat eine Version jedes dieser Register und so weiter. In verschiedenen Situationen können Nachbarfilter (z. B. bilaterale oder Multimotorfilter) oder Faltungsvorgänge Daten von verschiedenen Pixeln in einem Grafikrahmen verwenden. Die offenbarten Techniken können die Akkumulation relevanter Daten in einem bestimmten Register für Threads einer SIMD-Gruppe erleichtern.
  • In 3A wird eine Verschiebe- und Füllanweisung verwendet, um Register 5 (z. B. shff.linkt.mod4 R5, R1, R2,#3 oder shffrechts.mod4 R5, R2, R1, nr. 1) zu füllen und eine andere Anweisung wird verwendet, um Register 6 (z. B. shff.linkt.mod4 R6, R3, R4,#3 oder shff.recht.mod4 R6, R4, R3,#1) zu füllen.
  • In 3B wird eine Verschiebe- und Füllanweisung verwendet, um Register 7 (z. B. shff.links R7, R5, R6,#20 oder shffr.rechts R5, R2, R1,#12) zu füllen. Es ist zu beachten, dass der Verschiebungsbetrag für eine vertikale Verschiebung (wenn die veranschaulichte beispielhafte Verteilung von Pixeldaten über ein Register verwendet wird) die Zeilenbreite (vier in diesem Beispiel) der gewünschten Verschiebungsmenge in vertikaler Richtung ist.
  • Unter Verwendung dieser Techniken können Verschiebe- und Füllanweisungen verwendet werden, um ein Register mit Pixeldaten aus einem beliebigen Fenster aus einem Einzelbild von Grafikdaten zu füllen. Zum Beispiel kann das Fenster um ein oder mehrere Pixel zentrieren, für die Nachbarschaftsbildfilteroperationen durchgeführt werden. In einigen Ausführungsformen können diese Techniken vorteilhafterweise die Leistung erhöhen, wenn die Filterung basierend auf nahegelegenen Pixeln oder beim Durchführen einer Faltung in einer oder mehreren Richtungen durchgeführt wird.
  • Beispielhafte Verfahren
  • 4 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für Permutationen zwischen SIMD-Threads veranschaulicht, die aus mehreren Registern ausgewählt sind, um einen Eingabeoperanden bereitzustellen, gemäß einigen Ausführungsformen. Das in 4 gezeigte Verfahren kann unter anderem in Verbindung mit allen hierin offenbarten Computerschaltlogiken, Systemen, Vorrichtungen, Elementen oder Komponenten verwendet werden. In verschiedenen Ausführungsformen können einige der gezeigten Verfahrenselemente gleichzeitig, in einer anderen Reihenfolge als dargestellt durchgeführt oder weggelassen werden. Zudem können zusätzliche Verfahrenselemente wie gewünscht durchgeführt werden.
  • Bei 410 führt eine Vorrichtung in der veranschaulichten Ausführungsform unter Verwendung eines Satzes mehrerer Hardware-Pipelines eine Single-Instruction-Multiple-Data-Anweisung (SIMD-Anweisung) für mehrere Threads parallel aus, wobei die Anweisung erste und zweite Architekturregister angibt.
  • Zum Beispiel kann die Anweisung eine Verschiebe- und eine Füllanweisung sein. In diesen Ausführungsformen kann die Routingschaltlogik einen Wert aus dem ersten architektonischen Register für eine erste Teilmenge von Threads einer SIMD-Gruppe (die zusammenhängend sein kann, z. B. die Threads, die verschobene Operanden empfangen) auswählen und einen Wert aus dem zweiten Architekturregister für eine zweite Teilmenge von Threads der SIMD-Gruppe auswählen (die zusammenhängend sein kann, z. B. die Threads, die gefüllte Operanden empfangen). Es ist zu beachten, dass ähnliche Techniken für zusätzliche Teilmengen implementiert werden können, z. B. wenn der Mod-Bediener verwendet wird. In einigen Ausführungsformen verwendet die Routingschaltlogik ein Multiplexerniveau (z. B. Registerauswahlschaltlogik 650, die nachstehend ausführlich erörtert wird), um für jedes Thread von zwischen einem Wert aus dem ersten Architekturregister und einem Wert aus dem zweiten Architekturregister auszuwählen.
  • Bei 420 wählt die Vorrichtung in der veranschaulichten Ausführungsform basierend auf der Anweisung einen ersten Eingabe-Operanden zur Ausführungsschaltlogik einer oder mehrerer der Pipelines aus: einen Wert aus dem ersten architektonischen Register aus dem threadspezifischen Speicher für eine andere Pipeline (z. B. das Register, das über SIMD-Spuren verschoben wird) und einen Wert von dem zweiten Architekturregister aus dem threadspezifischen Speicher für ein Thread, das einer anderen Pipeline zugewiesen ist (z. B. das Register, das zum Füllen verwendet wird), ist. Es ist zu beachten, dass die Auswahlschaltlogik auch konfiguriert sein kann, um einen Wert aus dem ersten architektonischen Register aus dem threadspezifischen Speicher für die Pipeline (anstelle eines Operanden von einer anderen Pipeline) auszuwählen, z. B. für andere Arten von Anweisungen, die keine permutierten Operanden oder für Verschiebe- und Füllanweisungen mit einem Nullverschiebungsbetrag aufweisen.
  • In einigen Ausführungsformen führt die Vorrichtung ein Grafikprogramm aus, um Pixeldaten für einen ersten Abschnitt eines Grafikrahmens in dem ersten architektonischen Register zu speichern und Pixeldaten für einen zweiten Abschnitt eines Grafikrahmens im zweiten Architekturregister (z. B. Register 1 und 2 von 3A oder Register 5 und 6 von 3B) zu speichern. In einigen Ausführungsformen führt die Vorrichtung eine oder mehrere Verschiebe- und Füllanweisungen durch, um einen Teil des ersten Abschnitts des Grafikrahmens und einen Teil des zweiten Abschnitts des Grafikrahmens in einem dritten Architekturregister zu speichern. Dies kann die Manipulation eines mehrdimensionalen Fensters in einem Grafikraum für Nachbarschaftsfilteroperationen oder Faltungsoperationen erleichtern.
  • Beispielhafte hierarchische Routingschaltlogik
  • 5A, 5B und 6 werden nachstehend beschrieben und stellen Beispiele für hierarchische Routingschaltlogiken bereit, die für verschiedene vorstehend erörterte Routingoperationen verwendet werden können. In einigen Ausführungsformen unterstützt die Routingschaltlogik 110 eine Teilmenge eines vollständigen Satzes von Permutationen und kann unter Verwendung der Schaltlogik der folgenden Figuren implementiert werden.
  • 5A ist ein Blockdiagramm, das ein Beispiel für eine hierarchische Routingschaltlogik veranschaulicht, wie sie in einigen Ausführungsformen verwendet wird. Wie gezeigt, kann die Routingschaltlogik eine beliebige geeignete Anzahl von Ebenen einschließen, einschließlich wie nur zwei Ebenen. In dem veranschaulichten Beispiel empfängt die Routingschaltlogik Operanden, die von N Threads T0 bis T (N-1) gemeinsam genutzt werden sollen und die empfangenen Operanden für jeden dieser Threads ausgibt.
  • In der veranschaulichten Ausführungsform schließt die Routingschaltlogik P-Pegel der Routingschaltlogik ein, einschließlich der Ebene 0 510 und der Ebene P 520, die jeweils entsprechende Steuersignale empfangen (z. B. basierend auf der ausgeführten Anweisung). In verschiedenen Ausführungsformen geben Operanden ein Eingabeniveau der Routingschaltlogik ein und verlassen eine endgültige Ebene der Routingschaltlogik. Wie hierin verwendet, bezieht sich ein „vorherige“ Pegel der Routingschaltlogik auf einen Pegel, der näher an dem Eingabeniveau liegt. Zum Beispiel ist der Pegel 0 das Eingabeniveau und liegt somit vor dem Pegel P in der veranschaulichten Ausführungsform. Die Pegel-P-Routing-Elemente 520, in der veranschaulichten Ausführungsform geben empfangene Operanden für die N SIMD-Threads aus.
  • Die Routingschaltlogik von 5A unterstützt möglicherweise keine vollständigen Permutationen von Eingängen. Eine oder mehrere Ebenen können jedoch eine vollständige Permutation innerhalb jeweiliger Teilmengen ihrer Eingabeoperanden implementieren.
  • 5B ist ein Blockdiagramm, das eine Multi-Level-Routingschaltlogik veranschaulicht, die einen Pegel einschließt, der eine vollständige Permutation zwischen den Teilsätzen von Eingängen unterstützt, und einen Auswahlpegel, der Ausgänge auswählt, gemäß einigen Ausführungsformen. 5B ist ein Beispiel für die Schaltlogik von 5A. In dem veranschaulichten Beispiel schließt die Ebene 0-Routingschaltlogik 510 mehrere Elemente 510A-510M ein, die jede vollständige Permutation unter einer Teilmenge der Eingänge auf Ebene 0 unterstützen. Zum Beispiel unterstützt das Schaltungselement 510A vollständige Permutation unter den Threads T0 bis T (Q- 1). Es ist zu beachten, dass, obwohl als Eingabeniveau in diesem Beispiel gezeigt, ein Pegel, der eine vollständige Permutation zwischen den Teilsätzen von Eingängen unterstützt, in anderen Ausführungsformen in einem beliebigen geeigneten Niveau eingeschlossen sein kann. In einigen Ausführungsformen weist jedes Schaltungselement 510 die gleiche Anzahl von Eingängen und Ausgängen auf.
  • Die Pegel-P-Routingschaltlogik schließt in dem veranschaulichten Beispiel ein Auswahlschaltungselement ein, das konfiguriert ist, um aus einem Abschnitt der Vorausgaben (z. B. von der Pegel 0 oder einem Zwischenpegel) auszuwählen, um einen Operanden für einen bestimmten Thread bereitzustellen. Zum Beispiel empfängt das Auswahlelement 520A einen Abschnitt der vorherigen Pegelausgänge, um einen Operanden für Thread T0 auszuwählen. Als ein Beispiel können Elemente 510 unter Verwendung von Querbalken implementiert werden, während die Elemente 520 unter Verwendung von Multiplexern implementiert werden können, wie nachstehend ausführlich unter Bezugnahme auf 6 erörtert.
  • Beispielhafte zweistufige Routingschaltlogik
  • 6 ist ein Blockdiagramm, das ein spezielles Beispiel einer zweistufigen Routingschaltlogik veranschaulicht, wie sie in einigen Ausführungsformen verwendet wird. In der veranschaulichten Ausführungsform schließt die Routingschaltlogik 4-x-4-Querbalken 610A-610M, Registerauswahlschaltlogik 650 und einen Multiplexer für jeden der N-Thread ein. In ähnlicher Art und Weise wie 5A und 5B ist die veranschaulichte Routingschaltlogik konfiguriert, um Operanden für N-Threads und Ausgangsoperanden für die N-Threads gemäß einer spezifizierten Permutation in einem Satz unterstützter Permutationen zu empfangen.
  • Querbalken-Schaltungen 610 sind in der veranschaulichten Ausfuhrungsform jeweils konfiguriert, um Operanden von einer jeweiligen Teilmenge von Pipelines zu empfangen, denen ein Abschnitt der Threads in einer SIMD-Gruppe zugewiesen ist und die empfangenen Operanden basierend auf einer spezifizierten Permutationsoperation ausgibt. In einigen Ausführungsformen unterstützen die Querbalken 610 jeweils eine vollständige Permutation innerhalb ihrer jeweiligen Teilmenge von Operanden. In einigen Ausführungsformen sind die Threads, die in einen gegebenen 4-x-4-Querbalken eingegeben werden, vier Threads, die 2-x-2-Quadpixeln verarbeiten. Dies kann in verschiedenen Ausführungsformen eine vollständige Permutation zwischen Operanden für einen gegebenen Quad ermöglichen. Es ist zu beachten, dass in anderen Ausführungsformen Querbalken konfiguriert sein können, um Operanden für Teilsätze von Threads mit einer beliebigen von verschiedenen Anzahlen von Threads, wie 8, 16, 32 usw., aufzunehmen.
  • Die Registerauswahlschaltlogik 650 ist in der veranschaulichten Ausführungsform konfiguriert, um aus den Operanden für mindestens zwei Register aus jedem Thread auszuwählen. Zum Beispiel kann ein Multiplexer unter Bezugnahme auf 1 die SO-Daten und die S 1-Daten von einer anderen Pipeline empfangen und aus diesen beiden Operanden auswählen. Für Verschieb- und Füllanweisungen kann ein Abschnitt der veranschaulichten Multiplexer in der Registerauswahlschaltlogik 650 ein anderes Eingangsregister als ein zweiter Abschnitt auswählen (z. B. wobei der erste Abschnitt aus dem verschobenen Register auswählt und der zweite Abschnitt aus dem Füllregister auswählt).
  • Die unteren Multiplexer sind in der veranschaulichten Ausführungsform jeweils konfiguriert, um eine bestimmte Ausgabe von allen Querbalken zu empfangen und eine der Querbalken auszuwählen, um Operanden für ihre Teilmenge der Thread bereitzustellen. Zum Beispiel empfängt der Multiplexer, der konfiguriert ist, um einen empfangenen Operanden für den Thread T0 auszuwählen, die linke Ausgabe von jeder der M-Querbalken 610. In ähnlicher Art und Weise empfängt der Multiplexer, der konfiguriert ist, um einen empfangenen Operanden auszuwählen, um den Thread T 1 zu wählen, die zweitlinke Ausgabe von jeder der M-Querbalken 610 und so weiter. Somit empfängt jeder Multiplexer nur einen Teil der Ausgänge von der Kreuzschienenebene der Routingschaltlogik (eine Ausgabe von jedem Querbalken, in diesem Beispiel) und wählt einen der Ausgänge für sein entsprechendes Thread aus. Es ist zu beachten, dass die Multiplexer basierend auf der durchgeführten Permutationsoperation separat gesteuert werden können (Steuersignale nicht explizit gezeigt).
  • Für ein Beispiel mit einer 16-Thread-SIMD-Gruppengröße können vier 4-x-4-Querbalken implementiert werden, und jeder von 16 Multiplexer kann vier Eingänge empfangen. Für ein Beispiel mit einer 32-Thread-SIMD-Gruppengröße können acht 4-x-4-Querbalken implementiert werden und jeder von 32 Multiplexern kann acht Eingänge empfangen. Für ein Beispiel mit einer 64-Thread-Gruppengröße können sechzehn 4-x-4-Querbalken implementiert werden und jeder von 64 Multiplexern kann sechzehn Eingänge empfangen. Es ist zu beachten, dass die Anzahl von Eingängen pro Multiplexer in einigen Ausführungsformen auch basierend auf der Größe der Querbalken 610 variieren kann. Ferner können in einigen Ausführungsformen spätere Pegel Teilmengen von Operanden von vorherigen Ebenen empfangen, wobei die Teilmengen eine beliebige geeignete Größe aufweisen. Zum Beispiel kann in dem Beispiel von 6 jeder MUX zwei oder mehr Operanden von jeder Querlatte empfangen, die den Schaltungsbereich relativ zu dem veranschaulichten Beispiel erhöhen, aber auch die Anzahl unterstützter Permutationen in einem Durchgang durch die Routingschaltlogik erhöhen kann. Für mindestens bestimmte SIMD-Gruppengrößen unterstützt die Routingschaltlogik von 6 eine vollständige Permutation innerhalb von höchstens vier Durchläufen durch die Routingschaltlogik. Allgemeiner ist in einigen Ausführungsformen die offenbarte Routingschaltlogik konfiguriert, um eine beliebige SIMD-breite Shuffle in so vielen Zyklen wie die Anzahl N von Eingängen zu jedem Element der ersten Ebene der Routingschaltlogik durchzuführen, z. B. durch iterieren von jedem nummerierten Eingang zu einem gegebenen Element auf dem ersten Pegel über N Zyklen und dann Auswählen des gewünschten Ausgabewerts für ein Thread, wenn es verfügbar wird.
  • In einigen Ausführungsformen unterstützt die offenbarte Schaltlogik verschiedene Permutationsoperationen mit einem Durchlauf durch die Routingschaltlogik (der in einem einzigen Zyklus durchgeführt werden kann). Beispiele für solche Operationen schließen Verschiebung, Drehung, Broadcast oder Butterfly-Operationen ein. Schaltoperationen können Operanden um eine bestimmte Anzahl von Threads verschieben und können sich in einem vorgegebenen Wert wie Null oder einem in lauten Threads (oder Werten aus einem Füllregister, wie vorstehend erörtert) verschieben. In einigen Ausführungsformen können einheitliche Verschiebungsmengen unter den Threads erwartet werden.
  • Rotationsoperationen können auf ähnliche Art und Weise eine bestimmte Anzahl von Threads verschieben, können aber auch Werte aus anderen Threads der SIMD-Gruppe umschließen. Broadcast-Operationen können einen Operanden von einem Thread zu mehreren (oder allen) anderen Threads in einer SIMD-Gruppe senden. Butterfly-Operationen können alle oder einen Abschnitt einer SIMD-Gruppe spiegeln.
  • Überblick über Grafikverarbeitung
  • Unter Bezugnahme auf 7A ist ein Flussdiagramm gezeigt, das einen beispielhaften Verarbeitungsfluss 700 zum Verarbeiten von Grafikdaten veranschaulicht. In einigen Ausführungsformen kann der Transformations- und Ausleuchtungsschritt 710 das Verarbeiten von Ausleuchtungsinformationen für Eckpunkte, die von einer Anwendung basierend auf definierten Lichtquellenorten, einem definierten Reflexionsgrad usw. empfangen werden, das Assemblieren der Eckpunkte in Polygone (z. B. Dreiecke) und/oder das Transformieren der Polygone auf die korrekte Größe und Ausrichtung basierend auf der Position in einem dreidimensionalen Raum beinhalten. Der Abschneidschritt 715 kann das Verwerfen von Polygonen oder Eckpunkten beinhalten, die außerhalb eines sichtbaren Bereichs fallen. Der Rasterungsschritt 720 kann das Definieren von Fragmenten innerhalb jedes Polygons und das Zuweisen anfänglicher Farbwerte für jedes Fragment, z. B. basierend auf Texturkoordinaten der Eckpunkte des Polygons, beinhalten. Fragmente können Attribute für Pixel spezifizieren, die sie überlappen, jedoch können die tatsächlichen Pixelattribute basierend auf dem Kombinieren mehrerer Fragmente (z. B. in einem Frame-Puffer) und/oder dem Ignorieren eines oder mehrerer Fragmente (z. B. wenn sie durch andere Objekte bedeckt werden) bestimmt werden. Der Schattierungsschritt 730 kann das Ändern von Pixelkomponenten basierend auf Ausleuchtung, Schatten, Bumpmapping, Transluzenz usw. beinhalten. Schattierte Pixel können in einem Frame-Puffer 735 assembliert werden. Moderne GPUs schließen in der Regel programmierbare Shader ein, die eine Anpassung von Schattierungs- und anderen Verarbeitungsschritten durch Anwendungsentwickler ermöglichen. Somit können in verschiedenen Ausführungsformen die beispielhaften Elemente von 7A in verschiedenen Reihenfolgen durchgeführt, parallel durchgeführt oder weggelassen werden. Zusätzliche Verarbeitungsschritte können ebenfalls implementiert werden.
  • Unter Bezugnahme auf 7B ist ein vereinfachtes Blockdiagramm, das eine Grafikeinheit 750 veranschaulicht, gemäß einigen Ausführungsformen veranschaulicht. In der veranschaulichten Ausführungsform schließt die Grafikeinheit 750 einen programmierbaren Shader 760, eine Eckpunkt-Pipe 785, eine Fragment-Pipe 775, eine Texturverarbeitungseinheit (Texture Processing Unit (TPU)) 765, eine Bildschreibeinheit 770 und eine Speicherschnittstelle 780 ein. In einigen Ausführungsformen ist die Grafikeinheit 750 konfiguriert, um sowohl Eckpunkt- als auch Fragmentdaten unter Verwendung des programmierbaren Shaders 760 zu verarbeiten, der konfiguriert sein kann, um Grafikdaten parallel unter Verwendung mehrerer Ausführungspipelines oder -instanzen zu verarbeiten.
  • Die Eckpunkt-Pipe 785 kann in der veranschaulichten Ausführungsform verschiedene Hardware mit fester Funktion einschließen, die konfiguriert ist, um Eckpunktdaten zu verarbeiten. Die Eckpunkt-Pipe 785 kann konfiguriert sein, um mit dem programmierbaren Shader 760 zu kommunizieren, um die Eckpunktverarbeitung zu koordinieren. In der veranschaulichten Ausführungsform ist die Eckpunkt-Pipe 785 konfiguriert, um verarbeitete Daten zur weiteren Verarbeitung an die Fragment-Pipe 775 und/oder den programmierbaren Shader 760 zu senden.
  • Die Fragment-Pipe 775 kann in der veranschaulichten Ausführungsform verschiedene Hardware mit fester Funktion einschließen, die konfiguriert ist, um Pixeldaten zu verarbeiten. Die Fragment-Pipe 775 kann konfiguriert sein, um mit dem programmierbaren Shader 760 zu kommunizieren, um die Fragmentverarbeitung zu koordinieren. Die Fragment-Pipe 775 kann konfiguriert sein, um eine Rasterung an Polygonen aus der Eckpunkt-Pipe 785 und/oder dem programmierbaren Shader 760 durchzuführen, um Fragmentdaten zu erzeugen. Die Eckpunkt-Pipe 785 und/oder die Fragment-Pipe 775 können mit der Speicherschnittstelle 780 (Kopplung nicht gezeigt) gekoppelt sein, um auf Grafikdaten zuzugreifen.
  • Der programmierbare Shader 760 ist in der veranschaulichten Ausführungsform konfiguriert, um Eckpunktdaten von der Eckpunkt-Pipe 785 und Fragmentdaten von der Fragment-Pipe 775 und/oder der TPU 765 zu empfangen. Der programmierbare Shader 760 kann konfiguriert sein, um Eckpunktverarbeitungsaufgaben an Eckpunktdaten durchzuführen, die verschiedene Transformationen und/oder Einstellungen von Eckpunktdaten einschließen können. Der programmierbare Shader 760 ist in der veranschaulichten Ausführungsform auch konfiguriert, um Fragmentverarbeitungsaufgaben an Pixeldaten wie beispielsweise Texturierung und Schattierung durchzuführen. Der programmierbare Shader 760 kann mehrere Ausführungspipelines zum parallelen Verarbeiten von Daten einschließen, z. B. in einer Single-Instruction Multiple-Data-Weise (SIMD-Weise).
  • Die TPU 765 ist in der veranschaulichten Ausführungsform konfiguriert, um Fragmentverarbeitungsaufgaben von dem programmierbaren Shader 760 zu planen. In einigen Ausführungsformen ist die TPU 765 konfiguriert, um Texturdaten vorabzurufen und anfängliche Farben Fragmenten zur weiteren Verarbeitung durch den programmierbaren Shader 760 zuzuweisen (z. B. über die Speicherschnittstelle 780). Die TPU 765 kann konfiguriert sein, um Fragmentkomponenten beispielsweise in normalisierten Ganzzahlformaten oder Gleitkommaformaten bereitzustellen. In einigen Ausführungsformen ist die TPU 765 konfiguriert, um Fragmente in Gruppen von vier (einer „Fragment-Vierergruppe“) in einem 2x2-Format zur Verarbeitung durch eine Gruppe von vier Ausführungspipelines in dem programmierbaren Shader 760 bereitzustellen.
  • Die Bildschreibeinheit (Image Write Unit (IWU)) 770 ist in einigen Ausführungsformen konfiguriert, um verarbeitete Kacheln eines Bildes zu speichern, und kann Operationen an einem gerenderten Bild durchführen, bevor es zur Anzeige oder an einen Speicher zur Speicherung übertragen wird. In einigen Ausführungsformen ist die Grafikeinheit 750 konfiguriert, um kachelbasiertes verzögertes Rendering (Tile-Based Deferred Rendering (TBDR)) durchzuführen. Beim kachelbasierten Rendering können verschiedene Abschnitte des Bildschirmraums (z. B. Quadrate oder Rechtecke von Pixeln) separat verarbeitet werden, bevor sie zu einem Frame kombiniert werden. Die Speicherschnittstelle 780 kann in verschiedenen Ausführungsformen Kommunikationen mit einer oder mehreren von verschiedenen Speicherhierarchien erleichtern.
  • Beispielvorrichtung
  • Um nun auf 8 Bezug zu nehmen, ist ein Blockdiagramm gezeigt, das eine beispielhafte Ausführungsform einer Vorrichtung 800 veranschaulicht. In einigen Ausführungsformen können Elemente der Vorrichtung 800 innerhalb eines Systems auf einem Chip eingeschlossen sein. In einigen Ausführungsformen kann die Vorrichtung 800 in einer mobilen Vorrichtung eingeschlossen sein, die batteriebetrieben sein kann. Daher kann der Leistungsverbrauch durch die Vorrichtung 800 eine wichtige Designüberlegung sein. In der veranschaulichten Ausführungsform schließt die Vorrichtung 800 die Fabric 810, den Rechenkomplex 820, die Eingabe/Ausgabe-Brücke (E/A-Brücke) 850, die Cache-/Speichersteuerung 845, die Grafikeinheit 750 und die Anzeigeeinheit 865 ein. In einigen Ausführungsformen kann die Vorrichtung 800 andere Komponenten (nicht gezeigt) zusätzlich zu den und/oder anstelle der veranschaulichten Komponenten einschließen, wie Videoprozessor-Codierer und -Decodierer, Bildverarbeitungs- oder -erkennungselemente, Computersehelemente usw.
  • Die Fabric 810 kann verschiedene Verbindungen, Busse, MUX, Steuerungen usw. einschließen und kann konfiguriert sein, um die Kommunikation zwischen verschiedenen Elementen der Vorrichtung 800 zu erleichtern. In einigen Ausführungsformen können Abschnitte der Fabric 810 konfiguriert sein, um verschiedene unterschiedliche Kommunikationsprotokolle zu implementieren. In anderen Ausführungsformen kann die Fabric 810 ein einziges Kommunikationsprotokoll implementierten und mit der Fabric 810 gekoppelte Elemente können intern von dem einzigen Kommunikationsprotokoll auf andere Kommunikationsprotokolle umstellen.
  • In der veranschaulichten Ausführungsform schließt der Rechenkomplex 820 die Busschnittstelleneinheit (Bus Interface Unit (BIU)) 825, den Cache 830 und die Kerne 835 und 840 ein. In verschiedenen Ausführungsformen kann der Rechenkomplex 820 verschiedene Anzahlen an Prozessoren, Prozessorkernen und/oder Caches einschließen. Beispielsweise kann der Rechenkomplex 820 1, 2 oder 4 Prozessorkerne oder eine beliebige andere geeignete Anzahl einschließen. In einer Ausführungsform ist der Cache 830 ein teilassoziativer L2-Cache. In einigen Ausführungsformen können die Kerne 835 und/oder 840 interne Befehls- und/oder Daten-Caches einschließen. In einigen Ausführungsformen kann eine Kohärenzeinheit (nicht gezeigt) in der Fabric 810, dem Cache 830 oder an anderer Stelle in der Vorrichtung 800 konfiguriert sein, um Kohärenz zwischen verschiedenen Caches der Vorrichtung 800 aufrechtzuerhalten. Die BIU 825 kann konfiguriert sein, um die Kommunikation zwischen dem Rechenkomplex 820 und anderen Elementen der Vorrichtung 800 zu verwalten. Prozessorkerne wie die Kerne 835 und 840 können konfiguriert sein, um Befehle von einer bestimmten Befehlssatzarchitektur (Instruction Set Architecture (ISA)) auszuführen, die Betriebssystembefehle und Benutzeranwendungsbefehle einschließen kann.
  • Die Cache-/Speichersteuerung 845 kann konfiguriert sein, um die Übertragung von Daten zwischen der Fabric 810 und einem oder mehreren Caches und/oder Speichern zu verwalten. Beispielsweise dann die Cache-/Speichersteuerung 845 mit einem L3-Cache gekoppelt sein, der wiederum mit einem Systemspeicher gekoppelt sein kann. In anderen Ausführungsformen kann die Cache-/Speichersteuerung 845 direkt mit einem Speicher gekoppelt sein. In einigen Ausführungsformen kann die Cache-/Speichersteuerung 845 einen oder mehrere interne Caches einschließen.
  • Wie hierin verwendet, kann der Begriff „gekoppelt mit“ eine oder mehrere Verbindungen zwischen Elementen angeben, und eine Kopplung kann dazwischenliegende Elemente einschließen. Beispielsweise kann in 8 die Grafikeinheit 750 als „gekoppelt mit“ einem Speicher über die Fabric 810 und die Cache-/Speichersteuerung 845 beschrieben werden. Dagegen ist in der veranschaulichten Ausführungsform von 8 die Grafikeinheit 750 mit der Fabric 810 „direkt gekoppelt“, da keine dazwischenliegenden Elemente vorhanden sind.
  • Die Grafikeinheit 750 kann einen oder mehrere Prozessoren und/oder eine oder mehrere Grafikverarbeitungseinheiten (Graphics Processing Units (GPUs)) einschließen. Die Grafikeinheit 750 kann grafikorientierte Anweisungen, wie zum Beispiel OPENGL®-, Metal- oder DIRECT3D®-Anweisungen, empfangen. Die Grafikeinheit 750 kann spezialisierte GPU-Anweisungen ausführen oder andere Operationen basierend auf den empfangenen grafikorientierten Anweisungen durchführen. Die Grafikeinheit 750 kann allgemein konfiguriert sein, um große Datenblöcke parallel zu verarbeiten, und kann Bilder in einem Bildspeicher zur Ausgabe an eine Anzeige erstellen. Die Grafikeinheit 750 kann Transformations-, Beleuchtungs-, Dreieck- und/oder Rendering-Engines in einer oder mehreren Grafikverarbeitungs-Pipelines einschließen. Die Grafikeinheit 750 kann Pixelinformationen für Anzeigebilder ausgeben. Der programmierbare Shader 760 kann in verschiedenen Ausführungsformen hochparallele Ausführungskerne einschließen, die konfiguriert sind, um Grafikprogramme auszuführen, die Pixelaufgaben, Eckpunktaufgaben und Rechenaufgaben (die grafikbezogen sein können oder nicht) einschließen können.
  • In einigen Ausführungsformen schließt der programmierbare Shader 760 die offenbarte Datenpfad- und Routingschaltlogik von 1 ein. Der programmierbare Shader 760 kann mehrere Kopien der offenbarten Schaltlogik einschließen, z. B. für verschiedene Sätze von Pipelines, die konfiguriert sind, um verschiedene SIMD-Gruppen zu verarbeiten. In anderen Ausführungsformen kann die offenbarte Routingschaltlogik in verschiedenen anderen Kontexten verwendet werden, z. B. innerhalb eines CPU-Kerns, einer Anzeigeeinheit usw.
  • Die Anzeigeeinheit 865 kann konfiguriert sein, um Daten aus einem Bildspeicher zu lesen und einen Strom von Pixelwerten zur Anzeige bereitzustellen. In einigen Ausführungsformen kann die Anzeigeeinheit 865 als eine Anzeige-Pipeline konfiguriert sein. Außerdem kann die Anzeigeeinheit 865 konfiguriert sein, um mehrere Frames zum Erzeugen eines Ausgabe-Frames zu mischen. Ferner kann die Anzeigeeinheit 865 eine oder mehrere Schnittstellen (z. B. MIPI® oder Embedded Display Port (eDP)) zum Koppeln an eine Benutzeranzeige (z. B. einen Touchscreen oder eine externe Anzeige) einschließen.
  • Die E/A-Brücke 850 kann verschiedene Elemente einschließen, die konfiguriert sind, um beispielsweise zu implementieren: Universal Serial Bus-Kommunikationen (USB-Kommunikationen), Sicherheits-, Audio- und/oder leistungsarme Dauereinschaltfunktionalität. Die E/A-Brücke 850 kann auch Schnittstellen wie beispielsweise Pulsweitenmodulation (Pulse-Width Modulation (PBM)), Mehrzweck-Eingabe/Ausgabe (General-Purpose Input/Output (GPIO)), serielle periphere Schnittstelle (Serial Peripheral Interface (SPI)) und/oder inter-integrierte Schaltung (Inter-Integrated Circuit (12C)) einschließen. Verschiedene Arten von Peripheriegeräten und Vorrichtungen können mit der Vorrichtung 800 über die E/A-Brücke 850 gekoppelt sein.
  • Beispielhaftes computerlesbares Medium
  • In der vorliegenden Offenbarung wurden oben verschiedene beispielhafte Schaltungen ausführlich beschrieben. Es ist beabsichtigt, dass die vorliegende Offenbarung nicht nur Ausführungsformen abdeckt, die eine derartige Schaltlogik einschließen, sondern auch ein computerlesbares Speichermedium, das Designinformationen einschließt, die eine derartige Schaltlogik spezifizieren. Dementsprechend soll die vorliegende Offenbarung Ansprüche unterstützen, die nicht nur eine Einrichtung abdecken, die die offenbarten Schaltlogiken einschließt, sondern auch ein Speichermedium, das die Schaltlogik in einem Format spezifiziert, das von einem Produktionssystem erkannt wird, das zur Herstellung von Hardware konfiguriert ist (z. B. eine integrierte Schaltung), die die offenbarte Schaltlogik einschließt. Ansprüche auf ein derartiges Speichermedium sollen zum Beispiel eine Entität abdecken, die ein Schaltungsdesign erzeugt, jedoch das Design nicht selbst produziert.
  • 9 ist ein Blockdiagramm, das ein beispielhaftes nicht-transitorisches computerlesbares Speichermedium, das Schaltungsdesigninformationen speichert, gemäß einigen Ausführungsformen veranschaulicht. In der veranschaulichten Ausführungsform ist das Halbleiterproduktionssystem 920 konfiguriert, um die auf dem nicht-transitorischen computerlesbaren Medium 910 gespeicherten Designinformationen 915 zu verarbeiten und die integrierte Schaltung 930 basierend auf den Designinformationen 915 zu produzieren.
  • Das nicht-transitorische computerlesbare Speichermedium 910 kann eine beliebige von verschiedenen geeigneten Arten von Speichervorrichtungen oder Speicherungsvorrichtungen umfassen. Bei dem nicht-transitorischen computerlesbaren Speichermedium 910 kann es sich um ein Installationsmedium, z. B. eine CD-ROM, Disketten oder eine Bandvorrichtung; einen Computersystemspeicher oder Direktzugriffsspeicher, wie DRAM, DDR-RAM, SRAM, EDO-RAM, Rambus-RAM usw.; einen nichtflüchtigen Speicher, wie einen Flash-Speicher, Magnetmediumspeicher, z. B. eine Festplatte oder einen optischen Speicher; Register oder andere ähnliche Typen von Speicherelementen usw. handeln. Das nicht-transitorische computerlesbare Speichermedium 910 kann auch andere Typen von nicht-transitorischem Speicher oder Kombinationen davon einschließen. Das nicht-transitorische computerlesbare Speichermedium 910 kann zwei oder mehr Speichermedien einschließen, die sich an unterschiedlichen Orten befinden können, z. B. in unterschiedlichen Computersystemen, die über ein Netzwerk verbunden sind.
  • Die Designinformationen 915 können unter Verwendung von beliebigen von verschiedenen geeigneten Computersprachen spezifiziert werden, einschließlich Hardwarebeschreibungssprachen wie, ohne Einschränkung: VHDL, Verilog, SystemC, SystemVerilog, RHDL, M, MyHDL usw. Die Designinformationen 915 können durch das Halbleiterproduktionssystem 920 verwendbar sein, um mindestens einen Abschnitt der integrierten Schaltung 930 zu produzieren. Das Format der Designinformationen 915 kann durch mindestens ein Halbleiterproduktionssystem 920 erkannt werden. In einigen Ausführungsformen können die Designinformationen 915 auch eine oder mehrere Zellbibliotheken einschließen, welche die Synthese und/oder das Layout der integrierten Schaltung 930 angeben. In einigen Ausführungsformen sind die Designinformationen ganz oder teilweise in der Form einer Netzliste spezifiziert, die die Zellbibliothekelemente und deren Konnektivität spezifiziert. Die Designinformationen 915 können, allein genommen, ausreichend Informationen zur Produktion einer entsprechenden integrierten Schaltung einschließen oder nicht. Zum Beispiel können die Designinformationen 915 die zu produzierenden Schaltungselemente, jedoch nicht deren physisches Layout, angeben. In diesem Fall müssen die Designinformationen 915 möglicherweise mit Layoutinformationen kombiniert werden, um die angegebene Schaltlogik tatsächlich zu produzieren.
  • Die integrierte Schaltung 930 kann in verschiedenen Ausführungsformen eine oder mehrere benutzerdefinierte Makrozellen, wie Speicher, Analog- oder Mischsignalschaltungen und dergleichen, einschließen. In solchen Fällen können die Designinformationen 915 Informationen in Bezug auf enthaltene Makrozellen einschließen. Solche Informationen können, ohne darauf beschränkt zu sein, eine Schemaerfassungsdatenbank, Maskendesigndaten, Verhaltensmodelle und Netzlisten auf Vorrichtungs- oder Transistorebene einschließen. Wie hierin verwendet, können Maskendesigndaten gemäß dem Grafikdatensystem (GDSII) oder einem beliebigen anderen geeigneten Format formatiert werden.
  • Das Halbleiterproduktionssystem 920 kann ein beliebiges von verschiedenen geeigneten Elementen einschließen, die konfiguriert sind, um integrierte Schaltungen zu produzieren. Dies kann zum Beispiel Elemente zum Abscheiden von Halbleitermaterialien (z. B. auf einem Wafer, was eine Maskierung einschließen kann), Entfernen von Materialien, Ändern der Form von abgeschiedenen Materialien, Modifizieren von Materialien (z. B. durch Dotieren von Materialien oder Modifizieren dielektrischer Konstanten unter Verwendung von ultravioletter Bearbeitung) usw. einschließen. Das Halbleiterproduktionssystem 920 kann auch konfiguriert sein, um verschiedene Tests von produzierten Schaltungen auf korrekten Betrieb durchzuführen.
  • In verschiedenen Ausführungsformen ist die integrierte Schaltung 930 konfiguriert, um gemäß einem durch die Designinformationen 915 spezifizierten Schaltungsdesign zu arbeiten, was die Durchführung beliebiger der hierin beschriebenen Funktionalitäten einschließen kann. Zum Beispiel kann die integrierte Schaltung 930 beliebige von verschiedenen in 1 oder 5A-8 gezeigten Elementen einschließen. Ferner kann die integrierte Schaltung 930 konfiguriert sein, um verschiedene hierin beschriebene Funktionen in Verbindung mit anderen Komponenten durchzuführen. Ferner kann die hierin beschriebene Funktionalität durch mehrere verbundene integrierte Schaltungen durchgeführt werden.
  • Wie hierin verwendet, impliziert ein Ausdruck der Form „Designinformationen, die ein Design einer Schaltung spezifizieren, die konfiguriert ist, um zu ...“ nicht, dass die betreffende Schaltung hergestellt werden muss, damit das Element erfüllt ist. Vielmehr gibt dieser Ausdruck an, dass die Designinformationen eine Schaltung beschreiben, die nach der Fertigung dazu konfiguriert wird, die angegebenen Aktionen auszuführen, oder die spezifizierten Komponenten einzuschließen.
  • Auch wenn vorstehend spezifische Ausführungsformen beschrieben wurden, ist nicht beabsichtigt, diese Ausführungsformen auf den Umfang der vorliegenden Offenbarung einzuschränken, selbst wenn nur eine einzige Ausführungsform in Hinblick auf ein bestimmtes Merkmal beschrieben ist. Beispiele von in der Offenbarung bereitgestellten Merkmalen sind als veranschaulichend und nicht als einschränkend beabsichtigt, sofern nicht anders angegeben. Die obige Beschreibung soll Alternativen, Änderungen und Äquivalente umfassen, die für Fachleute, denen diese Offenbarung zugute kommt, offensichtlich sind.
  • Der Schutzumfang der vorliegenden Offenbarung schließt jedes hierin (sowohl explizit als auch implizit) offenbarte Merkmal oder jede Kombination von Merkmalen oder jede Verallgemeinerung davon ein, ungeachtet der Tatsache, ob sie irgendeines der oder alle hierin angesprochenen Probleme abschwächt. Dementsprechend können während der Weiterverfolgung dieser Anwendung (oder einer Anwendung, welche die Priorität dieser beansprucht) neue Ansprüche auf eine beliebige solche Kombination von Merkmalen formuliert werden. Insbesondere können mit Bezug auf die angehängten Ansprüche Merkmale von abhängigen Ansprüchen mit denen der unabhängigen Ansprüche kombiniert werden, und Merkmale der jeweiligen unabhängigen Ansprüche können in jeder geeigneten Weise und nicht nur in den in den angehängten Ansprüchen aufgeführten spezifischen Kombinationen kombiniert werden.

Claims (20)

  1. Einrichtung, umfassend: einen Satz mehrerer Hardware-Pipelines, die konfiguriert sind, um eine Single-Instruction-Multiple-Data-Anweisung (SIMD-Anweisung) für mehrere Threads parallel auszuführen, wobei die Anweisung erste und zweite Architekturregister angibt, wobei die Hardware-Pipelines Folgendes einschließen: Ausführungsschaltlogik, die konfiguriert ist, um Operationen unter Verwendung einer oder mehrerer Pipelinestufen der Pipeline durchzuführen; und Routingschaltlogik, die konfiguriert ist, um basierend auf der Anweisung einen ersten Eingabeoperanden von Folgendem für die Ausführungsschaltlogik auszuwählen: einen Wert aus dem ersten Architekturregister aus dem threadspezifischen Speicher für eine andere Pipeline; und einen Wert aus dem zweiten Architekturregister aus dem threadspezifischen Speicher für einen Thread, der einer anderen Pipeline zugeordnet ist.
  2. Einrichtung nach Anspruch 1, wobei für eine Verschiebe- und Füllanweisung die Routingschaltlogik konfiguriert ist, um einen Wert aus dem ersten architektonischen Register für eine erste zusammenhängende Teilmenge von Threads einer SIMD-Gruppe auszuwählen und einen Wert aus dem zweiten Architekturregister für eine zweite zusammenhängende Teilmenge von Threads der SIMD-Gruppe auszuwählen.
  3. Einrichtung nach Anspruch 1, wobei die Routingschaltlogik ein Multiplexerniveau einschließt, das konfiguriert ist, um für jeden Thread von zwischen einem Wert aus dem ersten Architekturregister und einem Wert aus dem zweiten Architekturregister auszuwählen.
  4. Einrichtung nach Anspruch 1, wobei die Einrichtung so konfiguriert ist, dass sie ein Grafikprogramm ausführt, zum: Speichern von Pixeldaten für einen ersten Abschnitt eines Grafikrahmens in dem ersten architektonischen Register und Speichern von Pixeldaten für einen zweiten Abschnitt eines Grafikrahmens in dem zweiten Architekturregister; und Durchführen einer oder mehrerer Verschiebe- und Füllanweisungen, um einen Teil des ersten Abschnitts des Grafikrahmens und einen Teil des zweiten Abschnitts des Grafikrahmens in einem dritten Architekturregister zu speichern.
  5. Einrichtung nach Anspruch 4, wobei die Einrichtung ferner konfiguriert ist, um das Grafikprogramm auszuführen, um eine oder mehrere Bildfilteroperationen basierend auf Pixeldaten durchzuführen, die in dem dritten Register gespeichert sind.
  6. Einrichtung nach Anspruch 1, wobei die Einrichtung konfiguriert ist, um eine Faltungsoperation durch Bewegen eines Fensters in einem Grafikrahmen durch Ausführen mehrerer Verschiebe- und Füllanweisungen durchzuführen.
  7. Einrichtung nach Anspruch 1, wobei die Routingschaltlogik in einer Pipeline-Stufe zwischen Operanden-Leseschaltlogik und der Ausführungsschaltlogik eingeschlossen ist.
  8. Einrichtung nach Anspruch 1, ferner umfassend eine Umwandlungsschaltlogik, die konfiguriert ist, um den ersten Eingabeoperanden von einem ersten Format, das eine erste Präzision aufweist, zu einem zweiten Format, das eine andere Präzision aufweist, umzuwandeln.
  9. Nicht-transitorisches computerlesbares Speichermedium mit darauf gespeicherten Designinformationen, die ein Design zumindest eines Abschnitts einer hardwareintegrierten Schaltung in einem Format angeben, das durch ein Halbleiterproduktionssystem erkannt wird, das konfiguriert ist, um die Designinformationen zum Produzieren der Schaltung gemäß dem Design zu verwenden, wobei die Designinformationen angeben, dass die Schaltung Folgendes einschließt: einen Satz mehrerer Hardware-Pipelines, die konfiguriert sind, um eine Single-Instruction-Multiple-Data-Anweisung (SIMD-Anweisung) für mehrere Threads parallel auszuführen, wobei die Anweisung erste und zweite Architekturregister angibt, wobei die Hardware-Pipelines Folgendes einschließen: Ausführungsschaltlogik, die konfiguriert ist, um Operationen unter Verwendung einer oder mehrerer Pipelinestufen der Pipeline durchzuführen; und Routingschaltlogik, die konfiguriert ist, um basierend auf der Anweisung einen ersten Eingabeoperanden von Folgendem für die Ausführungsschaltlogik auszuwählen: einen Wert aus dem ersten Architekturregister aus dem threadspezifischen Speicher für eine andere Pipeline; und einen Wert aus dem zweiten Architekturregister aus dem threadspezifischen Speicher für einen Thread, der einer anderen Pipeline zugeordnet ist.
  10. Nicht-transitorisches computerlesbares Speichermedium nach Anspruch 9, wobei für eine Verschiebe- und eine Füllanweisung die Routingschaltlogik konfiguriert ist, um einen Wert aus dem ersten architektonischen Register für eine erste zusammenhängende Teilmenge von Threads einer SIMD-Gruppe auszuwählen und einen Wert aus dem zweiten Architekturregister für eine zweite zusammenhängende Teilmenge von Threads der SIMD-Gruppe auszuwählen.
  11. Nicht-transitorisches computerlesbares Speichermedium nach Anspruch 9, wobei die Routingschaltlogik ein Multiplexerniveau einschließt, das konfiguriert ist, um für jeden Thread von zwischen einem Wert aus dem ersten Architekturregister und einem Wert aus dem zweiten Architekturregister auszuwählen.
  12. Nicht-transitorisches computerlesbares Speichermedium nach Anspruch 9, wobei die Schaltung so konfiguriert ist, dass sie ein Grafikprogramm ausführt, zum: Speichern von Pixeldaten für einen ersten Abschnitt eines Grafikrahmens in dem ersten architektonischen Register und Speichern von Pixeldaten für einen zweiten Abschnitt eines Grafikrahmens in dem zweiten Architekturregister; und Durchführen einer oder mehrerer Verschiebe- und Füllanweisungen, um einen Teil des ersten Abschnitts des Grafikrahmens und einen Teil des zweiten Abschnitts des Grafikrahmens in einem dritten Architekturregister zu speichern.
  13. Nicht-transitorisches computerlesbares Speichermedium nach Anspruch 12, wobei die Schaltung ferner konfiguriert ist, um das Grafikprogramm auszuführen, um eine oder mehrere Nachbarschaftsfilteroperationen basierend auf Pixeldaten durchzuführen, die in dem dritten Register gespeichert sind.
  14. Nicht-transitorisches computerlesbares Speichermedium nach Anspruch 9, wobei die Routingschaltlogik ferner konfiguriert ist, um den ersten Eingabeoperanden von Folgendem für die Ausführungsschaltlogik auszuwählen: einem Wert aus dem ersten architektonischen Register aus dem threadspezifischen Speicher für die Pipeline.
  15. Verfahren, umfassend: Ausführen, unter Verwendung eines Satzes mehrerer Hardware-Pipelines, einer Single-Instruction-Multiple-Data-Anweisung (SIMD-Anweisung) für mehrere Threads parallel, wobei die Anweisung erste und zweite Architekturregister angibt; Auswählen, basierend auf der Anweisung, eines ersten Eingabeoperanden von Folgendem für die Ausführungsschaltung einer oder mehrerer der Pipelines: einen Wert aus dem ersten Architekturregister aus dem threadspezifischen Speicher für eine andere Pipeline; und einen Wert aus dem zweiten Architekturregister aus dem threadspezifischen Speicher für einen Thread, der einer anderen Pipeline zugeordnet ist.
  16. Verfahren nach Anspruch 15, ferner umfassend: als Reaktion auf eine Verschiebe- und eine Füllanweisung, Auswählen eines Werts aus dem ersten architektonischen Register für eine erste zusammenhängende Teilmenge von Threads einer SIMD-Gruppe und Auswählen eines Werts aus dem zweiten Architekturregister für eine zweite zusammenhängende Teilmenge von Threads der SIMD-Gruppe.
  17. Verfahren nach Anspruch 15, ferner umfassend: Auswählen, durch Multiplexerschaltlogik für jeden Thread, von zwischen einem Wert aus dem ersten Architekturregister und einem Wert aus dem zweiten Architekturregister.
  18. Verfahren nach Anspruch 15, ferner umfassend: Ausführen eines Grafikprogramms, zum: Speichern von Pixeldaten für einen ersten Abschnitt eines Grafikrahmens in dem ersten architektonischen Register und Speichern von Pixeldaten für einen zweiten Abschnitt eines Grafikrahmens in dem zweiten Architekturregister; und Durchführen einer oder mehrerer Verschiebe- und Füllanweisungen, um einen Teil des ersten Abschnitts des Grafikrahmens und einen Teil des zweiten Abschnitts des Grafikrahmens in einem dritten Architekturregister zu speichern.
  19. Verfahren nach Anspruch 18, ferner umfassend: Durchführen einer oder mehrerer Bildfilteroperationen basierend auf Pixeldaten, die in dem dritten Register gespeichert sind.
  20. Verfahren nach Anspruch 15, ferner umfassend: Durchführen einer Faltungsoperation durch Bewegen eines Fensters in einem Grafikrahmen durch Ausführen mehrerer Verschiebe- und Füllanweisungen.
DE112020005617.1T 2019-11-15 2020-11-12 Simd-operand permutation mit auswahl von mehreren registern Pending DE112020005617T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/686,060 US11126439B2 (en) 2019-11-15 2019-11-15 SIMD operand permutation with selection from among multiple registers
US16/686,060 2019-11-15
PCT/US2020/060110 WO2021097010A1 (en) 2019-11-15 2020-11-12 Simd operand permutation with selection from among multiple registers

Publications (1)

Publication Number Publication Date
DE112020005617T5 true DE112020005617T5 (de) 2022-09-08

Family

ID=73793800

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020005617.1T Pending DE112020005617T5 (de) 2019-11-15 2020-11-12 Simd-operand permutation mit auswahl von mehreren registern

Country Status (6)

Country Link
US (3) US11126439B2 (de)
KR (1) KR20220074969A (de)
CN (2) CN114830082B (de)
DE (1) DE112020005617T5 (de)
GB (2) GB2604497B (de)
WO (1) WO2021097010A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11726785B2 (en) * 2020-09-30 2023-08-15 Purdue Research Foundation Graphics processor unit with opportunistic inter-path reconvergence
GB2605664B (en) * 2021-09-30 2023-03-29 Imagination Tech Ltd Processor with hardware pipeline
CN117132450B (zh) * 2023-10-24 2024-02-20 芯动微电子科技(武汉)有限公司 一种可实现数据共享的计算装置和图形处理器

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6272616B1 (en) 1998-06-17 2001-08-07 Agere Systems Guardian Corp. Method and apparatus for executing multiple instruction streams in a digital processor with multiple data paths
US6643763B1 (en) 2000-02-28 2003-11-04 International Business Machines Corporation Register pipe for multi-processing engine environment
US8074051B2 (en) 2004-04-07 2011-12-06 Aspen Acquisition Corporation Multithreaded processor with multiple concurrent pipelines per thread
US7630585B2 (en) * 2004-06-25 2009-12-08 Intel Corporation Image processing using unaligned memory load instructions
US7890735B2 (en) 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
ATE493703T1 (de) * 2004-11-03 2011-01-15 Koninkl Philips Electronics Nv Programmierbare datenverarbeitungsschaltung, die simd-befehle unterstützt
US8248422B2 (en) 2008-01-18 2012-08-21 International Business Machines Corporation Efficient texture processing of pixel groups with SIMD execution unit
US9830156B2 (en) 2011-08-12 2017-11-28 Nvidia Corporation Temporal SIMT execution optimization through elimination of redundant operations
CN104126170B (zh) * 2011-12-22 2018-05-18 英特尔公司 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令
EP2798454A4 (de) 2011-12-30 2016-08-17 Intel Corp Variable simd-verschiebung und -drehung unter anwendung einer steuermanipulation
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9507599B2 (en) * 2013-07-22 2016-11-29 Globalfoundries Inc. Instruction set architecture with extensible register addressing
US9672043B2 (en) 2014-05-12 2017-06-06 International Business Machines Corporation Processing of multiple instruction streams in a parallel slice processor
US10061591B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
GB2540543B (en) * 2015-07-20 2020-03-11 Advanced Risc Mach Ltd Graphics processing
GB2540937B (en) 2015-07-30 2019-04-03 Advanced Risc Mach Ltd Graphics processing systems
US11023242B2 (en) * 2017-01-27 2021-06-01 Ati Technologies Ulc Method and apparatus for asynchronous scheduling
US10261835B2 (en) 2017-03-21 2019-04-16 Arm Limited Hardware thread scheduling
US10224954B1 (en) * 2017-09-29 2019-03-05 Intel Corporation Floating point to fixed point conversion
GB2569098B (en) * 2017-10-20 2020-01-08 Graphcore Ltd Combining states of multiple threads in a multi-threaded processor
US10409601B2 (en) * 2017-12-29 2019-09-10 Intel Corporation Apparatus and method for loop flattening and reduction in a single instruction multiple data (SIMD) pipeline
US11163578B2 (en) * 2018-02-23 2021-11-02 Intel Corporation Systems and methods for reducing register bank conflicts based on a software hint bit causing a hardware thread switch

Also Published As

Publication number Publication date
CN116627504A (zh) 2023-08-22
US12008377B2 (en) 2024-06-11
US20210149679A1 (en) 2021-05-20
GB2604497A (en) 2022-09-07
KR20220074969A (ko) 2022-06-03
US20230325196A1 (en) 2023-10-12
US11645084B2 (en) 2023-05-09
GB2621255B (en) 2024-08-28
CN114830082B (zh) 2023-06-06
CN116627504B (zh) 2024-01-30
GB2621255A (en) 2024-02-07
GB2604497B (en) 2023-10-04
CN114830082A (zh) 2022-07-29
US20210406031A1 (en) 2021-12-30
US11126439B2 (en) 2021-09-21
GB202311894D0 (en) 2023-09-13
WO2021097010A1 (en) 2021-05-20

Similar Documents

Publication Publication Date Title
DE102018119225A1 (de) System und Verfahren für einen optimierten Winograd-Faltungsbeschleuniger
DE102013022257B4 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
DE112020000850T5 (de) Cache-Struktur und -Nutzung
DE112020005617T5 (de) Simd-operand permutation mit auswahl von mehreren registern
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE102019133028A1 (de) Für neuronale netzwerke geeignetes effizientes matrixformat
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102016211642A1 (de) Patch-speichersystem
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE112017001703T5 (de) Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE112017003234T5 (de) Reduzieren von Speicherzugrifflatenzen während der Strahltraversierung
DE102019117545A1 (de) Reduzierung von registerbankkonflikten für ausführungseinheiten eines multithread-prozessors
DE112017004077T5 (de) Einrichtung und verfahren für optimiertes kachelbasiertes rendering
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE112017001845T5 (de) Strahltraversierung mit reduzierter Genauigkeit mit Wiederverwendung von Ebenen
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE102020131293A1 (de) Einrichtung und verfahren zur multi-adapter-kodierung
DE112018003999T5 (de) Verfahren und Vorrichtung für effiziente Verarbeitung von abgeleiteten einheitlichen Werten in einem Grafikprozessor

Legal Events

Date Code Title Description
R012 Request for examination validly filed