DE102013017639B4 - Caching of adaptively sized cache tiles in a unified L2 cache with surface compression - Google Patents

Caching of adaptively sized cache tiles in a unified L2 cache with surface compression Download PDF

Info

Publication number
DE102013017639B4
DE102013017639B4 DE102013017639.5A DE102013017639A DE102013017639B4 DE 102013017639 B4 DE102013017639 B4 DE 102013017639B4 DE 102013017639 A DE102013017639 A DE 102013017639A DE 102013017639 B4 DE102013017639 B4 DE 102013017639B4
Authority
DE
Germany
Prior art keywords
cache
rendering
tile
size
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102013017639.5A
Other languages
German (de)
Other versions
DE102013017639A1 (en
Inventor
Ziyad S. Hakura
Rouslan Dimitrov
Emmett M. Kilgariff
Andrei Khodakovsky
Cynthia Ann Edgeworth Allison
Pierre SOUILLOT
Walter R. Steiner
Karim M. Abdalla
Rui M. Bastos
Jerome F. Duluk jr.
Robert OHANNESSIAN
Jeffrey A. Bolz
Amanpreet GREWAL
Joseph Cavanaugh
Dale L. Kirkland
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102013017639A1 publication Critical patent/DE102013017639A1/en
Application granted granted Critical
Publication of DE102013017639B4 publication Critical patent/DE102013017639B4/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/121Frame memory handling using a cache memory
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

Ein Verfahren zur adaptiven Dimensionierung von Cache-Kacheln in einem Grafiksystem, wobei das Verfahren umfasst:Festlegen einer Cache-Kachelgröße, die zu einer ersten Cache-Kachel gehört, auf eine erste Größe; basierend auf einer ersten Bilderzeugungskonfiguration, die mehrere erste Bilderzeugungsziele umfasst, wobei die erste Cache-Kachel eine Bildschirmraum-Kachel ist und in mehrere Rasterkacheln unterteilt ist, wobei die Größe von jeder Rasterkachel auf der Cache-Kachelgröße basiert,Erkennen eines Wechsels von einer ersten Bilderzeugungszielkonfiguration, zu einer zweiten Bilderzeugungszielkonfiguration, die mehrere zweite Bilderzeugungsziele umfasst; undFestlegen der Cache-Kachelgröße auf eine zweite Größe mit den Schritten:Berechnen des Cache-Speicherplatzes, der durch die Cache-Kachel eingenommen wird,Berechnen einer ersten Anzahl von Bytes pro Pixel für die zweite Bilderzeugungszielkonfiguration,Anwenden eines Oberflächen Komprimierungsfaktors auf die erste Anzahl von Bytes zur Berechnung einer zweiten Anzahl von Bytes, die pro komprimierten Pixel eingenommen wird;Festlegen der zweiten Größe der Cache-Kachelgröße anhand der zweiten Anzahl von Bytes.A method for adaptively sizing cache tiles in a graphics system, the method comprising:setting a cache tile size associated with a first cache tile to a first size; based on a first rendering configuration that includes a plurality of first rendering targets, the first cache tile being a screen space tile and divided into a plurality of raster tiles, the size of each raster tile being based on the cache tile size,detecting a change from a first rendering target configuration , to a second rendering target configuration comprising a plurality of second rendering targets; andsetting the cache tile size to a second size, comprising the steps of:calculating the cache space occupied by the cache tile,calculating a first number of bytes per pixel for the second rendering target configuration,applying a surface compression factor to the first number of bytes to calculate a second number of bytes consumed per compressed pixel;determining the second size of the cache tile size based on the second number of bytes.

Description

QUERVERWEIS AUF VERWANDTE ANMELDUNGENCROSS REFERENCE TO RELATED APPLICATIONS

Diese Anmeldung beansprucht die Priorität der vorläufigen Patentanmeldung der vereinigten Staaten mit der Seriennummer 61/719 271, die am 26. Oktober 2012 eingereicht wurde mit dem Titel „Ein Ansatz für Kachel-Zwischenspeicherung“. Der Gegenstand dieser verwandten Anmeldung ist hiermit durch Bezugnahme mit eingeschlossen.This application claims priority to United States Provisional Patent Application Serial No. 61/719,271 filed October 26, 2012, entitled "An Approach to Tile Caching." The subject matter of this related application is hereby incorporated by reference.

HINTERGRUND DER ERFINDUNGBACKGROUND OF THE INVENTION

Gebiet der Erfindungfield of invention

Ausführungsformen der vorliegenden Erfindung betreffen allgemein die grafische Verarbeitung und insbesondere eine Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher bzw. in einem Einheits-L2-Cache-Speicher mit Oberflächenkomprimierung.Embodiments of the present invention relate generally to graphics processing and more particularly to caching of adaptively sized cache tiles in a unified L2 cache.

Beschreibung des Stands der TechnikDescription of the prior art

In einigen grafischen Subsystemen wird zur Erzeugung von grafischen Bildern eine Kachel-Architektur realisiert, wobei ein oder mehrere Bilderzeugungsziele, etwa ein Blockpuffer, in Bildschirm-Raum-Unterteilungen, die als Kacheln bezeichnet werden, unterteilt werden. In einer derartigen Kachel-Architektur ordnet das Graphiksubsystem Arbeit derart um, dass die mit einer speziellen Kachel verknüpfte Arbeit in einem chipinternen Cache-Speicher für längere Zeit verbleibt, als dies mit einer Architektur der Fall wäre, die Arbeit nicht auf diese Weise umordnet. Diese Umordnung hilft dabei, die Speicherbandbreite im Vergleich zu einer Nicht-Kachel-Architektur zu verbessern.In some graphics subsystems, a tiling architecture is implemented for rendering graphics images, wherein one or more rendering targets, such as a block buffer, are divided into screen-space subdivisions called tiles. In such a tile architecture, the graphics subsystem reorders work such that the work associated with a particular tile resides in an on-chip cache for a longer time than would be the case with an architecture that does not reorder work in this manner. This rearrangement helps improve memory bandwidth compared to a non-tile architecture.

Typischerweise ändert sich die Gruppe aus Bilderzeugungszielen im Laufe der Zeit, wenn die Erzeugung des Bildes voranschreitet. Beispielsweise könnte in einem ersten Durchlauf eine erste Konfiguration von Bilderzeugungszielen angewendet werden, um das Bild teilweise zu erzeugen. In einem zweiten Durchlauf könnte eine zweite Konfiguration von Bilderzeugungszielen verwendet werden, um das Bild zu erzeugen. In einem dritten Durchlauf könnte eine dritte Gruppe an Bilderzeugungszielen verwendet werden, um letztlich die Erzeugung des Bildes zu beenden. Während des Bilderzeugungsvorgangs könnte das Computer-Graphiksubsystem bis zu 50 oder mehr unterschiedliche Konfigurationen für Bilderzeugungsziele verwenden, um das endgültige Bild zu erzeugen. Jede unterschiedliche Konfiguration von Bilderzeugungszielen verbraucht eine unterschiedliche Menge an Speicher. Um die Wahrscheinlichkeit zu erhöhen, dass Arbeit in dem chipinternen Cache-Speicher verbleibt, werden typischerweise Kacheln so dimensioniert, dass sie die komplexeste Konfiguration von Bilderzeugungszielen, die während der Bilderzeugung verwendet werden, aufnehmen. Als Folge davon sind die Kacheln so dimensioniert, dass alle diversen Konfigurationen der Bilderzeugungsziele, die während der Erzeugung des endgültigen Bildes verwendet werden, umfasst werden - von der komplexesten bis zu der wenigsten komplexesten Konfiguration für Bilderzeugungsziele.Typically, the set of imaging targets will change over time as the imaging progresses. For example, in a first pass, a first configuration of imaging targets could be applied to partially render the image. In a second pass, a second configuration of imaging targets could be used to create the image. In a third pass, a third set of rendering targets could be used to ultimately finish rendering the image. During the rendering process, the computer graphics subsystem could use up to 50 or more different rendering target configurations to generate the final image. Each different configuration of rendering targets consumes a different amount of memory. To increase the likelihood of work remaining in the on-chip cache, tiles are typically sized to accommodate the most complex configuration of rendering targets used during rendering. As a result, the tiles are sized to accommodate all of the various rendering target configurations used during generation of the final image - from the most complex to the least complex rendering target configuration.

Ein Nachteil der obigen Vorgehensweise besteht darin, dass Kacheln für weniger komplexe Konfigurationen von Bilderzeugungszielen ineffizient dimensioniert sind. Unter anderem benötigen weniger komplexe Konfigurationen von Bilderzeugungszielen die kleinere Kachelgröße, die für komplexere Konfigurationen von Bilderzeugungszielen erforderlich ist, so dass Arbeit in dem Cache-Speicher während des Bilderzeugungsvorgangs verfügbar bleibt. Bei einer kleineren Kachelgröße werden mehr Kacheln benötigt, um den vollständigen Bildschirm-Raum abzudecken, im Vergleich zu einer größeren Kachelgröße, bei der weniger Kacheln erforderlich sind, um den gleichen Bildschirm-Raum abzudecken. Die geringere Kachelgröße führt zu einem erhöhten Rechenaufwand, da Rechenanforderungen anwachsen, wenn die Anzahl an Kacheln zunimmt. Als Folge davon wird Rechenleistung für weniger komplexe Konfigurationen von Bilderzeugungszielen verschwendet. Wittenbrink C.M. et al geben in „Fermi GF100 GPU architecture“ Micro, IEEE, 2011, Vol 31(2). 50-59 einen Überblick über die Fermi GPU Architektur. Liktor G. et al beschreiben in „Decoupled deferred shading for hardware rasterization“, Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games, ACM, 2012, S. 143-150, ein Verfahren zur Erzeugung einer Geometrie, bei dem Schattierungen unabhängig von der Sichtbarkeit gespeichert werden. Hsiao, C.C: et al zeigt in „A hierarchical primitive lists structure for tile-based rendering“, Computational Science and Engineering, 2009, CSE'09, International Conference on IEEE, 2009, S 408-413 eine kachelbasierte Bilderzeugung welche eine hierarchische Liste von Grundelementen verwendet.A disadvantage of the above approach is that tiles are inefficiently sized for less complex configurations of rendering targets. Among other things, less complex rendering target configurations require the smaller tile size required for more complex rendering target configurations so that work remains available in the cache during the rendering process. A smaller tile size requires more tiles to cover full screen space compared to a larger tile size, which requires fewer tiles to cover the same screen space. The smaller tile size results in increased computational overhead, as computational requirements increase as the number of tiles increases. As a result, computational power is wasted on less complex configurations of imaging targets. Wittenbrink C.M. et al give in "Fermi GF100 GPU architecture" Micro, IEEE, 2011, Vol 31(2). 50-59 an overview of the Fermi GPU architecture. In "Decoupled deferred shading for hardware rasterization", Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games, ACM, 2012, pp. 143-150, Liktor G. et al describe a method for generating a geometry in which shading is independent be saved from visibility. Hsiao, C.C: et al in "A hierarchical primitive lists structure for tile-based rendering", Computational Science and Engineering, 2009, CSE'09, International Conference on IEEE, 2009, S 408-413 shows a tile-based rendering which a hierarchical list used by basic elements.

Wie das Vorhergehende zeigt, ist das, was im Stand der Technik benötigt wird, eine Technik zur effizienteren Nutzung eines Cache-Speichers in einem Graphiksubsystem, das eine Kachel-Architektur verwendet, bei dem Cache Kacheln einfach in ihrer Größe angepasst werden können.As the foregoing indicates, what is needed in the art is a technique for more efficient use of cache memory in a graphics subsystem employing a tile architecture in which cache tiles can be easily resized.

ÜBERBLICK ÜBER DIE ERFINDUNGOVERVIEW OF THE INVENTION

Eine Ausführungsform der vorliegenden Erfindung gibt ein Verfahren zum adaptiven Dimensionieren von Cache- Kacheln in einem Grafiksystem gemäß Anspruch 1 an. Das Verfahren umfasst unter anderem das Festlegen einer mit einer ersten Cache-Kachel verknüpften Cache-Kachelgröße auf eine erste Größe. Das Verfahren umfasst ferner das Erkennen eines Wechsels von einer ersten Bilderzeugungszielkonfiguration, die eine Gruppe aus Bilderzeugungszielen enthält, in eine zweite Bilderzeugungszielkonfiguration, die eine zweite Gruppe aus Bilderzeugungszielen enthält. Das Verfahren umfasst ferner Festlegen der Cache-Kachelgröße auf eine zweite Größe auf der Grundlage der zweiten Bilderzeugungszielkonfiguration.An embodiment of the present invention provides a method for adaptive dimming sioning of cache tiles in a graphics system according to claim 1. The method includes, among other things, setting a cache tile size associated with a first cache tile to a first size. The method further includes detecting a change from a first rendering target configuration that includes a set of rendering targets to a second rendering target configuration that includes a second set of rendering targets. The method further includes setting the cache tile size to a second size based on the second rendering target configuration.

Ein Vorteil der offenbarten Vorgehensweise besteht darin, dass die Cache-Kachelgröße adaptiv dimensioniert wird auf der Grundlage einer Bilderzeugungszielkonfiguration und einer Cache-Konfiguration. Es werden kleinere Cache-Kachelgrößen für komplexere Bilderzeugungszielkonfigurationen verwendet, während größere Cache-Kachelgrößen für weniger komplexere Bilderzeugungszielkonfigurationen verwendet werden. Durch adaptives Dimensionieren der Cache-Kacheln auf der Grundlage der Bilderzeugungszielkonfiguration wird weniger Rechenleistung benötigt, um die Cache-Kacheln zu verarbeiten, woraus sich eine effizientere Prozessorausnutzung und geringere Leistungsanforderungen ergeben.An advantage of the disclosed approach is that the cache tile size is adaptively sized based on a rendering target configuration and a cache configuration. Smaller cache tile sizes are used for more complex rendering target configurations, while larger cache tile sizes are used for less complex rendering target configurations. By adaptively sizing the cache tiles based on the rendering target configuration, less computing power is required to process the cache tiles, resulting in more efficient processor utilization and lower performance requirements.

Figurenlistecharacter list

Um die Art und Weise, in der die oben genannten Merkmale der vorliegenden Erfindung im Detail zu verstehen sind, anzugeben, wird eine detailliertere Beschreibung der Erfindung, die zuvor kurz zusammengefasst ist, angegeben mit Bezug zu Ausführungsformen, von denen einige in den angefügten Zeichnungen dargestellt sind. Es sollte jedoch beachtet werden, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und daher nicht als einschränkend für ihren Schutzbereich zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulässt.

  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren;
  • 2 ist eine Blockansicht einer Parallelverarbeitungseinheit, die in dem Parallelverarbeitungssubsystem aus 1 gemäß einer Ausführungsform der vorliegenden Erfindung enthalten ist;
  • 3A ist eine Blockansicht eines allgemeinen Verarbeitungs-Clusters, der in der Parallelverarbeitungseinheit aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung enthalten ist;
  • 3B ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline, die in der Parallelverarbeitungseinheit aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung realisiert werden kann;
  • 4 ist eine Konzeptansicht einer Cache-Kachel, für die die Grafikverarbeitungs-Pipeline aus 3B ausgebildet ist, diese zu erzeugen und zu verarbeiten gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5 zeigt eine Gruppe aus Bilderzeugungszielen, wie sie in einem oder mehreren der DRAMs aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung gespeichert sind;
  • 6 zeigt eine Reihe von Bilderzeugungszielkonfigurationen, die mit der Bilderzeugung eines Computergrafikbildes gemäß einer Ausführungsform der vorliegenden Erfindung verknüpft ist; und
  • 7 gibt ein Flussdiagramm von Verfahrensschritten an, um Cache-Kacheln gemäß einer Ausführungsform der vorliegenden Erfindung adaptiv zu dimensionieren.
In order to indicate the manner in which the above features of the present invention are to be understood in detail, a more detailed description of the invention, briefly summarized above, is given with reference to embodiments, some of which are illustrated in the accompanying drawings are. However, it should be noted that the attached drawings represent only typical embodiments of this invention and therefore should not be considered as limiting the scope thereof, since the invention admits of other equally effective embodiments.
  • 1 Figure 12 is a block diagram illustrating a computer system configured to implement one or more aspects of the present invention;
  • 2 Fig. 12 is a block diagram of a parallel processing unit included in the parallel processing subsystem 1 according to an embodiment of the present invention;
  • 3A Figure 12 is a block diagram of a general processing cluster implemented in the parallel processing unit 2 according to an embodiment of the present invention;
  • 3B Fig. 12 is a conceptual view of a graphics processing pipeline executed in the parallel processing unit 2 can be implemented according to an embodiment of the present invention;
  • 4 Figure 12 is a conceptual view of a cache tile for which the graphics processing pipeline is drawn 3B configured to generate and process them in accordance with an embodiment of the present invention;
  • 5 Figure 12 shows a set of imaging targets as defined in one or more of the DRAMs 2 stored in accordance with an embodiment of the present invention;
  • 6 Figure 12 shows a series of rendering target configurations associated with rendering a computer graphics image in accordance with an embodiment of the present invention; and
  • 7 Figure 12 provides a flowchart of method steps to adaptively size cache tiles in accordance with an embodiment of the present invention.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

In der folgenden Beschreibung sind diverse spezielle Details angegeben, um ein gründlicheres Verständnis der vorliegenden Erfindung bereitzustellen. Jedoch erkennt der Fachmann auf diesem Gebiet, dass die vorliegende Erfindung ohne ein oder mehrere dieser speziellen Details praktiziert werden kann.In the following description, various specific details are set forth in order to provide a more thorough understanding of the present invention. However, those skilled in the art will recognize that the present invention may be practiced without one or more of these specific details.

Systemüberblicksystem overview

1 ist eine Blockansicht, die ein Computersystem 100 zeigt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren. Wie gezeigt, umfasst das Computersystem 100, ohne Einschränkung, eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über eine Speicherbrücke 105 und einen Kommunikationspfad 113 mit einem Parallelverarbeitungssubsystem 112 verbunden sind. Die Speicherbrücke 105 ist ferner mit einer I/O-(Eingangs/Ausgangs-) Brücke 107 über einen Kommunikationspfad 106 verbunden, und die I/O-Brücke 107 ist wiederum mit einem Schalter 116 verbunden. 1 1 is a block diagram showing a computer system 100 configured to implement one or more aspects of the present invention. As shown, the computer system 100 includes, without limitation, a central processing unit (CPU) 102 and a system memory 104 coupled to a parallel processing subsystem 112 via a memory bridge 105 and a communications path 113 . The memory bridge 105 is further connected to an I/O (input/output) bridge 107 via a communication path 106 and the I/O bridge 107 is in turn connected to a switch 116 .

Im Betrieb ist die I/O-Brücke 107 ausgebildet, Anwendereingabeinformation aus Eingabegeräten 108, etwa einer Tastatur oder einer Maus, zu erhalten und die Eingabeinformation an die CPU 102 zur Verarbeitung über den Kommunikationspfad 106 und die Speicherbrücke 105 weiterzuleiten. Der Schalter 116 ist ausgebildet, Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten des Computersystems 100, etwa einem Netzwerkadapter 118 und diversen Zusatzkarten 120 und 121 herzustellen.In operation, I/O bridge 107 is configured to receive user input information from input devices 108, such as a keyboard or mouse, and to pass the input information to CPU 102 via communication path 106 and memory bridge 105 for processing. Switch 116 is designed to provide connections between I/O bridge 107 and other components of the computer systems 100, such as a network adapter 118 and various add-on cards 120 and 121.

Wie ferner gezeigt ist, ist die I/O-Brücke 107 mit einer Systemdiskette 114 verbunden, die ausgebildet sein kann, Inhalt und Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112 zu speichern. Allgemein stellt die Systemdiskette 114 nicht-flüchtigen Speicherplatz für Anwendungen und Daten zur Verfügung und kann fest installierte oder entfernbare Festplattenlaufwerke, Fleisch-Speichereinrichtungen und CD-(Kompaktdisketten-Nur-Lese-Speicher), DVD-(digitale Vielseitigkeitsdisketten-ROM), Blu-ray, HD-DVD (hochauflösende DVD) oder andere magnetische, optische oder elektronische Speichereinrichtungen umfassen. Schließlich können, obwohl dies nicht explizit gezeigt ist, andere Komponenten, etwa ein universeller serieller Bus oder andere Portverbindungen, Kompaktdisketten-Laufwerke, digitale Vielseitigkeitsdisketten-Laufwerke, Filmaufzeichnungsgeräte und dergleichen mit der I/O-Brücke 107 ebenfalls verbunden sein.As further shown, I/O bridge 107 is connected to a system disk 114, which may be configured to store content and applications and data for use by CPU 102 and parallel processing subsystem 112. In general, the system disk 114 provides non-volatile storage space for applications and data and may include fixed or removable hard drives, hard drives, and CD (Compact Disk Read Only Memory), DVD (Digital Versatility Disk ROM), Blu- ray, HD-DVD (high definition DVD) or other magnetic, optical or electronic storage devices. Finally, although not explicitly shown, other components such as a universal serial bus or other port connections, compact disk drives, digital versatile disk drives, movie recorders, and the like may be connected to I/O bridge 107 as well.

In diversen Ausführungsformen kann die Speicherbrücke 105 ein Nordbrücken-Chip sein, und die I/O-Brücke 107 kann ein Südbrücken-Chip sein. Des weiteren können die Kommunikationspfade 106 und 113 sowie andere Kommunikationspfade innerhalb des Computersystems 100 unter Verwendung beliebiger technisch geeigneter Protokolle realisiert werden, wozu, ohne Einschränkung, gehören: AGP (beschleunigter Graphikport), HyperTransport oder andere Bus-oder Punkt-Zu-Punkt-Kommunikationsprotokolle, die im Stand der Technik bekannt sind.In various embodiments, memory bridge 105 may be a north bridge chip and I/O bridge 107 may be a south bridge chip. Furthermore, communication paths 106 and 113, as well as other communication paths within computer system 100, may be implemented using any technically suitable protocol, including without limitation: AGP (Accelerated Graphics Port), HyperTransport, or other bus or point-to-point communication protocols that are known in the prior art.

In einigen Ausführungsformen umfasst das Parallelverarbeitungssubsystem 112 ein Graphiksubsystem, das Pixel an ein Anzeigegerät 110 liefert, das eine beliebige konventionelle Kathodenstrahlröhre, eine Flüssigkristallanzeige, eine Anzeige mit lichtemittierenden Dioden oder dergleichen sein kann. In derartigen Ausführungsformen enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafik-oder Videoverarbeitung optimiert ist, wozu beispielsweise eine Video-Ausgabeschaltung gehört. Wie nachfolgend in 2 detaillierter beschrieben ist, kann eine derartige Schaltung in einer oder mehreren Parallelverarbeitungseinheiten (PPUs) enthalten sein, die in dem Parallelverarbeitungssubsystem 112 enthalten sind. In anderen Ausführungsformen enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für eine Verarbeitung für Allgemeinzwecke und/oder für eine Rechenverarbeitung optimiert ist. Wiederum kann eine derartige Schaltung in einer oder mehreren PPUs enthalten sein, die in dem Parallelverarbeitungssubsystem 112 enthalten sind, und die ausgebildet sind, derartige Operationen für Allgemeinzwecke und/oder Berechnungen auszuführen. In noch anderen Ausführungsformen können die eine oder die mehreren PPUs, die in dem Parallelverarbeitungssubsystem 112 enthalten sind, ausgebildet sein, Operationen für eine Grafikverarbeitung, eine Verarbeitung für Allgemeinzwecke und eine Verarbeitung von Berechnungen auszuführen. Der Systemspeicher 104 enthält mindestens einen Gerätetreiber 103, der ausgebildet ist, die Verarbeitungsoperationen der einen oder den mehreren PPUs in dem Parallelverarbeitungssubsystem 112 zu verwalten.In some embodiments, the parallel processing subsystem 112 includes a graphics subsystem that provides pixels to a display device 110, which may be any conventional cathode ray tube, liquid crystal display, light emitting diode display, or the like. In such embodiments, parallel processing subsystem 112 includes circuitry optimized for graphics or video processing, including, for example, video output circuitry. As below in 2 As described in more detail, such circuitry may be included in one or more parallel processing units (PPUs) included in parallel processing subsystem 112 . In other embodiments, parallel processing subsystem 112 includes circuitry optimized for general purpose and/or computational processing. Again, such circuitry may be included in one or more PPUs included in parallel processing subsystem 112 configured to perform such general purpose operations and/or computations. In still other embodiments, the one or more PPUs included in parallel processing subsystem 112 may be configured to perform operations for graphics processing, general purpose processing, and computational processing. System memory 104 includes at least one device driver 103 configured to manage the processing operations of the one or more PPUs in parallel processing subsystem 112 .

In diversen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 in einem oder mehreren anderen der anderen Elemente aus 1 integriert sein, um ein einzelnes System zu bilden. Beispielsweise kann das Parallelverarbeitungssubsystem 112 mit der CPU 102 und einer anderen Verbindungsschaltung auf einem einzelnen Chip integriert sein, um ein System auf einem Chip (SoC) zu bilden.In various embodiments, the parallel processing subsystem 112 may reside in one or more of the other elements 1 be integrated to form a single system. For example, the parallel processing subsystem 112 may be integrated with the CPU 102 and other interconnect circuitry on a single chip to form a system on a chip (SoC).

Zu beachten ist, dass das hierin gezeigte System anschaulicher Natur ist und dass diverse Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, die Anzahl an CPUs 102 und die Anzahl an Parallelverarbeitungssubsystemen 112 können nach Bedarf modifiziert werden. Beispielsweise könnte in einigen Ausführungsformen der Systemspeicher 104 mit der CPU 102 direkt anstatt über die Speicherbrücke 105 verbunden sein, und andere Geräte könnten mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102 kommunizieren. In anderen alternativen Topologien kann das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt über die Speicherbrücke 105 verbunden sein. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als ein oder mehrere diskrete Bauelemente vorhanden sind. Schließlich können in gewissen Ausführungsformen eine oder mehrere der in 1 gezeigten Komponenten gegebenenfalls nicht vorhanden sein. Beispielsweise könnte der Schalter 116 weggelassen werden, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 könnten direkt mit der I/O-Brücke 107 verbunden sein.It should be noted that the system shown herein is illustrative in nature and that various variations and modifications are possible. The interconnect topology, including the number and placement of bridges, the number of CPUs 102, and the number of parallel processing subsystems 112 can be modified as needed. For example, in some embodiments, system memory 104 could be connected to CPU 102 directly instead of through memory bridge 105 , and other devices could communicate with system memory 104 through memory bridge 105 and CPU 102 . In other alternative topologies, the parallel processing subsystem 112 may be connected to the I/O bridge 107 or directly to the CPU 102 instead of through the memory bridge 105. In still other embodiments, I/O bridge 107 and memory bridge 105 may be integrated into a single chip rather than existing as one or more discrete components. Finally, in certain embodiments, one or more of the 1 components shown may not be present. For example, switch 116 could be omitted and network adapter 118 and add-in cards 120, 121 connected directly to I/O bridge 107.

2 ist eine Blockansicht einer Parallelverarbeitungseinheit (PPU) 202, die in dem Parallelverarbeitungssubsystem 112 aus 1 gemäß einer Ausführungsform der vorliegenden Erfindung enthalten ist. Obwohl 2 eine einzelne PPU 202 darstellt, kann, wie oben angegeben ist, das Parallelverarbeitungssubsystem 112 eine beliebige Anzahl an PPUs 202 enthalten. Wie gezeigt, ist die PPU 202 mit einem lokalen Parallelverarbeitungs-(PP-) Speicher 204 verbunden. Die PPU 202 und der PP-Speicher 204 können unter Verwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC) oder Speichereinrichtungen oder in einer anderen technisch machbaren Art und Weise realisiert werden. 2 12 is a block diagram of a parallel processing unit (PPU) 202 included in the parallel processing subsystem 112. FIG 1 according to an embodiment of the present invention. although 2 represents a single PPU 202, as noted above, the parallel processing subsystem 112 may include any number of PPUs 202. As shown, the PPU 202 is associated with a local parallel processing (PP) memory cher 204 connected. The PPU 202 and PP memory 204 may be implemented using one or more integrated circuit devices, such as programmable processors, application specific integrated circuits (ASIC), or memory devices, or in any other technically feasible manner.

