DE112017003348T5 - Verfahren und einrichtung zur einzelbildpufferkomprimierung - Google Patents

Verfahren und einrichtung zur einzelbildpufferkomprimierung Download PDF

Info

Publication number
DE112017003348T5
DE112017003348T5 DE112017003348.9T DE112017003348T DE112017003348T5 DE 112017003348 T5 DE112017003348 T5 DE 112017003348T5 DE 112017003348 T DE112017003348 T DE 112017003348T DE 112017003348 T5 DE112017003348 T5 DE 112017003348T5
Authority
DE
Germany
Prior art keywords
wavelet
function
coefficients
residuals
image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112017003348.9T
Other languages
English (en)
Inventor
Tomas G. Akenine-Moller
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112017003348T5 publication Critical patent/DE112017003348T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • H04N19/64Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

Eine Einrichtung und ein Verfahren zur Einzelbildpufferkomprimierung. Beispielsweise umfasst eine Ausführungsform eines Verfahrens: Identifizieren einer Wavelet-Funktion zum Komprimieren eines Einzelbildpuffer-Originalbilds; Durchführen einer Wavelet-Transformation an dem Einzelbildpuffer-Originalbild unter Verwendung der Wavelet-Funktion; Verwenden eines bestimmten Teilsatzes von Wavelet-Koeffizienten der Wavelet-Funktion zum Konstruieren einer angenäherten Bildfunktion; Bestimmen von Residuen, umfassend Differenzen zwischen dem Einzelbildpuffer-Originalbild und der angenäherten Funktion; und Speichern der Residuen für eine nachfolgende Verwendung bei einer Wiederherstellung des Einzelbildpuffer-Originalbild aus der angenäherten Bildfunktion.

Description

  • 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: f ( t ) = c 0 ϕ 0 + i d i ψ i
    Figure DE112017003348T5_0001
    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: f ' ( t ) = c 0 ϕ 0 + i d i ψ i
    Figure DE112017003348T5_0002
  • 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.

