DE112006003473B4 - Parallel-Array-Architektur für einen Grafikprozessor - Google Patents

Parallel-Array-Architektur für einen Grafikprozessor Download PDF

Info

Publication number
DE112006003473B4
DE112006003473B4 DE112006003473T DE112006003473T DE112006003473B4 DE 112006003473 B4 DE112006003473 B4 DE 112006003473B4 DE 112006003473 T DE112006003473 T DE 112006003473T DE 112006003473 T DE112006003473 T DE 112006003473T DE 112006003473 B4 DE112006003473 B4 DE 112006003473B4
Authority
DE
Germany
Prior art keywords
pixel
processing
data
processing clusters
geometry
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.)
Active
Application number
DE112006003473T
Other languages
English (en)
Other versions
DE112006003473T5 (de
Inventor
John M. R.I. Danskin
John S. Calif. Montrym
John Erik Calif. Lindholm
Steven E. N.C. Molnar
Mark J. N.C. French
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE112006003473T5 publication Critical patent/DE112006003473T5/de
Application granted granted Critical
Publication of DE112006003473B4 publication Critical patent/DE112006003473B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F15/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/06Use of more than one graphics processor to process data before displaying to one or more screens
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/122Tiling

Landscapes

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

Abstract

Grafikprozessor (122), der Folgendes aufweist: ein Array mit nebenläufigen Kernen (202), das mehrere Verarbeitungscluster (302) enthält, wobei jedes Verarbeitungscluster (302) mindestens einen Kern (310) enthält, der dazu dient, ein Pixelshader-Programm auszuführen, das Pixeldaten aus Abdeckungsdaten erzeugt; einen Rasterisierer (210), der dafür konfiguriert ist, Abdeckungsdaten für jedes von mehreren Pixeln zu erzeugen, wobei die Abdeckungsdaten Pixelkoordinaten für jedes der mehreren Pixel aufweist; und eine Pixelverteilungslogik, die dafür konfiguriert ist, die Abdeckungsdaten aus dem Rasterisierer (210) an eines der Verarbeitungscluster (302) in dem Array mit nebenläufigen Kernen (202) zu übermitteln, wobei die Pixelverteilungslogik das eine der Verarbeitungscluster (302), an das die Abdeckungsdaten für ein erstes Pixel übermittelt werden, mindestens zum Teil auf der Grundlage einer Position des ersten Pixels innerhalb eines Bildbereichs (400) auswählt, wobei der Grafikprozessor dadurch gekennzeichnet ist, dass jeder Kern (310) dazu dient, Vertexshader-Programme und Geometrieshader-Programme auszuführen.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Die vorliegende Erfindung betrifft allgemein Grafikprozessoren und insbesondere eine Parallel-Array-Architektur für einen Grafikprozessor.
  • Parallelverarbeitungstechniken erhöhen den Durchsatz eines Prozessor- oder Mehrprozessorsystems, wenn mehrere unabhängige Berechnungen ausgeführt werden müssen. Eine Berechnung kann in Aufgaben unterteilt werden, die durch Programme definiert werden, wobei jede Aufgabe als eine separate Befehlsfolge (tread) ausgeführt wird. (Im Sinne des vorliegenden Textes meint eine ”Befehlsfolge” allgemein eine Instanz der Ausführung eines bestimmten Programms, das bestimmte Eingangsdaten verwendet, und ein ”Programm” meint eine Sequenz von ausführbaren Befehlen, die Ergebnisdaten aus Eingangsdaten erzeugt.) Parallele Befehlsfolgen (parallel threads) werden gleichzeitig unter Verwendung verschiedener Verarbeitungsmaschinen im Inneren des Prozessors ausgeführt.
  • Zahlreiche existierende Prozessorarchitekturen unterstützen eine Parallelverarbeitung. Die frühesten solcher Architekturen verwendeten mehrere diskrete Prozessoren, die miteinander vernetzt waren. In der jüngeren Vergangenheit hat man mehrere Verarbeitungskerne auf einem einzelnen Chip hergestellt. Diese Kerne werden auf unterschiedliche Weise gesteuert. In einigen Fällen, die als Multiple-Instruction, Multiple-Data(MIMD)-Maschinen bekannt sind, holt und versendet jeder Kern unabhängig seine eigenen Befehle an seine eigene Verarbeitungsmaschine (oder seine eigenen Verarbeitungsmaschinen). In anderen Fällen, die als Single-Instruction, Multiple-Data(SIMD)-Maschinen bekannt sind, hat ein Kern eine Einzelbefehlseinheit, die den gleichen Befehl parallel an mehrere Verarbeitungsmaschinen sendet, die den Befehl anhand verschiedener Eingabeoperanden ausführen. SIMD-Maschinen haben allgemein Vorteile in Bezug auf die Chipfläche (da nur eine einzige Befehlseinheit benötigt wird) und darum auch in Bezug auf die Kosten. Der Nachteil ist, dass Parallelität nur in dem Umfang zur Verfügung steht, wie mehrere Instanzen desselben Befehls gleichzeitig ausgeführt werden können.
  • Herkömmliche Grafikprozessoren verwenden sehr breite SIMD-Architekturen zum Erreichen eines hohen Durchsatzes in Bildwiedergabe (Bildrendering) Anwendungen. Solche Anwendungen beinhalten allgemein das Ausführen derselben Programme (Vertexshader oder Pixelshader) an großen Anzahlen von Objekten (Eckpunkten oder Pixeln). Da jedes Objekt unabhängig von allen anderen aber unter Verwendung derselben Sequenz von Operationen verarbeitet wird, ermöglicht eine SIMD-Architektur eine beträchtliche Leistungssteigerung zu vernünftigen Kosten. In der Regel enthält eine GPU einen einzelnen SIMD-Kern, der Vertexshader-Programme ausführt, und einen weiteren SIMD-Kern von vergleichbarer Größe, der Pixelshader-Programme ausführt. In High-End GPUs sind mitunter mehrere Sätze von SIMD-Kernen vorhanden, um einen noch höheren Parallelitätsgrad zu unterstützen.
  • Diese Designs haben verschiedene Nachteile. Erstens werden die separaten Verarbeitungskerne für Vertex- und Shader-Programme separat entworfen und getestet, was oft mindestens teilweise zu Doppelungen bei der Arbeit führt.
  • Zweitens variiert die Aufteilung der Grafikverarbeitungslast zwischen Vertex-Operationen und Pixel-Operationen stark von einer Anwendung zur nächsten. Wie dem Fachmann bekannt ist, können einem Bild Details hinzugefügt werden, indem man viele kleine geometrische Grundformen verwendet, was die Arbeitslast des Vertexshader-Kerns erhöht, und/oder indem man komplexe Texturmapping- und Pixelshading-Operationen verwendet, was die Arbeitslast des Pixelshader-Kerns erhöht. In den meisten Fällen sind die Arbeitslasten nicht perfekt ausbalanciert, und der eine oder der andere Kern ist unterbeansprucht. Zum Beispiel kann in einer Pixel-intensiven Anwendung der Pixelshader-Kern mit maximalem Durchsatz arbeiten, während der Vertex-Kern leer läuft und darauf wartet, dass bereits verarbeitete Eckpunkte sich in die Pixelshader-Stufe der Pipeline bewegen. Umgekehrt kann in einer Vertex-intensiven Anwendung der Vertexshader-Kern mit maximalem Durchsatz arbeiten, während der Pixel-Kern leer läuft und darauf wartet, dass neue Eckpunkte zugeführt werden. In jedem Fall wird ein Teil der verfügbaren Verarbeitungszyklen praktisch vergeudet.
  • Es wäre darum wünschenswert, einen Grafikprozessor bereitzustellen, der sich an verändernde Arbeitslasten in verschiedenen Schattierern (Shadern) anpassen kann, während ein hoher Parallelitätsgrad beibehalten wird.
  • Der Artikel mit dem Titel „Hybrid Sort-First and Sort-Last Parallel Rendering with a Cluster of PCs” von R. Samanta et al. (2000, ACM SIGGRAPH, ISBN: 1-58113-257-3, S. 97–108) offenbart einen hybriden Parallel-Rendering-Algorithmus, der Merkmale von „Sort-First”- und „Sort-Last”-Strategien für eine PC-Cluster-Architektur kombiniert.
  • Der Artikel mit dem Titel „A Sorting Classification of Parallel Rendering” von S. Molnar et al. (1994, ACM SIGGRAPH ASIA, IEEE Computer Graphics and Applications, Vol. 14(4), S. 23–32) offenbart ein Klassifizierungsschema, welches dazu vorgesehen ist, ein strukturiertes Framework für Parallel-Rendering bereitzustellen. Das Framework basiert darauf, wo die Sortierung von Objektkoordinaten in Bildschirmkoordinaten auftritt, wenn Geometrieverarbeitung und Rasterisierung parallel durchgeführt werden.
  • US 5,794,016 81 offenbart eine skalierbare Parallel-Prozessor-Verarbeitungsarchitektur, die einen oder mehrere Rendering-Prozessoren und einen Grafikspeicher aufweist, der in Blöcke unterteilt ist. Nicht zusammenhängende Gruppen von Blöcken werden dann unterschiedlichen Prozessoren zugewiesen. Die Parallel-Prozessor-Verarbeitungsarchitektur ist durch die Anzahl verwendeter Rendering-Prozessoren skalierbar und ist in Bezug auf die Zuweisung der Gruppen der Blöcke zu bestimmten Rendering-Prozessoren konfigurierbar.
  • KURZDARSTELLUNG DER ERFINDUNG
  • Ausführungsformen der vorliegenden Erfindung stellen Grafikprozessoren bereit, die ein skalierbares Array mit nebenläufigen Kernen zum Ausführen von Vertexshader-Programmen, Geometrieshader-Programmen und/oder Pixelshader-Programmen in jeder Kombination während Rendering-Operationen verwenden. Das Kern-Array enthält eine Anzahl nebenläufiger Verarbeitungskerne, die in einem oder mehreren Clustern angeordnet sind, wobei Kerne in demselben Cluster durch eine gemeinsam genutzte Kern-Schnittstelle gesteuert werden.
  • In Ausführungsformen, wo ein Pixelshader-Programm ausgeführt werden soll, wird das Cluster oder der Kern, in dem das Programm ausgeführt werden soll, vorteilhafterweise auf der Grundlage der Position des Pixels innerhalb des Bildbereichs ausgewählt. In einer Ausführungsform ist der Schirm ”gekachelt”, wobei jede Kachel dem einen oder anderen der Verarbeitungscluster (oder einem bestimmten Kern innerhalb eines Verarbeitungsclusters) zugeordnet ist. Die Kacheln, die einem bestimmten Verarbeitungscluster oder -kern zugeordnet sind, sind vorteilhafterweise über den Schirm hinweg gestreut, um einen ungefähren Arbeitslastausgleich zu erreichen.
  • In einigen Ausführungsformen enthält der Verarbeitungskern oder das Verarbeitungscluster eine Rasteroperationseinheit, welche die neu erzeugten Pixeldaten mit existierenden Daten in einem Framepuffer integriert. Der Framepuffer kann in Übereinstimmung mit der Anzahl der Verarbeitungscluster partitioniert werden, wobei jedes Cluster alle seine Daten in eine einzige Partition schreibt. In anderen Ausführungsformen braucht die Anzahl der Partitionen des Framepuffers nicht mit der Anzahl der verwendeten Verarbeitungscluster überein zu stimmen. Eine Kreuzschiene oder ein ähnlicher Schaltungsaufbau kann eine konfigurierbare Kopplung zwischen den Verarbeitungsclustern und den Framepufferpartitionen bereitstellen, so dass jedes Verarbeitungscluster mit jeder Framepufferpartition gekoppelt werden kann. In einigen Ausführungsformen wird die Kreuzschiene weggelassen, wodurch die Speicherplatzanordnung verbessert wird.
  • Die folgende detaillierte Beschreibung ermöglicht zusammen mit den begleitenden Zeichnungen ein besseres Verständnis der Art und der Vorteile der vorliegenden Erfindung.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockschaubild eines Computersystems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 2 ist ein Blockschaubild einer Rendering-Pipeline, die in einem Grafikprozessor gemäß einer Ausführungsform der vorliegenden Erfindung implementiert werden kann.
  • 3 ist ein Blockschaubild eines Arrays mit nebenläufigen (multithreaded) Kernen für einen Grafikprozessor gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 4 veranschaulicht eine mögliche Kachelung eines Bildbereichs in eine Anzahl von Kacheln gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 5 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern und einem Framepuffer gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
  • 6 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern und einem Framepuffer gemäß einer weiteren Ausführungsform der vorliegenden Erfindung veranschaulicht.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • Systemüberblick
  • 1 ist ein Blockschaubild eines Computersystems 100 gemäß einer Ausführungsform der vorliegenden Erfindung. Das Computersystem 100 enthält eine zentrale Verarbeitungseinheit (CPU) 102 und einen Systemspeicher 104, der über einen Buspfad kommuniziert, der eine Speicherbrücke 105 enthält. Die Speicherbrücke 105 ist über einen Buspfad 106 mit einer E/A(Eingabe/Ausgabe)-Brücke 107 verbunden. Die E/A-Brücke 107 empfängt Benutzereingaben von einer oder mehreren Benutzereingabegeräten 108 (zum Beispiel Tastatur, Maus) und leitet die Eingabe über den Bus 106 und die Speicherbrücke 105 an die CPU 102 weiter. Eine Sichtausgabe erfolgt auf einem Pixel-basierten Anzeigegerät 110 (zum Beispiel einem herkömmlichen Kathodenstrahlröhren- oder einem LCD-Monitor), das unter der Steuerung eines Grafikteilsystems 112 arbeitet, welches über einen Bus 113 mit der Speicherbrücke 105 gekoppelt ist. Eine Systemfestplatte 114 ist ebenfalls mit der E/A-Brücke 107 verbunden. Ein Schalter 116 stellt Verbindungen zwischen der E/A-Brücke 107 und anderen Komponenten her, wie zum Beispiel einem Netzwerkadapter 118 und verschiedenen Einsteckkarten 120, 121. Andere Komponenten (die nicht ausdrücklich gezeigt sind), einschließlich USB- oder sonstige Port-Verbindungen, CD-Laufwerke, DVD-Laufwerke und dergleichen, können ebenfalls mit der E/A-Brücke 107 verbunden werden. Bus-Verbindungen zwischen den verschiedenen Komponenten können unter Verwendung von Bus-Protokollen implementiert werden, wie zum Beispiel PCI (Peripheral Component Interconnect), PCI Express (PCI-E), AGP (Accelerated Graphics Port), HyperTransport oder anderen Bus-Protokoll(en), und Verbindungen zwischen verschiedenen Geräten können unterschiedliche Protokolle verwenden, wie dem Fachmann bekannt ist.
  • Das Grafikverarbeitungsteilsystem 112 enthält eine Grafikverarbeitungseinheit (GPU) 122 und einen Grafikspeicher 124, der zum Beispiel unter Verwendung eines oder mehrerer integrierter Schaltungs-Bauelemente implementiert werden kann, wie zum Beispiel programmierbare Prozessoren, anwendungsspezifische integrierte Schaltkreise (ASICs) und Speicherelemente. Die GPU 122 kann dafür konfiguriert sein, verschiedene Aufgaben auszuführen, die damit zu tun haben, Pixeldaten aus Grafikdaten zu erzeugen, die durch die CPU 102 und/oder den Systemspeicher 104 über die Speicherbrücke 105 und den Bus 113 zugeführt werden, wobei sie mit dem Grafikspeicher 124 interagiert, um Pixeldaten zu speichern und zu aktualisieren und dergleichen. Zum Beispiel kann die GPU 122 Pixeldaten aus 2-D- oder 3-D-Szenendaten erzeugen, die durch verschiedene Programme bereitgestellt werden, die in der CPU 102 ausgeführt werden. Die GPU 122 kann auch Pixeldaten, die über die Speicherbrücke 105 empfangen werden, in dem Grafikspeicher 124 mit oder ohne Weiterverarbeitung speichern. Die GPU 122 enthält außerdem ein Scan-out-Modul, das dafür konfiguriert ist, Pixeldaten aus dem Grafikspeicher 124 zu dem Anzeigegerät 110 zu senden.
  • Die CPU 102 arbeitet als der Master-Prozessor des Systems 100, der die Operationen anderer Systemkomponenten steuert und koordiniert. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der GPU 122 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom aus Befehlen für die GPU 122 in einen Befehlspuffer, der sich im Systemspeicher 104, im Grafikspeicher 124 oder einem sonstigen Speicherort befinden kann, auf den sowohl die CPU 102 als auch die GPU 122 zugreifen können. Die GPU 122 liest den Befehlsstrom aus dem Befehlspuffer und führt Befehle asynchron mit dem Betrieb der CPU 102 aus. Die Befehle können herkömmliche Rendering-Befehle zum Erzeugen von Bildern sowie Allzweckberechnungsbefehle enthalten, die es Anwendungen ermöglichen, welche in der CPU 102 ausgeführt werden, die Berechnungsleistung der GPU 122 wirksam für eine Datenverarbeitung zu nutzen, die nichts mit der Bilderzeugung zu tun haben.
  • Es versteht sich, dass das hier gezeigte System veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Bus-Topologie, einschließlich der Anzahl und Anordnung von Brücken, kann nach Wunsch modifiziert werden. Zum Beispiel ist in einigen Ausführungsformen der Systemspeicher 104 mit der CPU 102 direkt anstatt über eine Brücke verbunden, und andere Geräten kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Grafikteilsystem 112 mit der E/A-Brücke 107 anstatt mit der Speicherbrücke 105 verbunden. In wieder anderen Ausführungsformen könnten die E/A-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein. Die im vorliegenden Text gezeigten konkreten Komponenten sind optional. Zum Beispiel könnten eine beliebige Anzahl von Einsteckkarten oder Peripheriegeräten unterstützt werden. In einigen Ausführungsformen wird der Schalter 116 weggelassen, und der Netzwerkadapter 118 und die Einsteckkarten 120, 121 sind direkt mit der E/A-Brücke 107 verbunden.
  • Die Verbindung der GPU 122 mit dem Rest des Systems 100 kann ebenfalls variiert werden. In einigen Ausführungsformen ist das Grafiksystem 112 als eine Einsteckkarte implementiert, die in einen Erweiterungsschlitz des Systems 100 eingesteckt werden kann. In anderen Ausführungsformen ist eine GPU auf einem einzelnen Chip mit einer Busbrücke, wie zum Beispiel einer Speicherbrücke 105 oder E/A-Brücke 107, integriert.
  • Eine GPU kann mit einer beliebigen Menge an lokalem Grafikspeicher ausgestattet sein, einschließlich keinem lokalen Speicher, und kann lokalen Speicher und Systemspeicher in einer beliebigen Kombination verwenden. Zum Beispiel ist in einer Unified Memory Architecture(UMA)-Ausführungsform kein dedizierter Grafikspeicherbaustein vorhanden, und die GPU verwendet ausschließlich oder fast ausschließlich Systemspeicher. In UMA-Ausführungsformen kann die GPU in einen Busbrücken-Chip integriert sein oder kann als ein diskreter Chip mit einem Hochgeschwindigkeitsbus (zum Beispiel PCI-E) versehen sein, der die GPU mit dem Brücken-Chip und Systemspeicher verbindet.
  • Es versteht sich des Weiteren, dass eine beliebige Anzahl von GPUs in ein System eingebunden sein kann, indem zum Beispiel mehrere GPUs auf einer einzelnen Grafikkarte angeordnet werden oder indem mehrere Grafikkarten mit dem Bus 113 verbunden werden. Mehrere GPUs können parallel betrieben werden, um Bilder für dasselbe Anzeigegerät oder für verschiedene Anzeigegeräte zu erzeugen.
  • Außerdem können GPUs, die Aspekte der vorliegenden Erfindung verkörpern, in eine Vielzahl verschiedener Geräte eingebunden werden, einschließlich Allzweck-Computersysteme, Videospielekonsolen und andere spezielle Computersysteme, DVD-Player, handgehaltene Geräte wie zum Beispiel Mobiltelefone oder persönliche digitale Assistenten und so weiter.
  • Rendering-Pipeline-Überblick
  • 2 ist ein Blockschaubild einer Rendering-Pipeline 200, die in der GPU 122 von 1 gemäß einer Ausführungsform der vorliegenden Erfindung implementiert werden kann. In dieser Ausführungsform ist die Rendering-Pipeline 200 unter Verwendung einer Architektur implementiert, in der jegliche relevante Vertexshader-Programme, Geometrieshader-Programme und Pixelshader-Programme unter Verwendung derselben Parallelverarbeitungshardware ausgeführt werden, die im vorliegenden Text als ein ”Array mit nebenläufigen (multithreaded) Kernen” 202 bezeichnet wird. Das Array mit nebenläufigen Kernen 202 wird weiter unten beschrieben.
  • Zusätzlich zu dem Array mit nebenläufigen Kernen 202 enthält die Rendering-Pipeline 200 ein Front-End 204 und einen Datenassemblierer 206, ein Einrichtmodul 208, einen Rasterisierer (rasterizer) 210, ein Farbassembliermodul 212 und ein Rasteroperationsmodul (ROP) 214, von denen jedes unter Verwendung herkömmlicher Integrierter-Schaltkreis-Technologien oder anderer Technologien implementiert werden kann.
  • Das Front-End 204 empfängt Statusinformationen (STATE), Rendering-Befehle (CMD) und Geometrie-Daten (GDATA) zum Beispiel von der CPU 102 von 1. In einigen Ausführungsformen gibt die CPU 102 die Geometrie-Daten nicht direkt aus, sondern gibt Verweise auf Orte im Systemspeicher 104 aus, an denen Geometrie-Daten gespeichert sind. Der Datenassemblierer 206 ruft die Daten aus dem Systemspeicher 104 ab. Die Statusinformationen, Rendering-Befehle und Geometrie-Daten können von einer allgemein herkömmlichen Art sein und können dafür verwendet werden, um das oder die gewünschten gerenderten Bilder zu definieren, einschließlich Geometrie, Beleuchtung, Abschattung, Textur, Bewegung und/oder Kameraparameter für eine Szene.
  • In einer Ausführungsform enthalten die Geometrie-Daten eine Anzahl von Objektdefinitionen für Objekte (zum Beispiel einen Tisch, einen Stuhl, eine Person oder ein Tier), die in der Szene vorkommen können. Objekte werden vorteilhafterweise als Gruppen geometrischer Grundformen (zum Beispiel Punkte, Linien, Dreiecke und/oder sonstige Polygone) modelliert, die anhand ihrer Eckpunkte definiert werden. Für jeden Eckpunkt (vertex) wird eine Position in einem Objektkoordinatensystem spezifiziert, welche Position die Position des Eckpunktes relativ zu dem modellierten Objekt darstellt. Zusätzlich zu einer Position können jedem Eckpunkt noch verschiedene weitere Attribute zugeordnet sein. Generell kann zu den Attributen eines Eckpunktes jede beliebige Eigenschaft gehören, die anhand eines einzelnen Eckpunktes spezifiziert wird. Zum Beispiel gehören in einigen Ausführungsformen zu den Eckpunkt-Attributen skalare oder Vektor-Attribute, die zum Bestimmen von Qualitäten verwendet werden, wie zum Beispiel der Farbe, der Textur, der Transparenz, der Beleuchtung, der Abschattung und der Animation des Eckpunktes und seiner zugehörigen geometrischen Grundformen.
  • Geometrische Grundformen (primitives), wie oben bereits angesprochen, werden allgemein anhand ihrer Eckpunkte (vertices) definiert, und ein einzelner Eckpunkt kann in einer beliebigen Anzahl von geometrischen Grundformen enthalten sein. In einigen Ausführungsformen ist jedem Eckpunkt ein Index zugewiesen (bei dem es sich im jeden beliebigen eindeutigen Identifikator handeln kann), und eine geometrische Grundform wird definiert, indem eine geordnete Liste von Indizes für die Eckpunkte bereitgestellt wird, die diese geometrische Grundform bilden. Andere Techniken zum Definieren geometrischer Grundformen (einschließlich herkömmlicher Techniken wie zum Beispiel Dreiecksstreifen oder Fächer) können ebenfalls verwendet werden.
  • Die Statusinformationen und Rendering-Befehle definieren Verarbeitungsparameter und -aktionen für verschiedene Stufen der Rendering-Pipeline 200. Das Front-End 204 lenkt die Statusinformationen und Rendering-Befehle über einen (nicht ausdrücklich gezeigten) Steuerungspfad zu anderen Komponenten der Rendering-Pipeline 200. Wie dem Fachmann bekannt ist, können diese Komponenten auf empfangene Statusinformationen mit dem Speichern oder Aktualisieren von Werten in verschiedenen Steuerregistern reagieren, auf die während der Verarbeitung zugegriffen wird, und können auf Rendering-Befehle mit der Verarbeitung von Daten reagieren, die in der Pipeline empfangen werden.
  • Das Front-End 204 lenkt die Geometrie-Daten zu dem Datenassemblierer 206. Der Datenassemblierer 206 formatiert die Geometrie-Daten und bereitet sie für die Übermittlung in einem Geometriemodul 218 in dem Array mit nebenläufigen Kernen 202 vor.
  • Das Geometriemodul 218 weist (nicht ausdrücklich gezeigte) programmierbare Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202 an, Vertex- und/oder Geometrieshader-Programme an den Eckpunkt-Daten auszuführen, wobei die Programme in Reaktion auf die Statusinformationen ausgewählt werden, die durch das Front-End 204 übermittelt werden. Die Vertex- und/oder Geometrieshader-Programme können durch die Rendering-Anwendung spezifiziert werden, wie dem Fachmann bekannt ist, und es können verschiedene Shader-Programme auf verschiedene Eckpunkte und/oder geometrische Grundformen angewendet werden. Das zu verwendende Shader-Programm bzw. die zu verwendenden Shader-Programme können im Systemspeicher oder im Grafikspeicher gespeichert werden und können gegenüber dem Array mit nebenläufigen Kernen 202 über geeignete Rendering-Befehle und Statusinformationen identifiziert werden, wie dem Fachmann bekannt ist. In einigen Ausführungsformen können Vertexshader- und/oder Geometrieshader-Programme in mehreren Durchgängen ausgeführt werden, wobei während jedes Durchgangs verschiedene Verarbeitungsoperationen ausgeführt werden. Jedes Vertex- und/oder Geometrieshader-Programm bestimmt die Anzahl der Durchgänge und die Operationen, die während jedes Durchgangs auszuführen sind. Vertex- und/oder Geometrieshader-Programme können Algorithmen unter Verwendung eines weiten Bereichs mathematischer und logischer Operationen an Eckpunkten und anderen Daten implementieren, und die Programme können bedingte oder abzweigende Ausführungspfade und direkte und indirekte Speicherzugriffe enthalten.
  • Vertexshader-Programme und Geometrieshader-Programme können zum Implementieren einer Vielzahl verschiedener visueller Effekte verwendet werden, einschließlich Beleuchtungs- und Abschattungseffekte. Zum Beispiel wandelt in einer einfachen Ausführungsform ein Vertex-Programm einen Eckpunkt aus seinem 3D-Objektkoordinatensystem in ein 3D-Clipraum- oder Weltraumkoordinatensystem um. Diese Transformation definiert die relativen Positionen der verschiedenen Objekte in der Szene. In einer Ausführungsform kann die Umwandlung programmiert werden, indem in die Rendering-Befehle und/oder -Daten, die jedes Objekt definieren, eine Umwandlungsmatrix zum Umwandeln aus dem Objektkoordinatensystem dieses Objekts in Clipraumkoordinaten aufgenommen wird. Das Vertexshader-Programm wendet diese Umwandlungsmatrix auf jeden Eckpunkt der geometrischen Grundformen an, aus denen ein Objekt besteht. Es können komplexere Vertexshader-Programme verwendet werden, um eine Vielzahl verschiedener visueller Effekte zu implementieren, einschließlich Beleuchtung und Abschattung, prozeduraler Geometrie und Animationsoperationen. Zahlreiche Beispiele solcher Eckpunkt-für-Eckpunkt-Operationen sind dem Fachmann bekannt, und auf eine detaillierte Beschreibung wird verzichtet, da sie für das Verständnis der vorliegenden Erfindung nicht maßgeblich ist.
  • Geometrieshader-Programme (geometry shader programs) unterscheiden sich von Vertexshader-Programmen dadurch, dass Geometrieshader-Programme an geometrischen Grundformen (Gruppen von Eckpunkten) anstatt an einzelnen Eckpunkten operieren. Somit kann in einigen Fällen ein Geometrie-Programm neue Eckpunkte erzeugen und/oder Eckpunkten oder geometrische Grundformen aus dem Satz der verarbeiteten Objekte entfernen. In einigen Ausführungsformen können Durchgänge durch ein Vertexshader-Programm und ein Geometrieshader-Programm abgewechselt werden, um die Geometrie-Daten zu verarbeiten.
  • In einigen Ausführungsformen werden Vertexshader-Programme und Geometrieshader-Programme unter Verwendung derselben programmierbaren Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202 ausgeführt. Somit kann zu bestimmten Zeiten eine bestimmte Verarbeitungsmaschine als ein Vertexshader arbeiten, der Vertex-Programmbefehle empfängt und ausführt, und zu anderen Zeiten kann dieselbe Verarbeitungsmaschine als ein Geometrieshader arbeiten, der Geometrie-Programmbefehle empfängt und ausführt. Die Verarbeitungsmaschinen können nebenläufig sein, und verschiedene Befehlsfolgen, die verschiedene Arten von Shader-Programmen ausführen, können gleichzeitig in dem Array mit nebenläufigen Kernen 202 in Verarbeitung sein.
  • Nachdem die Vertex- und/oder Geometrieshader-Programme ausgeführt wurden, leitet das Geometriemodul 218 die verarbeiteten Geometrie-Daten (GDATA') zu dem Einrichtmodul 208. Das Einrichtmodul 208, das von allgemein herkömmlichem Design sein kann, erzeugt Randgleichungen aus den Clipraum- oder Schirmraumkoordinaten jeder geometrischen Grundform. Die Randgleichungen können vorteilhafterweise verwendet werden, um zu bestimmen, ob sich ein Punkt in dem Schirmraum innerhalb oder außerhalb der geometrischen Grundform befindet.
  • Das Einrichtmodul 208 übermittelt jede geometrische Grundform (PRIM) an den Rasterisierer 210. Der Rasterisierer 210, der von allgemein herkömmlichem Design sein kann, bestimmt, welche Pixel (sofern zutreffend) durch die geometrische Grundform abgedeckt sind, zum Beispiel unter Verwendung herkömmlicher Abtastumwandlungsalgorithmen. Im Sinne des vorliegenden Textes meint ein ”Pixel” (oder ”Fragment”) allgemein eine Region im 2-D-Schirmraum, für die ein einzelner Farbwert zu bestimmen ist. Anzahl und Anordnung der Pixel können ein konfigurierbarer Parameter der Rendering-Pipeline 200 sein und könnten gegebenenfalls mit der Schirmauflösung eines bestimmten Anzeigegerätes korreliert sein. Wie dem Fachmann bekannt ist, kann die Pixelfarbe an mehreren Positionen innerhalb des Pixels abgetastet werden (zum Beispiel unter Verwendung herkömmlicher Supersampling- oder Multisampling-Techniken), und in einigen Ausführungsformen wird das Supersampling oder Multisampling innerhalb des Pixelshaders gehandhabt.
  • Nach dem Bestimmen, welche Pixel durch eine geometrische Grundform abgedeckt sind, übermittelt der Rasterisierer 210 die geometrische Grundform (PRIM) zusammen mit einer Liste der Schirmkoordinaten (X, Y) der Pixel, die durch die geometrische Grundform abgedeckt sind, zu einem Farbassembliermodul 212. Das Farbassembliermodul 212 verknüpft die geometrischen Grundformen und Abdeckungsinformationen, die von dem Rasterisierer 210 kommend empfangen wurden, mit Attributen (zum Beispiel Farbkomponenten, Texturkoordinaten, Oberflächennormalen) der Eckpunkte der geometrischen Grundform und erzeugt Ebenengleichungen (oder andere geeignete Gleichungen), die einige oder alle der Attribute als eine Funktion der Position im Schirmkoordinatenraum definiert.
  • Diese Attribut-Gleichungen können vorteilhafterweise in einem Pixelshader-Programm verwendet werden, um einen Wert für das Attribut an einer beliebigen Stelle innerhalb der geometrischen Grundform zu interpolieren. Es können herkömmliche Techniken zum Erzeugen der Gleichungen verwendet werden. Zum Beispiel erzeugt das Farbassembliermodul 212 in einer Ausführungsform Koeffizienten A, B, und C für eine Ebenengleichung der Form U = Ax + By + C für jedes Attribut U.
  • Das Farbassembliermodul 212 übermittelt die Attribut-Gleichungen (EQS, die zum Beispiel die Ebenengleichungskoeffizienten A, B und C enthalten können) für jede geometrische Grundform, die mindestens ein Pixel abdeckt, und eine Liste mit Schirmkoordinaten (X, Y) der abgedeckten Pixel an ein Pixelmodul 224 in dem Array mit nebenläufigen Kernen 202. Das Pixelmodul 224 weist (nicht ausdrücklich gezeigte) programmierbare Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202 an, ein oder mehrere Pixelshader-Programme an jedem Pixel auszuführen, das durch die geometrische Grundform abgedeckt wird, wobei das Programm oder die Programme in Reaktion auf die Statusinformationen ausgewählt werden, die durch das Front-End 204 übermittelt werden. Wie im Fall von Vertexshader-Programmen und Geometrieshader-Programmen können Rendering-Anwendungen das Pixelshader-Programm spezifizieren, das für einen bestimmten Satz Pixel zu verwenden ist. Pixelshader-Programme können verwendet werden, um eine Vielzahl verschiedener visueller Effekte zu implementieren, einschließlich Beleuchtungs- und Abschattungseffekte, Reflexionen, Texturmischung, prozedurale Texturerzeugung und so weiter. Zahlreiche Beispiele solcher Pixel-für-Pixel-Operationen sind dem Fachmann bekannt, und auf eine detaillierte Beschreibung wird verzichtet, da sie für das Verständnis der vorliegenden Erfindung nicht maßgeblich ist. Pixelshader-Programme können Algorithmen unter Verwendung eines weiten Bereichs mathematischer und logischer Operationen an Pixeln und anderen Daten implementieren, und die Programme können bedingte oder abzweigende Ausführungspfade und direkte und indirekte Speicherzugriffe enthalten.
  • Pixelshader-Programme werden vorteilhafterweise in dem Array mit nebenläufigen Kernen 202 unter Verwendung derselben programmierbaren Verarbeitungsmaschinen ausgeführt, die auch die Vertex- und/oder Geometrieshader-Programme ausführen. Somit kann zu bestimmten Zeiten eine bestimmte Verarbeitungsmaschine als ein Vertexshader arbeiten, der Vertex-Programmbefehle empfängt und ausführt, und zu anderen Zeiten kann dieselbe Verarbeitungsmaschine als ein Geometrirshader arbeiten, der Geometrie-Programmbefehle empfängt und ausführt, und zu wieder anderen Zeiten kann dieselbe Verarbeitungsmaschine als ein Pixelshader arbeiten, der Pixelshader-Programmbefehle empfängt und ausführt. Es versteht sich, dass das Array mit nebenläufigen Kernen einen natürlichen Lastausgleich zwischen Pixel- und Eckpunkt-Verarbeitung ermöglicht. Wenn die Anwendung Geometrie-intensiv ist (wenn zum Beispiel viele kleine geometrische Grundformen verwendet werden), so wird allgemein ein größerer Teil der Verarbeitungszyklen in dem Array mit nebenläufigen Kernen 202 auf Vertex- und/oder Geometrieshader verwendet, und wenn die Anwendung Pixel-intensiv ist (wenn zum Beispiel weniger und größere geometrische Grundformen unter Verwendung komplexer Pixelshader-Programme mit mehreren Texturen und dergleichen abgeschattet werden), so wird allgemein ein größerer Anteil der Verarbeitungszyklen auf Pixelshader verwendet.
  • Nachdem die Verarbeitung für ein Pixel oder eine Gruppe von Pixeln vollendet ist, übermittelt das Pixelmodul 224 die verarbeiteten Pixel (PDATA) an den ROP 214. Der ROP 214, der von einem allgemein herkömmlichen Design sein kann, integriert die Pixelwerte, die von dem Pixelmodul 224 kommend empfangen wurden, mit Pixeln des Bildes, das in dem Framepuffer 226 aufgebaut wird, der sich zum Beispiel in dem Grafikspeicher 124 befinden kann. In einigen Ausführungsformen kann der ROP 214 Pixel maskieren oder neue Pixel mit Pixeln vermischen, die zuvor in das gerenderte Bild geschrieben wurden. Tiefenpuffer, Alphapuffer und Schablonenpuffer können ebenfalls verwendet werden, um den Anteil (sofern zutreffend) jedes ankommenden Pixels an dem gerenderten Bild zu bestimmen. Pixeldaten PDATA', die der entsprechenden Kombination jedes ankommenden Pixelwertes und jedes zuvor gespeicherten Pixelwertes entsprechen, werden in den Framepuffer 226 zurückgeschrieben. Nachdem das Bild vollständig ist, kann der Framepuffer 226 zu einem Anzeigegerät ausgescannt werden und/oder einer Weiterverarbeitung unterzogen werden.
  • Es versteht sich, dass die im vorliegenden Text beschriebene Rendering-Pipeline veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Pipeline kann andere Einheiten als die gezeigten enthalten, und die Sequenz der Verarbeitungsereignisse kann von der im vorliegenden Text beschriebenen abweichen. Zum Beispiel kann in einigen Ausführungsformen eine Rasterisierung in Stufen mit einem ”groben” Rasterisierer ausgeführt werden, der den gesamten Schirm in Blöcken (zum Beispiel 16 × 16 Pixel) verarbeitet, um zu bestimmen, welche Blöcke (sofern zutreffend) das Dreieck abdeckt (oder teilweise abdeckt), gefolgt von einem ”feinen” Rasterisierer, der die einzelnen Pixel innerhalb eines Blocks verarbeitet, zu dem festgestellt wird, dass er mindestens teilweise abgedeckt ist. In einer solchen Ausführungsform ist der Feinrasterisierer in dem Pixelmodul 224 enthalten. In einer weiteren Ausführungsform können einige Operationen, die herkömmlicherweise durch einen ROP ausgeführt werden, innerhalb des Pixelmoduls 224 ausgeführt werden, bevor die Pixeldaten zu dem ROP 214 weitergeleitet werden.
  • Des Weiteren können mehrere Instanzen einiger oder aller im vorliegenden Text beschriebenen Module parallel betrieben werden. In einer solchen Ausführungsform enthält das Array mit nebenläufigen Kernen 202 zwei oder mehr Geometriemodule 218 und eine gleiche Anzahl von Pixelmodulen 224, die parallel arbeiten. Jedes Geometriemodul und Pixelmodul steuert gemeinsam eine andere Teilmenge der Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202.
  • Konfiguration des Arrays mit nebenläufigen Kernen
  • In einer Ausführungsform besitzt das Array mit nebenläufigen Kernen 202 eine hoch-parallele Architektur, die eine gleichzeitige Ausführungsform einer großen Anzahl von Instanzen der Vertex-, Geometrie- und/oder Pixelshader-Programme in verschiedenen Kombinationen unterstützt. 3 ist ein Blockschaubild des Arrays mit nebenläufigen Kernen 202 gemäß einer Ausführungsform der vorliegenden Erfindung.
  • In dieser Ausführungsform enthält das Array mit nebenläufigen Kernen 202 eine Anzahl (N) von Verarbeitungsclustern 302. Im vorliegenden Text sind erforderlichenfalls mehrere Instanzen gleicher Objekte mit Bezugszahlen, die das Objekt bezeichnen, und in Klammern gesetzten Zahlen, die die Instanz bezeichnen, kenntlich gemacht. Es kann eine beliebige Anzahl N (zum Beispiel 1, 4, 8 oder eine beliebige andere Anzahl) von Verarbeitungsclustern vorhanden sein. In 3 ist ein einzelnes Verarbeitungscluster 302 im Detail gezeigt. Es versteht sich, dass andere Verarbeitungscluster 302 von ähnlichem oder identischem Design sein können.
  • Jedes Verarbeitungscluster 302 enthält eine Geometrie-Steuereinheit 304 (die das Geometriemodul 218 von 2 implementiert) und eine Pixel-Steuereinheit 306 (die das Pixelmodul 224 von 2 implementiert). Die Geometrie-Steuereinheit 304 und die Pixel-Steuereinheit 306 kommunizieren jeweils mit einer Kern-Schnittstelle 308. Die Kern-Schnittstelle 308 steuert eine Anzahl (M) von Kernen 310, die die Verarbeitungsmaschinen des Arrays mit nebenläufigen Kernen 202 enthalten. Jede beliebige Anzahl M (zum Beispiel 1, 2, 4 oder eine beliebige andere Anzahl) von Kernen 310 kann mit einer einzelnen Kern-Schnittstelle verbunden sein. Jeder Kern 310 ist vorteilhafterweise als ein nebenläufiger Ausführungskern implementiert, der in der Lage ist, eine große Anzahl (zum Beispiel 100 oder mehr) an gleichzeitigen Ausführungsbefehlsfolgen zu unterstützen (wobei sich der Begriff ”Befehlsfolge” auf eine Instanz eines bestimmten Programms bezieht, das an einem bestimmten Satz Eingangsdaten ausgeführt wird), einschließlich einer Kombination aus Eckpunkt-Befehlsfolgen, Geometrie-Befehlsfolgen und Pixel-Befehlsfolgen. In einer Ausführungsform implementiert jeder Kern 310 eine P-Weg-SIMD-Architektur, um P Befehlsfolgen parallel auszuführen, wobei P eine willkürlich gewählte ganze Zahl (zum Beispiel 8, 16, 32) ist und in der Lage ist, eine Anzahl G (zum Beispiel 18, 24 usw.) von Gruppen aus P Befehlsfolgen gleichzeitig zu verwalten. Eine detaillierte Beschreibung des Kerns 310 findet sich in der vorläufigen US-Patentanmeldung Nr. 60/752,265, eingereicht am 19. Dezember 2005, die durch Bezugnahme für alle Zwecke in ihrer Gesamtheit in den vorliegenden Text aufgenommen wird.
  • Die Kern-Schnittstelle 308 steuert ebenfalls eine Textur-Pipeline 314, die zwischen Kernen 310 gemeinsam genutzt wird. Die Textur-Pipeline 314, die von einem allgemein herkömmlichen Design sein kann, enthält vorteilhafterweise Logikschaltungen, die dafür konfiguriert sind, Texturkoordinaten zu empfangen, Texturdaten, die den Texturkoordinaten entsprechen, aus dem Speicher zu holen und die Texturdaten gemäß verschiedenen Algorithmen zu filtern. Es können herkömmliche Filterungsalgorithmen verwendet werden, einschließlich bilinearer und trilinearer Filterung. Wenn ein Kern 310 in einer seiner Befehlsfolgen auf einen Texturbefehl stößt, so übermittelt er die Texturkoordinaten über die Kern-Schnittstelle 308 an die Textur-Pipeline 314. Die Textur-Pipeline 314 verarbeitet den Texturbefehl und sendet das Ergebnis über die Kern-Schnittstelle 308 an den Kern 310 zurück. Eine Texturverarbeitung durch die Pipeline 314 kann eine beträchtliche Anzahl an Taktzyklen verbrauchen, und während eine Befehlsfolge auf das Texturergebnis wartet, setzt der Kern 310 vorteilhafterweise die Ausführung anderer Befehlsfolgen fort.
  • Während des Betriebes übermittelt der Datenassemblierer 206 (2) Geometrie-Daten GDATA an Verarbeitungscluster 302. In einer Ausführungsform teilt der Datenassemblierer 206 den ankommenden Strom aus Geometrie-Daten in Teile und wählt, zum Beispiel auf der Grundlage der Verfügbarkeit von Ausführungsressourcen, aus, welches der Verarbeitungscluster 302 den nächsten Teil der Geometrie-Daten erhalten soll. Dieser Teil wird an die Geometrie-Steuereinheit 304 in dem gewählten Verarbeitungscluster 302 übermittelt.
  • Die Geometrie-Steuereinheit 304 leitet die empfangenen Daten an die Kern-Schnittstelle 308 weiter, welche die Eckpunkt-Daten in einen Kern 310 lädt, und weist dann den Kern 310 an, das entsprechende Vertexshader-Programm zu starten. Nachdem das Vertexshader-Programm zu Ende ausgeführt wurde, gibt die Kern-Schnittstelle 308 ein Signal an die Geometrie-Steuereinheit 304 aus. Wenn ein Geometrieshader-Programm ausgeführt werden soll, so weist die Geometrie-Steuereinheit 304 die Kern-Schnittstelle 308 an, das Geometrieshader-Programm zu starten. In einigen Ausführungsformen werden die verarbeiteten Eckpunkt-Daten an die Geometrie-Steuereinheit 304 zurückgesendet, wenn das Vertexshader-Programm zu Ende ausgeführt wurde, und die Geometrie-Steuereinheit 304 weist die Kern-Schnittstelle 308 an, die die Daten neu zu laden, bevor das Geometrieshader-Programm ausgeführt wird. Nach erfolgter Ausführung des Vertexshader-Programms und/oder des Geometrieshader-Programms übermittelt die Geometrie-Steuereinheit 304 die verarbeiteten Geometrie-Daten (GDATA') an das Einrichtmodul 208 von 2.
  • Auf der Pixel-Stufe übermittelt das Farbassembliermodul 212 (2) Attribut-Gleichungen EQS für eine geometrische Grundform (primitive) und Pixelkoordinaten (X, Y) der Pixel, die durch die geometrische Grundform abgedeckt werden, an das Verarbeitungscluster 302. In einer Ausführungsform teilt das Farbassembliermodul 212 den ankommenden Strom aus Abdeckungsdaten in Teile und wählt, zum Beispiel auf der Grundlage der Verfügbarkeit von Ausführungsressourcen oder der Position der geometrischen Grundform in den Schirmkoordinaten, aus, welches der Verarbeitungscluster 302 den nächsten Teil der Daten empfangen soll. Dieser Teil wird an die Pixel-Steuereinheit 306 in dem gewählten Verarbeitungscluster 302 übermittelt.
  • Die Pixel-Steuereinheit 306 übermittelt die Daten an die Kern-Schnittstelle 308, die die Pixeldaten in einen Kern 310 lädt, und weist dann den Kern 310 an, das Pixelshader-Programm zu starten. Wenn der Kern 310 nebenläufig ist, so können Pixelshader-Programme, Geometrieshader-Programme und Vertexshader-Programme allesamt gleichzeitig in demselben Kern 310 ausgeführt werden. Nach erfolgter Ausführung des Pixelshader-Programms übermittelt die Kern-Schnittstelle 308 die verarbeiteten Pixeldaten zu der Pixel-Steuereinheit 306, welche die Pixeldaten PDATA zu der ROP-Einheit 214 (2) weiterleitet.
  • Es versteht sich, dass das im vorliegenden Text beschriebene Array mit nebenläufigen Kernen veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungsclustern vorhanden sein, und jedes Verarbeitungscluster kann eine beliebige Anzahl von Kernen enthalten. In einigen Ausführungsformen können Shader bestimmter Typen darauf beschränkt sein, in bestimmten Verarbeitungsclustern oder in bestimmten Kernen ausgeführt zu werden. Zum Beispiel könnten Geometrieshader darauf beschränkt sein, im Kern 310(0) jedes Verarbeitungsclusters ausgeführt zu werden. Solche Designentscheidungen können auf der Grundlage von Überlegungen bezüglich der Hardware-Größe und -Komplexität im Verhältnis zur Leistung getroffen werden, wie dem Fachmann bekannt ist. Eine gemeinsam genutzte Textur-Pipeline ist ebenfalls optional. In einigen Ausführungsformen könnte jeder Kern seine eigene Textur-Pipeline haben oder könnte Allzweck-Funktionseinheiten wirksam zum Ausführen von Texturberechnungen nutzen.
  • Zu verarbeitende Daten können auf verschiedene Weise zu den Verarbeitungsclustern verteilt werden. In einer Ausführungsform empfangen der Datenassemblierer (oder eine andere Quelle von Geometrie-Daten) und das Farbassembliermodul (oder eine andere Quelle von Pixelshader-Eingangsdaten) Informationen, welche die Verfügbarkeit von Verarbeitungsclustern oder einzelnen Kernen zum Handhaben zusätzlicher Befehlsfolgen verschiedener Typen anzeigen, und wählen ein Ziel-Verarbeitungscluster oder einen Ziel-Kern für jede Befehlsfolge aus. In einer weiteren Ausführungsform werden Eingangsdaten von einem Verarbeitungscluster zum nächsten weitergeleitet, bis ein Verarbeitungscluster mit der Fähigkeit, die Daten zu verarbeiten, sie akzeptiert. In einer weiteren Ausführungsform werden Verarbeitungscluster anhand der Eigenschaften der Eingangsdaten ausgewählt, wie zum Beispiel der Schirmkoordinaten von zu verarbeitenden Pixeln.
  • Das Array mit nebenläufigen Kernen kann auch wirksam zum Ausführen von Allzweckberechnungen verwendet werden, die gegebenenfalls mit dem Rendern von Bildern im Zusammenhang stehen können. In einer Ausführungsform kann jede Berechnung, die in einer datenparallelen Zerlegung ausgedrückt werden kann, durch das Array mit nebenläufigen Kernen als ein Array aus Befehlsfolgen gehandhabt werden, die in einem einzelnen Kern ausgeführt werden. Die Ergebnisse solcher Berechnungen können in den Framepuffer geschrieben und in den Systemspeicher zurückgelesen werden.
  • Zuweisung der Pixelshader-Arbeitslast
  • Gemäß einer Ausführungsform der vorliegenden Erfindung werden Pixel, die durch ein Pixelshader-Programm zu verarbeiten sind, auf der Grundlage der Position der Pixel innerhalb des Bildbereichs zu einem Verarbeitungscluster 302 (3) geleitet. Zum Beispiel kann der Bildbereich in eine Anzahl von Kacheln unterteilt werden. Jede Kachel ist mit einem der Verarbeitungscluster 302 in einer solchen Weise verknüpft, dass die Kacheln, die zu einem Cluster gehören, über den Bildbereich verstreut sind (d. h. mindestens einige der Kacheln, die einem Verarbeitungscluster zugeordnet sind, grenzen nicht aneinander).
  • 4 veranschaulicht eine mögliche Kachelung eines Bildbereichs 400 in eine große Anzahl von Kacheln 402 gemäß einer Ausführungsform der vorliegenden Erfindung. Jede Kachel 402 könnte zum Beispiel 16 × 16 Pixel betragen oder von einer beliebigen anderen zweckmäßigen Größe sein. In dieser Ausführungsform enthält das Array mit nebenläufigen Kernen 202 von 3 acht Verarbeitungscluster 302(0) bis 302(7). Jede Kachel 402 in 4 enthält eine Zahl i (0 bis 7), die anzeigt, welcher Verarbeitungskern 302(i) Pixel in dieser Kachel verarbeitet. Wie in 4 zu erkennen ist, ist jedem Verarbeitungscluster 302 eine gleiche (oder fast gleiche) Anzahl von Kacheln 402 innerhalb des Bildbereichs 400 zugewiesen, und die Kacheln, die jedem Cluster 302 zugewiesen sind, grenzen nicht aneinander an. Es wird erwartet, dass für viele Grafikanwendungen ein Verteilen der Arbeitslast in dieser Weise einen ungefähren Arbeitslastausgleich zwischen den Verarbeitungsclustern 302 bewirkt. Eine geeignete Pixelverteilungslogik kann in die Rendering-Pipeline 200, zum Beispiel in das Farbassembliermodul 212 der 2, eingebunden werden.
  • Es versteht sich, dass die in 4 gezeigte Kachelung veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Kacheln können jede beliebige Größe haben. In einigen Ausführungsformen sind Größe und Anzahl der Kacheln konfigurierbar, wobei die Kachelgröße auf der Grundlage der Anwendungscharakteristika ausgewählt wird, wie zum Beispiel, ob ein Multisampling-Modus verwendet wird. Die Anordnung der Kacheln, die jedem Verarbeitungscluster zugeordnet sind, kann nach Wunsch variiert werden.
  • Kacheln können einer beliebigen Anzahl von Verarbeitungsclustern zugeordnet werden, bis hin zur Gesamtzahl, die in einer bestimmten GPU vorhanden sind. In einigen Ausführungsformen sind die Kacheln weniger als allen Verarbeitungsclustern zugeordnet. Somit kann eine GPU Bilder unter Verwendung nur einiger ihrer Verarbeitungscluster zum Verarbeiten von Pixel-Befehlsfolgen rendern. Solange mindestens ein Verarbeitungscluster verfügbar ist, ist die GPU in der Lage, Bilder zu rendern, wenn auch nur mit verringertem Durchsatz. Es kann nützlich sein, während des Arbeitens einige Cluster von der Verarbeitung von Pixel-Befehlsfolgen auszuklammern, zum Beispiel zum Arbeiten in einem Stromsparmodus (einige Kerne oder Cluster können abgeschaltet werden, während andere arbeiten), um die Mindestleistungsanforderungen zu ermitteln (ohne die Verfügbarkeit verschiedener GPUs zu erfordern) und/oder um eine Toleranz gegen Defekte in dem einem oder anderen der Kerne zu erreichen.
  • In einigen alternativen Ausführungsformen sind Kacheln bestimmten Kernen 310 anstatt Verarbeitungsclustern 302 zugeordnet.
  • Pixelshader-Kopplung an Framepuffer
  • In einigen Ausführungsformen gibt es keinen zentralisierten ROP 214, wie in 2 vorgeschlagen, sondern jede Pixel-Steuereinheit 306 in 3 enthält ihren eigenen ROP, der Pixel an den Framepuffer 226 von 2 übermittelt. In solchen Ausführungsformen wird eine Kopplung von Verarbeitungsclustern 302 zu dem Framepuffer bereitgestellt.
  • In einer Ausführungsform mit N Verarbeitungsclustern ist der Framepuffer 226 in N Partitionen unterteilt. Jedes Cluster 302 ist mit einer anderen der N Partitionen gekoppelt.
  • 5 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern 302 und einem Framepuffer 500 gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Es versteht sich, dass der Framepuffer 226 von 2 mehrere Framepuffer 500 enthalten könnte, wobei jeder Framepuffer 500 eine spezifizierte Menge Pixel für Pixel für dasselbe Bild speichert. Zum Beispiel enthält in einer Ausführungsform der Framepuffer 226 einen Z-Puffer; Farbkomponentenpuffer (zum Beispiel für rote, grüne und blaue Farbkomponenten) und einen Transparenz(Alpha)-Puffer. Es versteht sich, dass jede beliebige Anzahl von Framepuffern 500 vorhanden sein kann und dass ”Pixel” im Sinne des vorliegenden Textes sich auf Abtastpositionen innerhalb des Bildes bezieht, die gegebenenfalls der Anzahl der aktiven Pixel in einem bestimmten Anzeigegerät entsprechen können. Der Einfachheit halber ist nur ein einziger Framepuffer 500 gezeigt. Es versteht sich, dass die gleiche Partitionierung auf jeden Framepuffer für ein Bild angewendet werden kann.
  • Der Framepuffer 500 ist (physisch oder logisch) in N Partitionen 502 unterteilt, wobei jede Partition groß genug ist, um die Daten für mindestens 1/N der Pixel in dem Bild zu speichern. Jedes der N Verarbeitungscluster 302 ist mit einer der N Partitionen 502 gekoppelt. Somit speichert das Verarbeitungscluster 302(0) alle seine Ausgabepixeldaten in der Partition 502(0), das Verarbeitungscluster 302(1) in der Partition 502(1), und so weiter. Es ist anzumerken, dass in dem Umfang, wie Kacheln, die durch ein bestimmtes Verarbeitungscluster 302 verarbeitet werden, nicht aneinandergrenzen, die Daten in einer bestimmten Framepufferpartition 502 von nicht-aneinandergrenzenden Kacheln stammen.
  • Die Anzeige(scanout)-Logik beobachtet vorteilhafterweise die korrekte Anzeigereihenfolge der Daten beim Zugriff auf den Framepuffer 500. Insbesondere ist es nicht erforderlich, dass Partitionen der Reihe nach ausgelesen werden.
  • Wie oben angemerkt, könnten in einigen Ausführungsformen weniger als alle Verarbeitungskerne 302 zum Erzeugen von Pixeln verwendet werden. In der in 5 gezeigten Ausführungsform übermittelt nur das Verarbeitungscluster 302(0) Pixel an die Framepufferpartition 502(0). Wenn das Verarbeitungscluster 302(0) nicht zum Erzeugen von Pixeln betrieben wird, so wird dementsprechend die Framepufferpartition 502(0) nicht verwendet. Der Bildbereich kann neu gekachelt werden, oder Kacheln können zwischen den Verarbeitungsclustern 302(1) bis 302(N-1) dergestalt neu zugewiesen werden, dass der Bereich zwischen N-1 Verarbeitungsclustern aufgeteilt wird. In einigen Ausführungsformen muss möglicherweise die Abtastauflösung verringert werden, zum Beispiel wenn Framepufferpartitionen 502(1) bis 502(N-1) nicht genügend Platz bereitstellen, um alle Pixeldaten für das Bild in der originalen Abtastauflösung zu speichern. In Ausführungsformen, wo die Partitionen logisch anstatt physisch sind, kann der Framepuffer 500 entsprechend der Anzahl der verfügbaren Verarbeitungscluster 302 neu partitioniert werden.
  • In einer alternativen Ausführungsform kann jedes Verarbeitungscluster auf mehrere Framepufferpartitionen zugreifen. 6 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern 302 und einem Framepuffer 600 gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Es versteht sich, dass der Framepuffer 226 von 2 mehrere Framepuffer 600 enthalten könnte, wobei jeder Framepuffer 600 eine spezifizierte Menge Pixel für Pixel für dasselbe Bild speichert, wie es oben mit Bezug auf den Framepuffer 500 beschrieben wird. Es versteht sich, dass jede beliebige Anzahl von Framepuffern 600 vorhanden sein kann. Der Einfachheit halber ist nur ein einziger Framepuffer 600 gezeigt. Es versteht sich, dass die Partitionierung auf jeden Framepuffer für ein Bild angewendet werden kann.
  • Der Framepuffer 600 ist (physisch oder logisch) in eine Anzahl B von Partitionen 602 unterteilt, wobei B gleich der Anzahl N oder verschieden von der Anzahl N der Verarbeitungscluster 302 sein kann. Die Verarbeitungscluster 302 sind über eine Kreuzschiene 604 mit den Partitionen 602 gekoppelt. Jedes Cluster 302 kann Pixeldaten in eine beliebige (oder in mehrere) der B Partitionen 602 schreiben.
  • In dieser Ausführungsform ist die Kreuzschiene 604 konfigurierbar, wodurch es möglich ist, die Kopplung von Verarbeitungsclustern 302 mit den Framepufferpartitionen 602 nach Wunsch zu modifizieren. Zum Beispiel könnten, wie oben angesprochen, in einigen Ausführungsformen weniger als alle der Verarbeitungskerne 302 zum Erzeugen von Pixeln verwendet werden. Wenn in der in 6 gezeigten Ausführungsform der Verarbeitungskern 302(0) deaktiviert ist, so kann die Kreuzschiene 604 dergestalt umkonfiguriert werden, dass immer noch alle Framepufferpartitionen 602 für den einen oder anderen der Verarbeitungskerne 302 zugänglich sind. Die Anzeige(scanout)-Logik ist vorteilhafterweise so konfigurierbar, dass die Framepufferdaten unabhängig von der Konfiguration der Kreuzschiene 604 oder der Zuordnung der Kacheln zu den Verarbeitungskernen 302 korrekt ausgelesen (scanout) werden.
  • Wenn mehrere Framepuffer vorhanden sind (zum Beispiel Z, Farbe, Alpha usw.), so kann jeder Framepuffer in der beschriebenen Weise in B Partitionen unterteilt werden. In einigen Ausführungsformen ist die Anzahl der Partitionen nicht für alle Framepuffer die gleiche. Zum Beispiel könnte ein Z-Puffer mehr oder weniger Partitionen als ein Farbpuffer haben.
  • Weitere Ausführungsformen
  • Obgleich die Erfindung mit Bezug auf konkrete Ausführungsformen beschrieben wurde, erkennt der Fachmann, dass zahlreiche Modifikationen möglich sind. Obgleich also die Erfindung mit Bezug auf konkrete Ausführungsformen beschrieben wurde, versteht es sich, dass die Erfindung alle Modifikationen und Äquivalente innerhalb des Geltungsbereichs der folgenden Ansprüche erfassen soll.

Claims (6)

  1. Grafikprozessor (122), der Folgendes aufweist: ein Array mit nebenläufigen Kernen (202), das mehrere Verarbeitungscluster (302) enthält, wobei jedes Verarbeitungscluster (302) mindestens einen Kern (310) enthält, der dazu dient, ein Pixelshader-Programm auszuführen, das Pixeldaten aus Abdeckungsdaten erzeugt; einen Rasterisierer (210), der dafür konfiguriert ist, Abdeckungsdaten für jedes von mehreren Pixeln zu erzeugen, wobei die Abdeckungsdaten Pixelkoordinaten für jedes der mehreren Pixel aufweist; und eine Pixelverteilungslogik, die dafür konfiguriert ist, die Abdeckungsdaten aus dem Rasterisierer (210) an eines der Verarbeitungscluster (302) in dem Array mit nebenläufigen Kernen (202) zu übermitteln, wobei die Pixelverteilungslogik das eine der Verarbeitungscluster (302), an das die Abdeckungsdaten für ein erstes Pixel übermittelt werden, mindestens zum Teil auf der Grundlage einer Position des ersten Pixels innerhalb eines Bildbereichs (400) auswählt, wobei der Grafikprozessor dadurch gekennzeichnet ist, dass jeder Kern (310) dazu dient, Vertexshader-Programme und Geometrieshader-Programme auszuführen.
  2. Grafikprozessor nach Anspruch 1, wobei der Bildbereich (400) in mehrere Kacheln (402) unterteilt ist, wobei jede Kachel (402) einem der Verarbeitungscluster (302) zugeordnet ist, und wobei die Pixelverteilungslogik das eine der Verarbeitungscluster (302) auf der Grundlage einer Feststellung auswählt, welche der mehreren Kacheln (402) das erste Pixel enthält.
  3. Grafikprozessor nach Anspruch 2, wobei mindestens zwei der mehreren Kacheln (402) jedem der Verarbeitungscluster (302) zugewiesen sind, wobei für jedes Verarbeitungscluster (302) die ihm zugewiesenen Kacheln (402) nicht an einandergrenzen.
  4. Grafikprozessor nach Anspruch 1, wobei jedes der Verarbeitungscluster (302) dafür konfiguriert ist, Pixeldaten an eine jeweilige von mehreren Partitionen (502, 602) eines Framepuffers (500, 600) zu übermitteln.
  5. Grafikprozessor nach Anspruch 1, der des Weiteren eine Kreuzschiene (604) aufweist, die mit jedem der Verarbeitungscluster (302) gekoppelt ist und die dafür konfiguriert ist, Pixeldaten aus den Verarbeitungsclustern (302) zu einem Framepuffer (600) mit mehreren Partitionen (602) zu übermitteln.
  6. Grafikprozessor nach Anspruch 5, wobei die Kreuzschiene (604) so konfiguriert ist, dass Pixeldaten, die durch eines der Verarbeitungscluster (302) erzeugt wurden, an jede der Framepufferpartitionen (602) übermittelt werden können.
DE112006003473T 2005-12-19 2006-12-18 Parallel-Array-Architektur für einen Grafikprozessor Active DE112006003473B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US75226505P 2005-12-19 2005-12-19
US60/752,265 2005-12-19
PCT/US2006/062258 WO2007111743A2 (en) 2005-12-19 2006-12-18 Parallel array architecture for a graphics processor

Publications (2)

Publication Number Publication Date
DE112006003473T5 DE112006003473T5 (de) 2008-10-23
DE112006003473B4 true DE112006003473B4 (de) 2011-07-14

Family

ID=38541600

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112006003473T Active DE112006003473B4 (de) 2005-12-19 2006-12-18 Parallel-Array-Architektur für einen Grafikprozessor

Country Status (8)

Country Link
US (4) US7728841B1 (de)
JP (2) JP2009520307A (de)
KR (1) KR101027621B1 (de)
CN (1) CN101371247B (de)
DE (1) DE112006003473B4 (de)
GB (1) GB2446546B (de)
TW (1) TWI368182B (de)
WO (1) WO2007111743A2 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit

Families Citing this family (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7961194B2 (en) 2003-11-19 2011-06-14 Lucid Information Technology, Ltd. Method of controlling in real time the switching of modes of parallel operation of a multi-mode parallel graphics processing subsystem embodied within a host computing system
CA2546427A1 (en) 2003-11-19 2005-06-02 Reuven Bakalash Method and system for multiple 3-d graphic pipeline over a pc bus
US20080094403A1 (en) * 2003-11-19 2008-04-24 Reuven Bakalash Computing system capable of parallelizing the operation graphics processing units (GPUs) supported on a CPU/GPU fusion-architecture chip and one or more external graphics cards, employing a software-implemented multi-mode parallel graphics rendering subsystem
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
US20090027383A1 (en) 2003-11-19 2009-01-29 Lucid Information Technology, Ltd. Computing system parallelizing the operation of multiple graphics processing pipelines (GPPLs) and supporting depth-less based image recomposition
US20080074431A1 (en) * 2003-11-19 2008-03-27 Reuven Bakalash Computing system capable of parallelizing the operation of multiple graphics processing units (GPUS) supported on external graphics cards
US8497865B2 (en) 2006-12-31 2013-07-30 Lucid Information Technology, Ltd. Parallel graphics system employing multiple graphics processing pipelines with multiple graphics processing units (GPUS) and supporting an object division mode of parallel graphics processing using programmable pixel or vertex processing resources provided with the GPUS
US8085273B2 (en) 2003-11-19 2011-12-27 Lucid Information Technology, Ltd Multi-mode parallel graphics rendering system employing real-time automatic scene profiling and mode control
US8190669B1 (en) 2004-10-20 2012-05-29 Nvidia Corporation Multipurpose arithmetic functional unit
US20090096798A1 (en) * 2005-01-25 2009-04-16 Reuven Bakalash Graphics Processing and Display System Employing Multiple Graphics Cores on a Silicon Chip of Monolithic Construction
JP2008538620A (ja) 2005-01-25 2008-10-30 ルーシッド インフォメイション テクノロジー リミテッド モノリシック構成のシリコン・チップ上に多数のグラフィックス・コアを用いるグラフィック処理及び表示システム
DE602006016590D1 (de) * 2006-07-12 2010-10-14 Procter & Gamble Auf Gelnetzwerk-Emulgatoren basierende Verdickersysteme für Haarfärbe und Haaraufhellungszusammensetzungen
KR101349171B1 (ko) * 2007-01-17 2014-01-09 삼성전자주식회사 3차원 그래픽 가속기 및 그것의 픽셀 분배 방법
US8996846B2 (en) 2007-09-27 2015-03-31 Nvidia Corporation System, method and computer program product for performing a scan operation
US8284188B1 (en) 2007-10-29 2012-10-09 Nvidia Corporation Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects
US8264484B1 (en) 2007-10-29 2012-09-11 Nvidia Corporation System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume
US8065288B1 (en) 2007-11-09 2011-11-22 Nvidia Corporation System, method, and computer program product for testing a query against multiple sets of objects utilizing a single instruction multiple data (SIMD) processing architecture
US8661226B2 (en) * 2007-11-15 2014-02-25 Nvidia Corporation System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US8243083B1 (en) 2007-12-04 2012-08-14 Nvidia Corporation System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner
US8773422B1 (en) 2007-12-04 2014-07-08 Nvidia Corporation System, method, and computer program product for grouping linearly ordered primitives
US9678775B1 (en) 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8274516B2 (en) * 2008-08-04 2012-09-25 Microsoft Corporation GPU scene composition and animation
US8271734B1 (en) * 2008-12-05 2012-09-18 Nvidia Corporation Method and system for converting data formats using a shared cache coupled between clients and an external memory
US8947444B1 (en) * 2008-12-09 2015-02-03 Nvidia Corporation Distributed vertex attribute fetch
US8321492B1 (en) * 2008-12-11 2012-11-27 Nvidia Corporation System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm
AU2008258132B2 (en) * 2008-12-15 2011-11-10 Canon Kabushiki Kaisha Load balancing in multiple processor rendering systems
US20100277488A1 (en) * 2009-04-30 2010-11-04 Kevin Myers Deferred Material Rasterization
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US8259007B2 (en) * 2009-10-26 2012-09-04 Metron Aviation, Inc. Cell clustering and optimization for space partitioning
US20110153984A1 (en) * 2009-12-21 2011-06-23 Andrew Wolfe Dynamic voltage change for multi-core processing
KR20110089649A (ko) * 2010-02-01 2011-08-09 삼성전자주식회사 병렬 연산 처리 방법 및 장치
US20120019541A1 (en) * 2010-07-20 2012-01-26 Advanced Micro Devices, Inc. Multi-Primitive System
US8704732B2 (en) * 2010-09-29 2014-04-22 Qualcomm Incorporated Image synchronization for multiple displays
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
KR101799978B1 (ko) 2011-06-17 2017-11-22 삼성전자주식회사 타일 근접성을 사용하는 타일 기반 렌더링 방법 및 장치
US9092267B2 (en) * 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US8752018B2 (en) * 2011-06-21 2014-06-10 Nvidia Corporation Emitting coherent output from multiple threads for printf
CN103136724B (zh) * 2011-11-30 2015-11-25 北大方正集团有限公司 加网方法和装置
US10740254B2 (en) * 2012-01-03 2020-08-11 Nvidia Corporation System and method for frame buffer copy during partial power down of memory
US8611437B2 (en) 2012-01-26 2013-12-17 Nvidia Corporation Ground referenced single-ended signaling
US9338036B2 (en) 2012-01-30 2016-05-10 Nvidia Corporation Data-driven charge-pump transmitter for differential signaling
US9965821B2 (en) 2012-03-09 2018-05-08 Nvidia Corporation Fully parallel in-place construction of 3D acceleration structures in a graphics processing unit
US9510772B2 (en) * 2012-04-10 2016-12-06 Cardionxt, Inc. System and method for localizing medical instruments during cardiovascular medical procedures
JP5949188B2 (ja) 2012-06-08 2016-07-06 日本電気株式会社 密結合マルチプロセッサシステム
KR20140005388A (ko) * 2012-06-26 2014-01-15 삼성전자주식회사 렌더링 데이터 처리 장치 및 방법
US9104421B2 (en) * 2012-07-30 2015-08-11 Nvidia Corporation Training, power-gating, and dynamic frequency changing of a memory controller
US9165399B2 (en) * 2012-11-01 2015-10-20 Nvidia Corporation System, method, and computer program product for inputting modified coverage data into a pixel shader
US20140192052A1 (en) * 2013-01-09 2014-07-10 Advanced Micro Devices, Inc. 2d rendering on 3d graphics hardware
US9292898B2 (en) * 2013-03-15 2016-03-22 Intel Corporation Conditional end of thread mechanism
US9171607B2 (en) 2013-03-15 2015-10-27 Nvidia Corporation Ground-referenced single-ended system-on-package
US9170980B2 (en) * 2013-03-15 2015-10-27 Nvidia Corporation Ground-referenced single-ended signaling connected graphics processing unit multi-chip module
US9147447B2 (en) 2013-03-15 2015-09-29 Nvidia Corporation Ground-referenced single-ended memory interconnect
US9269179B2 (en) * 2013-03-15 2016-02-23 Nvidia Corporation System, method, and computer program product for generating primitive specific attributes
US9153314B2 (en) 2013-03-15 2015-10-06 Nvidia Corporation Ground-referenced single-ended memory interconnect
US9153539B2 (en) * 2013-03-15 2015-10-06 Nvidia Corporation Ground-referenced single-ended signaling connected graphics processing unit multi-chip module
US9501859B2 (en) * 2013-07-19 2016-11-22 Adobe Systems Incorporated Triangle rasterization
WO2015027191A1 (en) 2013-08-22 2015-02-26 Cardionxt, Inc. Methods, systems, and apparatus for identification and characterization of rotors associated with atrial fibrillation
GB2521151B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
GB2521155B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
KR102111740B1 (ko) * 2014-04-03 2020-05-15 삼성전자주식회사 영상 데이터를 처리하는 방법 및 디바이스.
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US10068311B2 (en) * 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
US20160093069A1 (en) * 2014-09-26 2016-03-31 Subramaniam Maiyuran Method and apparatus for pixel hashing
WO2016054122A1 (en) * 2014-09-30 2016-04-07 Microsoft Technology Licensing, Llc Displaying content on a display in power save mode
US9684950B2 (en) * 2014-12-18 2017-06-20 Qualcomm Incorporated Vision correction through graphics processing
US10013735B2 (en) * 2015-01-28 2018-07-03 Qualcomm Incorporated Graphics processing unit with bayer mapping
US20160335734A1 (en) * 2015-05-11 2016-11-17 Vixs Systems, Inc. Memory subsystem synchronization primitives
US10319348B2 (en) 2015-05-11 2019-06-11 Vixs Systems, Inc. Memory subsystem consumer trigger
WO2017074377A1 (en) * 2015-10-29 2017-05-04 Intel Corporation Boosting local memory performance in processor graphics
US10636110B2 (en) * 2016-06-28 2020-04-28 Intel Corporation Architecture for interleaved rasterization and pixel shading for virtual reality and multi-view systems
US10552211B2 (en) * 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
CN107818069B (zh) 2016-09-12 2021-10-01 阿里巴巴集团控股有限公司 数据处理方法及系统
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11379941B2 (en) * 2016-09-22 2022-07-05 Advanced Micro Devices, Inc. Primitive shader
CN107977227A (zh) 2016-10-21 2018-05-01 超威半导体公司 包括不同指令类型的独立硬件数据路径的管线
JP6801001B2 (ja) * 2016-12-09 2020-12-16 株式会社ソニー・インタラクティブエンタテインメント 画像処理装置、画像処理方法およびプログラム
US10650566B2 (en) * 2017-02-15 2020-05-12 Microsoft Technology Licensing, Llc Multiple shader processes in graphics processing
US10204394B2 (en) * 2017-04-10 2019-02-12 Intel Corporation Multi-frame renderer
US10417734B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10257487B1 (en) 2018-01-16 2019-04-09 Qualcomm Incorporated Power efficient video playback based on display hardware feedback
US10409359B2 (en) * 2018-01-17 2019-09-10 Qualcomm Incorporated Dynamic bin ordering for load synchronization
US10698392B2 (en) * 2018-06-22 2020-06-30 Applied Materials, Inc. Using graphics processing unit for substrate routing and throughput modeling
US10847117B1 (en) * 2019-05-13 2020-11-24 Adobe Inc. Controlling an augmented reality display with transparency control using multiple sets of video buffers
US20210272347A1 (en) * 2020-02-28 2021-09-02 Advanced Micro Devices, Inc. Fully utilized hardware in a multi-tenancy graphics processing unit
KR20220033635A (ko) * 2020-09-09 2022-03-17 삼성디스플레이 주식회사 표시 장치 및 이의 구동 방법
CN112802192B (zh) * 2021-03-05 2022-01-28 艾迪普科技股份有限公司 一种可实时交互的三维图形图像播放器
US20220383446A1 (en) * 2021-05-28 2022-12-01 MemComputing, Inc. Memory graphics processing unit
CN114463160B (zh) * 2022-01-30 2022-10-28 摩尔线程智能科技(北京)有限责任公司 一种图形流水线的并行处理方法、装置及可读存储介质
CN116263981B (zh) * 2022-04-20 2023-11-17 象帝先计算技术(重庆)有限公司 图形处理器、系统、装置、设备及方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5794016A (en) * 1995-12-11 1998-08-11 Dynamic Pictures, Inc. Parallel-processor graphics architecture

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5408646A (en) * 1991-03-29 1995-04-18 International Business Machines Corp. Multipath torus switching apparatus
US5857109A (en) * 1992-11-05 1999-01-05 Giga Operations Corporation Programmable logic device for real time video processing
US5408606A (en) * 1993-01-07 1995-04-18 Evans & Sutherland Computer Corp. Computer graphics system with parallel processing using a switch structure
US6181355B1 (en) * 1998-07-17 2001-01-30 3Dlabs Inc. Ltd. Graphics processing with transcendental function generator
US6693719B1 (en) * 1998-09-16 2004-02-17 Texas Instruments Incorporated Path to trapezoid decomposition of polygons for printing files in a page description language
US6636222B1 (en) * 1999-11-09 2003-10-21 Broadcom Corporation Video and graphics system with an MPEG video decoder for concurrent multi-row decoding
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US7233331B2 (en) * 2000-03-16 2007-06-19 Square Enix Co., Ltd. Parallel object task engine and processing method
US6924807B2 (en) * 2000-03-23 2005-08-02 Sony Computer Entertainment Inc. Image processing apparatus and method
US7184059B1 (en) * 2000-08-23 2007-02-27 Nintendo Co., Ltd. Graphics system with copy out conversions between embedded frame buffer and main memory
US6853380B2 (en) * 2002-03-04 2005-02-08 Hewlett-Packard Development Company, L.P. Graphical display system and method
US20030234749A1 (en) * 2002-06-20 2003-12-25 Johnny Marks System and method for communicating graphics image data over a communication network for display on a single logical screen
US7075542B1 (en) * 2002-11-12 2006-07-11 Ati Technologies Inc. Selectable multi-performance configuration
US7633506B1 (en) * 2002-11-27 2009-12-15 Ati Technologies Ulc Parallel pipeline graphics system
JP3966832B2 (ja) * 2003-04-28 2007-08-29 株式会社東芝 描画処理装置、及び、描画処理方法
US7202872B2 (en) * 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US20080074431A1 (en) * 2003-11-19 2008-03-27 Reuven Bakalash Computing system capable of parallelizing the operation of multiple graphics processing units (GPUS) supported on external graphics cards
US7719540B2 (en) * 2004-03-31 2010-05-18 Intel Corporation Render-cache controller for multithreading, multi-core graphics processor
US20050231533A1 (en) * 2004-04-20 2005-10-20 Lin Chen Apparatus and method for performing divide by w operations in a graphics system
US7154500B2 (en) * 2004-04-20 2006-12-26 The Chinese University Of Hong Kong Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7671862B1 (en) * 2004-05-03 2010-03-02 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5794016A (en) * 1995-12-11 1998-08-11 Dynamic Pictures, Inc. Parallel-processor graphics architecture

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Rudrajit SAMANTA, Thomas FUNKHOUSER, Kai LI, Jaswinder Pal SINGH: "Hybrid Sort-First and Sort-Last Parallel Rendering with a Cluster of PCs', 2000, ACM SIGGRAPH, ISBN: 1-58113-257-3, S. 97-108, DOI: 10.1145/346876.348237 *
Steven MOLNAR, Michael COX, David ELLSWORTH, Henry FUCHS: "A Sorting Classification of Parallel Rendering", 1994, ACM SIGGRAPH ASIA, IEEE Computer Graphics and Applications, Vol. 14(4), S. 23-32, DOI: 10.1109/38.291528 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit

Also Published As

Publication number Publication date
JP5345226B2 (ja) 2013-11-20
JP2009520307A (ja) 2009-05-21
US20070159488A1 (en) 2007-07-12
GB2446546A (en) 2008-08-13
KR20080085888A (ko) 2008-09-24
DE112006003473T5 (de) 2008-10-23
WO2007111743A3 (en) 2008-08-28
CN101371247A (zh) 2009-02-18
US8730249B2 (en) 2014-05-20
US7830392B1 (en) 2010-11-09
GB2446546B (en) 2011-05-04
TW200745987A (en) 2007-12-16
US20120026171A1 (en) 2012-02-02
TWI368182B (en) 2012-07-11
KR101027621B1 (ko) 2011-04-06
CN101371247B (zh) 2014-06-04
JP2012178158A (ja) 2012-09-13
US7728841B1 (en) 2010-06-01
GB0810493D0 (en) 2008-07-09
WO2007111743A2 (en) 2007-10-04

Similar Documents

Publication Publication Date Title
DE112006003473B4 (de) Parallel-Array-Architektur für einen Grafikprozessor
DE102013114279B4 (de) Oberflächenverarbeitung mit Mehrfachabtastung unter Verwendung einer einzelnen Abtastung
US8111260B2 (en) Fast reconfiguration of graphics pipeline state
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102008026431B4 (de) Extrapolation von nicht residenten Mipmap-Daten unter Verwendung residenter Mipmap-Daten
DE60019516T2 (de) Programmierbarer Aufbau zur Visualisierung von Abtastdaten und geometrischen Daten
DE102013022257A1 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102013017639A1 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichen L2-Cache-Speicher mit Oberflächenkomprimierung
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE112014002771T5 (de) Hybrid-on-Demand-Grafikübersetzungstabellen-Shadowing
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE112014002477T5 (de) Vorrichtung und Verfahren für eine effiziente Grafikverarbeitung in einer virtuellen Ausführungsumgebung
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE102020103893A1 (de) Techniken für effizienten speicherzugriff und zur vermeidung unnötiger berechnungen
DE102017109472A1 (de) Stereo-mehrfach-projektion implementiert unter verwendung einer graphikverarbeitungs-pipeline
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
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
OP8 Request for examination as to paragraph 44 patent law
8125 Change of the main classification

Ipc: G06T 1/20 AFI20061218BHDE

R018 Grant decision by examination section/examining division
R020 Patent grant now final

Effective date: 20111015

R082 Change of representative

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