In einigen Ausführungsformen umfasst die PPU 202 eine grafische Verarbeitungseinheit (GPU), die ausgebildet sein kann, eine Grafikerzeugungs-Pipeline zu realisieren, um diverse Operationen auszuführen, die mit der Erzeugung von Pixeldaten auf der Grundlage von Grafikdaten in Beziehung stehen, die von der CPU 102 und/oder dem Systemspeicher 104 zugeführt werden. Wenn Grafikdaten verarbeitet werden, kann der PP-Speicher 204 als ein Grafikspeicher verwendet werden, der einen oder mehrere konventionelle Blockpuffer und bei Bedarf auch ein oder mehrere andere Bilderzeugungsziele speichert. Unter anderem kann der PP-Speicher 204 verwendet werden, um Pixeldaten zu speichern und zu aktualisieren und schließlich endgültige Pixeldaten oder Anzeigeblöcke zu dem Anzeigegerät 110 zur Darstellung zu leiten. In einigen Ausführungsformen kann die PPU 202 für die Verarbeitung für Allgemeinzwecke und Rechenoperationen ausgebildet sein.In some embodiments, the PPU 202 includes a graphics processing unit (GPU) that may be configured to implement a graphics generation pipeline to perform various operations related to the generation of pixel data based on graphics data generated by the CPU 102 and/or the system memory 104. When processing graphics data, the PP memory 204 may be used as a graphics memory, storing one or more conventional block buffers and also one or more other rendering targets as needed. Among other things, PP memory 204 may be used to store and update pixel data and ultimately pass final pixel data or display blocks to display device 110 for rendering. In some embodiments, PPU 202 may be configured for general purpose processing and arithmetic operations.

Während des Betriebs ist die CPU 102 der übergeordnete Prozessor des Computersystems 100, der den Betrieb anderer Systemkomponenten steuert und koordiniert. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPU 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom von Befehlen für die PPU 202 in eine Datenstruktur (in 1 oder 2 nicht explizit gezeigt), die in dem Systemspeicher 104, in dem PP-Speicher 204 oder an einer anderen Speicherstelle liegen kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen können. Ein Zeiger auf die Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Stroms an Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus dem Schiebepuffer aus und führt dann Befehle asynchron relativ zu der Betriebsweise der CPU 102 aus. In Ausführungsformen, in denen mehrere Schiebepuffer erzeugt werden, können Prioritäten für die Ausführung für jeden Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 angegeben werden, um die Disponierung der unterschiedlichen Schiebepuffer zu steuern.During operation, CPU 102 is the master processor of computer system 100, controlling and coordinating the operation of other system components. In particular, the CPU 102 issues commands that control the operation of the PPU 202. In some embodiments, the CPU 102 writes a stream of instructions for the PPU 202 into a data structure (in 1 or 2 not explicitly shown), which may be in system memory 104, PP memory 204, or some other memory location accessible to both CPU 102 and PPU 202. A pointer to the data structure is written to a shift buffer to initiate processing of the stream of instructions in the data structure. The PPU 202 reads instruction streams from the shift buffer and then executes instructions asynchronously relative to the CPU 102 operation. In embodiments where multiple shift buffers are created, priorities for execution for each shift buffer may be specified by an application program via device driver 103 to control the scheduling of the different shift buffers.

Wie ferner gezeigt ist, umfasst die PPU 202 eine I/O-(Eingangs/Ausgangs-) Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 und die Speicherbrücke 105 kommuniziert. Die I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113 und leitet die eintreffenden Pakete zu geeigneten Komponenten der PPU 202. Beispielsweise können Befehle, die mit Verarbeitungsaufgaben in Bezug stehen, an eine übergeordnete Schnittstelle bzw. Hauptschnittstelle 206 geleitet werden, während Befehle, die mit Speicheroperationen in Verbindung stehen (beispielsweise Auslesen aus dem und Schreiben in den PP-Speicher 204) zu einer Kreuzungseinheit 210 gesendet werden. Die Hauptschnittstelle 206 liest jeden Schiebepuffer aus und sendet den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212.As further shown, PPU 202 includes an I/O (input/output) unit 205 that communicates with the rest of computer system 100 via communication path 113 and memory bridge 105 . I/O unit 205 generates packets (or other signals) for transmission on communication path 113 and also receives any incoming packets (or other signals) from communication path 113 and directs the incoming packets to appropriate components of PPU 202. For example, commands that are related to processing tasks are routed to a main interface 206 , while commands that are related to memory operations (e.g., reading from and writing to PP memory 204 ) are sent to an intersection unit 210 . The main interface 206 reads each shift buffer and sends the command stream stored in the shift buffer to a front end 212.

Wie zuvor in Verbindung mit 1 erwähnt ist, kann die Verbindung der PPU 202 zu dem Rest des Computersystems 100 unterschiedlich sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112, das mindestens eine PPU 202 enthält, als eine Zusatzkarte realisiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann die PPU 202 auf einem einzelnen Chip mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 zusammen mit der CPU 102 in einer einzelnen integrierten Schaltung oder einem System auf einem Chip (SoC) enthalten sein.As previously in connection with 1 is mentioned, the connection of the PPU 202 to the rest of the computer system 100 may be different. In some embodiments, parallel processing subsystem 112, which includes at least one PPU 202, is implemented as an add-on card that can be inserted into an expansion slot of computer system 100. In other embodiments, PPU 202 may be integrated on a single chip with a bus bridge, such as memory bridge 105 or I/O bridge 107. In still other embodiments, some or all elements of PPU 202 may be included along with CPU 102 in a single integrated circuit or system on a chip (SoC).

Während des Betriebs sendet der Frontbereich 212 Verarbeitungsaufgaben, die aus der Hauptschnittstelle 206 empfangen werden, an eine Arbeitsverteilungseinheit (nicht gezeigt) in der Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Metadaten (TMD) codiert und im Speicher gespeichert sind. Die Zeiger auf die TMD sind in einem Befehlsstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der Hauptschnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indices, die mit den zu verarbeitenden Daten verknüpft sind, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind. Beispielsweise können die Zustandsparameter und die Befehle das Programm festlegen, das an den Daten auszuführen ist. Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass GPCs 208 in einen zulässigen Zustand konfiguriert werden, bevor die von jedem Satz der TMD spezifizierte Verarbeitungsaufgabe initiiert wird. Es kann eine Priorität für jeden Satz an TMD spezifiziert werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können ferner aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Anfang oder dem Ende einer Liste an Verarbeitungsaufgaben (oder eine Liste aus Zeigern auf die Verarbeitungsaufgaben) hinzugefügt werden, wodurch eine weitere Ebene an Steuerung zusätzlich zur Ausführungspriorität bereitgestellt wird.During operation, front end 212 sends processing tasks received from main interface 206 to a work distribution unit (not shown) in task/work unit 207. The work distribution unit receives pointers to processing tasks, encoded as task metadata (TMD) and stored in memory are saved. The pointers to the TMD are contained in an instruction stream stored as a push buffer and received by the front end unit 212 from the main interface 206 . Processing tasks, which may be encoded as TMD, contain indices associated with the data to be processed, as well as state parameters and instructions that define how the data is to be processed. For example, the state parameters and the instructions can specify the program to be executed on the data. Task/work unit 207 receives tasks from front end 212 and ensures that GPCs 208 are configured to a valid state before initiating the processing task specified by each set of TMD. A priority can be specified for each set of TMD, which is used to schedule the execution of processing tasks. Processing tasks can also be derived from the processing Cluster array 230 are received. Optionally, the TMD may include a parameter that controls whether the TMD is added to the head or end of a list of processing tasks (or a list of pointers to the processing tasks), thereby providing another level of control in addition to execution priority.

Die PPU 202 realisiert vorteilhafterweise eine hoch parallele Verarbeitungsarchitektur auf der Grundlage eines Verarbeitungs-Cluster-Arrays 230, das eine Gruppe aus C allgemeinen Verarbeitungs-Clustern (GPCs) 208 umfasst, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) von Strängen gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPCs 208 für unterschiedliche Arten von Programmen oder zum Ausführen unterschiedlicher Arten von Berechnungen reserviert bzw. zugewiesen werden. Die Zuweisung von GPCs 208 kann abhängig von der Arbeitslast unterschiedlich sein, die sich für jede Art von Programm oder Berechnung ergibt.The PPU 202 advantageously implements a highly parallel processing architecture based on a processing cluster array 230 comprising a set of C general processing clusters (GPCs) 208, where C≧1. Each GPC 208 is capable of executing a large number (e.g., hundreds or thousands) of threads simultaneously, with each thread being an instance of a program. In various applications, different GPCs 208 may be dedicated to different types of programs or to perform different types of calculations. Allocation of GPCs 208 may vary depending on the workload that arises for each type of program or computation.

Eine Speicherschnittstelle 214 enthält eine Gruppe aus D Partitionseinheiten 215, wobei D ≥ 1 ist. Jede Partitionseinheit 215 ist mit einem oder mehreren dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220 verbunden, die in dem PP-Speicher 204 liegen. In einer Ausführungsform ist die Anzahl an Partitionseinheiten 215 gleich der Anzahl an DRAMs 220, und jede Partitionseinheit 215 ist mit einem anderen DRAM 220 verbunden. In anderen Ausführungsformen unterscheidet sich die Anzahl an Partitionseinheiten 215 von der Anzahl an DRAMs 220. Der Fachmann auf dem Gebiet erkennt, dass ein DRAM 220 durch eine beliebige andere technische geeignete Speichereinrichtung ersetzt werden kann. Im Betrieb können diverse Bilderzeugungsziele, etwa Texturzuordnungen und Blockpuffer, über die DRAMs 220 hinweg gespeichert werden, wodurch es den Partitionseinheiten 215 ermöglicht wird, Bereiche jedes Bilderzeugungsziels parallel zu beschreiben, um effizient die verfügbare Bandbreite des PP-Speichers 204 zu nutzen.A memory interface 214 includes a set of D partition units 215, where D≥1. Each partition unit 215 is connected to one or more dynamic random access memory (DRAM) 220 residing in PP memory 204 . In one embodiment, the number of partition units 215 is equal to the number of DRAMs 220 and each partition unit 215 is connected to a different DRAM 220. In other embodiments, the number of partition units 215 differs from the number of DRAMs 220. Those skilled in the art will recognize that a DRAM 220 may be substituted for any other technically suitable memory device. In operation, various rendering targets, such as texture maps and block buffers, can be stored across the DRAMs 220, allowing the partition units 215 to write portions of each rendering target in parallel to efficiently utilize the available PP memory 204 bandwidth.

Ein gegebener GPC 208 kann Daten verarbeiten, die in einen oder mehrere der DRAMs 220 in dem PP-Speicher 204 zu schreiben sind. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 zu dem Eingang einer Partitionseinheit 215 oder zu einem anderen GPC 208 für die weitere Verarbeitung zu leiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um diverse DRAMs 220 auszulesen oder diese zu beschreiben. In einer Ausführungsform hat die Kreuzungseinheit 210 eine Verbindung zu der I/O-Einheit 205 zusätzlich zu eine Verbindung zu dem PP-Speicher 204 über die Speicherschnittstelle 214, wodurch die Verarbeitungskerne in den unterschiedlichen GPCs 208 in die Lage versetzt werden, mit dem Systemspeicher 104 oder mit einem anderen Speicher, der nicht lokal für die PPU 202 ist, in Verbindung zu treten. In der Ausführungsform aus 2 ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. In diversen Ausführungsformen kann die Kreuzungseinheit 210 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.A given GPC 208 may process data to be written to one or more of the DRAMs 220 in PP memory 204 . The crossover unit 210 is configured to route the output of each GPC 208 to the input of a partition unit 215 or to another GPC 208 for further processing. The GPCs 208 communicate with the memory interface 214 via the crossover unit 210 to read from or write to various DRAMs 220 . In one embodiment, the crossover unit 210 has a connection to the I/O unit 205 in addition to a connection to the PP memory 204 via the memory interface 214, enabling the processing cores in the different GPCs 208 to communicate with the system memory 104 or to connect to other memory that is not local to the PPU 202. In the embodiment off 2 the crossover unit 210 is directly connected to the I/O unit 205. In various embodiments, the intersection unit 210 may use virtual channels to separate traffic flows between the GPCs 208 and the partition units 215.

Wiederum können die GPCs 208 so programmiert sein, dass sie Verarbeitungsaufgaben ausführen, die mit einer großen Fülle von Anwendungen in Beziehung stehen, wozu gehören, ohne Einschränkung, lineare und nicht-lineare Datentransformationen, die Filterung von Video-und/oder Audiodaten, Modellierungsoperationen (beispielsweise die Anwendung physikalischer Gesetze zur Bestimmung von Position, Geschwindigkeit und anderen Attributen von Objekten), Bilderzeugungsoperationen (beispielsweise Programme zur Parkettierung-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel/Fragment-Schattierung), allgemeine Berechnungsmethoden, usw. Im Betrieb ist die PPU 202 ausgebildet, Daten von dem Systemspeicher 104 und/oder dem PP-Speicher 204 zu einer oder mehreren chipinternen Speichereinheiten zu übertragen, die Daten zu verarbeiten und Ergebnisdaten zurück in den Systemspeicher 104 und/oder den PP-Speicher 204 zu schreiben. Auf die Ergebnisdaten kann von anderen Systemkomponenten sodann zugegriffen werden, wozu die CPU 102, eine weitere PPU 202 innerhalb des Parallelverarbeitungssubsystems 112 oder ein weiteres Parallelverarbeitungssubsystem 112 in dem Computersystem 100 gehören.Again, the GPCs 208 may be programmed to perform processing tasks related to a wide variety of applications including, without limitation, linear and non-linear data transformations, filtering of video and/or audio data, modeling operations ( e.g. the application of physical laws to determine position, speed and other attributes of objects), imaging operations (e.g. programs for tessellation shading, vertex shading, geometry shading and/or pixel/fragment shading), general computational methods, etc. Im In operation, the PPU 202 is configured to transfer data from the system memory 104 and/or the PP memory 204 to one or more on-chip memory devices, process the data, and write result data back to the system memory 104 and/or the PP memory 204 . The resultant data can then be accessed by other system components, including CPU 102, another PPU 202 within parallel processing subsystem 112, or another parallel processing subsystem 112 in computer system 100.