Claims (25)

  1. Verfahren, das Folgendes umfasst: Identifizieren einer Wavelet-Funktion zum Komprimieren einer Kachel eines Originalbilds; Durchführen einer Wavelet-Transformation an Pixeln in der Kachel unter Verwendung der Wavelet-Funktion; Verwenden eines bestimmten Teilsatzes von Wavelet-Koeffizienten der Wavelet-Funktion zum Konstruieren einer angenäherten Bildfunktion; Bestimmen von Residuen, umfassend Differenzen zwischen dem Originalbild und der angenäherten Bildfunktion; und Speichern der Residuen für eine nachfolgende Verwendung bei einer Wiederherstellung des Originalbilds aus der angenäherten Bildfunktion.
  2. Verfahren nach Anspruch 1, ferner umfassend: Speichern des bestimmten Teilsatzes von Wavelet-Koeffizienten und zugehöriger Koeffizientendaten, die zum Konstruieren der angenäherten Bildfunktion verwendet werden; und Kombinieren von dem bestimmten Teilsatz von Wavelet-Koeffizienten, zugehörigen Koeffizientendaten und Residuen zum Wiederherstellen der Pixel in einer Kachel.
  3. Verfahren nach Anspruch 2, wobei die zugehörigen Koeffizientendaten Bits umfassen, die eine Ebene und Translationsverschiebung der Koeffizienten identifizieren.
  4. Verfahren nach Anspruch 1, 2 oder 3, wobei die Operation des Verwendens eines bestimmten Teilsatzes von Wavelet-Koeffizienten zum Konstruieren einer angenäherten Bildfunktion Durchführen einer Wavelet-Umkehrtransformation umfasst.
  5. Verfahren nach Anspruch 4, wobei die Wavelet-Umkehrtransformation unter Verwendung eines bestimmten Satzes der Koeffizienten mit der höchsten Frequenz durchgeführt wird.
  6. Verfahren nach Anspruch 2 oder 4, wobei das Wiederherstellen des Originalbilds Erzeugen einer verlustfreien Kopie des Originalbilds unter Verwendung der Residuen umfasst.
  7. Verfahren nach Anspruch 1, 4 oder 5, wobei die Wavelet-Funktion eine orthonormale Basisfunktion umfasst.
  8. Verfahren nach Anspruch 1 oder 7, wobei die Wavelet-Funktion Daubechies-9/7-Wavelets oder kubische Wavelet-Polynome umfasst.
  9. Verfahren nach Anspruch 1 oder 8, wobei die Residuen unter Verwendung von Golomb-Rice-Codierung, Fibonnaci-Codierung oder als Differenzen zwischen einem Bereich von -2n und 2n -1 codiert werden, wobei n derart ausgewählt ist, dass alle Residuen in diesen Bereich passen.
  10. Verfahren nach Anspruch 1 oder 9, wobei die Wavelet-Funktion eine eindimensionale (1D) Wavelet-Funktion umfasst.
  11. Gerät, das Folgendes umfasst: einen Puffer zum Speichern eines Originalbilds; eine Grafikverarbeitungseinheit (GPU, Graphics Processing Unit) umfassend eine Komprimierungs-/Dekomprimierungs-Schaltung zum Durchführen der folgenden Operationen: Durchführen einer Wavelet-Transformation an dem Originalbild unter Verwendung der Wavelet-Funktion; Verwenden eines bestimmten Teilsatzes von Wavelet-Koeffizienten der Wavelet-Funktion zum Konstruieren einer angenäherten Bildfunktion; Bestimmen von Residuen, umfassend Differenzen zwischen dem Originalbild und der angenäherten Bildfunktion; und Speichern der Residuen für eine nachfolgende Verwendung bei einer Wiederherstellung des Originalbilds aus der angenäherten Bildfunktion.
  12. Einrichtung nach Anspruch 11, wobei die Einzelbildpuffer-Komprimierungs-/Dekomprimierungs-Logik zum Durchführen der folgenden zusätzlichen Operationen ausgelegt ist: Speichern des bestimmten Teilsatzes von Wavelet-Koeffizienten und zugehöriger Koeffizientendaten, die zum Konstruieren der angenäherten Bildfunktion verwendet werden; und Kombinieren von dem bestimmten Teilsatz von Wavelet-Koeffizienten, zugehörigen Koeffizientendaten und Residuen zum Wiederherstellen des Originalbilds.
  13. Einrichtung nach Anspruch 12, wobei die zugehörigen Koeffizientendaten Bits umfassen, die eine Ebene und Translationsverschiebung der Koeffizienten identifizieren.
  14. Einrichtung nach Anspruch 11, 12 oder 13, wobei die Operation des Verwendens eines bestimmten Teilsatzes von Wavelet-Koeffizienten zum Konstruieren einer angenäherten Bildfunktion Durchführen einer Wavelet-Umkehrtransformation umfasst.
  15. Einrichtung nach Anspruch 14, wobei die Wavelet-Umkehrtransformation unter Verwendung eines bestimmten Satzes der Koeffizienten mit der höchsten Frequenz durchgeführt wird.
  16. Einrichtung nach Anspruch 12 oder 14, wobei das Wiederherstellen des Einzelbildpuffer-Originalbilds Erzeugen einer verlustfreien Kopie des Einzelbildpuffer-Originalbilds unter Verwendung der Residuen umfasst.
  17. Einrichtung nach Anspruch 11, 14 oder 15, wobei die Wavelet-Funktion eine orthonormale Basisfunktion umfasst.
  18. Einrichtung nach Anspruch 11 oder 17, wobei die Wavelet-Funktion Daubechies-9/7-Wavelets oder kubische Wavelet-Polynome umfasst.
  19. Einrichtung nach Anspruch 11 oder 18, wobei die Residuen unter Verwendung von Golomb-Rice-Codierung, Fibonnaci-Codierung oder als Differenzen zwischen einem Bereich von -2n und 2n -1 codiert werden, wobei n derart ausgewählt ist, dass alle Residuen in diesen Bereich passen.
  20. Einrichtung nach Anspruch 11 oder 19, wobei die Wavelet-Funktion eine eindimensionale (1D) Wavelet-Funktion umfasst.
  21. Gerät, das Folgendes umfasst: Mittel zum Durchführen einer Wavelet-Transformation an dem Originalbild unter Verwendung einer Wavelet-Funktion; Mittel zum Verwenden eines bestimmten Teilsatzes von Wavelet-Koeffizienten der Wavelet-Funktion zum Konstruieren einer angenäherten Bildfunktion; Mittel zum Bestimmen von Residuen, umfassend Differenzen zwischen dem Originalbild und der angenäherten Funktion; und Mittel zum Speichern der Residuen für eine nachfolgende Verwendung bei einer Wiederherstellung des Originalbilds aus der angenäherten Bildfunktion.
  22. Einrichtung nach Anspruch 21, ferner umfassend: Mittel zum Speichern des bestimmten Teilsatzes von Wavelet-Koeffizienten und zugehöriger Koeffizientendaten, die zum Konstruieren einer angenäherten Bildfunktion verwendet werden; und Mittel zum Kombinieren von dem bestimmten Teilsatz von Wavelet-Koeffizienten, zugehörigen Koeffizientendaten und Residuen zum Wiederherstellen des Originalbilds.
  23. Einrichtung nach Anspruch 22, wobei die zugehörigen Koeffizientendaten Bits umfassen, die eine Ebene und Translationsverschiebung der Koeffizienten identifizieren.
  24. Einrichtung nach Anspruch 21, 22 oder 23, wobei die Operation des Verwendens eines bestimmten Teilsatzes von Wavelet-Koeffizienten zum Konstruieren einer angenäherten Bildfunktion Durchführen einer Wavelet-Umkehrtransformation umfasst.
  25. Einrichtung nach Anspruch 24, wobei die Wavelet-Umkehrtransformation unter Verwendung eines bestimmten Satzes der Koeffizienten mit der höchsten Frequenz durchgeführt wird.
