-
HINTERGRUND
-
GEBIET DER ERFINDUNG
-
Die Erfindung betrifft im Allgemeinen das Gebiet der Computerprozessoren. Insbesondere betrifft die Erfindung eine Einrichtung und ein Verfahren zur Einzelbildpufferkomprimierung.
-
BESCHREIBUNG DES NÄCHSTLIEGENDEN STANDS DER TECHNIK
-
Im Allgemeinen kann bzw. können durch Grafik-Rendering mithilfe einer breiten Palette an computergestützten Techniken ein Bild oder Bilder aus Modelldaten erzeugt werden. In einigen Implementierungen kann der Farbpuffer der größte Bandbreitenverbraucher in der Grafik-Pipeline sein und die Systemleistung kann durch Farbkomprimierungstechniken verbessert werden.
-
Es gibt bereits mehrere bekannte Techniken zur Farbpufferkomprimierung, jedoch sind verbesserte Lösungen erforderlich, um die Leistung und den Stromverbrauch bestehender Architekturen, insbesondere Architekturen, bei denen die Speicherhierarchie von den Kernen der zentralen Verarbeitungseinheit (CPU, Central Processing Unit) und dem Grafikprozessor gemeinsam genutzt werden, zu verbessern. Zudem wird es angesichts der an 3D-Grafik-Codecs vorgenommenen Verbesserungen immer schwieriger, einfache Algorithmen zu finden, die weitere Reduzierungen des Speicherverkehrs bereitstellen. Folglich sind möglicherweise komplexere Algorithmen erforderlich, um deutliche zusätzliche Vorteile zu erhalten.
-
Figurenliste
-
Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden ausführlichen Beschreibung in Verbindung mit den folgenden Zeichnungen erhalten werden, in denen:
- 1 ein Blockdiagramm einer Ausführungsform eines Computersystems mit einem Prozessor ist, der einen oder mehrere Prozessorkerne und Grafikprozessoren aufweist;
- 2 ein Blockdiagramm einer Ausführungsform eines Prozessors ist, die einen oder mehrere Prozessorkerne, eine integrierte Speichersteuerung und einen integrierten Grafikprozessor aufweist;
- 3 ein Blockdiagramm einer Ausführungsform eines Grafikprozessors ist, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der in mehrere Verarbeitungskerne integriert ist;
- 4 ein Blockdiagramm einer Ausführungsform einer Grafikverarbeitungs-Engine für einen Grafikprozessor ist;
- 5 ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors ist;
- 6 ein Blockdiagramm einer Thread-Ausführungslogik mit einer Anordnung von Verarbeitungselementen ist;
- 7 ein Anweisungsformat einer Grafikprozessor-Ausführungseinheit gemäß einer Ausführungsform veranschaulicht;
- 8 ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors ist, die eine Grafik-Pipeline, eine Medien-Pipeline, eine Anzeige-Engine, eine Thread-Ausführungslogik und eine Renderausgabe-Pipeline umfasst;
- 9A ein Blockdiagramm ist, das ein Grafikprozessorbefehlsformat gemäß einer Ausführungsform veranschaulicht;
- 9B ein Blockdiagramm ist, das eine Grafikprozessorbefehlsfolge gemäß einer Ausführungsform veranschaulicht;
- 10 eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform veranschaulicht;
- 11 ein beispielhaftes IP-Kern-Entwicklungssystem veranschaulicht, das zum Herstellen einer integrierten Schaltung zum Ausführen von Operationen gemäß einer Ausführungsform verwendet werden kann;
- 12 eine beispielhafte integrierte Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform veranschaulicht;
- 13 eine Ausführungsform einer Architektur zum Komprimieren/Dekomprimieren eines Einzelbildpuffers veranschaulicht;
- 14 Beispiele von Wavelet-Basisfunktionen veranschaulicht;
- 15A ein beispielhaftes Signal veranschaulicht, auf das eine Wavelet-Transformation angewendet werden kann;
- 15B-C Signale veranschaulichen, die aus der Anwendung von Wavelet-Transformationen resultieren, bei denen unterschiedliche Sätze von Koeffizienten verwendet/ausgeschlossen werden;
- 16 die Reihenfolge veranschaulicht, in der Pixel in einer Ausführungsform verarbeitet werden; und
- 17A-B ein Verfahren gemäß einer Ausführungsform der Erfindung veranschaulichen.
-
AUSFÜHRLICHE BESCHREIBUNG
-
In der folgenden Beschreibung werden zu Zwecken der Erläuterung zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis der Ausführungsformen der unten beschriebenen Erfindung bereitzustellen. Es ist für Fachleute auf diesem Gebiet jedoch offensichtlich, dass die Ausführungsformen der Erfindung ohne einige der spezifischen Details ausgeführt werden können. In anderen Fällen sind wohlbekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt, um die zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung nicht unklar zu machen.
-
Beispielhafte Grafikprozessorarchitekturen und Datentypen
-
Systemübersicht
-
1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. In verschiedenen Ausführungsformen weist das System 100 einen oder mehrere Prozessoren 102 und einen oder mehrere Grafikprozessoren 108 auf und kann ein Einzelprozessor-Desktopsystem, ein Mehrprozessor-Arbeitsstationssystem oder ein Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 sein. In einer Ausführungsform ist das Datenverarbeitungssystem 100 eine integrierte Schaltung eines Ein-Chip-Systems (SoC, System-on-a-Chip) für den Einsatz in mobilen, tragbaren oder eingebetteten Vorrichtungen.
-
Eine Ausführungsform des Systems 100 kann eine serverbasierte Spiele-Plattform, eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole, eine mobile Spielkonsole, eine tragbare Spielkonsole oder eine Online-Spielkonsole umfassen oder darin integriert sein. In einigen Ausführungsformen ist das System 100 ein Mobiltelefon, ein Smartphone, eine Tablet-Rechenvorrichtung oder eine mobile Internetvorrichtung. Das Datenverarbeitungssystem 100 kann auch eine tragbare Vorrichtung, wie etwa eine tragbare intelligente Uhrenvorrichtung, eine intelligente Brillenvorrichtung, eine Vorrichtung für eine erweiterte Realität oder eine Vorrichtung für eine virtuelle Realität umfassen, mit dieser gekoppelt sein oder in dieser integriert sein. Bei einigen Ausführungsformen ist das Datenverarbeitungssystem 100 ein Fernseher oder eine Set-Top-Box-Vorrichtung mit einer oder mehreren Prozessoren 102 und einer grafischen Schnittstelle, die durch einen oder mehrere Grafikprozessoren 108 erzeugt wird.
-
Bei einigen Ausführungsformen beinhaltet bzw. beinhalten der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Anweisungen, die, wenn sie ausgeführt werden, Operationen für System und Benutzersoftware durchführen. Bei einigen Ausführungsformen ist jeder des einen oder der mehreren Prozessorkerne 107 dazu konfiguriert, einen spezifischen Anweisungssatz 109 zu verarbeiten. Bei einigen Ausführungsformen kann der Anweisungssatz 109 eine Datenverarbeitung mit komplexem Befehlssatz (CISC, Complex Instruction Set Computing), eine Datenverarbeitung mit reduziertem Befehlssatz (RISC, Reduced Instruction Set Computing) oder eine Datenverarbeitung mit sehr langem Befehlswort (VLIW, Very Long Instruction Word) ermöglichen. Mehrere Prozessorkerne 107 können jeweils einen anderen Anweisungssatz 109 verarbeiten, der Anweisungen zum Ermöglichen der Emulation anderer Anweisungssätze beinhalten kann. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen umfassen, wie einen Digitalsignalprozessor (DSP).
-
Bei einigen Ausführungsformen umfasst der Prozessor 102 einen Cache-Speicher 104. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen von internem Cache aufweisen. Bei einigen Ausführungsformen wird der Cache-Speicher durch verschiedene Komponenten des Prozessors 102 gemeinsam genutzt. Bei einigen Ausführungsformen verwendet der Prozessor 102 auch einen externen Cache (z. B. einen Ebene-3(L3)-Cache oder einen Cache der letzten Ebene (LLC)) (nicht dargestellt), der durch Prozessorkerne 107, die bekannte Cache-Kohärenztechniken verwenden, gemeinsam genutzt wird. Eine Registerdatei 106 ist zusätzlich im Prozessor 102 enthalten, die unterschiedliche Arten von Registern zum Speichern unterschiedlicher Arten von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Zustandsregister und ein Anweisungszeigerregister) umfassen kann. Einige Register können Universalregister sein, während andere Register für den Entwurf des Prozessors 102 spezifisch sein können.
-
Bei einigen Ausführungsformen ist der Prozessor 102 mit einem Prozessorbus 110 zum Übertragen von Kommunikationssignalen wie Address-, Daten- oder Steuersignalen zwischen dem Prozessor 102 und anderen Komponenten im System 100 gekoppelt. In einer Ausführungsform verwendet das System 100 eine beispielhafte „Hub“-Systemarchitektur, einschließlich eines Speichersteuerungshubs 116 und eines Eingabe/Ausgabe(E/A)-Steuerungshubs 130. Ein Speichersteuerungshub 116 ermöglicht eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der E/A-Steuerungshub (ICH, I/O Controller Hub) 130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt. In einer Ausführungsform ist die Logik des Speichersteuerungshubs 116 in den Prozessor integriert.
-
Die Speichervorrichtung 120 kann eine dynamische Direktzugriffsspeicher (DRAM)-Vorrichtung, eine statische Direktzugriffsspeicher (SRAM)-Vorrichtung, eine Flash-Speichervorrichtung, eine Phasenwechsel-Speichervorrichtung oder eine andere Speichervorrichtung mit geeignetem Leistungsvermögen, um als Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 betrieben werden, um Daten 122 und Anweisungen 121 zu speichern, die verwendet werden, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Der Speichersteuerungshub 116 ist auch mit einem optionalen externen Grafikprozessor 112 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 108 in den Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen.
-
In einigen Ausführungsformen aktiviert der ICH 130 Peripheriegeräte, um die Speichervorrichtung 120 und den Prozessor 102 über einen Hochgeschwindigkeits-E/A-Bus zu verbinden. Die E/A-Peripherievorrichtungen umfassen unter anderem eine Audiosteuerung 146, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126 (z. B. WLAN, Bluetooth), eine Datenspeicherungsvorrichtung 124 (z. B. Festplattenlaufwerk, Flash-Speicher usw.) und eine Alt-E/A-Steuerung 140 zum Koppeln von Altvorrichtungen (z. B. Personal System 2 (PS/2)) mit dem System. Eine oder mehrere USB (Universal Serial Bus)-Steuerungen 142 verbinden Eingabevorrichtungen, wie etwa Kombinationen von Tastatur und Maus 144. Eine Netzwerksteuerung 134 kann auch mit dem ICH 130 gekoppelt sein. Bei einigen Ausführungsformen ist eine Hochleistungsnetzwerksteuerung (nicht dargestellt) mit dem Prozessorbus 110 gekoppelt. Es versteht sich, dass das dargestellte System 100 beispielhaft und nicht einschränkend ist, da andere Arten von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann der E/A-Steuerungshub 130 in den einen oder die mehreren Prozessoren 102 integriert sein, oder der Speichersteuerungshub 116 und der E/A-Steuerungshub 130 können in einen diskreten externen Grafikprozessor, wie beispielsweise den externen Grafikprozessor 112, integriert sein.
-
2 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200, der einen oder mehrere Prozessorkerne 202A-202N, eine integrierte Speichersteuerung 214 und einen integrierten Grafikprozessor 208 aufweist. Die Elemente aus 2, die die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können in jeder Art und Weise ähnlich zu der an anderer Stelle hierin beschriebenen betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N aufweisen, der durch die gestrichelten Kästchen dargestellt ist. Jeder der Prozessorkerne 202A-202N weist eine oder mehrere interne Cacheeinheiten 204A-204N auf. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 206.
-
Die internen Cacheeinheiten 204A-204N und die gemeinsam genutzten Cacheeinheiten 206 stellen eine Cache-Speicherhierarchie innerhalb des Prozessors 200 dar. Die Cache-Speicherhierarchie kann mindestens eine Ebene von Anweisungs- und Datencache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutzten Cache einer mittleren Ebene aufweisen, wie beispielsweise eine Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cacheebenen, wobei die höchste Cacheebene vor dem externen Speicher als LLC eingestuft ist. In einigen Ausführungsformen hält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cacheeinheiten 206 und 204A-204N aufrecht.
-
In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz von einer oder mehreren Bussteuereinheiten 216 und einen Systemagentenkern 210 aufweisen. Die eine oder die mehreren Bussteuereinheiten 216 verwalten einen Satz von peripheren Bussen, wie einen oder mehrere Peripheriekomponentenverbindungsbusse (z. B. PCI, PCI Express). Der Systemagentenkern 210 stellt eine Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 zum Verwalten des Zugriffs auf verschiedene externe Speichervorrichtungen (nicht dargestellt) auf.
-
In einigen Ausführungsformen umfassen ein oder mehrere der Prozessorkerne 202A-202N eine Unterstützung für simultanes Multithreading. In einer solchen Ausführungsform weist der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während einer Multithread-Verarbeitung auf. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU, Power Control Unit) aufweisen, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 aufweist.
-
In einigen Ausführungsformen umfasst der Prozessor 200 zusätzlich einen Grafikprozessor 208 zum Ausführen von Grafikverarbeitungsoperationen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz von gemeinsam genutzten Cacheeinheiten 206 und dem Systemagentenkern 210, einschließlich des einen oder der mehreren integrierten Speichersteuerungen 214, gekoppelt. In einigen Ausführungsformen ist eine Anzeigesteuerung 211 mit dem Grafikprozessor 208 gekoppelt, um eine Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen zu lenken. In einigen Ausführungsformen kann die Anzeigesteuerung 211 ein separates Modul, das über mindestens eine Verbindung mit dem Grafikprozessor gekoppelt ist, sein oder in den Grafikprozessor 208 oder den Systemagentenkern 210 integriert sein.
-
In einigen Ausführungsformen wird eine ringbasierte Verbindungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Jedoch kann eine alternative Verbindungseinheit verwendet werden, wie eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik wohlbekannt sind. In einigen Ausführungsformen ist der Grafikprozessor 208 über eine E/A-Verknüpfung 213 mit der Ringverbindung 212 gekoppelt.
-
Der beispielhafte E/A-Verknüpfung 213 stellt mindestens eine von mehreren Varianten von E/A-Verbindungen dar, einschließlich einer Paket-E/A-Verbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 218, wie beispielsweise einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen verwenden jeder der Prozessorkerne 202-202N und der Grafikprozessor 208 eingebettete Speichermodule 218 als einen gemeinsam genutzten Cache der letzten Ebene.
-
In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die die gleiche Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Anweisungssatzarchitektur (ISA, Instruction Set Architecture) heterogen, wobei ein oder mehrere Prozessorkerne 202A-N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführen. In einer Ausführungsform sind die Prozessorkerne 202A-202N in Bezug auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Leistungsverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Leistungsverbrauch gekoppelt sind. Außerdem kann der Prozessor 200 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung mit den dargestellten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
-
3 ist ein Blockdiagramm eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann, oder ein Grafikprozessor sein kann, der mit mehreren Verarbeitungskernen integriert ist. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in dem Prozessorspeicher platziert sind. In einigen Ausführungsformen umfasst der Grafikprozessor 300 eine Speicherschnittstelle 314, um auf Speicher zuzugreifen. Die Speicherschnittstelle 314 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder Systemspeicher sein.
-
In einigen Ausführungsformen weist der Grafikprozessor 300 auch eine Anzeigesteuerung 302 auf, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 320 zu lenken. Die Anzeigesteuerung 302 umfasst Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen. In einigen Ausführungsformen umfasst der Grafikprozessor 300 eine Video-Codec-Engine 306 zum Codieren, Decodieren oder Umcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten, einschließlich, jedoch nicht beschränkt auf Moving Picture Experts Group (MPEG)-Formate wie MPEG-2, Advanced Video Coding (AVC)-Formate wie H.264/MPEG-4 AVC sowie die Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint Photographic Experts Group (JPEG)-Formate wie JPEG und Motion JPEG (MJPEG).
-
In einigen Ausführungsformen weist der Grafikprozessor 300 eine Blockbildübertragungs (BLIT, Block Image Transfer)-Engine 304 auf, um zweidimensionale (2D) Rasterisierer-Operationen, einschließlich zum Beispiel Bitgrenzen-Blockübertragungen, durchzuführen. In einer Ausführungsform werden jedoch 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE, Graphics Processing Engine) 310 ausgeführt. In einigen Ausführungsformen ist die Grafikverarbeitungs-Engine 310 eine Rechen-Engine zum Durchführen von Grafikoperationen einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
-
In einigen Ausführungsformen umfasst die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen, beispielsweise für das Rendering von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 312 umfasst programmierbare und feste Funktionselemente, die verschiedene Aufgaben innerhalb des Elements durchführen und/oder Ausführungs-Threads zu einem 3D/Medien-Subsystem 315 erzeugen. Während die 3D-Pipeline 312 zum Durchführen von Medienoperationen verwendet werden kann, umfasst eine Ausführungsform der GPE 310 auch eine Medien-Pipeline 316, die speziell zum Durchführen von Medienoperationen, wie Videonachbearbeitung und Bildverbesserung, verwendet wird.
-
In einigen Ausführungsformen umfasst die Medien-Pipeline 316 Logikeinheiten, die eine feste Funktion aufweisen oder programmierbar sind, um eine oder mehrere spezialisierte Medienoperationen, wie Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung, anstelle von oder im Auftrag der Video-Codec-Engine 306 durchzuführen. In einigen Ausführungsformen umfasst die Medien-Pipeline 316 zusätzlich eine Thread-Erzeugungseinheit, um Threads zur Ausführung auf dem 3D/Medien-Subsystem 315 zu erzeugen. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die in dem 3D/Medien-Subsystem 315 enthalten sind.
-
In einigen Ausführungsformen weist das 3D/Medien-Subsystem 315 eine Logik zum Ausführen von Threads auf, die von der 3D-Pipeline 312 und der Medien-Pipeline 316 erzeugt wurden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanfragen an das 3D/Medien-Subsystem 315, das eine Thread-Dispatch-Logik zum Vermitteln und Senden der verschiedenen Anfragen an verfügbare Thread-Ausführungsressourcen aufweist. Die Ausführungsressourcen umfassen eine Reihe von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen umfasst das 3D/Medien-Subsystem 315 einen oder mehrere interne Caches für Thread-Anweisungen und Daten. In einigen Ausführungsformen weist das Subsystem auch gemeinsam genutzten Speicher auf, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
-
D/Medienverarbeitung
-
4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die GPE 410 eine Version der in 3 dargestellten GPE 310. Elemente aus 4, die die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können in jeder Art und Weise ähnlich zu der an anderer Stelle hierin beschriebenen betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
-
In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403 gekoppelt, der einen Befehlsstrom an die 3D- und Medien-Pipelines 412, 416 der GPE bereitstellt. In einigen Ausführungsformen ist der Befehls-Streamer 403 mit einem Speicher gekoppelt, der ein Systemspeicher oder ein oder mehrere interne Cachespeicher und gemeinsam genutzter Cachespeicher sein kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 412 und/oder die Medien-Pipeline 416. Die Befehle sind Direktiven, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D- und Medien-Pipelines 412, 416 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapel-Befehlspuffer enthalten, die Stapel mehrerer Befehle speichern. Die 3D- und Medien-Pipelines 412, 416 verarbeiten die Befehle, indem sie Operationen über Logik innerhalb der jeweiligen Pipelines durchführen oder indem sie einen oder mehrere Ausführungs-Threads an ein Ausführungseinheitsanordnung 414 senden. In einigen Ausführungsformen ist die Ausführungseinheitsanordnung 414 skalierbar, sodass die Anordnung basierend auf der Sollleistung und dem Leistungsniveau der GPE 410 eine variable Anzahl an Ausführungseinheiten aufweist.
-
In einigen Ausführungsformen ist eine Abtast-Engine 430 mit einem Speicher (z. B. Cachespeicher oder Systemspeicher) und der Ausführungseinheitsanordnung 414 gekoppelt. In einigen Ausführungsformen stellt die Abtast-Engine 430 einen Speicherzugriffsmechnismus für die Ausführungseinheitsanordnung 414 bereit, der der Ausführungsanordnung 414 ein Lesen von Grafik- und Mediendaten aus dem Speicher ermöglicht. In einigen Ausführungsformen umfasst die Abtast-Engine 430 eine Logik zum Durchführen spezieller Bildabtastoperationen für Medien.
-
In einigen Ausführungsformen umfasst die spezielle Medienabtastlogik in der Abtast-Engine 430 ein Entrauschungs-/Entschachtelungsmodul 432, ein Bewegungseinschätzungsmodul 434 und ein Bildskalierungs- und Filterungsmodul 436. In einigen Ausführungsformen umfasst das Entrauschungs-/Entschachtelungsmodul 432 eine Logik zum Durchführen eines Entrauschungs- und/oder eines Entschachtelungsalgorithmus an decodierten Videodaten. Die Entschachtelungslogik kombiniert alternierende Felder von verschachteltem Videoinhalt zu einem einzelnen Videoeinzelbild. Die Entrauschungslogik reduziert oder entfernt Datenrauschen aus Video- und Bilddaten. In einigen Ausführungsformen sind die Entrauschungslogik und die Entschachtelungslogik bewegungsadaptiv und verwenden räumliche und zeitliche Filterung basierend auf dem Ausmaß an Bewegung, das in den Videodaten erkannt wird. In einigen Ausführungsformen umfasst das Entrauschungs-/Entschachtelungsmodul 432 eine dedizierte Bewegungserkennungslogik (z. B. in der Bewegungseinschätzungs-Engine 434).
-
In einigen Ausführungsformen stellt die Bewegungseinschätzungs-Engine 434 durch Durchführen von Videobeschleunigungsfunktionen wie beispielsweise eine Bewegungsvektoreinschätzung und -vorhersage an Videodaten eine Hardwarebeschleunigung für Videooperationen bereit. Die Bewegungseinschätzungs-Engine bestimmt Bewegungsvektoren, die die Umwandlung von Bilddaten zwischen aufeinanderfolgenden Videoeinzelbildern beschreiben. In einigen Ausführungsformen verwendet ein Grafikprozessor-Medien-Codec eine Videobewegungseinschätzungs-Engine 434 zum Durchführen von Operationen an Video auf der Makroblockebene, die ansonsten zu rechenintensiv sein könnten, um von einem Universalprozessor ausgeführt zu werden. In einigen Ausführungsformen steht die Bewegungseinschätzungs-Engine 434 im Allgemeinen Grafikprozessorkomponenten zur Verfügung, um Videodecodier- und Verarbeitungsfunktionen zu unterstützen, die sensibel oder adaptiv zu der Richtung oder Größenordnung der Bewegung innerhalb von Videodaten sind.
-
In einigen Ausführungsformen führt das Bildskalierungs- und Filtermodul 436 Bildverarbeitungsoperationen aus, um die visuelle Qualität von erzeugten Bildern und Videos zu verbessern. In einigen Ausführungsformen verarbeitet das Skalierungs- und Filtermodul 436 Bild- und Videodaten während der Abtastoperation, bevor die Daten der Ausführungseinheitsanordnung 414 bereitgestellt werden.
-
In einigen Ausführungsformen umfasst die GPE 410 einen Datenanschluss 444, der einen zusätzlichen Mechanismus für einen Speicherzugriff für Grafiksubsysteme bereitstellt. In einigen Ausführungsformen ermöglicht der Datenanschluss 444 einen Speicherzugriff für Operationen einschließlich Renderziel-Schreibvorgänge, Konstantenpufferlesevorgänge, Scratch-Speicherplatzlese-/-schreibvorgänge und Medienoberflächenzugriffe. In einigen Ausführungsformen umfasst der Datenanschluss 444 Cachespeicherplatz zum Zwischenspeichern von Zugriffen auf Speicher. Der Cachespeicher kann ein einzelner Datencache sein oder für die mehreren Subsysteme, die über den Datenanschluss auf Speicher zugreifen, in mehrere Caches unterteilt sein (z. B. einen Render-Puffercache, einen Konstantenpuffercache usw.). In einigen Ausführungsformen kommunizieren Threads, die auf einer Ausführungseinheit in der Ausführungseinheitsanordnung 414 ausgeführt werden, mit dem Datenanschluss durch Austauschen von Nachrichten über eine Datenverteilungsverbindung, die die einzelnen Subsysteme der GPE 410 koppelt.
-
Ausführungseinheiten
-
5 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 500. Elemente aus 5, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
-
In einigen Ausführungsformen weist der Grafikprozessor 500 eine Ringverbindung 502, ein Pipeline-Frontend 504, eine Medien-Engine 537 und Grafikkerne 580A-580N auf. In einigen Ausführungsformen koppelt die Ringverbindung 502 den Grafikprozessor mit anderen Verarbeitungseinheiten, einschließlich anderen Grafikprozessoren oder einem oder mehreren Universalprozessorkernen. In einigen Ausführungsformen ist der Grafikprozessor einer von vielen Prozessoren, die in einem Multi-Kern-Verarbeitungssystem integriert sind.
-
In einigen Ausführungsformen empfängt der Grafikprozessor 500 Stapel von Befehlen über die Ringverbindung 502. Die eingehenden Befehle werden von einem Befehls-Streamer 503 in dem Pipeline-Frontend 504 interpretiert. In einigen Ausführungsformen weist der Grafikprozessor 500 eine skalierbare Ausführungslogik zum Ausführen einer 3D-Geometrieverarbeitung und Medienverarbeitung über den/die Grafikkern(e) 580A-580N auf. Für 3D-Geometrie-Verarbeitungsbefehle liefert der Befehls-Streamer 503 Befehle an die Geometrie-Pipeline 536. Für zumindest einige Medienverarbeitungsbefehle liefert der Befehls-Streamer 503 die Befehle an ein Video-Frontend 534, das mit einer Medien-Engine 537 gekoppelt ist. In einigen Ausführungsformen umfasst die Medien-Engine 537 eine Videoqualitäts-Engine (VQE) 530 zur Video- und Bildnachverarbeitung und eine Multiformat-Codier-/Decodier-Engine (MFX) 533, um eine hardwarebeschleunigte Mediendatencodierung und -decodierung bereitzustellen. In einigen Ausführungsformen generieren die Geometrie-Pipeline 536 und die Medien-Engine 537 jeweils Ausführungs-Threads für die Thread-Ausführungsressourcen, die von mindestens einem Grafikkern 580A bereitgestellt werden.
-
In einigen Ausführungsformen umfasst der Grafikprozessor 500 skalierbare Thread-Ausführungsressourcen mit modularen Kernen 580A-580N (manchmal als Kern-Slices bezeichnet), die jeweils mehrere Teilkerne 550A-550N, 560A-560N (manchmal als Kern-Teil-Slices bezeichnet) aufweisen. In einigen Ausführungsformen kann der Grafikprozessor 500 eine beliebige Anzahl von Grafikkernen 580A bis 580N aufweisen. In einigen Ausführungsformen umfasst der Grafikprozessor 500 einen Grafikkern 580A mit mindestens einem ersten Teilkern 550A und einem zweiten Kernteilkern 560A. In anderen Ausführungsformen ist der Grafikprozessor ein Prozessor mit geringer Leistung mit einem einzigen Teilkern (z. B. 550A). In einigen Ausführungsformen umfasst der Grafikprozessor 500 mehrere Grafikkerne 580A-580N, die jeweils einen Satz erster Teilkerne 550A-550N und einen Satz zweiter Teilkerne 560A-560N aufweisen. Jeder Teilkern in dem Satz von ersten Teilkernen 550A-550N umfasst mindestens einen ersten Satz von Ausführungseinheiten 552A-552N und Medien/Textur-Abtastern 554A-554N. Jeder Teilkern in dem Satz von zweiten Teilkernen 560A-560N umfasst mindestens einen zweiten Satz von Ausführungseinheiten 562A-562N und Abtastern 564A-564N. In einigen Ausführungsformen teilt jeder Teilkern 550A-550N, 560A-560N einen Satz von gemeinsam genutzten Ressourcen 570A-570N. In einigen Ausführungsformen schließen die gemeinsam genutzten Ressourcen einen gemeinsam genutzten Cachespeicher und eine Pixeloperationslogik ein. Andere gemeinsam genutzte Ressourcen können ebenfalls in den verschiedenen Ausführungsformen des Grafikprozessors enthalten sein.
-
6 zeigt eine Thread-Ausführungslogik 600 mit einer Anordnung von Verarbeitungselementen, die in einigen Ausführungsformen einer GPE verwendet werden. Elemente aus 6, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
-
In einigen Ausführungsformen umfasst die Thread-Ausführungslogik 600 einen Pixel-Shader 602, einen Thread-Dispatcher 604, einen Befehlscache 606, eine skalierbare Ausführungseinheitsanordnung mit mehreren Ausführungseinheiten 608A-608N, einen Abtaster 610, einen Datencache 612 und einen Datenanschluss 614. In einer Ausführungsform sind die enthaltenen Komponenten über eine Verbindungsstruktur miteinander verbunden, die mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen umfasst die Thread-Ausführungslogik 600 eine oder mehrere Verbindungen zu Speicher, wie beispielsweise Systemspeicher oder Cachespeicher, durch einen oder mehrere von Befehlscache 606, Datenanschluss 614, Abtaster 610 und Ausführungseinheitsanordnung 608A-608N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 608A) ein individueller Vektorprozessor, der in der Lage ist, mehrere gleichzeitige Threads auszuführen und mehrere Datenelemente parallel für jeden Thread zu verarbeiten. In einigen Ausführungsformen weist die Ausführungseinheitsanordnung 608A-608N eine beliebige Anzahl von einzelnen Ausführungseinheiten auf.
-
In einigen Ausführungsformen wird die Ausführungseinheitsanordnung 608A-608N hauptsächlich zum Ausführen von „Shader“-Programmen verwendet. In einigen Ausführungsformen führen die Ausführungseinheiten in der Anordnung 608A-608N einen Anweisungssatz aus, der native Unterstützung für viele Standard-3D-Grafik-Shader-Anweisungen beinhaltet, sodass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und Universalverarbeitung (z. B. Rechen- und Medien-Shader).
-
Jede Ausführungseinheit in der Ausführungseinheitsanordnung 608A-608N wird auf Anordnungen von Datenelementen betrieben. Die Anzahl der Datenelemente ist die „Ausführungsgröße“ oder die Anzahl der Kanäle für die Anweisung. Ein Ausführungskanal ist eine logische Ausführungseinheit für den Datenelementzugriff, die Maskierung und die Ablaufsteuerung innerhalb von Anweisungen. Die Anzahl der Kanäle kann unabhängig von der Anzahl physikalischer arithmetischer Logikeinheiten (ALUs, Arithmetic Logic Units) oder Gleitkommaeinheiten (FPUs, Floating Point Units) für einen bestimmten Grafikprozessor sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 608A-608N Ganzzahl- und Gleitkomma-Datentypen.
-
Der Ausführungseinheits-Anweisungssatz umfasst einzelne Anweisungen zur gleichzeitigen Anwendung auf mehrere Daten (SIMD-Anweisungen, Single Instruction Multiple Data). Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit wird die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeiten. Wenn zum Beispiel mit einem 256 Bit breiten Vektor gearbeitet wird, werden die 256 Bits des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet mit dem Vektor als vier separate gepackte 64-Bit-Datenelemente (Datenelemente der Größe Vierfachwort (QW, Quad-Word)), acht separate gepackte 32-Bit-Datenelemente (Datenelemente der Größe Doppelwort (DW)), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente der Größe Wort (W)) oder zweiunddreißig separate gepackte 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)) betrieben wird. Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
-
Ein oder mehrere interne Anweisungscaches (z. B. 606) sind in der Thread-Ausführungslogik 600 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 612) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In einigen Ausführungsformen ist der Abtaster 610 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen weist der Abtaster 610 eine spezielle Textur- oder Medienabtastungsfunktionalität auf, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
-
Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanfragen über die Thread-Erzeugungs- und Dispatch-Logik an die Thread-Ausführungslogik 600. In einigen Ausführungsformen weist die Thread-Ausführungslogik 600 einen lokalen Thread-Dispatcher 604 auf, der Thread-Initiierungsanfragen von den Grafik- und Medien-Pipelines vermittelt und die angefragten Threads auf einer oder mehreren Ausführungseinheiten 608A-608N instanziiert. Zum Beispiel sendet die Geometrie-Pipeline (z. B. 536 von 5) Vertex-Verarbeitungs-, Parkettierungs- oder Geometrieverarbeitungs-Threads an eine Thread-Ausführungslogik 600 (6). In einigen Ausführungsformen kann der Thread-Dispatcher 604 auch Laufzeit-Thread-Erzeugungsanfragen von den ausführenden Shader-Programmen verarbeiten.
-
Sobald eine Gruppe geometrischer Objekte verarbeitet und in Pixeldaten rasterisiert wurde, wird der Pixel-Shader 602 aufgerufen, um die Ausgabeinformationen weiter zu berechnen und zu bewirken, dass Ergebnisse in Ausgabeoberflächen geschrieben werden (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.). In einigen Ausführungsformen berechnet der Pixel-Shader 602 die Werte der verschiedenen Vertexattribute, die über das rasterisierte Objekt zu interpolieren sind. In einigen Ausführungsformen führt der Pixel-Shader 602 dann ein von einer Anwendungsprogrammierschnittstelle (API, Application Programming Interface) geliefertes Pixel-Shader-Programm aus. Um das Pixel-Shader-Programm auszuführen, sendet der Pixel-Shader 602 Threads über den Thread-Dispatcher 604 an eine Ausführungseinheit (z. B. 608A). In einigen Ausführungsformen verwendet der Pixel-Shader 602 eine Texturabtastlogik im Abtaster 610, um auf Texturdaten in im Speicher gespeicherten Texturkarten zuzugreifen. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von der weiteren Verarbeitung.
-
In einigen Ausführungsformen stellt der Datenanschluss 614 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 600 bereit, um verarbeitete Daten an den Speicher zur Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen umfasst der Datenanschluss 614 einen oder mehrere Cachespeicher (z. B. Datencache 612) oder ist damit gekoppelt, um Daten für einen Speicherzugriff über den Datenanschluss zwischenzuspeichern.
-
7 ist ein Blockdiagramm, das ein Grafikprozessor-Anweisungsformat 700 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die Kästchen in durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Anweisungen enthalten sind. In einigen Ausführungsformen ist das beschriebene und dargestellte Anweisungsformat 700 insofern Makroanweisungen, dass sie Anweisungen sind, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die sich aus der Anweisungsdecodierung ergeben, sobald die Anweisung verarbeitet wird.
-
In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten Anweisungen nativ in einem 128-Bitformat 710. Ein verdichtetes 64-Bit-Anweisungsformat 730 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl der Operanden verfügbar. Das native 128-Bitformat 710 bietet Zugriff auf alle Anweisungsoptionen, während einige Optionen und Operationen in dem 64-Bit-Format 730 eingeschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen wird die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 verdichtet. Die Ausführungseinheits-Hardware verweist auf einen Satz von Verdichtungstabellen basierend auf den Indexwerten und verwendet die Verdichtungstabellenausgaben, um eine native Anweisung in dem 128-Bitformat 710 zu rekonstruieren.
-
Für jedes Format definiert ein Anweisungs-Opcode 712 die Operation, die die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit als Reaktion auf eine Addieranweisung eine gleichzeitige Addieroperation über jeden Farbkanal durch, der ein Texturelement oder Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden durch. In einigen Ausführungsformen ermöglicht das Anweisungsteuerungsfeld 714 eine Steuerung über bestimmte Ausführungsoptionen, wie die Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Swizzle). Für 128-Bit-Anweisungen 710 begrenzt ein Ausführungsgrößenfeld 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Ausführungsgrößenfeld 716 nicht zur Verwendung in dem kompakten 64-Bit-Anweisungsformat 730 verfügbar.
-
Einige Ausführungseinheitsanweisungen haben bis zu drei Operanden einschließlich zwei Quellenoperanden, src0 722, src1 722, und ein Ziel 718. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Doppelzielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quellenoperanden haben (z. B. SRC2 724), wobei der Anweisungs-Opcode 712 die Anzahl der Quellenoperanden bestimmt. Der letzte Quellenoperand einer Anweisung kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit der Anweisung weitergegeben wird.
-
In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 eine Zugriffs-/Adressmodus-Information 726, die zum Beispiel angibt, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung 710 bereitgestellt.
-
In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform kann der Zugriffsmodus eine Datenzugriffsausrichtung für die Anweisung definieren. Einige Ausführungsformen unterstützen Zugriffsmodi einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus, wobei die Byteausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Zum Beispiel kann die Anweisung 710, wenn sie sich in einem ersten Modus befindet, eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und wenn sie sich in einem zweiten Modus befindet, kann die Anweisung 710 eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
-
In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfeldes 726, ob der Befehl eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung 710 direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem unmittelbaren Adressfeld in der Anweisung berechnet werden.
-
In einigen Ausführungsformen werden Anweisungen basierend auf Bitfeldern von Opcode 712 gruppiert, um die Opcode-Decodierung 740 zu vereinfachen. Bei einem 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6 der Ausführungseinheit, den Opcode-Typ zu bestimmen. Die dargestellte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen beinhaltet eine Bewegungs- und Logik-Opcode-Gruppe 742 Datenbewegungs- und Logikanweisungen (z. B. move (mov), compare (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und Logikgruppe 742 die fünf höchstwertigen Bits (MSB, Most Significant Bits) gemeinsam, wobei move (mov) -Anweisungen die Form 0000xxxxb haben und Logikanweisungen die Form 0001xxxxb haben. Eine Ablaufsteueranweisungsgruppe 744 (z. B. call, jump (jmp)) beinhaltet Anweisungen in der Form 0010xxxxb (z. B. 0x20). Eine gemischte Anweisungsgruppe 746 beinhaltet eine Mischung von Anweisungen einschließlich Synchronisationsanweisungen (z. B. wait, send) in der Form 0011xxxxb (z. B. 0x30). Eine parallele Mathematikanweisungsgruppe 748 beinhaltet komponentenweise arithmetische Anweisungen (z. B. add, multiply (mul)) in der Form 0100xxxxb (z. B. 0x40). Die parallele Mathematikgruppe 748 führt die arithmetischen Operationen parallel über Datenkanäle aus. Die Vektor-Mathematikgruppe 750 beinhaltet arithmetische Befehle (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50). Die Vektor-Mathematikgruppe führt Arithmetik wie z. B. Skalarproduktberechnungen an Vektoroperanden aus.
-
Grafik-Pipeline
-
8 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 800. Elemente aus 8, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
-
In einigen Ausführungsformen weist der Grafikprozessor 800 eine Grafik-Pipeline 820, eine Medien-Pipeline 830, eine Anzeige-Engine 840, eine Thread-Ausführungslogik 850 und eine Renderausgabe-Pipeline 870 auf. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor in einem Multi-Kern-Verarbeitungssystem, das einen oder mehrere Universalverarbeitungskerne aufweist. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht dargestellt) oder über Befehle gesteuert, die über eine Ringverbindung 802 an den Grafikprozessor 800 ausgegeben werden. In einigen Ausführungsformen koppelt die Ringverbindung 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten, wie beispielsweise anderen Grafikprozessoren oder Universalprozessoren. Befehle aus der Ringverbindung 802 werden von einem Befehls-Streamer 803 interpretiert, der Anweisungen an einzelne Komponenten der Grafik-Pipeline 820 oder der Medien-Pipeline 830 liefert.
-
In einigen Ausführungsformen leitet der Befehls-Streamer 803 die Operation einer Vertex-Abrufkomponente 805, der Vertex-Daten aus einem Speicher liest, und führt Vertex-Verarbeitungsbefehle aus, die von dem Befehls-Streamer 803 bereitgestellt werden. In einigen Ausführungsformen stellt die Vertex-Abrufkomponente 805 Vertexdaten einem Vertex-Shader 807 bereit, der Koordinatenraumtransformationen und Beleuchtungsoperationen für jeden Vertex durchführt. In einigen Ausführungsformen führen die Vertex-Abrufkomponente 805 und der Vertex-Shader 807 Vertex-Verarbeitungsanweisungen aus, indem sie Ausführungs-Threads über einen Thread-Dispatcher 831 an die Ausführungseinheiten 852A, 852B senden.
-
In einigen Ausführungsformen sind die Ausführungseinheiten 852A, 852B eine Anordnung von Vektorprozessoren mit einem Anweisungssatz zum Ausführen von Grafik- und Medienoperationen. In einigen Ausführungsformen weisen die Ausführungseinheiten 852A, 852B einen angeschlossenen L1-Cache 851 auf, der für jede Anordnung spezifisch ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als ein Datencache, als ein Anweisungscache oder als ein einzelner Cache konfiguriert sein, der derart partitioniert ist, dass er Daten und Anweisungen in verschiedenen Partitionen enthält.
-
In einigen Ausführungsformen umfasst die Grafik-Pipeline 820 Parkettierungskomponenten, um eine hardwarebeschleunigte Parkettierung von 3D-Objekten durchzuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 811 die Parkettierungsoperationen. Ein programmierbarer Domänen-Shader 817 stellt eine Backend-Auswertung der Parkettierungsausgabe bereit. Ein Parkettierer 813 arbeitet in Richtung des Hull-Shaders 811 und enthält eine Sonderzwecklogik zum Generieren eines Satzes detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell, das als Eingabe für die Grafik-Pipeline 820 bereitgestellt wird. In einigen Ausführungsformen können, falls keine Parkettierung verwendet wird, Parkettierungskomponenten 811, 813, 817 umgangen werden.
-
In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 819 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 852A, 852B gesendet werden, oder können direkt zu dem Clipper 829 weitergehen. In einigen Ausführungsformen arbeitet der Geometrie-Shader an ganzen geometrischen Objekten anstelle von Vertices oder Patches von Vertices wie in vorherigen Stufen der Grafik-Pipeline. Wenn die Parkettierung deaktiviert ist, empfängt der Geometrie-Shader 819 eine Eingabe von dem Vertex-Shader 807. In einigen Ausführungsformen ist der Geometrie-Shader 819 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrieparkettierung auszuführen, wenn die Parkettierungseinheiten deaktiviert sind.
-
Vor der Rasterisierung verarbeitet ein Clipper 829 Vertexdaten. Der Clipper 829 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. In einigen Ausführungsformen versendet eine Rasterisierer- und Tiefentestkomponente 873 in der Renderausgabe-Pipeline 870 Pixel-Shader, um die geometrischen Objekte in ihre pixelweisen Darstellungen umzuwandeln. In einigen Ausführungsformen ist eine Pixel-Shader-Logik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung den Rasterisierer 873 umgehen und über eine Stream-Out-Einheit 823 auf nicht rasterisierte Vertexdaten zugreifen.
-
Der Grafikprozessor 800 weist einen Verbindungsbus, eine Verbindungsstruktur oder einen anderen Verbindungsmechanismus auf, der ein Weitergeben von Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 852A, 852B und die der/die zugehörigen Cache(s) 851, Textur- und Medienabtaster 854 und Textur-/Abtaster-Cache 858 über einen Datenanschluss 856 miteinander verbunden, um einen Speicherzugriff durchzuführen und mit Renderausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen haben der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A, 852B jeweils getrennte Speicherzugriffspfade.
-
In einigen Ausführungsformen enthält die Renderausgabe-Pipeline 870 eine Rasterisierer- und Tiefentestkomponente 873, die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen weist die Rasterisierer-Logik eine Fenster-/Maskierer-Einheit auf, um eine Dreiecks- und Linienrasterisierung mit festen Funktionen auszuführen. Ein zugehöriger Render-Cache 878 und Tiefencache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten aus, wenngleich in einigen Fällen Pixeloperationen, die 2D-Operationen zugeordnet sind (z. B. Bitblockbildübertragungen mit Übergang), von der 2D-Engine 841 durchgeführt oder zur Anzeigezeit von der Anzeigesteuerung 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache 875 für alle Grafikkomponenten verfügbar, was die gemeinsame Nutzung von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
-
In einigen Ausführungsformen weist die Grafikprozessor-Medien-Pipeline 830 eine Medien-Engine 837 und ein Video-Frontend 834 auf. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipeline-Befehle von dem Befehls-Streamer 803. In einigen Ausführungsformen weist die Medien-Pipeline 830 einen separaten Befehls-Streamer auf. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 837. In einigen Ausführungsformen weist die Medien-Engine 337 eine Thread-Erzeugungsfunktionalität auf, um Threads zum Versenden an die Thread-Ausführungslogik 850 über den Thread-Dispatcher 831 zu erzeugen.
-
In einigen Ausführungsformen weist der Grafikprozessor 800 eine Anzeige-Engine 840 auf. In einigen Ausführungsformen befindet sich die Anzeige-Engine 840 außerhalb des Prozessors 800 und ist mit dem Grafikprozessor über die Ringverbindung 802 oder eine andere Art von Verbindungsbus oder Verbindungsstruktur verbunden. In einigen Ausführungsformen weist die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843 auf. In einigen Ausführungsformen weist die Anzeige-Engine 840 eine Sonderzwecklogik auf, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. In einigen Ausführungsformen ist die Anzeigesteuerung 843 mit einer Anzeigevorrichtung (nicht dargestellt) gekoppelt, die eine systemintegrierte Anzeigevorrichtung wie in einem Laptop-Computer oder eine externe Anzeigevorrichtung sein kann, die über ein Anzeigevorrichtungsverbindungselement angeschlossen ist.
-
In einigen Ausführungsformen sind die Grafik-Pipeline 820 und die Medien-Pipeline 830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht spezielle für irgendeine Anwendungsprogrammierschnittstelle (API) ausgelegt. In einigen Ausführungsformen übersetzt die Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL) und Open Computing Language (OpenCL) der Khronos Group, der Direct3D-Bibliothek der Microsoft Corporation bereitgestellt, oder Unterstützung kann sowohl für OpenGL als auch für D3D bereitgestellt werden. Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde ebenfalls unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
-
Grafik-Pipeline-Programmierung
-
9A ist ein Blockdiagramm eines Grafikprozessorbefehlsformats 900 gemäß einigen Ausführungsformen. 9B ist ein Blockdiagramm einer Grafikprozessorbefehlsfolge 910 gemäß einer Ausführungsform. Die Kästchen in durchgezogenen Linien in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 900 der 9A umfasst Datenfelder zum Identifizieren eines Ziel-Clients 902 des Befehls, eines Befehlsoperationscodes (Opcode) 904 und der relevanten Daten 906 für den Befehl. Ein Teil-Opcode 905 und eine Befehlsgröße 908 sind ebenfalls in einigen Befehlen enthalten.
-
In einigen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehls-Parser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls aufzubereiten und die Befehlsdaten an die geeignete Client-Einheit weiterzuleiten. In einigen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit auf. Jede Client-Einheit hat eine entsprechende Verarbeitungs-Pipeline, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Teil-Opcode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 906 aus. Für einige Befehle wird eine explizite Befehlsgröße 908 erwartet, die die Größe des Befehls angibt. In einigen Ausführungsformen bestimmt der Befehls-Parser automatisch die Größe von mindestens einigen der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen werden Befehle über Vielfache eines Doppelwortes ausgerichtet.
-
Das Ablaufdiagramm in 9B zeigt eine beispielhafte Grafikprozessorbefehlsfolge 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der dargestellten Befehlsfolge, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolge wird nur zu Beispielszwecken dargestellt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge ausgegeben werden, sodass der Grafikprozessor die Folge von Befehlen zumindest teilweise gleichzeitig verarbeitet.
-
In einigen Ausführungsformen kann die Grafikprozessorbefehlsfolge 910 mit einem Pipeline-Entleerungsbefehl 912 beginnen, um zu bewirken, dass eine aktive Grafik-Pipeline die aktuell für die Pipeline ausstehenden Befehle abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medien-Pipeline 924 nicht gleichzeitig. Die Pipeline-Entleerung wird ausgeführt, um zu bewirken, dass die aktive Grafik-Pipeline alle ausstehenden Befehle abschließt. Als Antwort auf eine Pipeline-Entleerung unterbricht der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichen-Engines ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Render-Cache, die als „fehlerhaft“ gekennzeichnet sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipeline-Entleerungsbefehl 912 für die Pipeline-Synchronisation oder vor dem Versetzen des Grafikprozessors in einen Zustand von niedriger Leistung verwendet werden.
-
In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 nur einmal in einem Ausführungskontext vor dem Ausgeben von Pipeline-Befehlen benötigt, es sei denn, der Kontext gibt vor, Befehle für beide Pipelines auszugeben. In einigen Ausführungsformen ist ein Pipeline-Entleerungsbefehl 912 unmittelbar vor einem Pipeline-Wechsel über den Pipeline-Auswahlbefehl 913 erforderlich.
-
In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 914 eine Grafik-Pipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medien-Pipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 914 für eine Pipeline-Synchronisation und zum Löschen von Daten aus einem oder mehreren Cachespeichern innerhalb der aktiven Pipeline verwendet, bevor ein Stapel von Befehlen verarbeitet wird.
-
In einigen Ausführungsformen werden Rückgabepufferzustand-Befehle 916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine threadübergreifende Kommunikation durchzuführen. In einigen Ausführungsformen beinhaltet der Rückgabepufferzustand 916 das Auswählen der Größe und Anzahl von Rückgabepuffern, die für einen Satz von Pipeline-Operationen verwendet werden sollen.
-
Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 920 wird die Befehlsfolge auf die 3D-Pipeline 922, beginnend mit dem 3D-Pipeline-Zustand 930, oder die Medien-Pipeline 924, beginnend mit dem Medien-Pipeline-Zustand 940, zugeschnitten.
-
Die Befehle für den 3D-Pipeline-Zustand 930 beinhalten 3D-Zustandseinstellungsbefehle für den Vertex-Pufferzustand, einen Vertex-Elementzustand, einen Konstantfarbzustand, einen Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitiv-Befehle verarbeitet werden. Die Werte dieser Befehle werden mindestens teilweise basierend auf der jeweiligen verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind Befehle zum 3D-Pipeline-Zustand 930 auch in der Lage, bestimmte Pipeline-Elemente gezielt zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
-
In einigen Ausführungsformen wird der Befehl der 3D-Primitive 932 verwendet, um 3D-Primitive, die von der 3D-Pipeline verarbeitet werden sollen, zu versenden. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl 932 an den Grafikprozessor geleitet werden, werden an die Vertex-Abruffünktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffünktion verwendet die Daten des 3D-Primitiv-Befehls 932, um Vertex-Datenstrukturen zu generieren. Die Vertex-Datenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 932 verwendet, um Vertex-Operationen an 3D-Primitiven über Vertex-Shader durchzuführen. Um Vertex-Shader zu verarbeiten, sendet die 3D-Pipeline 922 Shader-Ausführungs-Threads an Grafikprozessor-Ausführungseinheiten.
-
In einigen Ausführungsformen wird die 3D-Pipeline 922 über einen Befehl oder ein Ereignis Ausführen 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang eine Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen „go“- oder „kick“-Befehl in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Grafik-Pipeline zu entleeren. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitiven aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert und die Pixel-Engine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern von Pixel-Shading- und Pixel-Backend-Operationen können ebenfalls für diese Operationen enthalten sein.
-
In einigen Ausführungsformen folgt die Grafikprozessorbefehlsfolge 910 dem Pfad der Medien-Pipeline 924, wenn Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medien-Pipeline 924 von den durchzuführenden Medien oder Rechenoperationen ab. Bestimmte Mediendecodieroperationen können während der Mediendecodierung in die Medien-Pipeline ausgelagert werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Universalverarbeitungskernen bereitgestellt werden. In einer Ausführungsform beinhaltet die Medien-Pipeline auch Elemente für Operationen einer Universal-Grafikprozessoreinheit (GPGPU, General-Purpose Graphics Processor Unit), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Compute-Shader-Programmen, die nicht explizit mit dem Rendering von Grafikprimitiven in Zusammenhang stehen, durchzuführen.
-
In einigen Ausführungsformen ist die Medien-Pipeline 924 auf ähnliche Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Medien-Pipelinezustandsbefehlen 940 wird vor den Medienobjektbefehlen 942 an eine Befehlswarteschlange versendet oder in diese platziert. In einigen Ausführungsformen beinhalten die Medien-Pipelinezustandsbefehle 940 Daten zum Konfigurieren der Medien-Pipeline-Elemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies umfasst Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik in der Medien-Pipeline, wie beispielsweise ein Codierungs- oder Decodierungsformat. In einigen Ausführungsformen unterstützen die Medien-Pipelinezustandsbefehle 940 auch die Verwendung von einem oder mehreren Zeigern auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
-
In einigen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger auf Medienobjekte zur Verarbeitung durch die Medien-Pipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipelinezustände gültig sein, bevor ein Medienobjektbefehl 942 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und die Medienobjektbefehle 942 in die Warteschlange eingereiht sind, wird die Medien-Pipeline 924 über einen Ausführungsbefehl 944 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreibvorgang) ausgelöst. Die Ausgabe von der Medien-Pipeline 924 kann dann durch Operationen nachbearbeitet werden, die von der 3D-Pipeline 922 oder der Medien-Pipeline 924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
-
Grafik-Software-Architektur
-
10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030. In einigen Ausführungsformen weist der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Universalprozessorkern(e) 1034 auf. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils in dem Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
-
In einigen Ausführungsformen enthält die 3D-Grafikanwendung 1010 ein oder mehrere Shader-Programme, die Shader-Anweisungen 1012 enthalten. Die Shader-Sprachanweisungen können in einer Shader-Sprache höherer Ebene vorliegen, wie der High Level Shader Language (HLSL) oder der OpenGL Shader Language (GLSL). Die Anwendung weist auch ausführbare Anweisungen 1014 in einer Maschinensprache auf, die zur Ausführung durch den Universalprozessorkern 1034 geeignet sind. Die Anwendung weist auch Grafikobjekte 1016 auf, die durch Vertexdaten definiert sind.
-
In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows®-Betriebssystem der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 1020 einen Frontend-Shader-Kompilierer 1024, um alle Shader-Anweisungen 1012 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine Just-in-Time (JIT) -Kompilierung sein, oder die Anwendung kann eine Shader-Vorkompilierung ausführen. In einigen Ausführungsformen werden Shader hoher Ebene während der Kompilierung der 3D-Grafikanwendung 1010 zu Shadern niedrigerer Ebene kompiliert.
-
In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 1026 einen Backend-Shader-Kompilierer 1027, um die Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden die Shader-Anweisungen 1012 in der GLSL-Hochsprache an einen Benutzermodus-Grafiktreiber 1026 zur Kompilierung geleitet. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 Betriebssystem-Kernelmodusfunktionen 1028, um mit einem Kernelmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu versenden.
-
IP-Kern-Implementierungen
-
Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik innerhalb einer integrierten Schaltung wie eines Prozessors repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen aufweisen, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn sie von einer Maschine gelesen werden, können die Anweisungen bewirken, dass die Maschine die Logik herstellt, um die hierin beschriebenen Techniken durchzuführen. Solche Repräsentationen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardwaremodell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart hergestellt sein, dass die Schaltung Operationen ausführt, die in Verbindung mit irgendeiner der hier beschriebenen Ausführungsformen beschrieben sind.
-
11 ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 1100 veranschaulicht, das zur Herstellung einer integrierten Schaltung zur Ausführung von Operationen gemäß einer Ausführungsform verwendet werden kann. Das IP-Kern-Entwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu erzeugen, die in einen größeren Entwurf integriert werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte SoC-Schaltung) aufzubauen. Eine Entwurfseinrichtung 1130 kann eine Softwaresimulation 1110 eines IP-Kernentwurfs in einer höheren Programmiersprache (z. B. C/C++) generieren. Die Softwaresimulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns zu entwerfen, zu testen und zu verifizieren. Ein Registertransferebenen(RTL, Register Transfer Level)-Entwurf kann dann aus dem Simulationsmodell 1100 erzeugt oder synthetisiert werden. Der RTL-Entwurf 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardware-Registern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Neben einem RTL-Entwurf 1115 können auch Entwürfe auf niedrigerer Ebene auf der Logikebene oder der Transistorebene erzeugt, entworfen oder synthetisiert werden. Daher können die speziellen Details des anfänglichen Entwurfs und der Simulation variieren.
-
Der RTL-Entwurf 1115 oder ein Äquivalent kann ferner durch die Entwurfseinrichtung in ein Hardwaremodell 1120 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL, Hardware Description Language) oder einer anderen Darstellung von physikalischen Entwurfsdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um den IP-Kernentwurf zu verifizieren. Der IP-Kernentwurf kann zur Lieferung an eine Drittherstellereinrichtung 1165 unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann der IP-Kernentwurf über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 (z. B. über das Internet) übertragen werden. Die Herstellungseinrichtung 1165 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kernentwurf basiert. Die hergestellte integrierte Schaltung kann konfiguriert sein, Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform auszuführen.
-
12 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung 1200 eines Ein-Chip-Systems veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Die beispielhafte integrierte Schaltung weist einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs), mindestens einen Grafikprozessor 1210 auf und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 aufweisen, von denen jeder ein modularer IP-Kern aus derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung weist eine Peripherie- oder Buslogik auf, die eine USB-Steuerung 1225, eine UART-Steuerung 1230, eine SPI/SDIO-Steuerung 1235 und eine I2S/I2C-Steuerung 1240 aufweist. Außerdem kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einer High-Definition Multimedia Interface(HDMI)-Steuerung 1250 und/oder einer Mobile Industry Processor Interface(MIPI)-Anzeigeschnittstelle 1255 gekoppelt ist. Die Speicherung kann durch ein Flash-Speicher-Subsystem 1260 bereitgestellt sein, das einen Flash-Speicher und eine Flash-Speichersteuerung aufweist. Die Speicherschnittstelle kann über eine Speichersteuerung 1265 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 1270 auf.
-
Zusätzlich können andere Logik und Schaltungen in dem Prozessor der integrierten Schaltung 1200 enthalten sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkerne.
-
VERFAHREN UND EINRICHTUNG ZUR FARBPUFFERKOMPRIMIERUNG
-
Wie erwähnt, gibt es mehrere bekannte Techniken zur Farbpufferkomprimierung, jedoch sind verbesserte Lösungen erforderlich, um die Leistung und den Stromverbrauch bestehender Architekturen, insbesondere Architekturen, bei denen die Speicherhierarchie von den Kernen der zentralen Verarbeitungseinheit (CPU, Central Processing Unit) und dem Grafikprozessor gemeinsam genutzt werden, zu verbessern. Zudem wird es angesichts der an 3D-Grafik-Codecs vorgenommenen Verbesserungen immer schwieriger, einfache Algorithmen zu finden, die weitere Reduzierungen des Speicherverkehrs bereitstellen. Folglich sind möglicherweise komplexere Algorithmen erforderlich, um deutliche zusätzliche Vorteile zu erhalten.
-
Die Ausführungsformen der Erfindung verwenden dynamischere und komplexere Komprimierungstechniken als die in bestehenden Architekturen. Üblicherweise werden Farbdaten unter Verwendung von verlustfreien Komprimierungstechniken komprimiert, damit die Farbdaten ohne Qualitätsverlust codiert werden. Die Verwendung von verlustfreien Techniken kann erzielbare Komprimierungsraten begrenzen und die Rate an erfolgreichen Komprimierungen kann begrenzt sein. Wenn jedoch kleinere Qualitätsverluste akzeptabel sind, können höhere Komprimierungsraten unter Verwendung verlustbehafteter Komprimierungstechniken erzielt werden, die mehr erfolgreiche Komprimierungsversuche bereitstellen und Speicherbandbreite einsparen können. Derartige Bandbreiteneinsparungen können bei verschiedenen Vorrichtungen eine Leistung erhöhen und/oder einen Stromverbrauch reduzieren. Es ist jedoch trotzdem wichtig, auch verlustfreie Komprimierungsverfahren bereitzustellen.
-
Eine Ausführungsform der Erfindung passt verlustbehaftete Komprimierungstechniken derart an, dass sie auch für eine Einzelbildpufferkomprimierung verwendet werden können, die derzeit bei derzeitigen Grafik-APIs verlustfrei sein muss. Die verlustbehafteten Komprimierungstechniken umfassen transformationsgestützte Techniken, wie solche, die diskrete Kosinustransformationen (DCT, Discrete Cosine Transforms) und wavelet-gestützte Transformationen verwenden. Beispiele umfassen „Joint Picture Experts Group“ (JPEG) (verwendet DCT) und JPEG2000 (verwendet Wavelet-Transformationen); jedoch können beliebige andere geeignete hierarchische Bildtransformationen verwendet werden.
-
13 veranschaulicht ein beispielhaftes System 1300, auf dem Ausführungsformen der Erfindung zum Bereitstellen einer Komprimierung und/oder Dekomprimierung bei einem Grafik-Rendering implementiert sein können. Insbesondere umfasst die dargestellte Ausführungsform eine Komprimierungs-/Dekomprimierungs-Schaltung/-Logik 1335 (im Folgenden als „Komprimierungs-/Dekomprimierungsmodul“ bezeichnet), die in eine oder mehrere Grafikverarbeitungseinheiten (GPUs, Graphics Processing Units) 1330 zum Durchführen einer Komprimierung und Dekomprimierung an Grafikdaten 1345 eines Einzelbildpuffers 1340 wie hierin beschrieben integriert ist. In der dargestellten Implementierung kann das System 1300 eine oder mehrere zentrale Verarbeitungseinheiten 1306 und GPUs 1330 umfassen, die kommunikativ mit einem Speichersubsystem 1320 gekoppelt sind. Zwar sind die GPUs 1330 in 13 extern zu den CPUs 1306 gezeigt, in einer Ausführungsform können die GPUs und CPUs jedoch in denselben integrierten Schaltungschip integriert sein. Außerdem kann bzw. können das Speichersubsystem 1320 oder Teile davon auf demselben integrierten Schaltungschip beinhaltet sein und können mehrere Cacheebenen (z. B. Caches der Ebene 1 (L1), Ebene 2 (L2) und Ebene 3 (L3)) und Systemspeicher (z. B. einen flüchtigen Speicher wie z. B. dynamischen Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory) und/oder einen nicht-flüchtigen Speicher wie z. B. einen Flash-Speicher) umfassen, in dem der Farbpuffer 1340 implementiert sein kann. Alternativ dazu kann der Farbpuffer 1340 unter Verwendung einer separaten dedizierten Speicherstruktur implementiert sein. Die Komprimierung/Dekomprimierung 1335 kann nach L1, nach L2, nach L3 erfolgen, je nachdem, was am besten für die aktuelle Architektur geeignet ist.
-
Die GPUs 1360 können mit einer Anzeigevorrichtung 1370 über eine digitale Videoschnittstelle wie beispielsweise einen „Display-Port“ (DP) oder eine „High-Definition Multimedia Interface“ (HDMI) kommunikativ gekoppelt sein. In verschiedenen Implementierungen kann die Anzeigevorrichtung 1370 in das System 1300 integriert oder von dem System 1300 getrennt implementiert sein.
-
Es versteht sich, dass die in 13 dargestellten Module eine Vielzahl von Software- und/oder Hardwaremodulen und/oder Modulen, die über Software und/oder Hardware implementiert sein können, beinhalten können. Beispielsweise können die Module als Software über zentrale Verarbeitungseinheiten 1306 und/oder Grafikverarbeitungseinheiten 1330 implementiert sein oder die Module können über einen dedizierten Hardwareteil oder Teile von Grafikverarbeitungseinheiten 1330 implementiert sein. Ferner kann der Farbpuffer 1340 in dem Speichersubsystem 1320 wie dargestellt implementiert sein oder kann über einen separaten dedizierten Puffer implementiert sein, der andere Pufferteile (z. B. beispielsweise einen Render-Puffer) beinhalten kann. Verschiedene andere Systemkomponenten sind nicht in 13 dargestellt, um die zugrundeliegenden Prinzipien der Erfindung nicht unklar zu machen (z. B. beispielsweise eine Speichersteuerung, Eingabe/Ausgabe(E/A)-Schaltung(en), spezifische Cache-Einheiten usw.).
-
Eine Ausführungsform des Komprimierungs-/Dekomprimierungsmoduls 1335 wendet ein Analysefilter auf die Grafikdaten 1345 (z. B. auf ein Einzelbild) an, wodurch eine gesamte Transformationspyramide (manchmal als Waveletpyramide bezeichnet) erzeugt wird. Ferner kann das Komprimierungs-/Dekomprimierungsmodul 1335 die Umkehrtransformation durchführen, wobei die N der Koeffizienten auf Hochfrequenzebene und Pyramidenebene auf Null gesetzt sind (oder die N am wenigsten wichtigen Koeffizienten auf Null gesetzt sind), wodurch eine gleichmäßige Bilddarstellung über das gesamte Bild erstellt wird. Die Differenzen/Deltas werden dann zwischen der gleichmäßigen Bilddarstellung und dem Originalbild codiert, um eine verlustfreie Komprimierung zu erreichen (d. h. die gleichmäßige Bilddarstellung in Kombination mit den Deltas kann zum Rekonstruieren des Originalbilds verwendet werden). Die Residuen können unter Verwendung eines beliebigen Verfahrens codiert werden, das für eine Hardwareimplementierung geeignet ist.
-
Das durch das Komprimierungs-/Dekomprimierungsmodul
1335 implementierte Codieren/Komprimieren wird zunächst gemäß einer Ausführungsform der Erfindung beschrieben. Es wird angenommen, dass eine vollständige Wavelet-Transformation auf einer Pro-Kachel-Basis (z. B. Pixel, die
256 Byte ausmachen, was 8x8 Pixel mit RGBA8 sein könnte) unter Verwendung einer diskreten Wavelet-Transformation durchgeführt wird. Das Ergebnis ist ein Skalierungskoeffizient für die Skalierungsfunktion, ∅
0, und viele Wavelet-Detailkoeffizienten für die Basis, ψ
i. Es ist zu beachten, dass diese Funktionen zweidimensional sind, die Koeffizienten jedoch nur Zahlen sind. Zudem werden häufig alle Indizes pro Funktion zu einem einzelnen Index i komprimiert, von dem angenommen wird, dass er alle Informationen enthält, wie beispielsweise auf welcher Ebene eine bestimmte Wavelet-Funktion vorhanden ist und die entsprechende Translationsverschiebung. Diese Vereinfachung wird in der gesamten vorliegenden ausführlichen Beschreibung vorgenommen, bei formalerer Behandlung sollten jedoch sowohl eine Ebene als auch zwei Verschiebungen pro Wavelet-Basisfunktion vorhanden sein. Anhand dieser Koeffizienten kann das Originalbild f(t) rekonstruiert (oder wiederhergestellt) werden als:
Dies führt jedoch nicht zu einer Reduzierung von Speicherplatz.
-
Eine beispielhafte Ausführungsform wird unter Verwendung eines eindimensionalen Beispiels beschrieben, damit es einfacher zu visualisieren ist. 14 veranschaulicht Beispiele von Wavelet-Basisfunktionen, die sich auf unterschiedlichen Ebenen (d. h. in unterschiedlichen Zeilen, die in der Figur mit 1-3 gekennzeichnet sind) befinden sowie unterschiedliche Translationen (d. h. unterschiedliche Positionen entlang der x-Achse) aufweisen. Somit kann die Funktion f(t) wiederhergestellt/rekonstruiert werden, indem die Wavelet-Funktionen und die Skalierungsfunktion mal den jeweiligen Koeffizienten genommen wird, wie durch die obige Gleichung vorgegeben.
-
Es wird angenommen, dass eine Wavelet-Transformation auf das in 15A gezeigte Signal angewendet werden soll. Wenn zum Beispiel alle Koeffizienten außer denjenigen auf der feinsten Ebene (oder dem Satz von feinsten Ebenen) und die Bildfunktion, die nur mit Wavelet-Koeffizienten für die oberen drei Ebenen rekonstruiert wurde, verwendet werden, werden im Ergebnis einige Details verloren gehen, wie in 15B zu sehen ist, obwohl das Ergebnis die Originalfunktion trotzdem ziemlich gut abbildet. Wenn noch eine weitere Ebene von Detail-Koeffizienten aus der Rekonstruktion ausgeschlossen wird, wird das Ergebnis noch gleichmäßiger, wie in 15C gezeigt.
-
Gemäß diesen Konzepten führt eine Ausführungsform der Erfindung die gesamte Wavelet-Transformation durch und rekonstruiert anschließend die Bildfunktion unter Verwendung nur eines kleinen Satzes von Wavelet-Koeffizienten, was eine gleichmäßige Funktion wie die in 15C gezeigte zum Ergebnis hat. Insbesondere wendet in einer Ausführungsform das Einzelbildpuffer-Komprimierungs-/Dekomprimierungsmodul 1335 ein Analysefilter auf eine Kachel der Einzelbildpuffer-Grafikdaten 1345 (z. B. auf ein Einzelbild) an, wodurch eine gesamte Transformationspyramide, auch als Waveletpyramide bezeichnet, erzeugt wird. Hierdurch wird nicht die Datenmenge reduziert. Folglich wird in einer Ausführungsform die Umkehrtransformation durchgeführt, wobei ein spezieller Satz (N) der Daten auf Hochfrequenzebene und Pyramidenebene auf Null gesetzt ist (d. h. tatsächlich werden bestimmte Hochfrequenz-Koeffizienten entfernt). Dadurch wird eine gleichmäßige Bilddarstellung über das gesamte Bild erstellt. Das Komprimierungs-/Dekomprimierungsmodul 1335 codiert dann die Residuen (d. h. Differenzen oder Deltas) zwischen der gleichmäßigen Bilddarstellung und dem Originalbild. Wenn das Bild rekonstruiert wird, führt ein Berücksichtigen der Residuen (d. h. Kombinieren derselben mit dem gleichmäßigen Bild) zu einer verlustfreien Komprimierung. Um die Originalbildfunktion wiederherzustellen, berechnet und speichert daher eine Ausführungsform des Komprimierungs-/Dekomprimierungsmoduls 1335 die Residuen (Differenzen) zwischen der Originalfunktion (z. B. 15A) und der (gleichmäßigen) rekonstruierten Funktion (z. B. 15C). Die Residuen können mit den zugrundeliegenden Bilddaten gespeichert werden und unter Verwendung einer beliebigen Technik codiert werden, die für eine Hardwareimplementierung geeignet ist.
-
Es ist zu beachten, dass die Bildfunktion gleichmäßig wird, wenn die Basisfunktion derartige Eigenschaften aufweist. In einer Ausführungsform werden Daubechies-9/7-Wavelets oder kubische Wavelet-Polynome verwendet. Andere Wavelets können jedoch ebenfalls verwendet werden, wie auch auf einer diskreten Kosinustransformation (DCT, Discrete Cosine Transform) basierende Komprimierungstechniken.
-
Die Frage, welche Wavelet-Funktionen gespeichert werden sollen, ist von wesentlicher Bedeutung. Natürlich muss der Koeffizient für die Skalierungsfunktion gespeichert werden, da sonst das Bild nicht rekonstruiert werden kann. Bei orthonomalen Basisfunktionen wird der quadratische Fehler minimiert, wenn die größten Koeffizienten beibehalten werden. Obwohl nicht alle Wavelet-Basen orthonormal sind und es wünschenswert sein kann, den maximalen Fehler anstatt die quadratische Fehlersumme zu reduzieren, kann das Behalten der größten Koeffizienten doch als eine Näherung erster Ordnung dienen.
-
Eine Ausführungsform der Erfindung begrenzt die Ebene auf einen kleinen Teilsatz im oberen Bereich. Beispielsweise können 2 Bits verwendet werden, um anzuzeigen, zu welcher Ebene ein Koeffizient gehört, und einige Bits können für die Translation verwendet werden. Dies kann sich jedoch zu einer großen Anzahl an Bits summieren. In einem Szenario können derartige Bits gespeichert werden, da, wenn wesentlich weniger Wavelet-Koeffizienten in der komprimierten Darstellung gespeichert werden, Platz für diese zusätzlichen Bits sein kann. Somit können für jeden Koeffizienten X Bits verwendet werden, um seine Ebene und Translation zu speichern, und Y Bits können für den eigentlichen Koeffizienten verwendet werden.
-
Eine weitere Alternative ist, alle der Koeffizienten auf der bzw. den obersten Ebene(n) zu nehmen (ausschließlich der Skalierungsfunktion und den zugehörigen Koeffizienten, da diese immer eingeschlossen werden müssen) und nur die Y Bits für jeden Koeffizienten zu speichern. Dann wird angenommen, dass N weitere Koeffizienten eingeschlossen werden können, und in diesem Fall kann die Position der Koeffizienten unter Verwendung von X Bits für seine Ebene und Translation und Y Bits für den Koeffizientenwert bestimmt werden. Unterschiedliche Kombinationen dafür können einfach zusammengestellt werden.
-
In einer Ausführungsform werden alle Transformationen unabhängig von dem jeweiligen Farbkanal durchgeführt. Der Komprimierer 1335 rekonstruiert die (gleichmäßige) Bildfunktion unter Verwendung der Koeffizienten, die in der komprimierten Darstellung zu speichern sind, und anschließend werden Residuen zwischen der Originalbildfunktion und der (gleichmäßigen) Bildfunktion berechnet. Die Residuen können dann unter Verwendung eines beliebigen Verfahrens codiert werden, wie beispielsweise Golomb-Rice-Codierung, Fibonnaci-Codierung, oder einfach als Residuen zwischen -2n und 2n -1, wobei n derart ausgewählt ist, dass alle Residuen in diesen Bereich passen (und n muss zudem einmal pro Kachel gespeichert werden).
-
In einer Ausführungsform decodiert der Dekomprimierer des Farbpuffer-Komprimierungs-/Dekomprimierungsmoduls
1335 einfach entweder explizit (z. B. unter Verwendung der X Bits für Ebene und Translation und Y Bits pro Koeffizienten) oder implizit (wenn nur Y Bits pro Koeffizienten verfügbar sind). Die angenäherte Bildfunktion kann dann rekonstruiert werden unter Verwendung von:
-
In diesem Fall sind jedoch möglicherweise nicht alle Detail-Koeffizienten verfügbar (z. B. da nicht alle gespeichert wurden, um Platz zu sparen, und da nur eine gleichmäßige Annäherung der Funktion gewünscht ist), daher sind einige Detail-Koeffizienten Null. Das bedeutet, dass die entsprechenden Ausdrücke (in denen die Detail-Koeffizienten Null sind), aus der Evaluierung ausgeschlossen sind, da sie nicht zu der rekonstruierten Bildfunktion beitragen, was die Effizienz verbessert. Danach werden die Residuen decodiert und wieder hinzugefügt, um das endgültige Bild zu rekonstruieren.
-
Eine Alternative zu der 2D-Wavelet-Transformation, die in einer Ausführungsform verwendet wird, ist, die Pixel in einer Bildkachel gemäß einer raumfüllenden Kurve anzuordnen (oder zumindest alle Pixel in einer Kachel in einer vorbestimmten Reihenfolge zu prüfen). Dies könnte eine Morton-Kurve (auch als „Z-Kurve“ bekannt) oder eine Hilbert-Kurve (die gute Ortseigenschaften hat) oder einfach ein schlangenlinienartiger Durchgang über die Kachel sein, wie in 16 dargestellt (in der der Fluss der Pfeile die Reihenfolge anzeigt, in der die Pixel verarbeitet werden). So werden die Daten von 2D auf 1D übertragen und somit kann eine eindimensionale Wavelet-Transformation anstatt einer 2D-Transformation verwendet werden, was die Hardwareimplementierung und ein Parallelisieren stark vereinfachen kann (insbesondere, wenn die 2D-Wavelet-Transformation nicht separierbar ist).
-
Ein Komprimierungsverfahren gemäß einer Ausführungsform der Erfindung ist in 17A veranschaulicht und ein Dekomprimierungsverfahren ist in 17B veranschaulicht. Diese Verfahren können auf den hierin beschriebenen Architekturen implementiert werden, sind jedoch nicht auf eine bestimmte Architektur beschränkt.
-
17A veranschaulicht eine Komprimierung einer Kachel gemäß einer Ausführungsform. Es ist zu beachten, dass eine Komprimierung beispielsweise stattfindet, wenn eine Datenkachel von einem Cache entfernt wird, die einen Codec aufweist, der nach (post) diesem Cache angeordnet ist. Bei 1700 wird eine Original-Wavelet-Funktion identifiziert, die verwendet wird, um eine Einzelbildpufferkomprimierung durchzuführen. Bei 1701 wird eine Wavelet-Transformation an einer Kachel des Einzelbildpuffer-Originalbilds durchgeführt. Bei 1702 wird ein bestimmter Teilsatz von Wavelet-Koeffizienten verwendet, um eine angenäherte Bildfunktion zu konstruieren. Bei 1703 werden die Residuen, die Differenzen zwischen der Originalbildfunktion und der rekonstruierten Bildfunktion umfassen, bestimmt. Bei 1704 werden die Residuen zusammen mit der angenäherten Bildfunktion, Koeffizienten und anderen zugehörigen Koeffizientendaten (d. h. den Bits, die oben für Ebene, Translationsverschiebung und Koeffizientenwert beschrieben sind) gespeichert. Wie erwähnt, können die Residuen in einer Reihe von unterschiedlichen Arten gespeichert werden (z. B. unter Verwendung der Fibonacci-Codierung).
-
17B veranschaulicht Operationen, die zur Dekomprimierung einer Kachel gemäß einer Ausführungsform durchgeführt werden. Es ist zu beachten, dass in einer Ausführungsform eine Dekomprimierung stattfindet, wenn Daten in den Cache gelesen werden. Bei 1705 wird die angenäherte Bildfunktion unter Verwendung der gespeicherten Koeffizienten und zugehöriger Daten wiedergewonnen oder erzeugt. Bei 1706 wird die Originalfunktion unter Verwendung der Residuen wiederhergestellt (z. B. durch Hinzufügen der Residuen zu der angenäherten Bildfunktion).
-
Die obigen Beispiele können spezifische Kombinationen von Merkmalen beinhalten. Jedoch sind die obigen Beispiele in dieser Hinsicht nicht beschränkt und in verschiedenen Implementierungen können die obigen Beispiele ein Durchführen nur eines Teilsatzes derartiger Merkmale, ein Durchführen einer unterschiedlichen Reihenfolge derartiger Merkmale, ein Durchführen einer unterschiedlichen Kombination derartiger Merkmale und/oder ein Durchführen zusätzlicher Merkmale als der explizit aufgeführten Merkmale beinhalten. Beispielsweise können alle in Bezug auf die beispielhaften Verfahren beschriebenen Merkmale in Bezug auf die beispielhafte Einrichtung, die beispielhaften Systeme und/oder die beispielhaften Artikel implementiert werden und umgekehrt.
-
Ausführungsformen der Erfindung können verschiedene Schritte beinhalten, die oben beschrieben sind. Die Schritte können in maschinenausführbaren Anweisungen ausgeführt sein, die verwendet werden können, um einen Allzweck- oder Sonderzweckprozessor zu veranlassen, die Schritte durchzuführen. Alternativ können die Schritte durch spezifische Hardwarekomponenten, die festverdrahtete Logik zum Durchführen der Schritte enthält, oder durch eine beliebige Kombination von programmierten Computerkomponenten und benutzerdefinierten Hardwarekomponenten durchgeführt werden.
-
Wie hierin beschrieben, können Anweisungen auf spezifische Konfigurationen von Hardware verweisen, wie beispielsweise anwendungsspezifische integrierte Schaltungen (ASICs, Application Specific Integrated Circuits), die konfiguriert sind, bestimmte Operationen durchzuführen, oder die eine vorbestimmte Funktionalität oder Softwareanweisungen in Speicher gespeichert haben, der in einem nicht-flüchtigen computerlesbaren Medium ausgeführt ist. Somit können die in den Figuren gezeigten Techniken unter Verwendung von Code und Daten, die auf einer oder mehreren elektronischen Vorrichtungen (z. B. einer Endstation, einem Netzwerkelement usw.) gespeichert und ausgeführt werden, implementiert sein. Derartige elektronische Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netzwerk) Code und Daten unter Verwendung von computer-maschinenlesbaren Medien, wie beispielsweise nicht-flüchtigen computer-maschinenlesbaren Speichermedien (z. B. magnetische Datenträger; optische Datenträger; Direktzugriffsspeicher; Nur-Lese-Speicher; Flash-Speichervorrichtungen; Phasenwechselspeicher) und flüchtigen computer-maschinenlesbaren Kommunikationsmedien (z. B. elektrische, optische, akustische oder eine andere Form von sich ausbreitenden Signalen - wie Trägerwellen, Infrarotsignalen, Digitalsignalen usw.). Zusätzlich umfassen derartige elektronische Vorrichtungen in der Regel einen Satz von einem oder mehreren Prozessoren, der oder die mit einer oder mehreren anderen Komponenten gekoppelt ist/sind, wie beispielsweise einer oder mehreren Speichervorrichtungen (nicht-flüchtige maschinenlesbare Speichermedien), Benutzereingabe-/-ausgabevorrichtungen (z. B. eine Tastatur, ein berührungsempfindlicher Bildschirm und/oder eine Anzeige), und Netzwerkverbindungen. Das Koppeln des Satzes von Prozessoren und anderer Komponenten erfolgt in der Regel über einen oder mehrere Busse und Brücken (auch als Bussteuerungen bezeichnet). Die Speichervorrichtung bzw. Signale, die den Netzwerkverkehr tragen, stellen ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien dar. Somit speichert die Speichervorrichtung einer gegebenen elektronischen Vorrichtung in der Regel Code und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren der elektronischen Vorrichtung. Selbstverständlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung unterschiedlicher Kombinationen von Software, Firmware und/oder Hardware implementiert sein. In der gesamten ausführlichen Beschreibung werden zu Zwecken der Erläuterung zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis der vorliegenden Erfindung bereitzustellen. Es ist für Fachleute auf diesem Gebiet jedoch offensichtlich, dass die Erfindung ohne einige der spezifischen Details ausgeführt werden kann. In bestimmten Fällen wurden wohlbekannte Strukturen und Funktionen nicht in ausführlichem Detail beschrieben, um den Gegenstand der vorliegenden Erfindung nicht unklar zu machen. Demgemäß sind der Umfang und der Gedanke der Erfindung anhand der folgenden Ansprüche zu beurteilen.