Wie zuvor angegeben ist, kann eine beliebige Anzahl an PPUs 202 in dem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 in einer einzelnen Zusatzkarte bereitgestellt werden, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 113 verbunden werden, oder eine oder mehrere der PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können unterschiedliche PPUs 202 eine unterschiedliche Anzahl an Verarbeitungskernen und/oder unterschiedliche Größen des PP-Speichers 204 aufweisen. In Ausführungsformen, in denen mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, um Daten mit einem höheren Durchsatz zu verarbeiten, als dies mit einer einzelnen PPU 202 möglich wäre. Systeme, in denen eine oder mehrere PPUs 202 enthalten sind, können in einer Vielzahl von Konfigurationen und Formfaktoren realisiert werden, wozu gehören, ohne einschränkend zu sein, Tischrechner, Mobilrechner, Hand-Personalcomputer oder andere Hand-Geräte, Dienstleister-Rechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen.As previously indicated, any number of PPUs 202 may be included in the parallel processing subsystem 112. For example, multiple PPUs 202 can be provided in a single option card, or multiple option cards can be connected to the communication path 113, or one or more of the PPUs 202 can be integrated in a bridge chip. The PPUs 202 in a multi-PPU system may be identical to or different from one another. For example, different PPUs 202 may have different numbers of processing cores and/or different sizes of PP memory 204 . In embodiments where there are multiple PPUs 202, those PPUs can operate in parallel to process data at a higher throughput than would be possible with a single PPU 202. Systems incorporating one or more PPUs 202 can be in a variety of configurations Networks and form factors can be implemented, including, without limitation, desktop computers, mobile computers, handheld personal computers or other handheld devices, service provider computers, workstations, game consoles, embedded systems, and the like.

3A ist eine Blockansicht eines GPC 208, der in der PPU 202 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung enthalten ist. Im Betrieb kann der GPC 208 ausgebildet sein, eine große Anzahl an Strängen parallel auszuführen, um Operationen für Grafik, allgemeine Verarbeitung und/oder Berechnungen auszuführen. Im hierin verwendeten Sinne bezeichnet ein „Strang“ eine Instanz eines speziellen Programms, das an einer speziellen Menge an Eingangsdaten ausgeführt wird. In einigen Ausführungsformen werden Einzelbefehl, Mehrfach-Daten-(SIMD) Befehlsausgabetechniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an Strängen zu unterstützen, ohne dass mehrere unabhängige Befehlseinheiten vorzusehen sind. In anderen Ausführungsformen werden Einzelbefehl, Mehrfach-Strang-(SIMT) Techniken eingesetzt, um die parallele Ausführung einer großen Anzahl an allgemein synchronisierten Strängen zu unterstützen, wobei eine gemeinsame Befehlseinheit ausgebildet ist, Befehle an eine Gruppe von Verarbeitungseinheiten innerhalb des GPC 208 auszugeben. Anders als ein SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, erlaubt eine SIMT-Ausführung, dass unterschiedliche Stränge effizienter divergenten Ausführungspfaden durch ein gegebenes Programm hindurch folgen. Der Fachmann auf dem Gebiet erkennt, dass ein SIMD-Verarbeitungsregime eine funktionale Teilmenge eines SIMT-Verarbeitungsregimes darstellt. 3A FIG. 12 is a block diagram of a GPC 208 installed in the PPU 202. FIG 2 according to an embodiment of the present invention. In operation, the GPC 208 may be configured to execute a large number of threads in parallel to perform graphics, general purpose processing, and/or computational operations. As used herein, a "thread" refers to an instance of a specific program that is executed on a specific set of input data. In some embodiments, single-instruction, multiple-data (SIMD) instruction issue techniques are employed to support parallel execution of a large number of threads without providing multiple independent instruction units. In other embodiments, single-instruction, multiple-thread (SIMT) techniques are employed to support parallel execution of a large number of commonly synchronized threads, with a common instruction unit configured to issue instructions to a group of processing units within the GPC 208 . Unlike a SIMD execution regime, in which all processing units typically execute identical instructions, SIMT execution allows different threads to more efficiently follow divergent execution paths through a given program. Those skilled in the art will recognize that a SIMD processing regime is a functional subset of a SIMT processing regime.

Der Betrieb des GPC 208 wird durch einen Pipeline-Verwalter 305 gesteuert, der Verarbeitungsaufgaben, die er aus einer Arbeitsverteilungseinheit (nicht gezeigt) in der Aufgaben/Arbeitseinheit 207 empfängt, an einen oder mehrere Datenstrom-Multiprozessoren (SM) 310 verteilt. Der Pipeline-Verwalter 305 kann auch ausgebildet sein, eine Arbeitsverteilungs-Kreuzungseinheit 330 durch Angabe von Zielen für verarbeitete Daten, die von den SM 310 ausgegeben werden, zu steuern.The operation of the GPC 208 is controlled by a pipeline manager 305 which dispatches processing tasks it receives from a work distribution unit (not shown) in the task/work unit 207 to one or more stream multiprocessors (SM) 310 . The pipeline manager 305 may also be configured to control a work distribution intersection unit 330 by specifying destinations for processed data output from the SMs 310 .

In einer Ausführungsform enthält der GPC 208 eine Gruppe aus M SM 310, wobei M ≥ 1 ist. Ferner enthält jeder SM 310 eine Gruppe aus Funktionsausführungseinheiten (nicht gezeigt), etwa Ausführungseinheiten und Lade-Speicher-Einheiten. Die Verarbeitung von Operationen, die speziell für jegliche der Funktionsausführungseinheiten ist, kann als Pipeline betrieben bzw. parallel ausgeführt werden, wodurch es möglich ist, dass ein neuer Befehl zur Ausführung ausgegeben wird, bevor die Ausführung eines vorhergehenden Befehls abgeschlossen ist. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten in einem gegebenen SM 310 bereitgestellt werden. In diversen Ausführungsformen können die Funktionsausführungseinheiten ausgebildet sein, eine Vielzahl unterschiedlicher Operationen zu unterstützen, wozu Ganzzahl-und Fließkommaarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, EXKLUSIV ODER), Bit-Verschiebung und Berechnung diverser algebraischer Funktionen (beispielsweise ebene Interpolation, trigonometrische, exponentielle und logarithmische Funktionen usw.) gehören. Vorteilhafterweise kann die gleiche Funktionsausführungseinheiten ausgebildet sein, unterschiedliche Operationen auszuführen.In one embodiment, GPC 208 includes a set of M SM 310, where M≧1. Each SM 310 also includes a set of functional execution units (not shown), such as execution units and load-store units. The processing of operations specific to any of the functional execution units may be pipelined or executed in parallel, allowing a new instruction to be issued for execution before execution of a previous instruction completes. Any combination of functional execution units can be provided in a given SM 310 . In various embodiments, the function execution units may be configured to support a variety of different operations, including integer and floating point arithmetic (e.g., addition and multiplication), comparison operations, Boolean operations (AND, OR, EXCLUSIVE OR), bit shifting, and computation of various algebraic functions (e.g., plane interpolation, trigonometric, exponential, and logarithmic functions, etc.). Advantageously, the same function execution unit can be designed to execute different operations.

Im Betrieb ist jeder SM 310 ausgebildet, eine oder mehrere Stranggruppen zu verarbeiten. Wie hierin verwendet, bedeutet eine „Stranggruppe“ oder „Wölbung“ eine Gruppe von Strängen, die gleichzeitig das gleiche Programm an unterschiedlichen Eingangsdaten ausführen, wobei ein einzelner Strang der Gruppe einer anderen Ausführungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge enthalten als es der Anzahl an Ausführungseinheiten innerhalb des SM 310 entspricht, in welchem Falle einige der Ausführungseinheiten während gewisser Zyklen untätig sein können, wenn diese Stranggruppe verarbeitet wird. Eine Stranggruppe kann auch mehr Stränge enthalten, als dies der Anzahl an Ausführungseinheiten innerhalb des SM 310 entspricht, in welchem Falle die Verarbeitung sich über aufeinanderfolgende Taktzyklen erstrecken kann. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig unterstützen kann, folgt, dass bis zu G*M Stranggruppen in dem GPC 208 gleichzeitig ausgeführt werden können.In operation, each SM 310 is configured to process one or more thread groups. As used herein, a "thread group" or "bowl" means a group of threads concurrently executing the same program on different input data, with a single thread of the group being assigned to a different execution unit within an SM 310 . A thread group may contain fewer threads than the number of execution units within SM 310, in which case some of the execution units may be idle during certain cycles when that thread group is being processed. A thread group may also contain more threads than the number of execution units within SM 310, in which case processing may span consecutive clock cycles. Since each SM 310 can support up to G thread groups simultaneously, it follows that up to G*M thread groups can be executed in the GPC 208 simultaneously.

Ferner können mehrere in Beziehung stehende Stranggruppen gleichzeitig in einen SM 310 aktiv sein (in unterschiedlichen Phasen der Ausführung). Diese Ansammlung an Stranggruppen wird hierin als ein „kooperatives Strang-Array“ („CTA“) oder als „Strang-Array“ bezeichnet. Die Größe eines speziellen CTA ist gleich m*k, wobei k die Anzahl an gleichzeitig ausgeführten Strängen in einer Stranggruppe ist, was typischerweise ein ganzzahliges Vielfaches der Anzahl an Ausführungseinheiten innerhalb des SM 310 ist, und m die Anzahl an Stranggruppen ist, die gleichzeitig in dem SM 310 aktiv sind.Furthermore, multiple related thread groups may be active in an SM 310 at the same time (in different phases of execution). This collection of strand groups is referred to herein as a "cooperative strand array" ("CTA") or "strand array". The size of a particular CTA is equal to m*k, where k is the number of concurrently executing threads in a thread group, which is typically an integer multiple of the number of execution units within the SM 310, and m is the number of thread groups that are concurrently executing in are active on the SM 310.

Obwohl in 3A nicht gezeigt, enthält jeder SM 310 einen Cache-Speicher der Ebene eins (L1) oder verwendet Platz in einem entsprechenden L1 - Cache-Speicher außerhalb des SM 310, um unter anderem Lade-und SpeicherOperationen zu unterstützen, die von den Ausführungseinheiten ausgeführt werden. Jeder SM 310 hat ferner Zugriff auf Cache-Speicher der Ebene zwei (L2) (nicht gezeigt), die gemeinsam von allen GPCs 208 in der PPU 202 verwendet werden. Die L2-Cache-Speicher können verwendet werden, um Daten zwischen Strängen auszutauschen. Schließlich können die SM 310 auch Zugriff auf einen chipexternen „globalen“ Speicher haben, der den PP-Speicher 204 und/oder den Systemspeicher 104 enthalten kann. Ferner ist zu beachten, dass ein beliebiger Speicher außerhalb der PPU 202 als globaler Speicher verwendbar ist. Wie ferner in 3A gezeigt ist, kann ein Cache-Speicher der Ebene eins-Punkt-fünf (L1.5) in dem GPC 208 verwendet werden und kann ausgebildet sein, aus dem Speicher über die Speicherschnittstelle 214 von den SM 310 angeforderte Daten zu empfangen und zu halten. Derartige Daten können enthalten, ohne Einschränkung, Befehle, gleichförmige Daten und konstante Daten. In Ausführungsformen mit mehreren SM 310 innerhalb des GPC 208 können die SM 310 vorteilhafterweise gemeinsame Befehle und Daten, die in dem L1.5-Cache-Speicher 325 zwischengespeichert sind, gemeinsam nutzen.Although in 3A not shown, each SM 310 contains a level one (L1) cache or uses space in a corresponding L1 cache external to the SM 310 to perform, among other things, load and store operations supported by the execution units. Each SM 310 also has access to level two (L2) cache memory (not shown) shared by all GPCs 208 in PPU 202 . The L2 caches can be used to exchange data between threads. Finally, SM 310 may also have access to off-chip "global" memory, which may include PP memory 204 and/or system memory 104 . It should also be noted that any memory external to the PPU 202 can be used as global memory. As also in 3A As shown, a level one-point-five (L1.5) cache memory may be used in the GPC 208 and may be configured to receive and hold data requested by the SM 310 from the memory via the memory interface 214 . Such data can include, without limitation, commands, uniform data, and constant data. Advantageously, in embodiments having multiple SM 310 within GPC 208 , SM 310 may share common instructions and data cached in L1.5 cache 325 .

Jeder GPC 208 kann eine zugehörige Speicherverwaltungseinheit (MMU) 320 aufweisen, die ausgebildet ist, virtuelle Adressen auf physikalische Adressen abzubilden. In diversen Ausführungsformen kann die MMU 320 in dem GPC 208 liegen oder kann in der Speicherschnittstelle 214 liegen. Die MMU 320 enthält eine Gruppe aus Seitentabelleneinträgen (PTE), die verwendet werden, um eine virtuelle Adresse einer physikalischen Adresse einer Kachel oder einer Speicherseite und optional einem Cache-Zeilenindex zuzuordnen. Die MMU 320 kann Adressen-Translations-Nebenschaupuffer (TLB) oder Cache-Speicher enthalten, die in den SM 310, in einem oder mehreren L1-Cache-Speichern oder in dem GPC 208 liegen können.Each GPC 208 may have an associated memory management unit (MMU) 320 configured to map virtual addresses to physical addresses. In various embodiments, MMU 320 may reside in GPC 208 or may reside in memory interface 214 . The MMU 320 contains a set of page table entries (PTE) used to map a virtual address to a physical address of a tile or memory page and optionally a cache line index. The MMU 320 may include address translation lookaside buffers (TLB) or caches, which may reside in the SM 310, in one or more L1 caches, or in the GPC 208.

In Grafik-und Rechenanwendungen kann der GPC 208 so ausgebildet sein, dass jeder SM 310 mit einer Textureinheit 315 zum Auslesen von Texturzuordnungsanforderungen verbunden ist, etwa die Bestimmung von Texturabtastpositionen, Auslesen von Texturdaten und Filterung von Texturdaten.In graphics and computing applications, the GPC 208 may be configured such that each SM 310 connects to a texture unit 315 for reading texture mapping requests, such as determining texture sample positions, reading texture data, and filtering texture data.

Im Betrieb sendet jeder SM 310 eine Aufgabe zu der Arbeitsverteilungs-Kreuzungseinheit 330, um die verarbeitete Aufgabe einem weiteren GPC 208 für die Weiterverarbeitung zuzuleiten oder um die verarbeitete Aufgabe in einem L2-Cache-Speicher (nicht gezeigt), dem Parallelverarbeitungsspeicher 204 oder dem Systemspeicher 104 über die Kreuzungseinheit 210 zu speichern. Ferner ist eine Vor-Rasteroperationen-(vor-ROP-) Einheit 325 ausgebildet, Daten aus dem SM 310 zu empfangen, Daten einer oder mehreren Rasteroperationen-(ROP-) Einheiten in den Partitionseinheiten 215 zuzuführen, Optimierungen für Farbmischung auszuführen, Pixel-Farbdaten zu organisieren und Adressenübersetzungen auszuführen.In operation, each SM 310 sends a task to the work distribution crossbar 330 to direct the processed task to another GPC 208 for further processing or to store the processed task in an L2 cache (not shown), parallel processing memory 204, or system memory 104 via the crossing unit 210 to store. Furthermore, a pre-raster operations (pre-ROP) unit 325 is configured to receive data from the SM 310, supply data to one or more raster operations (ROP) units in the partition units 215, perform optimizations for color mixing, pixel color data organize and perform address translations.

Zu beachten ist, dass die hierin beschriebene Kernarchitektur anschaulicher Natur ist und dass Änderungen und Modifizierungen möglich sind. Unter anderem kann eine beliebige Anzahl an Verarbeitungseinheiten, etwa SM 310, Textureinheiten 315 oder Vor-ROP-Einheiten 325 in dem GPC 208 enthalten sein. Wie ferner oben in Verbindung mit 2 beschrieben ist, kann die PPU 202 eine beliebige Anzahl an GPCs 208 enthalten, die ausgebildet sind, dass sie in ihrer Funktion ähnlich zueinander sind, so dass das Ausführungsverhalten nicht davon abhängt, welcher GPC 208 welche spezielle Verarbeitungsaufgabe erhält. Ferner arbeitet jeder GPC 208 unabhängig von den anderen GPCs 208 in der PPU 202, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen. Im Hinblick auf das zuvor Gesagte erkennt der Fachmann, dass die in den 1-3A beschriebene Architektur in keiner Weise einschränkend für den Schutzbereich der vorliegenden Erfindung ist.It should be noted that the core architecture described herein is illustrative in nature and is subject to change and modification. Any number of processing units, such as SM 310, texture units 315, or pre-ROP units 325, may be included in GPC 208, among others. As further above in connection with 2 patent, the PPU 202 may include any number of GPCs 208 configured to be functionally similar to one another such that execution behavior is not dependent on which GPC 208 is assigned which particular processing task. Furthermore, each GPC 208 operates independently of the other GPCs 208 in the PPU 202 to perform tasks for one or more application programs. In view of the foregoing, those skilled in the art will recognize that the 1-3A architecture described is in no way limiting to the scope of the present invention.

Grafik-Pipeline-ArchitekturGraphics pipeline architecture

3B ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline 350, die in der PPU 202 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung realisiert werden kann. Wie gezeigt, umfasst die Grafikverarbeitungs-Pipeline 350, ohne einschränkend zu sein, eine Verteileinheit für primitive Elemente bzw. Grundelemente (PD) 355; eine Vertex-Attributabholeinheit (VAF) 360; eine Vertex-, Parkettierung-, Geometrie-Verarbeitungseinheit (VTG) 365; eine Darstellungsfeldskalier-, Auswahl-und Schneide-Einheit (VPC) 370; eine Kacheleinheit 375, eine Einrichtungseinheit (Einrichten) 380, eine Rastereinheit (Raster) 385; eine Fragmentverarbeitungseinheit, auch als eine Pixel-Schattierungseinheit (PS) 390 bezeichnet, und eine Raster-Operationen-Einheit (ROP) 395. 3B FIG. 3 is a conceptual view of a graphics processing pipeline 350 running in the PPU 202. FIG 2 can be implemented according to an embodiment of the present invention. As shown, graphics processing pipeline 350 includes, without limitation, a primitive (PD) dispatch unit 355; a vertex attribute fetch unit (VAF) 360; a vertex, tessellation, geometry processing unit (VTG) 365; a viewport scaling, selecting and clipping unit (VPC) 370; a tiling unit 375, a setup unit (setup) 380, a raster unit (raster) 385; a fragment processing unit, also referred to as a pixel shader unit (PS) 390, and a raster operations unit (ROP) 395.

Die PD 355 sammelt Vertex-Daten, die mit Oberflächen höherer Ordnung, grafischen Grundelementen und dergleichen verknüpft sind, aus dem Frontbereich 212 und sendet die Vertex-Daten an die VAF 360.The PD 355 collects vertex data associated with higher-order surfaces, graphic primitives, and the like from the front area 212 and sends the vertex data to the VAF 360.

Die VAF 360 ruft Vertex-Attribute, die mit jedem der eintreffenden Vertices verknüpft sind, aus dem gemeinsam benutzten Speicher ab und speichert die Vertex-Daten zusammen mit den zugehörigen Vertex-Attributen in dem gemeinsam benutzten Speicher.The VAF 360 retrieves vertex attributes associated with each of the incoming vertices from shared memory and stores the vertex data in shared memory along with the associated vertex attributes.

Die VTG 365 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Vertex-Schattierungsprogramme, Parkettierung Programme und Geometrieprogramme auszuführen. Diese Programme verarbeiten Vertex-Daten und Vertex- Attribute, die aus der VAF 360 empfangen werden, und erzeugen grafische Grundelemente, etwa Farbwerte, Vektoren der Oberflächennormalen und Transparenzwerte an jedem Vertex für die grafischen Grundelemente für die weitere Verarbeitung innerhalb der Grafikverarbeitungs-Pipeline 350. Obwohl dies nicht explizit gezeigt ist, kann die VTG 365 in einigen Ausführungsformen eine oder mehrere der folgenden Einheiten umfassen: eine Vertex-Verarbeitungseinheit, eine Parkettierung-Initialisierungs-Verarbeitungseinheit, eine Aufgabenerzeugungseinheit, eine Aufgabenverteilungseinheit, eine Topologie-Erzeugungseinheit, eine Parkettierung-Verarbeitungseinheit und eine Geometrie-Verarbeitungseinheit.The VTG 365 is a programmable execution unit designed to run vertex shading programs, tessellation programs, and run geometry programs. These programs process vertex data and vertex attributes received from the VAF 360 and generate graphics primitives, such as color values, surface normal vectors, and transparency values at each vertex for the graphics primitives for further processing within the graphics processing pipeline 350. Although not explicitly shown, in some embodiments the VTG 365 may include one or more of the following units: a vertex processing unit, a tessellation initialization processing unit, a task generation unit, a task distribution unit, a topology generation unit, a tessellation processing unit, and a geometry processing unit.