DE112017003348.9T 2016-07-01 2017-06-15 Verfahren und einrichtung zur einzelbildpufferkomprimierung Pending DE112017003348T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/200,934 US10387991B2 (en) 2016-07-01 2016-07-01 Method and apparatus for frame buffer compression
US15/200,934 2016-07-01
PCT/US2017/037649 WO2018005110A1 (en) 2016-07-01 2017-06-15 Method and apparatus for frame buffer compression

Publications (1)

Publication Number Publication Date
DE112017003348T5 true DE112017003348T5 (de) 2019-03-14

Family

ID=60787164

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112017003348.9T Pending DE112017003348T5 (de) 2016-07-01 2017-06-15 Verfahren und einrichtung zur einzelbildpufferkomprimierung

Country Status (4)

Country Link
US (1) US10387991B2 (de)
CN (1) CN109219832B (de)
DE (1) DE112017003348T5 (de)
WO (1) WO2018005110A1 (de)

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5045852A (en) 1990-03-30 1991-09-03 International Business Machines Corporation Dynamic model selection during data compression
US6229927B1 (en) * 1994-09-21 2001-05-08 Ricoh Company, Ltd. Reversible embedded wavelet system implementation
US5659631A (en) 1995-02-21 1997-08-19 Ricoh Company, Ltd. Data compression for indexed color image data
US5682152A (en) 1996-03-19 1997-10-28 Johnson-Grace Company Data compression using adaptive bit allocation and hybrid lossless entropy encoding
US6078619A (en) 1996-09-12 2000-06-20 University Of Bath Object-oriented video system
US5748904A (en) 1996-09-13 1998-05-05 Silicon Integrated Systems Corp. Method and system for segment encoded graphic data compression
US6031548A (en) * 1997-06-13 2000-02-29 International Business Machines Corporation Progressive multi-level transmission and display of triangular meshes
US6204859B1 (en) 1997-10-15 2001-03-20 Digital Equipment Corporation Method and apparatus for compositing colors of images with memory constraints for storing pixel data
WO1999022519A2 (en) 1997-10-28 1999-05-06 Koninklijke Philips Electronics N.V. Compressing and decompressing an image
US6154493A (en) * 1998-05-21 2000-11-28 Intel Corporation Compression of color images based on a 2-dimensional discrete wavelet transform yielding a perceptually lossless image
US6640015B1 (en) * 1998-06-05 2003-10-28 Interuniversitair Micro-Elektronica Centrum (Imec Vzw) Method and system for multi-level iterative filtering of multi-dimensional data structures
US6188394B1 (en) 1998-08-28 2001-02-13 Ati Technologies, Inc. Method and apparatus for video graphics antialiasing
US6215907B1 (en) * 1998-06-26 2001-04-10 Fisher-Rosemont Systems, Inc. Recursive on-line wavelet data compression technique for use in data storage and communications
GB2349460B (en) 1999-04-29 2002-11-27 Mitsubishi Electric Inf Tech Method of representing colour images
US6535633B1 (en) 1999-09-24 2003-03-18 Bank One Method and apparatus for re-classifying color image pixels classified by single channel segmentation
US6377702B1 (en) 1999-12-08 2002-04-23 Sony Corporation Color cast detection and removal in digital images
US6813387B1 (en) * 2000-02-29 2004-11-02 Ricoh Co., Ltd. Tile boundary artifact removal for arbitrary wavelet filters
JP2001298652A (ja) 2000-04-17 2001-10-26 Sony Corp 画像圧縮方法及び画像圧縮装置、並びにソフトウェア記憶媒体
US6633297B2 (en) 2000-08-18 2003-10-14 Hewlett-Packard Development Company, L.P. System and method for producing an antialiased image using a merge buffer
US6630933B1 (en) 2000-09-01 2003-10-07 Ati Technologies Inc. Method and apparatus for compression and decompression of Z data
US6825847B1 (en) 2001-11-30 2004-11-30 Nvidia Corporation System and method for real-time compression of pixel colors
JP2003235042A (ja) * 2002-02-12 2003-08-22 Sony Corp 画像符号化装置及びその符号化方法
US7120305B2 (en) * 2002-04-16 2006-10-10 Ricoh, Co., Ltd. Adaptive nonlinear image enlargement using wavelet transform coefficients
JP2004104650A (ja) * 2002-09-12 2004-04-02 Ricoh Co Ltd 画像処理装置、画像読取装置、画像形成装置、画像処理用プログラム及び記憶媒体
US7764833B2 (en) 2003-02-13 2010-07-27 Ati Technologies Ulc Method and apparatus for anti-aliasing using floating point subpixel color values and compression of same
US8111928B2 (en) 2003-02-13 2012-02-07 Ati Technologies Ulc Method and apparatus for compression of multi-sampled anti-aliasing color data
US20050129121A1 (en) * 2003-12-01 2005-06-16 Chih-Ta Star Sung On-chip image buffer compression method and apparatus for digital image compression
US7355603B2 (en) 2004-08-04 2008-04-08 Nvidia Corporation Filtering unit for floating-point texture data
JP2008510357A (ja) 2004-08-13 2008-04-03 インダストリー・アカデミック・コーオペレーション・ファウンデーション・キョンヒ・ユニヴァーシティ 画像のエンコーディング方法、エンコーディング装置、画像のデコーディング方法及びデコーディング装置
US7564462B2 (en) * 2004-08-31 2009-07-21 Teranex Systems, Inc. Method and apparatus for reading and writing pixel-aligned subframes in a frame buffer
US7126615B2 (en) 2004-11-12 2006-10-24 Via Technologies, Inc. Color compression using multiple planes in a multi-sample anti-aliasing scheme
US8031937B2 (en) * 2007-04-04 2011-10-04 Telefonaktiebolaget Lm Ericsson (Publ) Frame buffer compression and decompression method for graphics rendering
JP4356033B2 (ja) * 2007-05-17 2009-11-04 ソニー株式会社 画像データ処理装置および方法
JP4952657B2 (ja) 2007-07-19 2012-06-13 株式会社Jvcケンウッド 擬似立体画像生成装置、画像符号化装置、画像符号化方法、画像伝送方法、画像復号化装置及び画像復号化方法
US8559499B2 (en) * 2007-10-26 2013-10-15 Zoran (France) S.A. Frame buffer compression for video processing devices
JP2011508497A (ja) * 2007-12-21 2011-03-10 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 画像データの効率的な伝送の方法及び装置
US8165204B2 (en) 2008-02-29 2012-04-24 Michael Bronstein Resource allocation for frame-based controller
US20110047476A1 (en) * 2008-03-24 2011-02-24 Hochmuth Roland M Image-based remote access system
JP5520286B2 (ja) 2008-04-04 2014-06-11 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド アンチエイリアシングのためのフィルタ処理方法及び装置
EP2192780A1 (de) * 2008-11-28 2010-06-02 Thomson Licensing Verfahren zur von einer Grafikverarbeitungseinheit unterstützten Videoentschlüsselung
US9124874B2 (en) 2009-06-05 2015-09-01 Qualcomm Incorporated Encoding of three-dimensional conversion information with two-dimensional video sequence
US9405731B2 (en) * 2009-08-26 2016-08-02 Hewlett Packard Enterprise Development Lp Energy-based wavelet thresholding
US9406149B2 (en) 2009-10-07 2016-08-02 Nvidia Corporation Selecting and representing multiple compression methods
RU2434288C1 (ru) 2010-06-08 2011-11-20 Закрытое Акционерное Общество "Импульс" Способ коррекции цифровых изображений
GB201122022D0 (en) 2011-12-20 2012-02-01 Imagination Tech Ltd Method and apparatus for compressing and decompressing data
US9364160B2 (en) * 2012-03-28 2016-06-14 Qualcomm Incorporated Systems and methods for ECG monitoring
KR101697634B1 (ko) * 2012-05-14 2017-02-01 고쿠리츠켄큐카이하츠호진 카가쿠기쥬츠신코키코 화상 처리 장치, 화상 처리 방법, 프로그램, 인쇄 매체, 및 기록 매체
US9466090B2 (en) 2013-06-20 2016-10-11 Intel Corporation Subset based compression and decompression of graphics data
US9305368B2 (en) 2013-06-21 2016-04-05 Intel Corporation Compression and decompression of graphics data using pixel region bit values