Die Vertex-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Vertex-Schattierungsprogramme, Beleuchtung und Transformation von Vertexdaten, wie sie von den Vertex-Schattierungsprogrammen angegeben werden, zu verarbeiten. Beispielsweise kann die Vertex-Verarbeitungseinheit programmiert sein, um die Vertex-Daten aus einer objektbasierten Koordinatendarstellung (Objektraum) in ein Koordinatensystem mit alternativer Basis, etwa einen Welt-Raum oder in einen Raum mit normierten Gerätekoordinaten (NDC) umzuwandeln. Die Vertex-Verarbeitungseinheit kann Vertex-Daten und Vertex-Attribute auslesen, die in einem gemeinsam benutzten Speicher von der VAF gespeichert wurden, und kann die Vertex-Daten und die Vertex-Attribute verarbeiten. Die Vertex-Verarbeitungseinheit 415 speichert verarbeitete Vertices in einem gemeinsam benutzten Speicher.The vertex processing unit is a programmable execution unit configured to process vertex shader programs, lighting, and transformation of vertex data as specified by the vertex shader programs. For example, the vertex processing unit may be programmed to convert the vertex data from an object-based coordinate representation (object space) to an alternative basis coordinate system, such as world space or normalized device coordinate (NDC) space. The vertex processing unit can read vertex data and vertex attributes stored in a shared memory by the VAF and process the vertex data and the vertex attributes. The vertex processing unit 415 stores processed vertices in shared memory.

Die Parkettierung-Initialisierungs-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Parkettierungs-Initialisierungs-Schattierungsprogramme auszuführen. Die Parkettierung-Initialisierungs-Verarbeitungseinheit verarbeitete Vertices, die von der Vertex-Verarbeitungseinheit erzeugt wurden, und erzeugt grafische Grundelemente, die als Fleckenbereiche bekannt sind. Die Parkettierung-Initialisierungs-Verarbeitungseinheit erzeugt ferner diverse Attribute für Fleckenbereiche. Die Parkettierung-Initialisierungs-Verarbeitungseinheit speichert dann die Fleckenbereichsdaten und Fleckenbereichsattribute in dem gemeinsam benutzten Speicher. In einigen Ausführungsformen kann das Parkettierung-Initialisierungs-Schattierungsprogramm eine Hüllenschattierung oder eine Parkettierungs-Steuer-Schattierung genannt werden.The tessellation initialization processing unit is a programmable execution unit configured to execute tessellation initialization shader programs. The tessellation initialization processing unit processes vertices generated by the vertex processing unit and generates graphics primitives known as patch regions. The tessellation initialization processing unit also creates various attributes for patch areas. The tessellation initialization processing unit then stores the blob area data and blob area attributes in the shared memory. In some embodiments, the tessellation initialization shader may be called a skin shade or a tessellation control shade.

Die Aufgabenerzeugungseinheit ruft Daten und Attribute für Vertices und Fleckenbereiche aus dem gemeinsam benutzten Speicher ab. Die Aufgabenerzeugungseinheit erzeugt Aufgaben zur Verarbeitung der Vertices und Fleckenbereiche für die Verarbeitung durch spätere Stufen in der Grafikverarbeitungs-Pipeline 350.The task generation unit retrieves data and attributes for vertices and blob areas from shared memory. The task generation unit generates tasks to process the vertices and patch areas for processing by later stages in the graphics processing pipeline 350.

Die Aufgabenverteilungseinheit verteilt die von der Aufgabenerzeugungseinheit erzeugten Aufgaben um. Die von den diversen Instanzen des Vertex-Schattierungsprogramms und dem Parkettierung-Initialisierungsprogramm erzeugten Aufgaben können von der einen Grafikverarbeitungs-Pipeline 350 zu einer weiteren deutlich unterschiedlich sein. Die Aufgabenverteilungseinheit verteilt diese Aufgaben derart um, dass jede Grafikverarbeitungs-Pipeline 350 während späterer Pipeline-Stufen ungefähr die gleiche Arbeitslast aufweist.The task distribution unit redistributes the tasks generated by the task generation unit. The tasks generated by the various instances of the vertex shader and the tessellation initializer can vary significantly from one graphics processing pipeline 350 to another. The task distribution unit redistributes these tasks such that each graphics processing pipeline 350 has approximately the same workload during later pipeline stages.

Die Topologie-Erzeugungseinheit ruft von der Aufgabenverwaltungseinheit verteilte Aufgaben ab. Die Topologie-Erzeugungseinheit indiziert die Vertices, einschließlich von Vertices, die mit Fleckenbereichen verknüpft sind, und berechnet (U, V) Koordinaten für Parkettierungs-Vertices und die Indices, die die die parkettartig verteilten Vertices verbinden, um grafische Grundelemente zu bilden. Die Topologie-Erzeugungseinheit speichert dann die indizierten Vertices in dem gemeinsam benutzten Speicher.The topology generation unit retrieves tasks distributed from the task management unit. The topology generation unit indexes the vertices, including vertices associated with patch regions, and computes (U,V) coordinates for tessellation vertices and the indices connecting the tessellated vertices to form graphical primitives. The topology generation unit then stores the indexed vertices in the shared memory.

Die Parkettierung-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Parkettierung-Schattierungsprogramme auszuführen. Die Parkettierung-Verarbeitungseinheit liest Eingangsdaten aus dem gemeinsam benutzten Speicher und schreibt Ausgangsdaten in diesen hinein. Diese Ausgangsdaten in dem gemeinsam benutzten Speicher werden an die nächste Schattierungsstufe, d.h. die Geometrie-Verarbeitungseinheit 445, als Eingangsdaten weitergegeben. In einigen Ausführungsformen kann das Parkettierung-Schattierungsprogramm als eine Bereichsschattierungseinheit oder eine Parkettierung-Bewertungs-Schattierungseinheit bezeichnet werden.The tessellation processing unit is a programmable execution unit configured to execute tessellation shading programs. The tessellation processing unit reads input data from and writes output data to the shared memory. This output data in shared memory is passed to the next shading stage, i.e. geometry processing unit 445, as input data. In some embodiments, the tessellation shader may be referred to as a region shader or a tessellation score shader.

Die Geometrie-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Geometrie-Schattierungsprogramme auszuführen, wodurch grafische Grundelemente transformiert werden. Es werden Vertices gruppiert, um grafische Grundelemente für die Verarbeitung zu bilden, wobei grafische Grundelemente Dreiecke, Liniensegmente, Punkte und dergleichen umfassen. Beispielsweise kann die Geometrie-Verarbeitungseinheit so programmiert sein, dass die grafischen Grundelemente in ein oder mehrere neue grafische Grundelemente unterteilt werden, und um Parameter zu berechnen, etwa Koeffizienten für eine Ebenengleichung, die verwendet werden, um die neuen grafischen Grundelemente in Raster einzuteilen.The geometry processing unit is a programmable execution unit configured to execute geometry shading programs, thereby transforming graphics primitives. Vertices are grouped to form graphics primitives for processing, where graphics primitives include triangles, line segments, points, and the like. For example, the geometry processing unit may be programmed to partition the graphics primitives into one or more new graphics primitives and to calculate parameters, such as coefficients for a plane equation, used to rasterize the new graphics primitives.

Die Geometrie-Verarbeitungseinheit sendet die Parameter und die Vertices, die die neuen grafischen Grundelemente angeben, an die VPC 370. Die Geometrie-Verarbeitungseinheit kann Daten auslesen, die in dem gemeinsam benutzten Speicher gespeichert sind, um diese bei der Verarbeitung der Geometriedaten zu verwenden. Die VPC 370 führt Schneidevorgänge, Auswahlvorgänge, perspektivische Korrekturen und eine Transformation des Darstellungsfeldes durch, um zu ermitteln, welche grafischen Grundelemente in dem schließlich erzeugten Bild potentiell betrachtet werden können, und welche grafischen Grundelemente potentiell nicht betrachtet werden können. Die VPC 370 sendet dann die verarbeiteten grafischen Grundelemente an die Kacheleinheit 375.The geometry processing unit sends the parameters and the vertices that the new graphi indicate geometric primitives to the VPC 370. The geometry processing unit may read data stored in the shared memory for use in processing the geometry data. The VPC 370 performs cropping, selection, perspective corrections, and viewport transformation to determine which graphics primitives are potentially viewable and which graphics primitives are potentially not viewable in the final generated image. The VPC 370 then sends the processed graphics primitives to the tiling unit 375.

Die Kacheleinheit 375 ist eine Einheit zum Sortieren grafischer Grundelemente, die zwischen einer Welt-Raum-Pipeline 252 und einer Bildschirm-Raum-Pipeline 354 liegt, wie dies näher hierin beschrieben ist. Grafische Grundelemente werden in der Welt-Raum-Pipeline 352 verarbeitet und anschließend an die Kacheleinheit 375 übergeben. Der Bildschirm-Raum wird in Cache-Kacheln unterteilt, wobei jede Cache-Kachel mit einem Bereich des Bildschirm-Raums verknüpft ist. Für jedes grafische Grundelemente ermittelt die Kacheleinheit 375 die Gruppe aus Cache-Kacheln, die einen Schnittpunkt mit dem grafischen Grundelementen haben, wobei dieser Vorgang wird als „unterteilen in Kacheln“ bezeichnet ist. Nachdem eine gewisse Anzahl an grafischen Grundelementen in Kacheln unterteilt ist, verarbeitet die Kacheleinheit 375 die grafischen Grundelemente auf Ebene von Cache-Kacheln, wobei grafische Grundelemente, die zu einer speziellen Cache-Kachel gehören, zu der Einrichtungseinheit 380 gesendet werden. Die Kreuzungseinheit 375 sendet grafische Grundelemente an die Einrichtungseinheit 380, wobei eine einzige Cache-Kachel pro Zeiteinheit übergeben wird. Grafische Grundelemente, die mehrere Cache-Kacheln schneiden, werden typischerweise einmal in der Welt-Raum-Pipeline 352 verarbeitet, werden dann aber mehrere Male an die Bildschirm-Raum-Pipeline 354 übergeben.The tiling unit 375 is a graphical primitive sorting unit that lies between a world-space pipeline 252 and a screen-space pipeline 354, as further described herein. Graphics primitives are processed in the world space pipeline 352 and then passed to the tiling unit 375 . Screen space is divided into cache tiles, with each cache tile being associated with a region of screen space. For each graphics primitive, the tiling unit 375 determines the set of cache tiles that have an intersection with the graphics primitive, a process referred to as "tiling." After a certain number of graphical primitives are tiled, the tiling unit 375 processes the graphical primitives at the cache tile level, sending graphical primitives associated with a particular cache tile to the setup unit 380 . The crossing unit 375 sends graphics primitives to the setup unit 380, passing a single cache tile at a time. Graphics primitives that intersect multiple cache tiles are typically processed once in the world-space pipeline 352, but are then committed to the screen-space pipeline 354 multiple times.

Eine derartige Technik verbessert die Cache-Speicherlokalität während der Verarbeitung in der Bildschirm-Raum-Pipeline 354, wobei mehrere Speicheroperationen, die mit einer ersten Cache-Kachel verknüpft sind, auf ein Gebiet der L2-Cache-Speicher zugreifen, oder auf einen anderen technisch machbaren Cache-Speicher, der während der Bildschirm-Raum-Verarbeitung der ersten Cache-Kachel beibehalten wird. Sobald die grafischen Grundelemente, die zu der ersten Cache-Kachel gehören, von der Bildschirm-Raum-Pipeline 354 verarbeitet sind, kann der Bereich der L2-Cache-Speicher, der zu der ersten Cache-Kachel gehört, gelöscht werden und die Kacheleinheit kann grafische Grundelemente, die zu einer zweiten Cache-Kachel gehören, übertragen. Es können mehrere Speicheroperationen, die mit einer zweiten Cache-Kachel verknüpft sind, dann auf das Gebiet der L2-Cache-Speicher zugreifen, die während der Bildschirm-Raum-Verarbeitung der zweiten Cache-Kachel erhalten bleiben. Folglich kann der gesamte Speicherverkehr zu den L2-Cache-Speichern und zu den Bilderzeugungszielen reduziert werden. In einigen Ausführungsformen wird die Welt-Raum-Berechnung für ein gegebenes grafisches Grundelement einmal ausgeführt, unabhängig von der Anzahl an Cache-Kacheln in dem Bildschirm-Raum, die das grafische Grundelemente schneiden.Such a technique improves cache locality during processing in the screen-space pipeline 354, where multiple memory operations associated with a first cache tile access one region of the L2 cache, or another technically feasible cache memory maintained during screen-space processing of the first cache tile. Once the graphics primitives associated with the first cache tile are processed by the screen-space pipeline 354, the portion of the L2 cache associated with the first cache tile may be flushed and the tiling unit may be cleaned transfer graphical primitives associated with a second cache tile. Multiple memory operations associated with a second cache tile can then access the region of L2 caches preserved during screen-space processing of the second cache tile. As a result, overall memory traffic to the L2 caches and rendering targets can be reduced. In some embodiments, the world-space computation is performed once for a given graphics primitive, regardless of the number of cache tiles in screen-space that intersect the graphics primitive.

Die Einrichtungseinheit 380 empfängt Vertex-Daten aus der VPC 370 über die Kreuzungseinheit 375 und berechnet Parameter, die mit dem grafischen Grundelemente verknüpft sind, wozu gehören, ohne einschränkend zu sein, Kantengleichungen, Gleichungen für Teilebenen und Tiefebenen-Gleichungen. Die Einrichtungseinheit 380 sendet dann die verarbeiteten grafischen Grundelemente an die Rastereinheit 385.The setup unit 380 receives vertex data from the VPC 370 via the crossing unit 375 and calculates parameters associated with the graphics primitive, including but not limited to edge equations, sub-level equations, and low-level equations. The setup unit 380 then sends the processed graphics primitives to the rasterization unit 385.

Die Rastereinheit 385 wandelt durch Abtastung die neuen grafischen Grundelemente um und sendet Fragmente und Abdeckungsdaten an die Pixel-Schattierungseinheit 390. Des weiteren kann die Rastereinheit 385 ausgebildet sein, eine z-Auswahl und andere z-basierte Optimierungen auszuführen.The rasterizer 385 scan converts the new graphics primitives and sends fragments and coverage data to the pixel shader 390. Furthermore, the rasterizer 385 may be configured to perform z-selection and other z-based optimizations.

Die Pixel-Schattierungseinheit 390 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Fragment-Schattierungsprogramme auszuführen, die Fragmente transformiert, die von der Rastereinheit 385 erhalten werden, wie sie von den Fragment-Schattierungsprogramme angegeben werden. Fragment-Schattierungsprogramme können Fragmente mit einer Auflösung auf Pixelebene schattieren, wobei derartige Schattierungsprogramme Pixel-Schattierungsprogramme genannt werden können. Alternativ können Fragment-Schattierungsprogramme mit einer Auflösung auf Abtastebene schattieren, wobei jedes Pixel mehrere Abtastwerte enthält, und wobei jeder Abtastwert einen Teilbereich eines Pixels repräsentiert. Alternativ können Fragment-Schattierungsprogramme Fragmente mit einer beliebigen anderen technisch machbaren Auflösung schattieren, wobei dies von der programmierten Abtastrate abhängig ist.The pixel shader unit 390 is a programmable execution unit configured to execute fragment shader programs that transforms fragments obtained from the rasterizer unit 385 as specified by the fragment shader programs. Fragment shader programs can shade fragments at pixel-level resolution, and such shader programs may be called pixel shader programs. Alternatively, fragment shader programs can shade at sample-level resolution, where each pixel contains multiple samples, and where each sample represents a sub-area of a pixel. Alternatively, fragment shaders can shade fragments at any other technically feasible resolution, depending on the programmed sampling rate.

In diversen Ausführungsformen kann die Fragment-Verarbeitungseinheit 460 programmiert sein, um Operationen, etwa perspektivische Korrektur, Texturzuordnungen, Schattierung, Mischung und dergleichen auszuführen, um schattierte Fragmente zu erzeugen, die dann an die ROP 395 gesendet werden. Die Pixel-Schattierungseinheit 300 kann Daten lesen, die in dem gemeinsam benutzten Speicher gespeichert sind.In various embodiments, fragment processing unit 460 may be programmed to perform operations such as perspective correction, texture mapping, shading, blending, and the like to generate shaded fragments that are then sent to ROP 395 . The pixel shader 300 can Read data stored in shared memory.

Die ROP 395 ist eine Verarbeitungseinheit, die Raster-Operationen, etwa Schablone, z-Test, Mischung und dergleichen ausführt, und die Pixeldaten als verarbeitete Grafikdaten zur Speicherung im Grafikspeicher über die Speicherschnittstelle 214 übergibt, wobei der Grafikspeicher typischerweise als ein oder mehrere Bilderzeugungsziele strukturiert ist. Die verarbeiteten Grafikdaten können in dem Grafikspeicher, in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 zur Darstellung auf dem Anzeigegerät 110 oder für die Weiterverarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In einigen Ausführungsformen ist die ROP 395 ausgebildet, z-Daten oder Farbdaten zu komprimieren, die in den Speicher geschrieben werden, und z-Daten oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren. In diversen Ausführungsformen kann die ROP 395 in der Speicherschnittstelle 214, in den GPCs 208, in dem Verarbeitungs-Cluster-Array 230 außerhalb der GPCs oder in einer separaten Einheit (nicht gezeigt) in den PPUs 202 angeordnet sein.The ROP 395 is a processing unit that performs raster operations such as stencil, z-test, blending, and the like, and passes the pixel data as processed graphics data for storage in graphics memory via memory interface 214, the graphics memory typically structured as one or more rendering targets is. The processed graphics data may be stored in graphics memory, parallel processing memory 204, or system memory 104 for display on display device 110 or for further processing by CPU 102 or parallel processing subsystem 112. In some embodiments, the ROP 395 is configured to compress z-data or color data that is written to memory and to decompress z-data or color data that is read from memory. In various embodiments, the ROP 395 may be located in the memory interface 214, in the GPCs 208, in the processing cluster array 230 external to the GPCs, or in a separate unit (not shown) in the PPUs 202.

Die Grafikverarbeitungs-Pipeline kann durch ein oder mehrere Verarbeitungselemente in der PPU 202 realisiert werden. Beispielsweise kann einer der SM 310 aus 3A ausgebildet sein, die Funktionen der VTG 365 und/oder der Pixel-Schattierungseinheit 390 auszuführen. Die Funktionen der PD 355, der VAF 360, der VPC 450, der Kacheleinheit 375, der Einrichtungseinheit 380, der Rastereinheit 385 und der ROP 395 können ebenfalls von Verarbeitungselementen innerhalb eines speziellen GPC 208 in Verbindung mit einer entsprechenden Partitionseinheit 215 ausgeführt werden. Alternativ kann die Grafikverarbeitungs-Pipeline 350 unter Anwendung spezieller Verbindungselemente mit festgelegter Funktion für eine oder mehrere der zuvor aufgeführten Funktionen realisiert werden. In diversen Ausführungsformen kann die PPU 202 ausgebildet sein, eine oder mehrere Grafikverarbeitungs-Pipelines 350 zu realisieren.The graphics processing pipeline may be implemented by one or more processing elements in the PPU 202. For example, one of the SM 310 from 3A be configured to perform the functions of the VTG 365 and/or the pixel shader 390. The functions of the PD 355, VAF 360, VPC 450, tiling unit 375, setup unit 380, rasterizer unit 385, and ROP 395 may also be performed by processing elements within a particular GPC 208 in conjunction with a corresponding partition unit 215. Alternatively, the graphics processing pipeline 350 may be implemented using specific fixed function connectors for one or more of the functions listed above. In various embodiments, the PPU 202 may be configured to implement one or more graphics processing pipelines 350 .

In einigen Ausführungsformen kann die Grafikverarbeitungs-Pipeline 350 in eine Bild-Raum-Pipeline 352 und eine Bildschirm-Raum-Pipeline 354 unterteilt werden. Die Welt-Raum-Pipeline 352 verarbeitet grafische Objekte im 3D-Raum, in welchem die Position jedes grafischen Objekts relativ zu anderen grafischen Objekten und relativ zu einem 3D-Koordinatensystem bekannt ist. Die Bildschirm-Raum-Pipeline 354 verarbeitet grafische Objekte, die von dem 3D-Koordinatensystem auf eine 2D-ebene Fläche projiziert worden sind, die die Oberfläche des Anzeigegeräts 110 repräsentiert. Beispielsweise kann die Welt-Raum-Pipeline 352 Pipeline-Stufen in der Grafikverarbeitungs-Pipeline 350 aus der PD 355 bis zu der VPC 370 enthalten. Die Bildschirm-Raum-Pipeline 354 kann Pipeline-Stufen in der Grafikverarbeitungs-Pipeline 350 von der Einrichtungseinheit 380 bis zu der ROP 395 aufweisen. Die Kacheleinheit 375 würde nach der letzten Stufe der Welt-Raum-Pipeline 352, d.h., nach der VPC 370, auftreten. Die Kacheleinheit 375 würde vor der ersten Stufe der Bildschirm-Raum-Pipeline 354, d.h. vor der Einrichtungseinheit 380, auftreten.In some embodiments, the graphics processing pipeline 350 can be divided into an image-space pipeline 352 and a screen-space pipeline 354 . The world-space pipeline 352 processes graphical objects in 3D space, in which the position of each graphical object relative to other graphical objects and relative to a 3D coordinate system is known. The screen-space pipeline 354 processes graphical objects that have been projected from the 3D coordinate system onto a 2D planar surface representing the surface of the display device 110 . For example, the world-space pipeline 352 may include pipeline stages in the graphics processing pipeline 350 from the PD 355 to the VPC 370. The screen-space pipeline 354 may include pipelined stages in the graphics processing pipeline 350 from the setup unit 380 to the ROP 395. The tiling unit 375 would occur after the last stage of the world-space pipeline 352, i.e., after the VPC 370. The tiling unit 375 would occur before the first stage of the screen-space pipeline 354, i.e. before the setup unit 380.

In einigen Ausführungsformen kann die Bild-Raum-Pipeline 352 weiter in eine Alpha-Phasen-Pipeline und eine Beta-Phasen-Pipeline unterteilt werden. Beispielsweise kann die Alpha-Phasen-Pipeline Pipeline-Stufen in der Grafikverarbeitungs-Pipeline 350 von der PD 355 bis zu der Aufgabenerzeugungseinheit enthalten. Die Beta-Phasen-Pipeline kann Pipeline-Stufen in der Grafikverarbeitungs-Pipeline 350 von der Topologie-Erzeugungseinheit bis zu der VPC 370 enthalten. Die Grafikverarbeitungs-Pipeline 350 führt eine erste Gruppe aus Operationen während der Verarbeitung in der Alpha-Phasen-Pipeline aus und führt eine zweite Gruppe aus Operationen während der Verarbeitung in der Beta-Phasen-Pipeline aus. Im hierin verwendeten Sinne ist eine Gruppe aus Operationen als ein oder mehrere Befehle definiert, die von einem einzelnen Strang, von einer Stranggruppe oder von mehreren Stranggruppen, die als Einheit agieren, ausgeführt werden.In some embodiments, the image-space pipeline 352 can be further divided into an alpha-phase pipeline and a beta-phase pipeline. For example, the alpha phase pipeline may include pipeline stages in the graphics processing pipeline 350 from the PD 355 to the task generation unit. The beta phase pipeline may include pipeline stages in the graphics processing pipeline 350 from the topology generation unit to the VPC 370 . Graphics processing pipeline 350 performs a first set of operations during processing in the alpha phase pipeline and performs a second set of operations during processing in the beta phase pipeline. As used herein, a group of operations is defined as one or more instructions to be executed by a single thread, by a thread group, or by multiple thread groups acting as a unit.

In einem System mit mehreren Grafikverarbeitungs-Pipelines 350 können die Vertex-Daten und die Vertex-Attribute, die mit einer Gruppe aus grafischen Objekten verknüpft sind, so unterteilt werden, dass jede Grafikverarbeitungs-Pipeline 350 ungefähr die gleiche Menge an Arbeitslast während der Alpha-Phase besitzt. Die Alpha-Phasenverarbeitung kann die Menge an Vertex-Daten und Vertex-Attributen deutlich erweitern, so dass die Menge an Vertex-Daten und Vertex-Attributen, die von der Aufgabenerzeugungseinheit erzeugt werden, deutlich größer ist als die Menge an Vertex-Daten und Vertex-Attributen, die von der PD 255 und der VAF 360 erzeugt wird. Ferner kann die Aufgabenerzeugungseinheit, die mit einer einzelnen Grafikverarbeitungs-Pipeline 350 verknüpft ist, eine deutlich größere Menge an Vertex-Daten und Vertex-Attributen erzeugen als die Aufgabenerzeugungseinheit, die mit einer anderen Grafikverarbeitungs-Pipeline 350 verknüpft ist, selbst in Fällen, in denen die zwei Grafikverarbeitungs-Pipelines 350 die gleiche Menge an Attributen zu Beginn der Alpha-Phasen-Pipeline verarbeiten. In derartigen Fällen verteilt die Aufgabenverteilungseinheit die Attribute, die von der Alpha-Phasen-Pipeline erzeugt werden, derart um, dass jede Grafikverarbeitungs-Pipeline 350 ungefähr die gleiche Arbeitsauslastung zu Beginn der Beta-Phasen-Pipeline besitzt.In a system with multiple graphics processing pipelines 350, the vertex data and vertex attributes associated with a set of graphical objects can be partitioned such that each graphics processing pipeline 350 performs approximately the same amount of workload during alpha has phase. The alpha phase processing can greatly expand the amount of vertex data and vertex attributes, so the amount of vertex data and vertex attributes generated by the task generation unit is significantly larger than the amount of vertex data and vertex attributes generated by the PD 255 and the VAF 360. Furthermore, the task generation engine associated with a single graphics processing pipeline 350 may generate a significantly larger amount of vertex data and vertex attributes than the task generation engine associated with a different graphics processing pipeline 350, even in cases where the two graphics processing pipelines 350 process the same set of attributes at the beginning of the alpha phase pipeline. In such cases, the task distribution engine redistributes the attributes produced by the alpha phase pipeline such that each graphics processing pipeline 350 has approximately the same workload at the start of the beta phase pipeline.

Zu beachten ist ferner, dass, wie hierin verwendet, Verweise auf einen gemeinsam benutzten Speicher einen oder mehrere technisch machbare Speicher umfassen, wozu gehören, ohne einschränkend zu sein, ein lokaler Speicher, der gemeinsam von dem einen oder den mehreren SM 310 benutzt wird, oder ein Speicher, auf den über die Speicherschnittstelle 214 zugegriffen werden kann, etwa ein Cache-Speicher, der Parallelverarbeitungsspeicher 204 oder der Systemspeicher 104. Es sollte ferner beachtet werden, dass im hierin verwendeten Sinne Verweise auf einen Cache-Speicher einen oder mehrere technisch machbare Speicher mit einschließt, wozu gehören, ohne einschränkend zu sein, ein L1-Cache-Speicher, ein L1.5-Cache-Speicher und die L2-Cache-Speicher.It is further noted that, as used herein, references to shared memory include one or more technically feasible memories, including without limitation local memory shared by the one or more SM 310, or memory accessible via memory interface 214, such as cache memory, parallel processing memory 204, or system memory 104. It should also be noted that, as used herein, references to cache memory include one or more technically feasible ones memory includes, without limitation, an L1 cache, an L1.5 cache, and the L2 caches.

Gekachelte ZwischenspeicherungTiled caching

4 ist eine Konzeptansicht einer Cache-Kachel 410(0), für die die Grafikverarbeitungs-Pipeline 350 aus 3B ausgebildet ist, diese zu erzeugen und zu verarbeiten gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, repräsentiert die Cache-Kachel 410(0) einen Teilbereich eines Bildschirm-Raums 400 und ist in mehrere Raster-Kacheln 420 unterteilt. 4 Figure 4 is a conceptual view of a cache tile 410(0) for which the graphics processing pipeline 350 is generated 3B configured to generate and process them in accordance with an embodiment of the present invention. As shown, cache tile 410( 0 ) represents a portion of screen space 400 and is divided into multiple raster tiles 420 .

Der Bildschirm-Raum 400 repräsentiert einen oder mehrere Speicherpuffer bzw. Pufferspeicher, die ausgebildet sind, erzeugte Bilddaten und andere Daten, die von den Funktionseinheiten innerhalb der Grafikverarbeitungs, Pipeline 350 übergeben wurden, zu speichern. In einigen Ausführungsformen sind der eine oder die mehreren Pufferspeicher als ein oder mehrere Bilderzeugungsziele ausgebildet. Der Bildschirm-Raum repräsentiert einen Pufferspeicher, der ausgebildet ist, das von der Grafikverarbeitungs-Pipeline erzeugte Bild zu speichern. Der Bildschirm-Raum 400 kann mit einer beliebigen Anzahl an Bilderzeugungszielen verknüpft sein, wobei jedes Bilderzeugungsziel unabhängig von anderen Bilderzeugungszielen so konfiguriert sein kann, dass es eine beliebige Anzahl an Feldern enthält. Jedes Feld in einem Bilderzeugungsziel ist unabhängig von anderen Feldern so ausgebildet sein, dass es eine beliebige Anzahl an Bits enthält. Jedes Bilderzeugungsziel kann mehrere Bildelemente (Pixel) enthalten, und jedes Pixel kann wiederum mehrere Abtastwerte enthalten. In einigen Ausführungsformen kann die Größe jeder Cache-Kachel auf der Größe und der Konfiguration der Bilderzeugungsziele, die mit dem Bildschirm-Raum verknüpft sind, beruhen. Wenn im Betrieb die Bilderzeugung abgeschlossen ist, können die Pixel in dem einen oder den mehreren Bilderzeugungszielen an ein Anzeigegerät gesendet werden, um das erzeugte Bild anzuzeigen.Screen space 400 represents one or more memory buffers configured to store rendered image data and other data passed from the functional units within graphics processing pipeline 350 . In some embodiments, the one or more buffers are embodied as one or more rendering targets. Screen space represents a buffer memory configured to store the image generated by the graphics processing pipeline. Screen-space 400 may be associated with any number of rendering targets, and each rendering target may be configured to contain any number of tiles independently of other rendering targets. Each field in an imaging target, independent of other fields, is designed to contain any number of bits. Each render target can contain multiple picture elements (pixels), and each pixel can in turn contain multiple samples. In some embodiments, the size of each cache tile may be based on the size and configuration of rendering targets associated with screen space. In operation, when rendering is complete, the pixels in the one or more rendering targets may be sent to a display device to display the rendered image.

Beispielsweise kann eine Gruppe aus Bilderzeugungszielen für den Bildschirm-Raum 400 acht Bilderzeugungsziele enthalten. Das erste Bilderzeugungsziel kann vier Felder enthalten, die Farben repräsentieren, wozu Rot-, Grün-und Blau-Komponentenfarben und Transparenzinformation, die mit einem entsprechenden Fragment verknüpft sind, gehören. Das zweite Bilderzeugungsziel kann zwei Felder enthalten, die entsprechend Tiefeninformationen und Schabloneninformation repräsentieren, die mit dem entsprechenden Fragment verknüpft sind. Das dritte Bilderzeugungsziel kann drei Felder enthalten, die Information über den Oberflächennormalenvektor einschließlich eines Normalenvektors in der X-Achse und eines Normalenvektors in der Y-Achse und eines Normalenvektors in der Z- Achse, die mit dem entsprechenden Fragment verknüpft sind, repräsentieren. Die verbleibenden fünf Bilderzeugungsziele können so konfiguriert sein, dass sie zusätzliche Information, die zu dem entsprechenden Fragment gehört, speichern. Derartige Konfigurationen können umfassen: einen Speicher für diverse Information einschließlich, ohne einschränkend zu sein, 3D-Positionsdaten, Information für diffuse Beleuchtung und Information für Glanzeleuchtung.For example, a set of render targets for screen-space 400 may include eight render targets. The first rendering target may contain four fields representing colors, including red, green, and blue component colors, and transparency information associated with a corresponding fragment. The second rendering target may contain two fields representing depth information and template information, respectively, associated with the corresponding fragment. The third rendering target may contain three fields representing information about the surface normal vector including an X-axis normal vector and a Y-axis normal vector and a Z-axis normal vector associated with the corresponding fragment. The remaining five rendering targets can be configured to store additional information associated with the corresponding fragment. Such configurations may include: storage for miscellaneous information including, without limitation, 3D position data, diffuse illumination information, and specular illumination information.

Jede Cache-Kachel 410 repräsentiert einen Teilbereich des Bildschirm-Raums 400. Der Klarheit halber sind nur fünf Cache-Kacheln 410(0)-410(4) in 4 gezeigt. In einigen Ausführungsformen besitzen die Cache-Kacheln in dem X-und Y-Bildschirm-Raum eine willkürliche Größe. Wenn beispielsweise eine Cache-Kachel in einem Cache-Speicher liegt, der auch verwendet wird, um andere Daten zu speichern, dann kann die Cache-Kachel so dimensioniert sein, dass nur ein spezieller Bereich des Cache-Speichers eingenommen wird. Die Größe einer Cache-Kachel kann auf einer Reihe von Faktoren beruhen, wozu gehören: die Quantität und die Konfiguration der Bilderzeugungsziele, die mit dem Bildschirm-Raum 400 verknüpft sind, die Menge an Abtastwerten pro Pixel, und ob die in der Cache-Kachel gespeicherten Daten komprimiert sind. Allgemein gilt, dass eine Cache-Kachel so dimensioniert wird, dass die Wahrscheinlichkeit erhöht ist, dass die Cache-Kacheldaten in dem Cache-Speicher beibehalten werden, bis alle grafischen Grundelemente, die mit der Cache-Kachel verknüpft sind, vollständig verarbeitet sind.Each cache tile 410 represents a portion of screen-space 400. For clarity, only five cache tiles 410(0)-410(4) are in 4 shown. In some embodiments, the cache tiles are arbitrarily sized in X and Y screen space. For example, if a cache tile resides in cache memory that is also used to store other data, then the cache tile may be sized to occupy only a specific area of the cache memory. The size of a cache tile can be based on a number of factors, including: the quantity and configuration of rendering targets associated with screen space 400, the amount of samples per pixel, and whether those are in the cache tile stored data is compressed. In general, a cache tile is sized to increase the likelihood that the cache tile data will be retained in cache memory until all of the graphics primitives associated with the cache tile have been fully processed.

Die Raster-Kacheln 420 repräsentieren einen Teilbereich der Cache-Kachel 410(0). Wie gezeigt, enthält die Cache-Kachel 410(0) 16 Raster-Kacheln 420(0)-420(15), die in einem Array angeordnet sind, das eine Breite von vier Raster-Kacheln 420 und eine Höhe von vier Raster-Kacheln 420 aufweist. In Systemen, die mehrere GPCs 208 enthalten, kann die Verarbeitung, die mit einer gegebenen Cache-Kachel 410(0) verknüpft ist, auf die verfügbaren GPCs 208 aufgeteilt werden. In dem gezeigten Beispiel gilt, dass, wenn die 16 Raster-Kacheln der Cache-Kachel 410(0) durch viele unterschiedliche GPCs 208 zu verarbeiten sind, dann jeder GPC 208 so zugeordnet werden kann, dass er vier der 16 Raster-Kacheln 420 in der Cache-Kachel 410(0) verarbeitet. Insbesondere kann der erste GPC 208 zugewiesen werden, die Raster-Kacheln 420(0), 420(7), 420(10) und 420(13) zu verarbeiten. Der zweite GPC 208 kann zugewiesen werden, um Raster-Kacheln 420(1), 420(4), 420(11) und 420(14) zu verarbeiten. Der dritte GPC 208 kann zugewiesen werden, um Raster-Kacheln 420(2), 420(5), 420(8) und 420(15) zu verarbeiten. Der vierte GPC 208 kann dann zugewiesen werden, um Raster-Kacheln 420(3), 420(6), 420(9) und 420(12) zu verarbeiten. In anderen Ausführungsformen kann die Verarbeitung der unterschiedlichen Raster-Kacheln in einer gegebenen Cache-Kachel auf die GPCs 208 oder andere Verarbeitungseinheiten, die in dem Computersystem 100 enthalten sind, auf eine beliebige technisch machbare Weise aufgeteilt werden.The raster tiles 420 represent a portion of the cache tile 410(0). As shown, cache tile 410(0) includes 16 raster tiles 420(0)-420(15) arranged in an array that is four raster tiles 420 wide and four raster tiles high 420 has. In systems that include multiple GPCs 208, the processing associated with a given cache tile 410(0) may be distributed among the available GPCs 208. In the case shown By way of example, if the 16 raster tiles of cache tile 410(0) are to be processed by many different GPCs 208, then each GPC 208 can be assigned to contain four of the 16 raster tiles 420 in the cache Tile 410(0) processed. In particular, the first GPC 208 may be assigned to process raster tiles 420(0), 420(7), 420(10), and 420(13). The second GPC 208 can be assigned to process raster tiles 420(1), 420(4), 420(11), and 420(14). The third GPC 208 can be assigned to process raster tiles 420(2), 420(5), 420(8), and 420(15). The fourth GPC 208 can then be assigned to process raster tiles 420(3), 420(6), 420(9), and 420(12). In other embodiments, the processing of the different raster tiles in a given cache tile may be divided among the GPCs 208 or other processing units included in the computer system 100 in any technically feasible manner.

Adaptiv dimensionierte Cache-KachelnAdaptively sized cache tiles

Die Cache-Kacheln aus 4 sind so dimensioniert, dass sie eine spezielle Bilderzeugungszielkonfiguration aufnehmen. Eine Bilderzeugungszielkonfiguration enthält ein oder mehrere Bilderzeugungsziele, wovon jedes ein oder mehrere Felder enthält. Die Cache-Kachelgröße wird auf der Grundlage der Größe der diversen Felder in den Bilderzeugungszielen einer gegebenen Bilderzeugungszielkonfiguration berechnet.The cache tiles off 4 are sized to accommodate a specific imaging target configuration. A rendering target configuration contains one or more rendering targets, each containing one or more fields. The cache tile size is calculated based on the size of the various fields in the rendering targets of a given rendering target configuration.

5 zeigt eine Gruppe aus Bilderzeugungszielen 599, wie sie in einem oder mehreren der DRAMs 220 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung gespeichert sind. Wie gezeigt, enthält die Gruppe aus Bilderzeugungszielen 500 fünf separate Bilderzeugungsziele 510(0)-510(4). 5 FIG. 12 shows a set of imaging targets 599 as they reside in one or more of the DRAMs 220. FIG 2 are stored in accordance with an embodiment of the present invention. As shown, the set of render targets 500 includes five separate render targets 510(0)-510(4).

Das erste Bilderzeugungsziel 510(0) enthält vier Felder, die einen ersten Satz aus Farb-und Transparenzinformation, der mit einer entsprechenden Abtastung oder einem Fragment verknüpft ist, repräsentieren. Wie gezeigt, umfassen die vier Felder einen Rotwert 515, einen Grünwert 520, einen Blauwert 525 und einen Alpha-oder Transparenz-Wert 530. Der Rotwert 515, der Grünwert 520, der Blauwert 525 und der Alpha-Wert 530 enthalten jeweils ein einzelnes Byte an Daten. Dieses erste Bilderzeugungsziel 520(0) kann als C0 bezeichnet werden, wodurch angegeben wird, dass das erste Bilderzeugungsziel 510(0) einen ersten Satz an Farb-und Alpha-Informationen enthält.The first render target 510(0) contains four fields representing a first set of color and transparency information associated with a corresponding scan or fragment. As shown, the four fields include a red value 515, a green value 520, a blue value 525, and an alpha or transparency value 530. The red value 515, green value 520, blue value 525, and alpha value 530 each contain a single byte of data. This first rendering target 520(0) may be referred to as C0, indicating that the first rendering target 510(0) contains a first set of color and alpha information.

Das zweite Bilderzeugungsziel 510(1) enthält vier Felder, die einen zweiten Satz an Farb-und Transparenzinformationen, die mit einer entsprechenden Abtastung oder einem Fragment verknüpft sind, repräsentieren. Wie gezeigt, beinhalten die vier Felder einen Rotwert 535, einen Grünwert 540, einen Blauwert 545 und einen Alpha-oder Transparenz-Wert 550. Der Rotwert 535, der Grünwert 540, der Blauwert 545 und der Alpha-Wert 550 enthalten jeweils ein einzelnes Byte an Daten. Dieses zweite Bilderzeugungsziel 520(1) kann als C1 bezeichnet werden, wodurch angegeben ist, dass das zweite Bilderzeugungsziel 510(1) einen zweiten Satz an Farb-und Alpha-Informationen enthält.The second render target 510(1) contains four fields representing a second set of color and transparency information associated with a corresponding scan or fragment. As shown, the four fields include a red 535 value, a green 540 value, a blue 545 value, and an alpha or transparency 550 value. The red 535 value, green 540 value, blue 545 value, and alpha 550 value each contain a single byte of data. This second rendering target 520(1) may be referred to as C1, indicating that the second rendering target 510(1) contains a second set of color and alpha information.

Das dritte Bilderzeugungsziel 510(2) beinhaltet zwei Felder, die einen ersten Satz an Tiefen-und Schabloneninformationen, die mit einem entsprechenden Abtastwert oder einem Fragment verknüpft sind, repräsentieren. Wie gezeigt, umfassen die beiden Felder einen z-oder Tiefen-Wert 555 und eine Schablonenmaske 560. Wie gezeigt, enthält der z-Wert 555 drei Bytes an Daten, während die Schablonenmaske 560 ein einzelnes Byte an Daten enthält. Dieses dritte Bilderzeugungsziel 520(2) kann als Z0 bezeichnet werden, wodurch angegeben ist, dass das dritte Bilderzeugungsziel 510(2) einen ersten Satz an z-und Schabloneninformationen enthält.The third render target 510(2) includes two fields representing a first set of depth and template information associated with a corresponding sample or fragment. As shown, the two fields include a z or depth value 555 and a template mask 560. As shown, the z value 555 contains three bytes of data, while the template mask 560 contains a single byte of data. This third rendering target 520(2) may be referred to as Z0, indicating that the third rendering target 510(2) contains a first set of z and template information.