Also Published As

Publication number Publication date
CN109219832B (zh) 2024-03-01
WO2018005110A1 (en) 2018-01-04
CN109219832A (zh) 2019-01-15
US10387991B2 (en) 2019-08-20
US20180005348A1 (en) 2018-01-04

Similar Documents

Publication Publication Date Title
DE112020001256T5 (de) Kompressionstechniken
DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
DE102021121187A1 (de) EINRICHTUNG UND VERFAHREN ZUR EFFIZIENTEN GRAFIKVERARBEITUNG EINSCHLIEßLICH STRAHLVERFOLGUNG
DE112017004246T5 (de) Cache- und komprimierungsinteroperabilität in einer grafikprozessorpipeline
DE102018110687A1 (de) Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102018119225A1 (de) System und Verfahren für einen optimierten Winograd-Faltungsbeschleuniger
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE112017001703T5 (de) Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE112014002477T5 (de) Vorrichtung und Verfahren für eine effiziente Grafikverarbeitung in einer virtuellen Ausführungsumgebung
DE112017004671T5 (de) Vorrichtung und Verfahren für optimiertes Raytracing
DE112017001845T5 (de) Strahltraversierung mit reduzierter Genauigkeit mit Wiederverwendung von Ebenen
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE112017003932T5 (de) Mechanismus zum Beschleunigen von Grafikarbeitslasten in einer Mehrkern-Datenverarbeitungsarchitektur
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE112017000864T5 (de) Strahlenkomprimierung für effizientes Verarbeiten von Grafikdaten bei Rechenvorrichtungen
DE102018110346A1 (de) Speichersystem für dnn-ausgaben für die black box
DE112017004077T5 (de) Einrichtung und verfahren für optimiertes kachelbasiertes rendering
DE112020000848T5 (de) Skalarkernintegration
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE102019117545A1 (de) Reduzierung von registerbankkonflikten für ausführungseinheiten eines multithread-prozessors
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit

Legal Events

Date Code Title Description
R012 Request for examination validly filed