Das vierte Bilderzeugungsziel 510(3) enthält zwei Felder, die einen zweiten Satz an Tiefen-und Schabloneninformationen, die mit einem entsprechenden Abtastwert oder Fragment verknüpft sind, repräsentieren. Wie gezeigt, beinhalten die beiden Felder einen z-oder Tiefen-Wert 565 und eine Schablonenmaske 570. Wie gezeigt, enthält der z-Wert 565 drei Bytes an Daten, während die Schablonenmaske 570 ein einzelnes Byte an Daten enthält. Dieses vierte Bilderzeugungsziel 520(3) kann als Z1 bezeichnet werden, wodurch angegeben wird, dass das vierte Bilderzeugungsziel 510(3) einen zweiten Satz an z-und Schabloneninformationen enthält.The fourth rendering target 510(3) contains two fields representing a second set of depth and template information associated with a corresponding sample or fragment. As shown, the two fields include a z or depth value 565 and a stencil mask 570. As shown, the z value 565 contains three bytes of data, while the stencil mask 570 contains a single byte of data. This fourth rendering target 520(3) may be referred to as Z1, indicating that the fourth rendering target 510(3) contains a second set of z and template information.

Das fünfte Bilderzeugungsziel 510(4) enthält vier Felder, die Informationen über Oberflächennormalenvektoren, die mit einem entsprechenden Abtastwert oder einem Fragment verknüpft sind, repräsentieren. Wie gezeigt, enthalten die vier Felder einen X- Achsen-Normalvektor 475, einen Y-Achsen-Normalvektor 580 und einen Z- Achsen-Normalvektor 585. In dieser speziellen Konfiguration für das fünfte Bilderzeugungsziel 510(4) ist das vierte Feld ein ungenutztes Feld 590. Der X-Achsen-Normalvektor 575, der Y-Achsen-Normalvektor 580 und der Z-Achsen-Normalvektor 585 und das unbenutzte Feld 590 enthalten jeweils 1 Byte an Daten. Dieses fünfte Bilderzeugungsziel 520(4) kann als N0 bezeichnet werden, wodurch angegeben wird, dass das fünfte Bilderzeugungsziel 510(4) einen ersten Satz an Oberflächennormaleninformation enthält.The fifth rendering target 510(4) contains four fields representing information about surface normal vectors associated with a corresponding sample or fragment. As shown, the four fields include an X-axis normal vector 475, a Y-axis normal vector 580, and a Z-axis normal vector 585. In this particular configuration for the fifth rendering target 510(4), the fourth field is an unused field 590. The X-axis normal vector 575, the Y-axis normal vector 580 and the Z-axis normal vector 585 and the unused field 590 each contain 1 byte of data. This fifth rendering target 520(4) may be referred to as N0, indicating that the fifth rendering target 510(4) contains a first set of surface normal information.

Beim Voranschreiten des Bilderzeugungsvorgangs ändert sich die Bilderzeugungszielkonfiguration. Jede Bilderzeugungszielkonfiguration enthält die Gruppe aus Bilderzeugungszielen, die für eine spezielle Phase der Bilderzeugung verwendet wird. Die Cache-Kachel kann gelöscht und neu dimensioniert werden an der Grenze zwischen einer aktuellen Bilderzeugungszielkonfiguration und einer neuen Bilderzeugungszielkonfiguration. In einigen Ausführungsformen wird die Cache-Kachel nicht gelöscht und neu dimensioniert in Fällen, in denen die neue Bilderzeugungszielkonfiguration eine Teilmenge der aktuellen Bilderzeugungszielkonfiguration ist.As the imaging process progresses, the imaging target configuration changes ration. Each rendering target configuration contains the set of rendering targets used for a particular stage of rendering. The cache tile can be cleared and resized at the boundary between a current rendering target configuration and a new rendering target configuration. In some embodiments, the cache tile is not flushed and resized in cases where the new rendering target configuration is a subset of the current rendering target configuration.

6 zeigt eine Reihe von Bilderzeugungszielkonfigurationen 600, die mit der Erzeugung eines Computergrafikbildes gemäß einer Ausführungsform der vorliegenden Erfindung verknüpft ist. Wie gezeigt, enthält die Reihe aus Bilderzeugungszielkonfigurationen 600 acht Bilderzeugungszielkonfigurationen 610(0)-610(7) in einer gegebenen Reihenfolge. 6 FIG. 6 shows a series of image generation target configurations 600 associated with the generation of a computer graphics image according to an embodiment of the present invention. As shown, the row of rendering target configurations 600 includes eight rendering target configurations 610(0)-610(7) in a given order.

Wenn die Bilderzeugung des Computergrafikbildes beginnt, gibt die erste Bilderzeugungszielkonfiguration 610(0) an, dass das erste Farb/Alpha-Bilderzeugungsziel C0, das erste Z/Schablonen-Bilderzeugungsziel Z0 und das Normalenvektor-Bilderzeugungsziel N0 während dieser Phase der Bilderzeugung verwendet werden. Folglich wird diese erste Bilderzeugungszielkonfiguration 610(0) als C0Z0N0 bezeichnet.When rendering of the computer graphics image begins, the first rendering target configuration 610(0) indicates that the first color/alpha rendering target C0, the first Z/template rendering target Z0, and the normal vector rendering target N0 are used during this phase of rendering. Consequently, this first rendering target configuration 610(0) is denoted as C0Z0N0.

Es wird eine Cache-Kachelgröße auf der Grundlage der ersten Bilderzeugungszielkonfiguration 610(0) berechnet. Zuerst wird die Größe des Cache-Speichers, der von der Cache-Kachel eingenommen wird, durch die Speichergröße geteilt, die für jede Position in der ersten Bilderzeugungszielkonfiguration 610(0) benötigt wird, woraus sich die Anzahl an Pixel in der Cache-Kachel ergibt. Der Speicherraum könnte in Einheiten von Bytes oder einem anderen geeigneten Maß gemessen werden. Diese Ansammlung an Pixel wird dann verwendet, um die Cache-Kachelgröße zu ermitteln. In einem Beispiel beträgt die Größe des Cache-Speichers 153600 Bytes und die Hälfte des Cache-Speichers wird von der Cache-Kachel eingenommen. Die Größe des Speichers, der von der Cache-Kachel eingenommen wird, wäre 153600/2 oder 76800 Bytes. Die Anzahl an Bytes, die von jedem Platz in der Bilderzeugungszielkonfiguration 610(0) eingenommen wird, wäre drei Bilderzeugungsziele X vier Bytes pro Bilderzeugungsziel, oder 12 Bytes. Die Anzahl an Pixel in der Cache-Kachel beträgt dann 76800/12 oder 6400 Pixel. Für quadratische Cache-Kacheln ergäbe sich die Cache-Kachel zu 6400½ oder 80 Pixel Breite X 80 Pixel Höhe. Alternativ könnte die Cache-Kachelgröße auch ein beliebiges technisch machbares Format sein, das nicht quadratisch ist, etwa eine Breite von 64 Pixel X eine Höhe von 100 Pixel.A cache tile size is calculated based on the first rendering target configuration 610(0). First, the amount of cache memory occupied by the cache tile is divided by the amount of memory required for each location in the first rendering target configuration 610(0), which gives the number of pixels in the cache tile . Storage space could be measured in units of bytes or some other suitable measure. This collection of pixels is then used to determine the cache tile size. In one example, the size of the cache memory is 153600 bytes and half of the cache memory is occupied by the cache tile. The amount of memory occupied by the cache tile would be 153600/2 or 76800 bytes. The number of bytes occupied by each location in render target configuration 610(0) would be three render targets X four bytes per render target, or 12 bytes. The number of pixels in the cache tile is then 76800/12 or 6400 pixels. For square cache tiles, the cache tile would be 6400½ or 80 pixels wide X 80 pixels high. Alternatively, the cache tile size could be any technically feasible format that is not square, such as 64 pixels wide X 100 pixels high.

Beim Voranschreiten der Bilderzeugung eines Computergrafikbildes gibt die zweite Bilderzeugungszielkonfiguration 610(1) an, dass das zweite Farb/Alpha-Bilderzeugungsziel C1 und das zweite Z/Schablonen-Bilderzeugungsziel Z1 während dieser Phase der Bilderzeugung verwendet werden. Folglich wird diese zweite Bilderzeugungszielkonfiguration 610(1) als C1Z1 bezeichnet. Da sich die Bilderzeugungszielkonfiguration geändert hat, wird die Cache-Kachel gelöscht, und es wird eine neue Cache-Kachelgröße berechnet.As the rendering of a computer graphics image proceeds, the second rendering target configuration 610(1) indicates that the second color/alpha rendering target C1 and the second Z/template rendering target Z1 are used during this phase of rendering. Consequently, this second imaging target configuration 610(1) is referred to as C1Z1. Since the render target configuration has changed, the cache tile is cleared and a new cache tile size is calculated.

Die neue Cache-Kachelgröße wird auf der Grundlage der zweiten Bilderzeugungszielkonfiguration 610(1) berechnet. In einem Beispiel beträgt die Größe des Cache-Speichers 153600 Bytes und die Hälfte des Cachespeichers, d.h. 76800 Bytes, wird von der Cache-Kachel eingenommen. Die Anzahl an Bytes, die von jeder Position in der Bilderzeugungszielkonfiguration 610(1) eingenommen wird, beträgt zwei Bilderzeugungsziele X vier Bytes pro Bilderzeugungsziel, oder 8 Bytes. Die Anzahl an Pixel in der Cache-Kachel beträgt dann 76800/8 oder 9600 Pixel. Für quadratische Cache-Kacheln ergäbe sich für die Cache-Kachel 9600½ ' was sich auf 98 Pixel Breite X 98 Pixel Höhe aufrundet. Alternativ kann die Cache-Kachelgröße ein beliebiges technisch machbares Format sein, das nicht quadratisch ist, etwa eine Breite von 75 Pixel X eine Höhe von 128 Pixel.The new cache tile size is calculated based on the second rendering target configuration 610(1). In one example, the size of the cache memory is 153600 bytes and half of the cache memory, ie 76800 bytes, is occupied by the cache tile. The number of bytes occupied by each position in render target configuration 610(1) is two render targets X four bytes per render target, or 8 bytes. The number of pixels in the cache tile is then 76800/8 or 9600 pixels. For square cache tiles, the cache tile would be 9600 ½ ', which rounds up to 98 pixels wide X 98 pixels high. Alternatively, the cache tile size can be any technically feasible format that is not square, such as 75 pixels wide X 128 pixels high.

Beim Voranschreiten der Bilderzeugung des Computergrafikbildes gibt die dritte Bilderzeugungszielkonfiguration 610(2) an, dass das erste Farb/Alpha-Bilderzeugungsziel C0 und das erste Z/Schablonen-Bilderzeugungsziel Z0 während dieser Phase der Bilderzeugung verwendet werden. Folglich wird diese dritte Bilderzeugungszielkonfiguration 610(2) C0Z0 bezeichnet. Da sich die Bilderzeugungszielkonfiguration geändert hat, wird die Cache-Kachel gelöscht, und es wird eine neue Cache-Kachelgröße berechnet. In diesem Falle ist die Anzahl an Bytes, die der dritten Bilderzeugungszielkonfiguration 610(2) entspricht, die gleiche wie für die zweite Bilderzeugungszielkonfiguration 610(1). Folglich ändert sich die Cache-Kachelgröße von der zweiten Bilderzeugungszielkonfiguration 610(1) zu der dritten Bilderzeugungszielkonfiguration 610(2) nicht.As the rendering of the computer graphics image progresses, the third rendering target configuration 610(2) indicates that the first color/alpha rendering target C0 and the first Z/template rendering target Z0 are used during this phase of rendering. Accordingly, this third rendering target configuration 610(2) is denoted C0Z0. Since the rendering target configuration has changed, the cache tile is cleared and a new cache tile size is calculated. In this case, the number of bytes corresponding to the third rendering target configuration 610(2) is the same as for the second rendering target configuration 610(1). Consequently, the cache tile size does not change from the second rendering target configuration 610(1) to the third rendering target configuration 610(2).

Beim Voranschreiten der Bilderzeugung des Computergrafikbildes gibt die vierte Bilderzeugungszielkonfiguration 610(3) an, dass das erste Farb/Alpha-Bilderzeugungsziel C0, das zweite Farb/Alpha-Bilderzeugungsziel C1 und das erste Z/Schablonen-Bilderzeugungsziel Z0 während dieser Phase der Bilderzeugung verwendet werden. Folglich wird diese vierte Bilderzeugungszielkonfiguration 610(3) als C0C1Z0 bezeichnet. Da sich die Bilderzeugungszielkonfiguration geändert hat, wird die Cache-Kachel gelöscht, und es wird eine neue Cache-Kachelgröße berechnet. In diesem Falle ist die Anzahl an Bytes, die der vierten Bilderzeugungszielkonfiguration 610(3) entspricht, gleich derjenigen für die erste Bilderzeugungszielkonfiguration 610(0). Folglich wird die Cache-Kachelgröße so berechnet, wie dies zuvor in Verbindung mit der ersten Bilderzeugungszielkonfiguration 610(0) beschrieben ist. As the rendering of the computer graphics image progresses, the fourth rendering target configuration 610(3) indicates that the first color/alpha rendering target C0, the second color/alpha rendering target C1, and the first Z/template rendering target Z0 are used during this phase of rendering . Consequently, this fourth rendering target configuration 610(3) is denoted as C0C1Z0. Because the rendering target configuration has changed, the cache tile is cleared and a new cache tile size calculated. In this case, the number of bytes corresponding to the fourth rendering target configuration 610(3) is equal to that for the first rendering target configuration 610(0). Thus, the cache tile size is calculated as previously described in connection with the first rendering target configuration 610(0).

Beim Voranschreiten der Bilderzeugung des Computergrafikbildes spezifizieren jeweils die fünfte bis achte Bilderzeugungszielkonfiguration 610(4)-610(7) Bilderzeugungszielkonfigurationen C0Z0, C0C1Z0, C0C1 und C0C1Z0. In einer Ausführungsform wird die Cache-Kachel gelöscht und es wird eine neue Cache-Kachel berechnet, wie dies zuvor beschrieben ist, wenn die Bilderzeugung jeweils die Änderung in der Bilderzeugungszielkonfiguration 610 durchläuft. Jedoch können das Löschen und die neue Dimensionierung der Cache-Kachel rechentechnisch aufwändig sein und können die Bilderzeugung mit einer neuen Bilderzeugungszielkonfiguration 610 verzögern, während die aktuelle Cache-Kachel gelöscht wird. Ferner reduziert die Löschung die Anzahl an grafischen Grundelementen, die zusammen in der Cache-Kachel eingeteilt sind, wodurch entsprechend der Vorteil der Kachelbildung verringert wird.As the rendering of the computer graphics image progresses, the fifth through eighth rendering target configurations 610(4)-610(7) specify rendering target configurations C0Z0, C0C1Z0, C0C1, and C0C1Z0, respectively. In one embodiment, as the rendering progresses through each change in rendering target configuration 610, the cache tile is cleared and a new cache tile is computed, as previously described. However, clearing and resizing the cache tile may be computationally expensive and may delay rendering with a new rendering target configuration 610 while the current cache tile is cleared. Furthermore, the purge reduces the number of graphics primitives that are scheduled together in the cache tile, correspondingly reducing the benefit of tiling.

Folglich wird in einer weiteren Ausführungsform die Cache-Kachel weder gelöscht noch neu dimensioniert, wenn eine neue Bilderzeugungszielkonfiguration 610 eine Teilmenge der aktuellen Bilderzeugungszielkonfiguration 610 repräsentiert. Diese Vorgehensweise schließt eine Situation mit ein, in der die neue Bilderzeugungszielkonfiguration 610 die gleiche ist wie die aktuelle Bilderzeugungszielkonfiguration 610. Eine derartige Vorgehensweise kann in einer weniger effizienten Nutzung des Cache-Speichers resultieren. Andererseits können das Löschen und die neu Dimensionierung von Cache-Kacheln verringert werden, was zu einer größeren Effizienz und Leistungssteigerung führen kann, und zwar in einem höheren Maße, als die Effizienz der Cache-Speichernutzung reduziert ist. In einer noch weiteren Ausführungsform kann die Verbesserung der Effizienz der Cache-Speichernutzung, die sich aus der Änderung der Cache-Kachelgröße ergibt, verglichen werden mit der Leistungssteigerung für den Fall, wenn die Cache-Kachel nicht gelöscht und neu dimensioniert wird. Die Entscheidung darüber, ob die aktuelle Cache-Kachelkonfiguration beibehalten werden soll, oder ob die Cache-Kachel gelöscht und neu dimensionierten soll, kann gemäß diesem Vergleich getroffen werden.Thus, in another embodiment, when a new rendering target configuration 610 represents a subset of the current rendering target configuration 610, the cache tile is neither deleted nor resized. This approach involves a situation where the new rendering target configuration 610 is the same as the current rendering target configuration 610. Such a practice may result in less efficient use of cache memory. On the other hand, cache tile flushing and resizing may be reduced, which may result in greater efficiency and performance gains, to a greater degree as cache memory utilization efficiency is reduced. In yet another embodiment, the improvement in cache memory utilization efficiency that results from changing the cache tile size can be compared to the performance increase if the cache tile is not cleared and resized. The decision as to whether to keep the current cache tile configuration or to delete and resize the cache tile can be made according to this comparison.

Mit dieser zuletzt genannten Vorgehensweise ist jeweils die fünfte bis achte Bilderzeugungszielkonfiguration 610(4)-610(7) eine Teilmenge der vierten Bilderzeugungszielkonfiguration 610(3). Damit kann die Cache-Kachelgröße so bleiben, wie sie für die vierte Bilderzeugungszielkonfiguration 610(3) konfiguriert ist, während der Bilderzeugungsvorgang die fünfte bis achte Bilderzeugungszielkonfiguration 610(4)-610(7) durchläuft. Alternativ können die Cache-Kachel und einige oder alle Änderungen in der fünften bis achten Bilderzeugungszielkonfiguration 610(4)-610(7) gelöscht und neu dimensioniert werden.With this latter approach, each of the fifth through eighth rendering target configurations 610(4)-610(7) is a subset of the fourth rendering target configuration 610(3). This allows the cache tile size to remain as configured for the fourth rendering target configuration 610(3) while the rendering process progresses through the fifth through eighth rendering target configurations 610(4)-610(7). Alternatively, the cache tile and some or all of the changes in the fifth through eighth rendering target configurations 610(4)-610(7) may be cleared and resized.

In einer Ausführungsform kann die Cache-Kachelgröße gemäß dem aktuell ausgewählten Fehlerbehebungsmodus modifiziert werden. In dem Fehlerbehebungsmodus können mehrere Abtastwerte für jede Pixelposition gespeichert und später zusammengeführt werden, woraus sich eine verbesserte Bildqualität in dem schließlich erzeugten Bild ergibt. Der Fehlerbehebungsmodus kann numerisch angegeben werden, wobei Bezeichnungen verwendet werden, etwa AA-1, AA-2, AA-4 oder AA-8, wodurch angegeben wird, dass jedes Pixel entsprechend 1, 2, 4, oder 8 Abtastwerte enthält. Folglich kann jedes Pixel einer Cache-Kachel 1, 2, 4, oder 8 mal der Menge an Bytes entsprechend verbrauchen im Vergleich zu einem Pixel in einer Cache-Kachel, in der keine Fehlerbehebung verwendet wird. Die Berechnung der Cache-Kachelgröße kann den Fehlerbehebungsmodus berücksichtigen, wenn die Cache-Kachelgröße berechnet wird. Beispielsweise kann eine Cache-Kachel 76800 Bytes in einer Bilderzeugungszielkonfiguration enthalten, die 12 Bytes pro Pixel einnimmt. Eine derartige Cache-Kachel würde 6400 Pixel ohne Fehlerbehebungsmodus enthalten, wie zuvor beschrieben ist. Mit einem Fehlerbehebungsmodus würde die Cache-Kachel entsprechend 6400, 3200, 1600 oder 800 Pixel für den AA-1, AA-2, AA-4 oder AA-8-Modus enthalten. Wenn die Cache-Kacheln quadratisch sind, würde jede Cache-Kachel entsprechend als 80 X 80, 57 X 57, 40 X 40 oder 29 X 29 Pixel formatiert.In one embodiment, the cache tile size may be modified according to the currently selected debugging mode. In debugging mode, multiple samples can be stored for each pixel location and later merged, resulting in improved image quality in the final image produced. The debugging mode can be specified numerically using labels such as AA-1, AA-2, AA-4, or AA-8, indicating that each pixel contains 1, 2, 4, or 8 samples, respectively. Thus, each pixel of a cache tile may consume 1, 2, 4, or 8 times the amount of bytes, respectively, compared to a pixel in a cache tile that does not use error recovery. The cache tile size calculation can take the debug mode into account when calculating the cache tile size. For example, a cache tile may contain 76800 bytes in a rendering target configuration that occupies 12 bytes per pixel. Such a cache tile would contain 6400 pixels with no debugging mode as previously described. With an error-fixing mode, the cache tile would contain 6400, 3200, 1600, or 800 pixels for AA-1, AA-2, AA-4, or AA-8 mode, respectively. If the cache tiles are square, each cache tile would be formatted as 80 X 80, 57 X 57, 40 X 40, or 29 X 29 pixels, respectively.

In einigen Ausführungsformen können die Cache-Kacheln größer sein, um vorteilhaft die Tatsache auszunutzen, dass die Abtastdaten für jedes Pixel bei höheren Fehlerbehebungsmodi komprimiert werden können. Beispielsweise können die Fehlerbehebungsmodi AA-1, AA-2, AA-4 oder AA-8 1, 2, 3 oder 5 mal die Menge an Bytes entsprechend verbrauchen im Vergleich zu einem Pixel einer Cache-Kachel, wenn keine Fehlerbehebung eingesetzt wird. Die Berechnung der Cache-Kachelgröße kann den Fehlerbehebungsmodus berücksichtigen, wenn die Cache-Kachelgröße berechnet wird. Eine Cache-Kachel kann 76800 Bytes in einer Bilderzeugungszielkonfiguration enthalten, die 12 Bytes pro Pixel einnimmt. Eine derartige Cache-Kachel würde 6100 Pixel ohne Fehlerbehebungsmodus enthalten, wie zuvor beschrieben ist. Mit Fehlerbehebungsmodus würde die Cache-Kachel entsprechend 6400, 3200, 2134 oder 1280 Pixel für den AA-1, AA-2, AA-4 oder AA-8-Modus enthalten. Wenn die Cache-Kacheln quadratisch sind, würde jede Cache-Kachel sprechend als 80 X 80, 57 X 57, 47 X 47 oder 36 X 36 Pixel formatiert werden.In some embodiments, the cache tiles may be larger to take advantage of the fact that sample data for each pixel may be compressed at higher debugging modes. For example, debugging modes AA-1, AA-2, AA-4, or AA-8 may consume 1, 2, 3, or 5 times the amount of bytes, respectively, compared to a pixel of a cache tile if no debugging is employed. The cache tile size calculation can take the debug mode into account when calculating the cache tile size. A cache tile can contain 76800 bytes in a rendering target configuration that occupies 12 bytes per pixel. Such a cache tile would contain 6100 pixels with no debugging mode as previously described. With debugging mode, the cache tile would be 6400, 3200, 2134, or 1280 pixels for the AA-1, AA-2, AA-4 or AA-8 mode included. Similarly, if the cache tiles are square, each cache tile would be formatted as 80 X 80, 57 X 57, 47 X 47, or 36 X 36 pixels.

In einer noch weiteren Ausführungsform kann eine Oberflächenkomprimierung angewendet werden, um die Cache-Kachelgröße weiter zu erhöhen. Oberflächendaten aus den Raster-Operationseinheiten 395, etwa ZROP-und CROP-Daten, können in komprimierter Weise in den Bilderzeugungszielen 510 gespeichert werden. Derartige komprimierte Oberflächendaten können mit den L2-Cache-Speichern ohne Dekomprimierung und Rekomprimierung der Daten ausgetauscht werden, wodurch der Verkehr zwischen den Bilderzeugungszielen und dem L2-Cache-Speicher reduziert wird. Die komprimierten Oberflächendaten können in dem L2-Cache-Speicher in einem komprimierten Format gespeichert werden, wodurch der Speicherverbrauch in dem L2-Cache-Speicher verringert wird. Die Berechnung der Cache-Kachelgröße kann in einer Weise modifiziert werden, die ähnlich zu der zuvor in Verbindung mit den Fehlerbehebungsmodi beschriebenen Weise ist, wobei das abgeschätzte oder tatsächliche Komprimierungsverhältnis, das mit der Oberflächenkomprimierung verknüpft ist, verwendet wird.In yet another embodiment, surface compression may be applied to further increase the cache tile size. Surface data from the raster operation units 395, such as ZROP and CROP data, may be stored in the rendering targets 510 in a compressed manner. Such compressed surface data can be exchanged with the L2 caches without decompression and recompression of the data, thereby reducing traffic between rendering targets and the L2 cache. The compressed surface data may be stored in the L2 cache in a compressed format, thereby reducing memory consumption in the L2 cache. The calculation of the cache tile size can be modified in a manner similar to that previously described in connection with the debugging modes using the estimated or actual compression ratio associated with the surface compression.

In einer weiteren Ausführungsform, in der die Cache-Kachel in einem vereinheitlichten Cache-Speicher liegt, etwa dem L2-Cache-Speicher, wie dies hierin beschrieben ist, kann eine Cache-Steuerung vorteilhaft anderen Cache-Verkehr zu und von den Bilderzeugungszielen 510 ausnutzen, um die externe Speicherbandbreite zu verringern und das Leistungsverhalten zu verbessern. Cache-Kacheln können in dem L2-Cache-Speicher mittels einer EVICT_NORMAL-Politik gespeichert werden, wobei Cache-Kacheln standardmäßigen Verdrängungsregeln unterworfen werden, die andere Daten betreffen können, die in dem L2-Cache-Speicher gespeichert sind und die die gleiche Verdrängungspolitik besitzen, etwa wenn sie in Beziehung stehen zu der ROP-Einheit 395, der VAF 360 und der Textureinheit (nicht gezeigt). Wenn die geometrischen Grundelemente für eine spezielle Cache-Kachel verarbeitet werden, können der Datenstrom-Multiprozessor 310 (über globale Ladeoperationen und globale Speicheroperationen), die ROP 395 und die Textureinheit Speicheroperationen ausführen, die mit dem speziellen Gebiet des Bildschirms, das die Cache-Kachel beeinflusst, verknüpft sind. Alle derartigen Speicheroperationen können über den gleichen L2-Cache-Speicher ausgeführt werden.In another embodiment where the cache tile resides in a unified cache, such as L2 cache, as described herein, a cache controller may advantageously exploit other cache traffic to and from rendering targets 510 to reduce external memory bandwidth and improve performance. Cache tiles may be stored in the L2 cache using an EVICT_NORMAL policy, subjecting cache tiles to standard eviction rules that may affect other data stored in the L2 cache that have the same eviction policy , such as when related to the ROP unit 395, the VAF 360, and the texture unit (not shown). When processing the geometric primitives for a particular cache tile, the data stream multiprocessor 310 (via global loads and global stores), the ROP 395, and the texture unit may perform memory operations associated with the particular area of the screen containing the cache tile influenced, linked. All such memory operations can be performed through the same L2 cache.

Die Zwischenspeicherung von Daten über einen vereinheitlichten L2-Cache-Speicher, wie dies zuvor beschrieben ist, ermöglicht es der Cache-Steuerung, den Cache-Speicher zwischen diversen Nutzungsformen dynamisch zuzuweisen, wozu, ohne einschränkend zu sein, Cache-Kacheldaten, Vertex-Attributdaten und Texturdaten gehören. Beispielsweise kann die Cache-Steuerung einen größeren Teil des Cache-Speichers für Daten, die keine Cache-Kacheldaten sind, etwa Texturdaten, zuweisen, wodurch sich ein verbessertes Cache-Leistungsverhalten für diese anderen Daten ergibt. Damit ist die Cache-Steuerung nicht auf eine statische L2-Cache-Partitionierung oder auf eine Architektur beschränkt, die einen separaten speziellen Cache-Speicher für Cache-Kacheldaten und einen zweiten speziellen Cache-Speicher für andere Daten, etwa Vertex-Attributdaten und Texturdaten enthalten. Vielmehr wählt die Cache-Steuerung dynamisch die Partitionierung bzw. Aufteilung des einzelnen vereinheitlichten L2-Cache-Speichers zwischen Cache-Kacheldaten und anderen Daten aus auf der Grundlage der aktuellen Anforderungen für die Cache-Speicherressourcen.Caching data via a unified L2 cache as described above allows the cache controller to dynamically allocate cache memory between various usages including, without limitation, cache tile data, vertex attribute data and texture data. For example, the cache controller may allocate more of the cache memory for non-cache-tile data, such as texture data, resulting in improved cache performance for that other data. Thus, cache control is not limited to static L2 cache partitioning or to an architecture that includes a separate dedicated cache for cache tile data and a second dedicated cache for other data such as vertex attribute data and texture data . Rather, the cache controller dynamically selects the partitioning of the single unified L2 cache between cache tile data and other data based on current cache resource requirements.

Da Zugriffe auf die Cache-Kacheldaten der gleichen EVICT_NORMAL-Verdrängungsstrategie wie andere L2-Daten-Verkehrsströme unterliegen, enthält der L2-Cache-Speicher keine statische Partitionierung zwischen diesen unterschiedlichen Verkehrsströmen. Folglich kann die Cache-Steuerung Verkehr zwischen dem L2-Cache-Speicher und Bereichen eines Bilderzeugungszielspeichers kombinieren, um den Verkehr zwischen dem L2-Cache-Speicher und den Bilderzeugungszielen 510 weiter zu reduzieren, wobei die zeitliche und räumliche Lokalität von Cache-Daten vorteilhaft ausgenutzt wird.Since accesses to the cache tile data are subject to the same EVICT_NORMAL eviction policy as other L2 data traffic streams, the L2 cache does not include static partitioning between these different traffic streams. Thus, the cache controller may combine traffic between the L2 cache and regions of rendering target memory to further reduce traffic between the L2 cache and rendering targets 510, taking advantage of the temporal and spatial locality of cache data will.

In einem Beispiel kann die Cache-Steuerung Schreib-Transaktionen kombinieren, die an die gleiche Bilderzeugungszielposition aus der ZROP-Einheit, der CROP-Einheit oder aus globalen Speicherzugriffen aus dem SM 310 gerichtet sind. Die Cache-Steuerung kann diese Schreib-Transaktionen in den L2-Cache-Speicher mittels der Zurückschreiben-Strategie kombinieren, während die Cache-Kachel in dem L2-Cache-Speicher liegt. Die Cache-Steuerung kann dann die Daten aus dem L2-Cache-Speicher in die Bilderzeugungsziele 510 in einer einzelnen Transaktion schreiben. Diese Vorgehensweise nutzt vorteilhaft die räumliche Lokalität für Schreib-Transaktionen, die mit Bilderzeugungszieldaten verknüpft sind, aus.In one example, the cache controller may combine write transactions directed to the same rendering target location from the ZROP unit, the CROP unit, or from SM 310 global memory accesses. The cache controller may combine these write transactions to the L2 cache using the write-back strategy while the cache tile resides in the L2 cache. The cache controller can then write the data from the L2 cache to the rendering targets 510 in a single transaction. This approach takes advantage of spatial locality for write transactions associated with rendering target data.

In einem noch weiteren Beispiel kann aufgrund der quadratischen oder rechteckigen Form der Cache-Kacheln, die in einem Gebiet aus benachbarten Pixel in den Bilderzeugungszielen 510 vorhanden sind, die Cache-Steuerung mit höherer Wahrscheinlichkeit benachbarte Speicheradressen aus den Bilderzeugungszielen auslesen. Derartige Daten können einmal aus den Bilderzeugungszielen 510 abgeholt und in dem L2-Cache-Speicher gespeichert werden. Auf die gelesenen Daten kann dann mehrere Male zugegriffen werden, während die Daten in dem L2-Cache-Speicher liegen. Diese Vorgehensweise nutzt die räumliche Lokalität für Lese-Transaktionen, die mit den Bilderzeugungszieldaten verknüpft sind, vorteilhaft aus.In yet another example, due to the square or rectangular shape of the cache tiles present in an area of adjacent pixels in the render targets 510, the cache controller may have a higher probability of reading adjacent memory addresses from the render targets. Such data can be fetched once from the rendering targets 510 and stored in the L2 cache be cherted. The read data can then be accessed multiple times while the data resides in the L2 cache. This approach takes advantage of spatial locality for read transactions associated with the rendering target data.

In einem noch weiteren Beispiel können Speicher-Lese-Transaktionen, die sich auf die gleiche Position in den Bilderzeugungszielen 510 zielen, zeitlich nahe beieinander während der Bilderzeugung erfolgen. Überlappende Grundelemente können auf die gleiche Textur zugreifen, wobei die Textur-Koordinaten zu den Cache-Kachelkoordinaten ausgerichtet sind. In derartigen Fällen kann auf den Texturspeicher in den Bilderzeugungszielen 510 mehrere Male zugegriffen werden, wobei die Zugriffe zeitlich nahe beieinander liegen. Die Cache-Steuerung kann diese Zugriffe in eine einzelne Lese-Transaktion kombinieren, die auf den Texturspeicher in den Bilderzeugungszielen 510 gerichtet ist. Diese Vorgehensweise nutzt vorteilhaft die zeitliche Lokalität der Bilderzeugungszieldaten aus. Zusätzlich zu Textur-Zugriffen können ähnliche Vorteile der zeitlichen Lokalität für Lese-und Schreib-Zugriffe durch die ROP 395 und für die allgemeinen globalen Lade-und globalen Speicher-Zugriffe durch den SM 310 erreicht werden. In einigen Ausführungsformen kann die gleiche Vorgehensweise für das Zugreifen auf den Texturspeicher angewendet werden, der zu einer Oberfläche gehört, die kein Bilderzeugungsziel ist.In yet another example, memory read transactions targeting the same location in rendering targets 510 may occur close in time during rendering. Overlapping primitives can access the same texture with texture coordinates aligned with cache tile coordinates. In such cases, the texture memory in rendering targets 510 may be accessed multiple times, with the accesses being close in time. The cache controller can combine these accesses into a single read transaction that is targeted to the texture memory in rendering targets 510 . This procedure advantageously utilizes the temporal locality of the imaging target data. In addition to texture accesses, similar benefits of temporal locality can be achieved for read and write accesses by the ROP 395 and for general global load and global memory accesses by the SM 310. In some embodiments, the same approach can be applied to accessing the texture memory associated with a surface that is not a rendering target.

Zu beachten ist, dass die hierin beschriebene Architektur anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. In einem Beispiel sind die Techniken hierin im Zusammenhang mit einer speziellen Gruppe aus Bilderzeugungszielen 500 in einer gegebenen Konfiguration beschrieben. Jedoch können die beschriebenen Techniken unter Anwendung einer beliebigen Anzahl an Bilderzeugungszielen 500 eingesetzt werden. Jedes Bilderzeugungsziel 510 kann unabhängig von anderen Bilderzeugungszielen konfiguriert werden, so dass es eine beliebige Anzahl an Feldern enthält. Derartige Felder können ohne Einschränkung 3D-Positionsdaten, Information für diffuse Beleuchtung und Information für Glanzbeleuchtung enthalten. Jedes Feld in einem Bilderzeugungsziel 510 kann unabhängig von anderen Feldern so konfiguriert werden, dass es eine beliebige Anzahl an Bits enthält. In einem weiteren Beispiel können beliebige technisch machbare Bilderzeugungszielkonfigurationen 610 spezifiziert werden, obwohl spezielle Bilderzeugungskonfigurationen 610 in der Reihe aus Bilderzeugungszielkonfigurationen 600 gezeigt sind. In einer noch weiteren Beispiel kann während der Erzeugung eines speziellen Bildes eine Reihe von Bilderzeugungszielkonfigurationen 600 eingesetzt werden, wobei eine beliebige Menge an Bilderzeugungszielkonfigurationen 610 angegeben werden kann, und wobei eine beliebige Bilderzeugungszielkonfiguration 610 einer anderen Bilderzeugungszielkonfiguration 610 vorausgehen oder ihr nachfolgen kann.It should be noted that the architecture described herein is illustrative in nature and that variations and modifications are possible. In one example, the techniques are described herein in the context of a specific set of imaging targets 500 in a given configuration. However, the techniques described may be employed using any number of imaging targets 500. Each rendering target 510 can be configured independently of other rendering targets to contain any number of fields. Such fields may include, without limitation, 3D position data, diffuse illumination information, and specular illumination information. Each field in an imaging target 510 can be configured independently of other fields to contain any number of bits. As another example, any technically feasible imaging target configurations 610 may be specified, although specific imaging configurations 610 are shown in the series of imaging target configurations 600 . In yet another example, a series of rendering target configurations 600 may be employed during rendering of a particular image, where any set of rendering target configurations 610 may be specified, and where any rendering target configuration 610 may precede or succeed another rendering target configuration 610.

7 gibt ein Flussdiagramm von Verfahrensschritten zur adaptiven Dimensionierung von Cache-Kacheln gemäß einer Ausführungsform der vorliegenden Erfindung an. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-6 beschrieben sind, erkennt der Fachmann auf diesem Gebiet, dass ein beliebiges System, das zum Ausführen der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der Erfindung liegt. 7 Figure 12 provides a flowchart of method steps for adaptively sizing cache tiles according to an embodiment of the present invention. Although the method steps associated with the systems of 1-6 are described, those skilled in the art will recognize that any system configured to perform the method steps in any order is within the scope of the invention.

Wie gezeigt, beginnt ein Verfahren 700 im Schritt 702, in welchem der Gerätetreiber 103 eine neue Bilderzeugungszielkonfiguration erkennt, die sich von einer aktuellen Bilderzeugungszielkonfiguration unterscheidet. Die Änderung der Bilderzeugungszielkonfiguration kann von dem Start eines neuen Bilderzeugungsprozesses oder von einem Wechsel von einer aktuellen Bilderzeugungszielkonfiguration in eine neue Bilderzeugungszielkonfiguration während eines Bilderzeugungsprozesses herrühren. Im Schritt 704 ermittelt der Gerätetreiber 103, ob die neue Bilderzeugungszielkonfiguration eine Teilmenge der aktuellen Bilderzeugungszielkonfiguration ist. Wenn die neue Bilderzeugungszielkonfiguration eine Teilmenge der aktuellen Bilderzeugungszielkonfiguration ist, dann ist das Verfahren 700 beendet.As shown, a method 700 begins at step 702 in which the device driver 103 detects a new rendering target configuration that differs from a current rendering target configuration. The change in imaging target configuration may result from the start of a new imaging process or from a change from a current imaging target configuration to a new imaging target configuration during an imaging process. In step 704, the device driver 103 determines whether the new rendering target configuration is a subset of the current rendering target configuration. If the new rendering target configuration is a subset of the current rendering target configuration, then method 700 ends.

Wenn jedoch die neue Bilderzeugungszielkonfiguration keine Teilmenge der aktuellen Bilderzeugungszielkonfiguration ist, dann geht das Verfahren 700 weiter zum Schritt 706, in welchem der Gerätetreiber 103 den Cache-Speicherplatz berechnet, der von der Cache-Kachel eingenommen wird. Beispielsweise könnte die Cache-Kachel die Hälfte oder ein Drittel des gesamten verfügbaren Cache-Speichers einnehmen. Im Schritt 708 berechnet der Gerätetreiber 103 die Größe des Speicherplatzes, der von jedem Pixel eingenommen wird. Beispielsweise kann der Gerätetreiber 103 die Anzahl an Bytes aufsummieren, die von jedem Feld jedes Bilderzeugungsziels in der neuen Bilderzeugungszielkonfiguration eingenommen wird.However, if the new rendering target configuration is not a subset of the current rendering target configuration, then the method 700 proceeds to step 706 in which the device driver 103 calculates the cache memory space occupied by the cache tile. For example, the cache tile could take up half or a third of the total available cache memory. In step 708, device driver 103 calculates the amount of memory space occupied by each pixel. For example, device driver 103 may total the number of bytes occupied by each field of each rendering target in the new rendering target configuration.

Im Schritt 710 wendet der Gerätetreiber 103 einen Faktor des Fehlerbehebungsmodus auf die Speicherplatzberechnung im Schritt 708 an. In einem Beispiel kann der Gerätetreiber 103 den Speicherplatz pro Pixel mit einem Faktor von 1, 2, 4, oder 8 entsprechend für AA-1, AA-2, AA-4 oder AA-8 multiplizieren. In einem weiteren Beispiel kann der Gerätetreiber 103 den Speicherplatz pro Pixel mit einem Faktor von 1, 2, 3, oder 5 entsprechend AA-1, AA-2, AA-4 oder AA-8 multiplizieren, wobei der Fähigkeit Rechnung getragen wird, Pixel in höheren Fehlerbehebungsmodi komprimieren zu können. Im Schritt 712 wendet der Gerätetreiber 103 einen Oberflächenkomprimierungsfaktor auf die Berechnung des Speicherplatzes des Schritts 708 an. Beispielsweise kann der Gerätetreiber 103 den Speicherplatz pro Pixel mit einem Faktor multiplizieren, der auf einem abgeschätzten oder tatsächlichen Komprimierungsfaktor von ZROP-Daten oder CROP-Daten beruht.In step 710 the device driver 103 applies an error recovery mode factor to the memory space calculation in step 708 . In one example, device driver 103 may multiply the memory space per pixel by a factor of 1, 2, 4, or 8 for AA-1, AA-2, AA-4, or AA-8, respectively. In another example, device driver 103 may multiply the memory space per pixel by a factor of 1, 2, 3, or 5 corresponding to AA-1, AA-2, Multiply AA-4 or AA-8, accounting for the ability to compress pixels in higher error correction modes. In step 712, the device driver 103 applies a surface compression factor to the step 708 calculation of memory space. For example, device driver 103 may multiply the storage space per pixel by a factor based on an estimated or actual compression factor of ZROP data or CROP data.

Im Schritt 714 berechnet der Gerätetreiber 103 die Anzahl an Pixel in der Cache-Kachel auf der Grundlage eines oder mehrerer der folgenden Faktoren: der Cache-Speicherkonfiguration, der neuen Bilderzeugungszielkonfiguration, dem Fehlerbehebungsfaktor und dem Faktor für die Oberflächenkomprimierung. Im Schritt 716 berechnet der Gerätetreiber 103 die Cache-Kachelgröße. Im Schritt 718 legt der Gerätetreiber 103 die Cache-Kachelgröße auf die berechnete Cache-Kachelgröße aus dem Schritt 716 fest. Das Verfahren 700 endet dann.In step 714, the device driver 103 calculates the number of pixels in the cache tile based on one or more of the following factors: the cache memory configuration, the new rendering target configuration, the error correction factor, and the surface compression factor. In step 716, device driver 103 calculates the cache tile size. In step 718 the device driver 103 sets the cache tile size to the calculated cache tile size from step 716 . The method 700 then ends.

Zusammengefasst gilt: Cache-Kacheln werden neu dimensioniert, wenn eine Änderung in der Bilderzeugungszielkonfiguration erkannt wird. Die Größe der Cache-Kacheln beruht auf der Bilderzeugungszielkonfiguration sowie auf der Cache-Konfiguration. Die Summe an Bytes, die für eine einzelne Position in jedem Bilderzeugungsziel benötigt wird, wird berechnet. Die Menge an Bytes in dem Cache-Speicher, die für Cache-Kacheln verfügbar ist, wird durch diese Summe geteilt, um die Anzahl an Pixel in der Cache-Kachel zu ermitteln. Wenn die Cache-Kachel quadratisch ist, dann wird die Quadratwurzel der Anzahl an Pixel berechnet und auf die nächste Ganzzahl aufgerundet, woraus sich die Breite und die Höhe der Cache-Kachel ergeben. Wenn die Cache-Kachel nicht quadratisch ist, dann werden eine Breite und eine Höhe ausgewählt, wobei das Produkt der Breite und der Höhe gleich zumindest der Anzahl an Pixel ist.In summary, cache tiles are resized when a change in rendering target configuration is detected. The size of the cache tiles is based on the rendering target configuration as well as the cache configuration. The sum of bytes required for a single position in each render target is calculated. The amount of bytes in the cache that are available for cache tiles is divided by this sum to determine the number of pixels in the cache tile. If the cache tile is square, then the square root of the number of pixels is calculated and rounded up to the nearest integer, giving the width and height of the cache tile. If the cache tile is not square, then a width and a height are chosen, where the product of the width and the height is equal to at least the number of pixels.

Die Cache-Kachelgröße kann so gewählt werden, dass mehrere Cache-Kacheln in dem Cache-Speicher enthalten sind, so dass Arbeit für eine oder mehrere Cache-Kacheln empfangen werden kann, während eine weitere Cache-Kachel gerade verarbeitet wird. Wenn die Cache-Kachel in einem Cache-Speicher für Allgemeinzwecke liegt, kann die Cache-Kachelgröße so festgelegt werden, dass nur ein Teil des Cache-Speichers verbraucht wird, etwa eine Hälfte oder ein Drittel des Cache-Speichers, wodurch der Rest des Cache-Sprechers für andere Cache-Klienten verbleibt. Die Cache-Kacheldaten können komprimiert werden, um die Cache-Kachelgröße weiter zu reduzieren, wobei Dateneffizienzen bei höheren Fehlerbehebungsmodi und die Oberflächenkomprimierung, etwa ZROP-und CROP-Komprimierung, vorteilhaft ausgenutzt werden.The cache tile size can be chosen to include multiple cache tiles in the cache memory, so that work for one or more cache tiles can be received while another cache tile is being processed. If the cache tile resides in a general-purpose cache memory, the cache tile size can be set to consume only a portion of the cache memory, about a half or a third of the cache memory, leaving the rest of the cache -Speaker for other cache clients remains. The cache tile data may be compressed to further reduce the cache tile size, taking advantage of data efficiencies at higher debugging modes and surface compression, such as ZROP and CROP compression.

Ein Vorteil der offenbarten Vorgehensweise besteht darin, dass die Cache-Kachelgröße adaptiv auf der Grundlage einer Bilderzeugungszielkonfiguration und der Cache-Konfiguration dimensioniert wird. Kleinere Cache-Kachelgrößen werden für komplexere Bilderzeugungszielkonfigurationen ausgewählt, während größere Cache-Kachelgrößen für weniger komplexere Bilderzeugungszielkonfigurationen gewählt werden. Durch adaptives Dimensionieren der Cache-Kacheln auf der Grundlage der Bilderzeugungszielkonfiguration wird weniger Rechenleistung benötigt, um die Cache-Kacheln zu verarbeiten, woraus sich eine effizientere Prozessorauslastung und geringere Leistungsanforderungen ergeben. Ein weiterer Vorteil der offenbarten Vorgehensweise besteht darin, dass, wenn komprimierte Cache-Kacheldaten in dem Cache-Speicher gespeichert werden, die Cache-Kachelgröße weiter reduziert werden kann, wodurch der verfügbare Cache-Speicher noch weiter vergrößert werden kann. Alternativ bleibt die Cache-Kachelgröße gleich, und jede Cache-Kachel kann einen größeren Bereich der Bildschirmoberfläche abdecken. Als Folge davon kann die gesamte Anzahl an Cache-Kacheln reduziert werden, woraus sich ein geringerer Verarbeitungsaufwand, der mit der Kachelbildung verknüpft ist, ergibt. Des Weiteren erlaubt eine vereinheitlichte L2-Cache-Kachel eine dynamische Partitionierung des Cachespeichers zwischen Cache-Kacheldaten und anderen Daten, wobei der Bereich des L2-Cache-Speichers, der diversen Kategorien von Daten zugewiesen ist, auf der Grundlage aktueller Anforderungen variieren kann. Schließlich kann die Cache-Steuerung die Anzahl an Bilderzeugungszielzugriffen reduzieren, indem Lese-und Schreib-Operationen für das gleiche Bilderzeugungsziel, die von mehreren Klienten ausgegeben werden, kombiniert werden, indem die Bilderzeugungszieldaten einmal abgeholt werden und diese Daten dann mehrere Male erneut verwendet werden, um vorteilhaft die räumliche und zeitliche Lokalität auszunutzen.An advantage of the disclosed approach is that the cache tile size is adaptively sized based on a rendering target configuration and the cache configuration. Smaller cache tile sizes are chosen for more complex rendering target configurations, while larger cache tile sizes are chosen for less complex rendering target configurations. By adaptively sizing the cache tiles based on the rendering target configuration, less computing power is required to process the cache tiles, resulting in more efficient processor utilization and lower performance requirements. Another advantage of the disclosed approach is that when compressed cache tile data is stored in the cache memory, the cache tile size can be further reduced, thereby increasing the available cache memory even more. Alternatively, the cache tile size remains the same and each cache tile can cover a larger area of the screen surface. As a result, the total number of cache tiles can be reduced, resulting in less processing overhead associated with tiling. Furthermore, a unified L2 cache tile allows for dynamic partitioning of cache memory between cache tile data and other data, where the area of L2 cache memory allocated to various categories of data may vary based on current needs. Finally, the cache controller can reduce the number of render target accesses by combining reads and writes to the same render target issued by multiple clients, by fetching the render target data once and then reusing that data multiple times. to take advantage of spatial and temporal locality.

Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert werden. Das bzw. die Programme des Programmprodukts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können in einer Vielzahl von computerlesbaren Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne einschränkend zu sein: (i) nichtbeschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen innerhalb eines Computers, etwa Kompaktdisketten-Nur-Lese-Speicher-(CD-ROM) Disketten, die von einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, Nur-LeseSpeicher-(ROM) Chips oder eine andere Art an nicht-flüchtigen elektronischen Halbleiterspeichern), auf welchen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder ein Festplattenlaufwerk oder eine andere Art an elektronischem Halbleiterspeicher mit wahlfreiem Zugriff), auf welchen änderbare Information gespeichert ist.An embodiment of the invention may be implemented as a program product for use in a computer system. The program(s) of the program product define functions of the embodiments (including the methods described herein) and may be embodied on a variety of computer-readable storage media. Illustrative computer-readable storage media include, but are not limited to: (i) non-writable storage media (e.g., read-only memory devices within a computer, such as compact disk read-only memory (CD-ROM) floppy disks read only from a CD-ROM Drive Readable, Flash Memory, Read Only Memory (ROM) chips or other type of non-volatile electronic semiconductor memory) on which information is permanently stored; and (ii) writable storage media (e.g., floppy disks in a floppy disk drive or a hard disk drive or other type of solid-state random access electronic memory) on which alterable information is stored.

Claims (6)

Ein Verfahren zur adaptiven Dimensionierung von Cache-Kacheln in einem Grafiksystem, wobei das Verfahren umfasst: Festlegen einer Cache-Kachelgröße, die zu einer ersten Cache-Kachel gehört, auf eine erste Größe; basierend auf einer ersten Bilderzeugungskonfiguration, die mehrere erste Bilderzeugungsziele umfasst, wobei die erste Cache-Kachel eine Bildschirmraum-Kachel ist und in mehrere Rasterkacheln unterteilt ist, wobei die Größe von jeder Rasterkachel auf der Cache-Kachelgröße basiert, Erkennen eines Wechsels von einer ersten Bilderzeugungszielkonfiguration, zu einer zweiten Bilderzeugungszielkonfiguration, die mehrere zweite Bilderzeugungsziele umfasst; und Festlegen der Cache-Kachelgröße auf eine zweite Größe mit den Schritten: Berechnen des Cache-Speicherplatzes, der durch die Cache-Kachel eingenommen wird, Berechnen einer ersten Anzahl von Bytes pro Pixel für die zweite Bilderzeugungszielkonfiguration, Anwenden eines Oberflächen Komprimierungsfaktors auf die erste Anzahl von Bytes zur Berechnung einer zweiten Anzahl von Bytes, die pro komprimierten Pixel eingenommen wird; Festlegen der zweiten Größe der Cache-Kachelgröße anhand der zweiten Anzahl von Bytes.A method for adaptively sizing cache tiles in a graphics system, the method comprising: setting a cache tile size associated with a first cache tile to a first size; based on a first rendering configuration comprising a plurality of first rendering targets, wherein the first cache tile is a screen space tile and is divided into a plurality of raster tiles, the size of each raster tile being based on the cache tile size, detecting a change from a first rendering target configuration to a second rendering target configuration including a plurality of second rendering targets; and Set the cache tile size to a second size with the steps: Calculating the cache space occupied by the cache tile, calculating a first number of bytes per pixel for the second rendering target configuration, applying a surface compression factor to the first number of bytes to calculate a second number of bytes occupied per compressed pixel; Setting the second size of the cache tile size based on the second number of bytes. Das Verfahren nach Anspruch 1, das ferner umfasst: Ermitteln, dass die mehreren zweiten Bilderzeugungsziele keine Teilmenge der mehreren ersten Bilderzeugungsziele umfassen.The procedure after claim 1 , further comprising: determining that the second plurality of render targets does not include a subset of the first plurality of render targets. Das Verfahren nach Anspruch 1, wobei die erste Größe und/oder die zweite Größe einer Cache-Kachel entsprechen, die keine quadratischen Abmessungen besitzt.The procedure after claim 1 , wherein the first size and/or the second size corresponds to a cache tile that has non-square dimensions. Das Verfahren nach Anspruch 1, wobei die zweite Größe ferner auf einer Konfiguration eines Cachespeichers beruht, in welchem die erste Cache-Kachel liegt.The procedure after claim 1 , wherein the second size is further based on a configuration of a cache memory in which the first cache tile resides. Das Verfahren nach Anspruch 4, wobei die erste Größe und/oder die zweite Größe so festgelegt werden, dass sichergestellt ist, dass die erste Cache-Kachel nicht mehr als einen ersten Teilbereich des Cache-Speichers einnimmt.The procedure after claim 4 , wherein the first size and/or the second size are set to ensure that the first cache tile does not occupy more than a first portion of the cache memory. Das Verfahren nach Anspruch 1, das ferner umfasst: Modifizieren der Cache-Kachelgröße auf der Grundlage eines Komprimierungsfaktors, der mit einem Fehlerbehebungsmodus verknüpft ist.The procedure after claim 1 , further comprising: modifying the cache tile size based on a compression factor associated with an error recovery mode.
DE102013017639.5A 2012-10-26 2013-10-25 Caching of adaptively sized cache tiles in a unified L2 cache with surface compression Active DE102013017639B4 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201261719271P 2012-10-26 2012-10-26
US61/719,271 2012-10-26
US14/012,308 US9734548B2 (en) 2012-10-26 2013-08-28 Caching of adaptively sized cache tiles in a unified L2 cache with surface compression
US14/012,308 2013-08-28

Publications (2)

Publication Number Publication Date
DE102013017639A1 DE102013017639A1 (en) 2014-04-30
DE102013017639B4 true DE102013017639B4 (en) 2023-01-12

Family

ID=50479794

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013017639.5A Active DE102013017639B4 (en) 2012-10-26 2013-10-25 Caching of adaptively sized cache tiles in a unified L2 cache with surface compression

Country Status (4)

Country Link
US (1) US9734548B2 (en)
CN (1) CN103810669B (en)
DE (1) DE102013017639B4 (en)
TW (1) TWI533255B (en)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8941676B2 (en) * 2012-10-26 2015-01-27 Nvidia Corporation On-chip anti-alias resolve in a cache tiling architecture
US9626735B2 (en) * 2013-06-24 2017-04-18 Intel Corporation Page management approach to fully utilize hardware caches for tiled rendering
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US10089238B2 (en) * 2014-07-17 2018-10-02 Qualcomm Incorporated Method and apparatus for a shared cache with dynamic partitioning
US10929353B2 (en) 2015-04-29 2021-02-23 Box, Inc. File tree streaming in a virtual file system for cloud-based shared content
US10535114B2 (en) * 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US20170206172A1 (en) * 2016-01-19 2017-07-20 SK Hynix Inc. Tehcniques with os- and application- transparent memory compression
US10120187B2 (en) 2016-02-18 2018-11-06 Nvidia Corporation Sub-frame scanout for latency reduction in virtual reality applications
CN105744275B (en) * 2016-02-22 2019-04-05 青岛海信电器股份有限公司 A kind of input of video data, output method and device
US10453169B2 (en) * 2016-03-28 2019-10-22 Intel Corporation Method and apparatus for multi format lossless compression
US10176090B2 (en) * 2016-09-15 2019-01-08 Qualcomm Incorporated Providing memory bandwidth compression using adaptive compression in central processing unit (CPU)-based systems
US10607390B2 (en) * 2016-12-14 2020-03-31 Nvidia Corporation Techniques for tiling compute work with graphics work
US11470131B2 (en) 2017-07-07 2022-10-11 Box, Inc. User device processing of information from a network-accessible collaboration system
US10929210B2 (en) 2017-07-07 2021-02-23 Box, Inc. Collaboration system protocol processing
CN109189533A (en) * 2018-08-29 2019-01-11 万帮充电设备有限公司 A kind of screen size adaptation method and system
US11069023B2 (en) * 2019-05-24 2021-07-20 Nvidia Corporation Techniques for efficiently accessing memory and avoiding unnecessary computations
US11062507B2 (en) 2019-11-04 2021-07-13 Apple Inc. Compression techniques for pixel write data

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697063B1 (en) 1997-01-03 2004-02-24 Nvidia U.S. Investment Company Rendering pipeline
US7102646B1 (en) 1997-11-25 2006-09-05 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US6856320B1 (en) 1997-11-25 2005-02-15 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US6535209B1 (en) 1999-03-17 2003-03-18 Nvidia Us Investments Co. Data stream splitting and storage in graphics data processing
US6323860B1 (en) 1999-03-17 2001-11-27 Nvidia Corporation Circuit and method for deferring the binding of render states to primitives in a graphics system
US6674443B1 (en) * 1999-12-30 2004-01-06 Stmicroelectronics, Inc. Memory system for accelerating graphics operations within an electronic device
US6885378B1 (en) * 2000-09-28 2005-04-26 Intel Corporation Method and apparatus for the implementation of full-scene anti-aliasing supersampling
US7317718B1 (en) 2002-12-06 2008-01-08 Juniper Networks, Inc. Flexible counter update and retrieval
US7634621B1 (en) * 2004-07-13 2009-12-15 Nvidia Corporation Register file allocation
US8214601B2 (en) * 2004-07-30 2012-07-03 Hewlett-Packard Development Company, L.P. Purging without write-back of cache lines containing spent data
US7649537B2 (en) * 2005-05-27 2010-01-19 Ati Technologies, Inc. Dynamic load balancing in multiple video processing unit (VPU) systems
US8766995B2 (en) * 2006-04-26 2014-07-01 Qualcomm Incorporated Graphics system with configurable caches
US7808507B1 (en) * 2006-09-18 2010-10-05 Nvidia Corporation Compression tag state interlock
GB2452300B (en) 2007-08-30 2009-11-04 Imagination Tech Ltd Predicated geometry processing in a tile based rendering system
US8933943B2 (en) * 2008-04-30 2015-01-13 Intel Corporation Technique for performing load balancing for parallel rendering
KR101511273B1 (en) * 2008-12-29 2015-04-10 삼성전자주식회사 System and method for 3d graphic rendering based on multi-core processor
US8605102B1 (en) 2009-10-08 2013-12-10 Nvidia Corporation Rasterization tile coalescer and reorder buffer
US8412971B2 (en) * 2010-05-11 2013-04-02 Advanced Micro Devices, Inc. Method and apparatus for cache control

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HSIAO, Chih-Chieh; CHUNG, Chung-Ping; YANG, Hui-Chin. A hierarchical primitive lists structure for tile-based rendering. In: Computational Science and Engineering, 2009. CSE'09. International Conference on. IEEE, 2009. S. 408-413. doi: 10.1109/CSE.2009.386
LIKTOR, Gábor; DACHSBACHER, Carsten. Decoupled deferred shading for hardware rasterization. In: Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games. ACM, 2012. S. 143-150. doi: 10.1145/2159616.2159640
WITTENBRINK, Craig M.; KILGARIFF, Emmett; PRABHU, Arjun. Fermi GF100 GPU architecture. Micro, IEEE, 2011, Vol. 31(2): 50-59. doi: 10.1109/MM.2011.24

Also Published As

Publication number Publication date
CN103810669A (en) 2014-05-21
TW201432611A (en) 2014-08-16
CN103810669B (en) 2017-12-22
TWI533255B (en) 2016-05-11
US9734548B2 (en) 2017-08-15
US20140118379A1 (en) 2014-05-01
DE102013017639A1 (en) 2014-04-30

Similar Documents

Publication Publication Date Title
DE102013017639B4 (en) Caching of adaptively sized cache tiles in a unified L2 cache with surface compression
DE102013017640B4 (en) Distributed tiled caching
DE102018132468A1 (en) MULTI-GPU FRAME RENDERING
US9411596B2 (en) Tiled cache invalidation
DE102016122297A1 (en) Multi-pass rendering in a screen space pipeline
DE102009039231B4 (en) Single-pass tiling
DE102012211670A1 (en) Simultaneous submission to a multi-producer queue using multiple threads
DE102012220267B4 (en) Arithmetic work distribution - reference counter
DE102013020613A1 (en) Bypass pixel shading for low power graphic imaging
DE102013020614A1 (en) Consistent grid division with multi-resolution
DE102013020807A1 (en) Handling Subordinate Z Cover Data in Raster Operations
DE102018114286A1 (en) Perform a traversal stack compression
DE102015115232A1 (en) Improved anti-aliasing by spatially and / or temporally varying sample patterns
DE102013018445A1 (en) Defining a subordinate imaging state in an upstream shading entity
DE102013020966B4 (en) Power efficient attribute handling for tessellation and geometry shading units
DE102013020810A1 (en) Efficient super-scanning with shading strands per pixel
DE102013022257A1 (en) Programmable mixing in multi-strand processing units
DE102013018139A1 (en) Technique for storing common vertices
DE102016109905A1 (en) Piecewise linear irregular rasterization
DE102013020968A1 (en) Technique for accessing a content-addressable memory
DE112010003750T5 (en) Hardware for parallel command list generation
DE112018004343T5 (en) MULTI-ROOM RENDERING WITH CONFIGURABLE TRANSFORMATION PARAMETERS
US20210158598A1 (en) Graphics processing systems
DE102013020967B4 (en) Technique for performing memory access operations via texture hardware
DE102013020485A1 (en) A technique for performing memory access operations over texture hardware

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

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

R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final