ES2948954T3 - Coherencia de grano grueso - Google Patents

Coherencia de grano grueso Download PDF

Info

Publication number
ES2948954T3
ES2948954T3 ES18160824T ES18160824T ES2948954T3 ES 2948954 T3 ES2948954 T3 ES 2948954T3 ES 18160824 T ES18160824 T ES 18160824T ES 18160824 T ES18160824 T ES 18160824T ES 2948954 T3 ES2948954 T3 ES 2948954T3
Authority
ES
Spain
Prior art keywords
superline
memory
graphics
cache
processor
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
ES18160824T
Other languages
English (en)
Inventor
Joydeep Ray
Altug Koker
James A Valerio
David Puffer
Abhishek R Appu
Stephen Junkins
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of ES2948954T3 publication Critical patent/ES2948954T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • 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/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • 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/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Analysing Materials By The Use Of Radiation (AREA)

Abstract

Una realización proporciona un dispositivo de procesamiento de gráficos de propósito general que comprende un bloque de cómputo de procesamiento de gráficos de propósito general para procesar una carga de trabajo que incluye gráficos u operaciones de cómputo, una primera memoria caché y un módulo de coherencia que permite a la primera memoria caché almacenar en caché de manera coherente datos para el carga de trabajo, los datos almacenados en la memoria dentro de un espacio de direcciones virtuales, en donde el espacio de direcciones virtuales se comparte con un procesador de propósito general separado que incluye una segunda memoria caché que es coherente con la primera memoria caché. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Coherencia de grano grueso
CAMPO
Las realizaciones se refieren en general al procesamiento de datos y, más particularmente, al procesamiento de datos mediante una unidad de procesamiento de gráficos de propósito general.
Antecedentes de la descripción
El actual procesamiento de datos de gráficos en paralelo incluye sistemas y procedimientos desarrollados para realizar operaciones específicas con datos de gráficos tales como, por ejemplo, interpolación lineal, teselación, rasterización, correlación de texturas, pruebas de profundidad, etc. De manera tradicional, los procesadores de gráficos utilizaban unidades de cálculo de función fija para procesar datos de gráficos; sin embargo, más recientemente, partes de los procesadores de gráficos se han hecho programables, lo que permite que dichos procesadores admitan una mayor variedad de operaciones para procesar datos de vértices y fragmentos.
Para aumentar adicionalmente el rendimiento, los procesadores de gráficos típicamente implementan técnicas de procesamiento, tales como canalizaciones, que intentan procesar, en paralelo, tantos datos de gráficos como sea posible a lo largo de todas las diferentes partes de la canalización de gráficos. Los procesadores de gráficos paralelos con arquitecturas de múltiples hilos y única instrucción (SIMT) están diseñados para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura SIMT, grupos de hilos paralelos intentan ejecutar instrucciones de programa de manera síncrona juntos tan a menudo como sea posible para aumentar la eficacia de procesamiento. Puede encontrarse una vista global general del software y hardware para arquitecturas SIMT en Shane Cook, CUDA Programming, capítulo 3, páginas 37-51 (2013) y/o Nicholas Wilt, CUDA Handbook, A Comprehensive Guide to GPU Programming, secciones 2.6.2 a 3.1.2 (junio de 2013).
El documento US 2011/252200 A1 divulga una pluralidad de núcleos de procesador, cada uno de los cuales tiene una caché de bajo nivel. Se proporciona coherencia de memoria en la granularidad de líneas de caché o la granularidad a nivel de región. Se rastrea la titularidad de memoria de una GPU. Una CPU o GPU puede marcar todas las líneas de una región que es propiedad de la GPU. Una tabla de estados de región de memoria se usa para indicar si las páginas son actualmente propiedad de la GPU. La invención se expone en las reivindicaciones independientes adjuntas. Las realizaciones ventajosas se definen por las reivindicaciones dependientes adjuntas.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Para que la manera en la que las características mencionadas anteriormente de las presentes realizaciones se puedan entender en detalle, se ofrece una descripción más particular de las realizaciones, resumida antes brevemente, mediante referencia a realizaciones, algunas de las cuales se ilustran en los dibujos adjuntos. Sin embargo, cabe señalar que los dibujos adjuntos solo ilustran realizaciones típicas y que el alcance de la invención está definido por las reivindicaciones adjuntas. Cualquier referencia a "realizaciones" o a aspectos "inventivos" que aparezca en relación con otras figuras distintas de las figuras 6 a 8 a lo largo del presente documento debe considerarse que se refiere solo a ejemplos de antecedentes de la invención y no a realizaciones reales de la invención.
La Figura 1 es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento;
La Figura 2A-2D ilustra unos componentes de procesador paralelo, de acuerdo con una realización;
Las Figuras 3A-3B son diagramas de bloques de multiprocesadores de gráficos, de acuerdo con las realizaciones;
La Figura 4A-4F ilustra una arquitectura ilustrativa en la que una pluralidad de GPU están comunicativamente acopladas a una pluralidad de procesadores de múltiples núcleos;
La Figura 5 es un diagrama conceptual de una canalización de procesamiento de gráficos, de acuerdo con una realización;
La Figura 6 ilustra un sistema de procesamiento heterogéneo que tiene coherencia de hardware heterogénea, de acuerdo con una realización;
La Figura 7 ilustra estructuras lógicas usadas para la coherencia de grano grueso, de acuerdo con una forma de realización;
La Figura 8 es un diagrama de flujo de lógica para posibilitar la coherencia de grano grueso en un sistema de procesamiento heterogéneo;
La Figura 9 es un diagrama de bloques de un sistema de procesamiento de datos, de acuerdo con una realización;
La Figura 10 es un diagrama de bloques de un sistema de procesamiento, de acuerdo con una realización; La Figura 11 es un diagrama de bloques de un procesador de acuerdo con una realización;
La Figura 12 es un diagrama de bloques de un procesador de gráficos, de acuerdo con una realización; La Figura 13 es un diagrama de bloques de un motor de procesamiento de gráficos de un procesador de gráficos de acuerdo con algunas realizaciones;
La Figura 14 es un diagrama de bloques de un procesador de gráficos proporcionado por una realización adicional;
La Figura 15 ilustra lógica de ejecución de hilo que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones;
La Figura 16 es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos de acuerdo con algunas realizaciones;
La Figura 17 es un diagrama de bloques de un procesador de gráficos de acuerdo con otra realización; La Figura 18A-18B ilustra un formato de comando de procesador de gráficos y secuencia de comandos, de acuerdo con algunas realizaciones;
La Figura 19 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos de acuerdo con algunas realizaciones;
La Figura 20 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP, de acuerdo con una realización;
La Figura 21 es un diagrama de bloques que ilustra un sistema ilustrativo en un circuito de chip integrado, de acuerdo con una realización;
La Figura 22 es un diagrama de bloques que ilustra un procesador de gráficos adicional, de acuerdo con una realización; y
La Figura 23 es un diagrama de bloques que ilustra un procesador de gráficos ilustrativo adicional de un sistema en un circuito de chip integrado, de acuerdo con una realización.
Descripción detallada
En algunas realizaciones, una unidad de procesamiento de gráficos (GPU) está acoplada de manera comunicativa a núcleos de anfitrión/de procesador para acelerar las operaciones de gráficos, operaciones de aprendizaje automático, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede estar acoplada de manera comunicativa al procesador/núcleos de anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU puede estar integrada en el mismo paquete o chip que los núcleos y estar acoplada de manera comunicativa a los núcleos a través de un bus/interconexión de procesador interno (es decir, interna al paquete o chip). Independientemente de la manera en la que esté conectada la GPU, los núcleos de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU usa entonces una circuitería/lógica dedicada para procesar de manera efectiva estos comandos/instrucciones.
Los procesadores de gráficos se usan cada vez más para tareas de computación de propósito general. Ejemplos de usos del procesamiento de GPU de propósito general (GPGPU) incluyen, pero sin limitación, aprendizaje automático, análisis de vídeo, reconocimiento facial y control de vehículos autónomos. El procesamiento de GPGPU se puede hacer más efectivo mediante el uso de sistemas de memoria heterogéneos en los que se posibilita la coherencia gestionada por hardware entre un procesador de anfitrión (por ejemplo, una CPU) y una GPU. La coherencia de CPU y GPGPU de hardware heterogéneo puede simplificar significativamente el modelo de programación usado para posibilitar la computación heterogénea.
En la siguiente descripción se exponen numerosos detalles específicos para proporcionar un entendimiento más exhaustivo. Sin embargo, será evidente para un experto en la materia que las realizaciones descritas en el presente documento pueden ponerse en práctica sin uno o más de estos detalles específicos. En otros casos no se han descrito características ampliamente conocidas para no complicar los detalles de las presentes realizaciones.
Descripción general del sistema
La Figura 1 es un diagrama de bloques que ilustra un sistema informático 100 configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento. El sistema informático 100 incluye un subsistema de procesamiento 101 que tiene uno o más procesadores 102 y una memoria de sistema 104 que se comunican a través de una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente separado dentro de un componente de conjunto de chips o puede estar integrado dentro del uno o más procesador o procesadores 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 mediante un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede posibilitar que el sistema informático 100 reciba datos de entrada desde uno o más dispositivos de entrada 108. Adicionalmente, el concentrador de E/S 107 puede posibilitar que un controlador de visualización, que puede estar incluido en los uno o más procesadores 102, proporcione datos de salida a uno o más dispositivos de visualización 110A. En una realización, los uno o más dispositivos de visualización 110A acoplados al concentrador de E/S 107 pueden incluir un dispositivo de visualización local, interno o integrado.
En una realización, el subsistema de procesamiento 101 incluye uno o más procesadores paralelos 112 acoplados al concentrador de memoria 105 a través de un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser uno de cualquier variedad de tecnologías o protocolos de enlace de comunicación basados en normas, tal como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones específica del proveedor o un tejido de comunicaciones. En una realización, los uno o más procesadores paralelos 112 forman un sistema de procesamiento vectorial o paralelo centrado en la computación que incluye un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tales como un procesador de muchos núcleos integrados (MIC). En una realización, los uno o más procesadores paralelos 112 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno del uno o más dispositivo o dispositivos de visualización 110A acoplados mediante el concentrador de E/S 107. Los uno o más procesadores paralelos 112 también pueden incluir un controlador de visualización y una interfaz de visualización (no mostrados) para posibilitar una conexión directa a uno o más dispositivos de visualización 110B.
Dentro del subsistema de E/S 111, una unidad de almacenamiento de sistema 114 puede conectarse al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Puede usarse un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para posibilitar conexiones entre el concentrador de E/S 107 y otros componentes, tal como un adaptador de red 118 y/o adaptador de red inalámbrica 119 que pueden estar integrados en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivo o dispositivos de adición 120. El adaptador de red 118 puede ser un adaptador de Ethernet u otro adaptador de red alámbrica. El adaptador de red inalámbrica 119 puede incluir uno o más de un dispositivo de Wi-Fi, Bluetooth, de comunicación de campo cercano (NFC) u otra red que incluye una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes que no se muestran explícitamente, que incluyen USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo y similares, que también se pueden conectar al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes de la Figura 1 pueden implementarse usando cualquier protocolo adecuado, tal como protocolos basados en PCI (Interconexión de Componentes Periféricos) (por ejemplo, PCI-Express), o cualesquiera otras interfaces y/o protocolo o protocolos de comunicación de bus o de punto a punto, tales como la interconexión de alta velocidad NV-Link, o protocolos de interconexión conocidos en la técnica.
En una realización, los uno o más procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de gráficos y de vídeo, incluyendo, por ejemplo, circuitería de salida de vídeo, y constituye una unidad de procesamiento de gráficos (GPU). En otra realización, los uno o más procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de propósito general, mientras conservan la arquitectura computacional subyacente, descrita en mayor detalle en el presente documento. En otra realización más, componentes del sistema informático 100 pueden integrarse con otros uno o más elementos de sistema en un único circuito integrado. Por ejemplo, los uno o más procesadores paralelos 112, el concentrador de memoria 105, el procesador o procesadores 102 y el concentrador de E/S 107 pueden integrarse en un circuito integrado de sistema en chip (SoC). Como alternativa, los componentes del sistema informático 100 pueden integrarse en un único paquete para formar una configuración de sistema en paquete (SIP). En una realización, al menos una porción de los componentes del sistema informático 100 puede integrarse en un módulo de múltiples chips (MCM), que puede interconectarse con otros módulos de múltiples chips en un sistema informático modular.
Se apreciará que el sistema informático 100 mostrado en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, que incluye el número y la disposición de puentes, el número de procesadores 102 y el número de procesadores paralelos 112, puede modificarse según se desee. Por ejemplo, en algunas realizaciones, la memoria de sistema 104 está conectada al procesador o procesadores 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 104 mediante el concentrador de memoria 105 y el procesador o procesadores 102. En otras topologías alternativas, los procesadores paralelos 112 están conectados al concentrador de E/S 107 o, directamente, a un procesador de los uno o más procesadores 102, en lugar de al concentrador de memoria 105. En otras realizaciones, el concentrador de E/S 107 y el concentrador de memoria 105 pueden estar integrados en un solo chip. Realizaciones grandes pueden incluir dos o más conjuntos de procesadores 102 anexados mediante múltiples tomas, que pueden acoplarse a dos o más instancias de los procesadores paralelos 112. Algunos de los componentes particulares que se muestran en el presente documento son opcionales y pueden no incluirse en todas las implementaciones del sistema informático 100. Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos de adición, o pueden eliminarse algunos componentes.
La Figura 2A ilustra un procesador paralelo 200, de acuerdo con una realización. Los diversos componentes del procesador paralelo 200 pueden implementarse usando uno o más dispositivos de circuito integrado, tal como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o campos de matrices de puertas programables (FPGA). El procesador paralelo 200 ilustrado es una variante de los uno o más procesadores paralelos 112 mostrados en la Figura 1, de acuerdo con una realización.
En una realización, el procesador paralelo 200 incluye una unidad de procesamiento paralelo 202. La unidad de procesamiento paralelo incluye una unidad de E/S 204 que posibilita la comunicación con otros dispositivos, incluidas otras instancias de la unidad de procesamiento paralelo 202. La unidad de E/S 204 puede estar conectada directamente a otros dispositivos. En una realización, la unidad de E/S 204 se conecta con otros dispositivos mediante el uso de una interfaz de concentrador o de conmutador, tal como un concentrador de memoria 105. Las conexiones entre el concentrador de memoria 105 y la unidad de E/S 204 forman un enlace de comunicación 113. Dentro de la unidad de procesamiento paralelo 202, la unidad de E/S 204 está conectada a una interfaz de anfitrión 206 y a una barra transversal de memoria 216, donde la interfaz de anfitrión 206 recibe comandos dirigidos a realizar operaciones de procesamiento y la barra transversal de memoria 216 recibe comandos dirigidos a realizar operaciones de memoria.
Cuando la interfaz de anfitrión 206 recibe una memoria intermedia de comandos a través de la unidad de E/S 204, la interfaz de anfitrión 206 puede enviar a un extremo frontal 208 tareas para realizar esos comandos. En una realización, el extremo frontal 208 está acoplado a un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupaciones de procesamiento 212. En una realización, el planificador 210 garantiza que la matriz de agrupaciones de procesamiento 212 esté configurada adecuadamente y en un estado válido antes de que las tareas se distribuyan a las agrupaciones de procesamiento de la matriz de agrupaciones de procesamiento 212.
La matriz de agrupaciones de procesamiento 212 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, agrupación 214A, agrupación 214B, hasta la agrupación 214N). Cada agrupación 214A-214N de la matriz de agrupaciones de procesamiento 212 es capaz de ejecutar un gran número (por ejemplo, miles) de hilos concurrentes, donde cada hilo es una instancia de un programa.
En una realización, diferentes agrupaciones 214A-214N se pueden asignar para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos. El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 usando diversos algoritmos de planificación y/o distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo. La planificación puede tratarse dinámicamente por el planificador 210, o puede ser asistida, en parte, por lógica de compilador durante la compilación de la lógica de programa configurada para su ejecución mediante la matriz de agrupaciones de procesamiento 212.
La matriz de agrupaciones de procesamiento 212 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. En realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de cálculo paralelo de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, que incluyen, pero sin limitación, transformaciones de datos lineales y no lineales, filtrado de datos de vídeo y/o audio y/u operaciones de modelado (por ejemplo, aplicar leyes físicas para determinar la posición, velocidad y otros atributos de objetos).
En realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento paralelo de gráficos. En realizaciones en las que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 212 puede incluir lógica adicional para soportar la ejecución de dichas operaciones de procesamiento de gráficos, que incluye, pero sin limitación, lógica de muestreo de textura para realizar operaciones de textura, así como lógica de teselación y otra lógica de procesamiento de vértices. Adicionalmente, la matriz de agrupaciones de procesamiento 212 puede configurarse para ejecutar programas de sombreado relacionados con el procesamiento de gráficos tales como, pero sin limitación, sombreadores de vértices, sombreadores de teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento paralelo 202 puede transferir datos desde la memoria de sistema mediante la unidad de E/S 204 para su procesamiento. Durante el procesamiento, los datos transferidos se pueden almacenar en memoria dentro de chip (por ejemplo, memoria de procesador paralelo 222) durante el procesamiento y, después, se pueden volver a escribir en la memoria de sistema.
En una realización, cuando la unidad de procesamiento paralelo 202 se usa para realizar el procesamiento de gráficos, el planificador 210 puede configurarse para dividir la carga de trabajo de procesamiento en tareas de aproximadamente el mismo tamaño, para posibilitar una mejor distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212. En algunas realizaciones, las porciones de la matriz de agrupación de procesamiento 212 pueden estar configuradas para realizar diferentes tipos de procesamiento. Por ejemplo, una primera porción puede estar configurada para realizar sombrado de vértices y generación de topología, una segunda porción puede estar configurada para realizar teselación y sombreado de geometría, y una tercera porción puede estar configurada para realizar sombreado de píxeles u otras operaciones de espacio de pantalla, para producir una imagen representada para su visualización. Los datos intermedios producidos por una o más de las agrupaciones 214A-214N pueden almacenarse en memorias intermedias para permitir que se transmitan los datos intermedios entre las agrupaciones 214A-214N para su procesamiento adicional.
Durante el funcionamiento, la matriz de agrupaciones de procesamiento 212 puede recibir tareas de procesamiento que se ejecutarán a través del planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. En cuanto a las operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos a procesar, por ejemplo, datos de superficie (parche), datos de primitivas, datos de vértices y/o datos de píxeles, así como parámetros y comandos de estado que definen cómo se deben procesar los datos (por ejemplo, qué programa se debe ejecutar). El planificador 210 puede configurarse para extraer los índices correspondientes a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede configurarse para garantizar que la matriz de agrupaciones de procesamiento 212 esté configurada en un estado válido antes de que se inicie la carga de trabajo especificada por memorias intermedias de comandos entrantes (por ejemplo, memorias intermedias en lotes, memorias intermedias de carga, etc.).
Cada instancia de las una o más instancias de la unidad de procesamiento paralelo 202 puede acoplarse a la memoria de procesador paralelo 222. Puede accederse a la memoria de procesador paralelo 222 mediante la barra transversal de memoria 216, que puede recibir solicitudes de memoria desde la matriz de agrupación de procesamiento 212, así como de la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria de procesador paralelo 222 mediante una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de subdivisión (por ejemplo, unidad de subdivisión 220A, unidad de subdivisión 220B, hasta la unidad de subdivisión 220N), donde cada una está acoplada directamente a una porción (por ejemplo, unidad de memoria) de la memoria de procesador paralelo 222. El número de unidades de subdivisión 220A-220N generalmente es igual al número de unidades de memoria, de modo que una primera unidad de subdivisión 220A tiene una primera unidad de memoria 224A correspondiente, una segunda unidad de subdivisión 220B tiene una unidad de memoria 224B correspondiente, y una enésima unidad de subdivisión 220N tiene una enésima unidad de memoria 224N correspondiente. En otras realizaciones, el número de unidades de subdivisión 220A-220N puede no ser igual al número de dispositivos de memoria.
En diversas realizaciones, las unidades de memoria 224A-224N pueden incluir diversos tipos de dispositivos de memoria, que incluyen memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como la memoria de acceso aleatorio de gráficos síncrona (SGRAM), que incluye la memoria de tasa de datos doble de gráficos (GDDR). En una realización, las unidades de memoria 224A-224N pueden incluir también memoria 3D apilada, que incluye, pero sin limitación, memoria de ancho de banda alto (HBM). Los expertos en la materia apreciarán que la implementación específica de las unidades de memoria 224A-224N puede variar y que puede seleccionarse de entre uno de diversos diseños convencionales. Los objetivos de representación, tales como las memorias intermedias de fotograma o los mapas de textura pueden almacenarse a través de las unidades de memoria 224A-224N, permitiendo que las unidades de subdivisión 220A-220N escriban porciones de cada objetivo de representación en paralelo para usar de manera efectiva el ancho de banda disponible de la memoria de procesador paralelo 222. En algunas realizaciones, puede excluirse una instancia local de la memoria de procesador paralelo 222 en favor de un diseño de memoria unificado que utiliza memoria de sistema en conjunto con memoria caché local.
En una realización, una cualquiera de las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 puede procesar datos a escribir en cualquiera de las unidades de memoria 224A-224N dentro de la memoria de procesador paralelo 222. La barra transversal de memoria 216 puede configurarse para encaminar la salida de cada agrupación 214A-214N hacia la entrada de cualquier unidad de subdivisión 220A-220N o hacia otra agrupación 214A-214N para su procesamiento adicional. Cada agrupación 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para leer desde o escribir en diversos dispositivos de memoria externos. En una realización, la barra transversal de memoria 216 tiene una conexión a la interfaz de memoria 218 para comunicarse con la unidad de E/S 204, así como una conexión a una instancia local de la memoria de procesador paralelo 222, lo que posibilita que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 214A-214N se comuniquen con la memoria de sistema u otra memoria que no sea local a la unidad de procesamiento paralelo 202. En una realización, la barra transversal de memoria 216 puede usar canales virtuales para separar flujos de tráfico entre las agrupaciones 214A-214N y las unidades de subdivisión 220A-220N.
Aunque se ilustra una única instancia de la unidad de procesamiento paralelo 202 dentro del procesador paralelo 200, puede incluirse cualquier número de instancias de la unidad de procesamiento paralelo 202. Por ejemplo, se pueden proporcionar múltiples instancias de la unidad de procesamiento paralelo 202 en una única tarjeta de adición, o se pueden interconectar múltiples tarjetas de adición. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden estar configuradas para interfuncionar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria de procesador paralelo local y/u otras diferencias de configuración. Por ejemplo, y en una realización, algunas instancias de la unidad de procesamiento paralelo 202 pueden incluir unidades de coma flotante de precisión más alta con relación a otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento paralelo 202 o del procesador paralelo 200 se pueden implementar en diversas configuraciones y factores de forma, que incluyen, pero sin limitación, ordenadores personales de escritorio, portátiles o de mano, servidores, estaciones de trabajo, consolas de juegos y/o sistemas integrados.
La Figura 2B es un diagrama de bloques de una unidad de subdivisión 220, de acuerdo con una realización. En una realización, la unidad de subdivisión 220 es una instancia de una de las unidades de subdivisión 220A-220N de la Figura 2A. Como se ilustra, la unidad de subdivisión 220 incluye una caché L2221, una interfaz de memoria intermedia de fotogramas 225 y una ROP 226 (unidad de operaciones de rasterización). La caché L2 221 es una caché de lectura/escritura que está configurada para realizar operaciones de carga y almacén recibidas desde la barra transversal de memoria 216 y la ROP 226. Los fallos de lectura y las solicitudes de escritura urgentes se emiten por la caché L2221 a la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. También se pueden enviar actualizaciones sucias a la memoria intermedia de fotogramas mediante la interfaz de memoria intermedia de fotogramas 225 para un procesamiento oportunista. En una realización, la interfaz de memoria intermedia de fotogramas 225 interactúa con una de las unidades de memoria de la memoria de procesador paralelo, tal como las unidades de memoria 224A-224N de la Figura 2 (por ejemplo, dentro de la memoria de procesador paralelo 222).
En aplicaciones de gráficos, la ROP 226 es una unidad de procesamiento que realiza operaciones de rasterización tales como estarcido, prueba z, mezcla y similares, y emite datos de píxeles como datos de gráficos procesados para su almacenamiento en la memoria de gráficos. En algunas realizaciones, la ROP 226 puede configurarse para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen de la memoria. En algunas realizaciones, la ROP 226 está incluida dentro de cada agrupación de procesamiento (por ejemplo, agrupación 214A-214N de la Figura 2) en lugar de dentro de la unidad de subdivisión 220. En una realización de este tipo, las solicitudes de lectura y escritura de datos de píxeles se transmiten a través de la barra transversal de memoria 216 en lugar de datos de fragmentos de píxeles.
Los datos de gráficos procesados pueden mostrarse en un dispositivo de visualización, tal como un dispositivo de los uno o más dispositivos de visualización 110 de la Figura 1, encaminarse para su procesamiento adicional por los procesadores 102, o encaminarse para su procesamiento adicional por una de las entidades de procesamiento dentro del procesador paralelo 200 de la Figura 2A.
La Figura 2C es un diagrama de bloques de una agrupación de procesamiento 214 dentro de una unidad de procesamiento paralelo, de acuerdo con una realización. En una realización, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 214A-214N de la Figura 2. La agrupación de procesamiento 214 puede estar configurada para ejecutar muchos hilos en paralelo, donde el término "hilo" se refiere a una instancia de un programa particular que se ejecuta en un conjunto particular de datos de entrada. En algunas realizaciones se usan técnicas de única instrucción de múltiples datos (SIMD) para soportar la ejecución paralela de una gran número de hilos sin proporcionar múltiples unidades de instrucción independientes. En otras realizaciones, se usan técnicas de única instrucción de múltiples hilos (SIMT) para soportar la ejecución paralela de un gran número de hilos generalmente sincronizados, usando una unidad de instrucción común configurada para emitir instrucciones en un conjunto de motores de procesamiento dentro de cada una de las agrupaciones de procesamiento. A diferencia del régimen de ejecución de SIMD, donde todos los motores de procesamiento ejecutan habitualmente instrucciones idénticas, la ejecución de SIMT permite que diferentes hilos sigan más fácilmente rutas de ejecución divergentes a través de un programa de hilos dado. Los expertos en la materia entenderán que un régimen de procesamiento de SIMD representa un subconjunto funcional de un régimen de procesamiento de SIMT.
El funcionamiento de la agrupación de procesamiento 214 puede controlarse mediante un gestor de canalización 232 que distribuye tareas de procesamiento a procesadores paralelos SIMT. El gestor de canalización 232 recibe instrucciones desde el planificador 210 de la Figura 2 y gestiona la ejecución de estas instrucciones mediante un multiprocesador de gráficos 234 y/o una unidad de textura 236. El multiprocesador de gráficos 234 ilustrado es una instancia ilustrativa de un procesador paralelo SIMT. Sin embargo, pueden incluirse diversos tipos de procesadores paralelos de SIMT de arquitecturas diferentes dentro de la agrupación de procesamiento 214. Una o más instancias del multiprocesador de gráficos 234 se pueden incluir dentro de una agrupación de procesamiento 214. El multiprocesador de gráficos 234 puede procesar datos y puede usarse una barra transversal de datos 240 para distribuir los datos procesados a uno de múltiples posibles destinos, que incluyen otras unidades sombreadoras. El gestor de canalización 232 puede facilitar la distribución de datos procesados especificando destinos para que se distribuyan datos procesados mediante la barra transversal de datos 240.
Cada multiprocesador de gráficos 234 dentro de la agrupación de procesamiento 214 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades aritmético-lógicas, unidades de almacenamiento de carga, etc.), que puede canalizarse, permitiendo que se emita una nueva instrucción antes de que haya terminado una instrucción anterior. Puede proporcionarse cualquier combinación de lógica de ejecución funcional. En una realización, la lógica funcional soporta una variedad de operaciones, que incluyen la aritmética de números enteros y de coma flotante (por ejemplo, suma y multiplicación), operaciones de comparación, operaciones lógicas (AND, Or , XOR), desplazamiento de bits y cálculo de varias funciones algebraicas (por ejemplo, interpolación plana, funciones trigonométricas, exponenciales y logarítmicas, etc.); y el mismo hardware de unidad funcional puede aprovecharse para realizar diferentes operaciones.
La serie de instrucciones transmitidas a la agrupación de procesamiento 214 constituye un hilo, como se definió anteriormente en el presente documento, y el conjunto de un cierto número de hilos que se ejecutan concurrentemente a través de los motores de procesamiento paralelo (no mostrados) dentro de un multiprocesador de gráficos 234 se denomina en el presente documento grupo de hilos. Como se usa en el presente documento, un grupo de hilos se refiere a un grupo de hilos que ejecutan concurrentemente el mismo programa con diferentes datos de entrada, asignándose un hilo del grupo a un motor de procesamiento diferente dentro de un multiprocesador de gráficos 234. Un grupo de hilos puede incluir menos hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, en cuyo caso algunos motores de procesamiento estarán inactivos durante los ciclos en que se procesa ese grupo de hilos. Un grupo de hilos también puede incluir más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, en cuyo caso el procesamiento tendrá lugar durante ciclos de reloj consecutivos. Cada multiprocesador de gráficos 234 puede soportar hasta G grupos de hilos simultáneamente. Adicionalmente, una pluralidad de grupos de hilos relacionados pueden estar activos (en diferentes fases de ejecución) al mismo tiempo dentro de un multiprocesador de gráficos 234.
En una realización, el multiprocesador de gráficos 234 incluye una memoria de caché interna para realizar operaciones de carga y almacén. En una realización, el multiprocesador de gráficos 234 puede prescindir de una caché interna y usar una memoria caché (por ejemplo, la caché L1 308) dentro de la agrupación de procesamiento 214. Cada multiprocesador de gráficos 234 también tiene acceso a cachés de nivel L2 dentro de las unidades de subdivisión (por ejemplo, las unidades de subdivisión 220A-220N de la Figura 2) que se comparten entre todas las agrupaciones de procesamiento 214 y pueden usarse para transferir datos entre hilos. El multiprocesador de gráficos 234 también puede acceder a memoria global fuera de chip, que puede incluir una o más de memoria de procesador paralelo local y/o memoria de sistema. Puede usarse cualquier memoria externa a la unidad de procesamiento paralelo 202 como memoria global. Las realizaciones en las que la agrupación de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la caché L1 308.
Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para mapear direcciones virtuales a direcciones físicas. En otras realizaciones, una o más instancias de la MMU 245 pueden residir dentro de la interfaz de memoria 218 de la Figura 2. La MMU 245 incluye un conjunto de entradas de tabla de página (PTE) usadas para mapear una dirección virtual a una dirección física de una pieza (más información sobre la aplicación de piezas) y, opcionalmente, un índice de línea de caché. La MMU 245 puede incluir memorias intermedias de traducción adelantada (TLB) de dirección o cachés que pueden residir dentro del multiprocesador de gráficos 234 o la caché L1 o la agrupación de procesamiento 214. La dirección física se procesa para distribuir la ubicación de acceso a datos de superficie para posibilitar una intercalación de solicitudes efectiva entre unidades de subdivisión. El índice de línea de caché se puede usar para determinar si una solicitud de una línea de caché es un acierto o un fallo.
En aplicaciones de gráficos y de cálculo, una agrupación de procesamiento 214 puede configurarse de manera que cada multiprocesador de gráficos 234 esté acoplado a una unidad de textura 236 para realizar operaciones de mapeo de textura, por ejemplo, determinar posiciones de muestras de textura, leer datos de textura y filtrar los datos de textura. Los datos de textura se leen desde una caché L1 de textura interna (no mostrada) o, en algunas realizaciones, desde la caché L1 dentro del multiprocesador de gráficos 234 y se extraen desde una caché L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador de gráficos 234 emite tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su procesamiento adicional o para almacenar la tarea procesada en una caché L2, memoria de procesador paralelo local o memoria de sistema mediante la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones previas a la rasterización) está configurada para recibir datos desde el multiprocesador de gráficos 234, dirigir datos a las unidades de ROP, que pueden estar ubicadas con unidades de subdivisión como se describe en el presente documento (por ejemplo, las unidades de subdivisión 220A-220N de la Figura 2). La unidad preROP 242 puede realizar optimizaciones para la mezcla de color, organizar datos de color de píxel y realizar traducciones de dirección.
Se apreciará que la arquitectura de núcleo descrita en el presente documento es ilustrativa y que son posibles modificaciones. Puede incluirse cualquier número de unidades de procesamiento, por ejemplo, el multiprocesador de gráficos 234, las unidades de textura 236, las preROP 242, etc., dentro de una agrupación de procesamiento 214. Además, si bien solo se muestra una agrupación de procesamiento 214, una unidad de procesamiento paralelo como la descrita en el presente documento puede incluir cualquier número de instancias de la agrupación de procesamiento 214. En una realización, cada agrupación de procesamiento 214 puede configurarse para funcionar de forma independiente a otras agrupaciones de procesamiento 214 usando unidades de procesamiento, cachés L1, etc., separadas y distintas.
La Figura 2D muestra un multiprocesador de gráficos 234, de acuerdo con una realización. En una realización de este tipo, el multiprocesador de gráficos 234 se acopla con el gestor de canalización 232 de la agrupación de procesamiento 214. El multiprocesador de gráficos 234 tiene una canalización de ejecución que incluye, pero sin limitación, una caché de instrucciones 252, una unidad de instrucciones 254, una unidad de mapeo de direcciones 256, un fichero de registro 258, uno o más núcleos de unidad de procesamiento de gráficos de propósito general (GPGPU) 262 y una o más unidades de carga/almacén 266. Los núcleos de GPGPU 262 y las unidades de carga/almacenamiento 266 están acopladas a una memoria caché 272 y una memoria compartida 270 a través de una interconexión de memoria y caché 268.
En una realización, la caché de instrucciones 252 recibe un flujo de instrucciones para ejecutarse desde el gestor de canalización 232. Las instrucciones se almacenan en la caché de instrucciones 252 y se despachan para su ejecución mediante la unidad de instrucciones 254. La unidad de instrucciones 254 puede despachar instrucciones como grupos de hilos (por ejemplo, envolventes), donde cada hilo del grupo de hilos está asignado a una unidad de ejecución diferente dentro del núcleo de GPGPU 262. Una instrucción puede acceder a cualquiera del espacio de direcciones local, compartido o global, especificando una dirección dentro de un espacio de direcciones unificado. La unidad de mapeo de direcciones 256 se puede usar para convertir direcciones del espacio de direcciones unificado en una dirección de memoria distinta a la que se puede acceder mediante las unidades de carga/almacenamiento 266.
El fichero de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 324. El fichero de registro 258 proporciona almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, los núcleos de GPGPU 262, las unidades de carga/almacén 266) del multiprocesador de gráficos 324. En una realización, el fichero de registro 258 se divide entre cada una de las unidades funcionales de manera que a cada unidad funcional se le asigna una porción dedicada del fichero de registro 258. En una realización, el fichero de registro 258 se divide entre las diferentes envolventes que se ejecutan por el multiprocesador de gráficos 324.
Los núcleos de GPGPU 262 puede cada uno incluir unidades de coma flotante (FPU) y/o unidades aritmético-lógicas (ALU) de números enteros que se usan para ejecutar instrucciones del multiprocesador de gráficos 324. Los núcleos de GPGPU 262 pueden ser similares en arquitectura o pueden diferir en arquitectura, de acuerdo con las realizaciones. Por ejemplo, y en una realización, una primera porción de los núcleos de GPGPU 262 incluye una FPU de precisión sencilla y una ALU de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. En una realización, las FPU pueden implementar la norma IEEE 754-2008 para aritmética de coma flotante o posibilitar aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 324 puede incluir adicionalmente una o más unidades de función fija o de función especial para realizar funciones específicas, tales como operaciones de copia de rectángulo o de mezcla de píxeles. En una realización, uno o más de los núcleos de GPGPU también pueden incluir lógica de funciones fijas o especiales.
La interconexión de memoria y caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 324 al fichero de registro 258 y a la memoria compartida 270. En una realización, la interconexión de memoria y caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacén 266 implemente operaciones de carga y almacén entre la memoria compartida 270 y el fichero de registro 258. En una realización, la memoria compartida 270 se puede usar para posibilitar la comunicación entre hilos que se ejecutan en las unidades funcionales. La memoria caché 272 puede usarse como una caché de datos, por ejemplo, para almacenar en caché datos de textura comunicados entre las unidades funcionales y la unidad de textura 236.
Las Figuras 3A-3B ilustran multiprocesadores de gráficos adicionales, de acuerdo con las realizaciones. Los multiprocesadores de gráficos 325, 350 ilustrados son variantes del multiprocesador de gráficos 234 de la Figura 2C. Los multiprocesadores de gráficos 325, 350 ilustrados pueden estar configurados como un multiprocesador de envío por flujo continuo (SM) que puede realizar la ejecución simultánea de un gran número de hilos de ejecución.
La Figura 3A muestra un multiprocesador de gráficos 325 de acuerdo con una realización adicional. El multiprocesador de gráficos 325 incluye múltiples instancias adicionales de unidades de recurso de ejecución relativas al multiprocesador de gráficos 234 de la Figura 2D. Por ejemplo, el multiprocesador de gráficos 325 puede incluir múltiples instancias de la unidad de instrucciones 332A-332B, del fichero de registro 334A-334B y de las unidades de textura 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de unidades de ejecución de gráficos o de cálculo (por ejemplo, el núcleo de GPGPU 336A-336B, el núcleo de GPGPU 337A-337B, el núcleo de GPGPU 338A-338B) y múltiples conjuntos de unidades de carga/almacén 340A-340B. En una realización, las unidades de recursos de ejecución tienen una caché de instrucciones comunes 330, una memoria caché de texturas y/o datos 342 y una memoria compartida 346. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 327. En una realización, el tejido de interconexión 327 incluye uno o más conmutadores de barra transversal para posibilitar la comunicación entre los diversos componentes del multiprocesador de gráficos 325.
La Figura 3B muestra un multiprocesador de gráficos 350 de acuerdo con una realización adicional. El procesador de gráficos incluye múltiples conjuntos de recursos de ejecución 356A-356D, donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucciones, ficheros de registro, núcleos de GPGPU y unidades de almacenamiento de carga, como se ilustra en la Figura 2D y la Figura 3A. Los recursos de ejecución 356A-356D pueden funcionar en conjunto con la unidad o unidades de textura 360A-360D para operaciones de textura, mientras que comparten una caché de instrucciones 354 y la memoria compartida 362. En una realización, los recursos de ejecución 356A-356D pueden compartir una caché de instrucciones 354 y una memoria compartida 362, así como múltiples instancias de una memoria de textura y/o de caché de datos 358A-358B. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 352 similar al tejido de interconexión 327 de la Figura 3A.
Los expertos en la materia entenderán que la arquitectura descrita en las Figuras 1, 2A-2D y 3A-3B es descriptiva y no limitante en cuanto al alcance de las presentes realizaciones. Por lo tanto, las técnicas descritas en el presente documento pueden implementarse en cualquier unidad de procesamiento configurada adecuadamente, que incluyen, sin limitación, uno o más procesadores de aplicaciones móviles, una o más unidades de procesamiento central (CPU) de escritorio o servidor, que incluyen CPU de múltiples núcleos, una o más unidades de procesamiento paralelo, tal como la unidad de procesamiento paralelo 202 de la Figura 2, así como uno o más procesadores de gráficos o unidades de procesamiento de propósito especial, sin apartarse del alcance de las realizaciones descritas en el presente documento.
En algunas realizaciones, un procesador paralelo o GPGPU como se describe en el presente documento está acoplado de manera comunicativa a núcleos de anfitrión/procesador para acelerar operaciones de gráficos, operaciones de aprendizaje automático, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede estar acoplada de manera comunicativa al procesador/núcleos de anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU puede estar integrada en el mismo paquete o chip que los núcleos y estar acoplada de manera comunicativa a los núcleos a través de un bus/interconexión de procesador interno (es decir, interna al paquete o chip). Independientemente de la manera en la que esté conectada la GPU, los núcleos de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU usa entonces una circuitería/lógica dedicada para procesar de manera efectiva estos comandos/instrucciones.
Técnicas para interconexión de GPU a procesador de anfitrión
La Figura 4A ilustra una arquitectura ilustrativa en la que una pluralidad de GPU 410-413 están acopladas de manera comunicativa a una pluralidad de procesadores de múltiples núcleos 405-406 a través de enlaces de alta velocidad 440-443 (por ejemplo, buses, interconexiones de punto a punto, etc.). En una realización, los enlaces de alta velocidad 440-443 soportan un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o mayor, dependiendo de la implementación. Pueden usarse diversos protocolos de interconexión que incluyen, pero sin limitación, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes de la invención no están limitados a ningún protocolo o caudal de comunicación particular.
Además, en una realización, dos o más de las GPU 410-413 están interconectadas a través de enlaces de alta velocidad 444-445, que pueden implementarse usando los mismos o diferentes protocolos/enlaces que los usados para los enlaces de alta velocidad 440-443. De manera similar, dos o más de los procesadores de múltiples núcleos 405-406 pueden conectarse a través del enlace de alta velocidad 433, que puede ser buses de múltiples procesadores simétricos (SMP) que funcionan a 20 GB/s, 30 GB/s, 120 GB/s o más. Como alternativa, toda la comunicación entre los diversos componentes de sistema mostrados en la Figura 4A puede conseguirse usando los mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, como se ha mencionado, los principios subyacentes de la invención no están limitados a ningún tipo particular de tecnología de interconexión.
En una realización, cada procesador de múltiples núcleos 405-406 está acoplado de manera comunicativa a una memoria de procesador 401-402, a través de interconexiones de memoria 430-431, respectivamente, y cada GPU 410-413 está acoplada de manera comunicativa a la memoria de GPU 420-423 a través de interconexiones de memoria de GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar las mismas tecnologías de acceso de memoria, o unas diferentes. A modo de ejemplo, y sin limitación, las memorias de procesador 401-402 y las memorias de GPU 420-423 pueden ser memorias volátiles, tales como memorias de acceso aleatorio dinámicas (DRAM) (incluidas DRAM apiladas), DDR SDRAM de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6) o memoria de alto ancho de banda (HBM) y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram. En una realización, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
Como se describe a continuación, aunque los diversos procesadores 405-406 y GPU 410-413 pueden estar acoplados físicamente a una memoria particular 401-402, 420-423, respectivamente, se puede implementar una arquitectura de memoria unificada en la que el mismo espacio de direcciones de sistema virtuales (también denominado espacio de "direcciones efectivas") se distribuye entre todas las diversas memorias físicas. Por ejemplo, cada una de las memorias de procesador 401-402 puede comprender 64 GB del espacio de direcciones de memoria de sistema y cada una de las memorias de GPU 420-423 puede comprender 32 GB del espacio de direcciones de memoria de sistema (dando como resultado un total de memoria direccionable de 256 GB en este ejemplo).
La Figura 4B ilustra detalles adicionales para una interconexión entre un procesador de múltiples núcleos 407 y un módulo de aceleración de gráficos 446 de acuerdo con una realización. El módulo de aceleración de gráficos 446 puede incluir uno o más chips de GPU integrados en una tarjeta de línea que está acoplada al procesador 407 mediante el enlace de alta velocidad 440. Como alternativa, el módulo de aceleración de gráficos 446 puede estar integrado en el mismo paquete o chip que el procesador 407.
El procesador 407 ilustrado incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de traducción adelantada 461A-461D y una o más cachés 462A-462D. Los núcleos pueden incluir diversos otros componentes para ejecutar instrucciones y procesar datos que no se ilustran para evitar oscurecer los principios subyacentes de la invención (por ejemplo, unidades de extracción de instrucción, unidades de predicción de ramal, decodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y nivel 2 (L2). Además, una o más cachés compartidas 426 se pueden incluir en la jerarquía de almacenamiento en caché y se pueden compartir por conjuntos de los núcleos 460A-460D. Por ejemplo, una realización del procesador 407 incluye 24 núcleos, cada uno con su propia caché L1, doce cachés L2 compartidas y doce cachés L3 compartidas. En esta realización, una de las cachés L2 y L3 son compartidas por dos núcleos adyacentes. El procesador 407 y el módulo de integración de acelerador de gráficos 446 se conectan con la memoria de sistema 441, que puede incluir las memorias de procesador 401 -402
Se mantiene la coherencia para los datos e instrucciones almacenados en las diversas cachés 462A-462D, 456 y la memoria de sistema 441 mediante una comunicación entre núcleos a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener una circuitería/lógica de coherencia de caché asociada a la misma para comunicarse a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de monitorización de caché a través del bus de coherencia 464 para monitorizar los accesos de caché. Las técnicas de monitorización/coherencia de caché son bien entendidas por los expertos en la materia y no se describirán en detalle en este punto para evitar oscurecer los principios subyacentes de la invención.
En una realización, un circuito de intermediario 425 acopla de forma comunicativa el módulo de aceleración de gráficos 446 al bus de coherencia 464, lo que permite que el módulo de aceleración de gráficos 446 participe en el protocolo de coherencia de caché como un homólogo de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito de intermediario 425 a través del enlace de alta velocidad 440 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 437 conecta el módulo de aceleración de gráficos 446 al enlace 440.
En una implementación, un circuito de integración de acelerador 436 proporciona gestión de caché, acceso a memoria, gestión de contexto y servicios de gestión de interrupción en nombre de una pluralidad de motores de procesamiento de gráficos 431, 432, N del módulo de aceleración de gráficos 446. Cada uno de los motores de procesamiento de gráficos 431,432, N puede comprender una unidad de procesamiento de gráficos (GPU) separada. Como alternativa, los motores de procesamiento de gráficos 431, 432, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tales como unidades de ejecución de gráficos, motores de procesamiento de medios (por ejemplo, codificadores/descodificadores de vídeo), muestreadores y motores de blit. En otras palabras, el módulo de aceleración de gráficos puede ser una GPU con una pluralidad de motores de procesamiento de gráficos 431 -432, N, o los motores de procesamiento de gráficos 431 -432, N pueden ser unas GPU individuales integradas en un paquete, tarjeta de línea o chip común.
En una realización, el circuito de integración de acelerador 436 incluye una unidad de gestión de memoria (MMU) 439 para realizar diversas funciones de gestión de memoria tales como traducciones de memoria virtual a física (también denominadas traducciones de memoria eficaz a real) y protocolos de acceso de memoria para acceder a la memoria de sistema 441. La MMU 439 puede incluir también una memoria intermedia de traducción adelantada (TLB) (no mostrada) para almacenar en caché las traducciones de dirección virtual/eficaz a física/real. En una implementación, una caché 438 almacena comandos y datos para un acceso eficiente por los motores de procesamiento de gráficos 431-432, N. En una realización, los datos almacenados en la caché 438 y en las memorias de gráficos 433-434, N se mantienen coherentes con las cachés de núcleo 462A-462D, 456 y la memoria de sistema 411. Como se ha mencionado, esto puede conseguirse mediante el circuito de intermediario 425 que toma parte en el mecanismo de coherencia de caché en nombre de la caché 438 y las memorias 433-434, N (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con las modificaciones/accesos de líneas de caché en las cachés del procesador 462A-462D, 456 y recibiendo actualizaciones de la caché 438).
Un conjunto de registros 445 almacenan datos de contexto para hilos ejecutados por los motores de procesamiento de gráficos 431-432, N y un circuito de gestión de contexto 448 gestiona los contextos de hilo. Por ejemplo, el circuito de gestión de contexto 448 puede realizar operaciones de grabación y restauración para grabar y restaurar contextos de los diversos hilos durante conmutaciones de contexto (por ejemplo, donde se guarda un primer hilo y se almacena un segundo hilo de modo que el segundo hilo se pueda ejecutar mediante un motor de procesamiento de gráficos). Por ejemplo, en un conmutador de contexto, el circuito de gestión de contexto 448 puede almacenar valores de registro actuales en una región designada en la memoria (por ejemplo, identificada mediante un puntero de contexto). A continuación, puede restaurar los valores de registro al volver al contexto. En una realización, un circuito de gestión de interrupción 447 recibe y procesa interrupciones recibidas desde los dispositivos de sistema.
En una implementación, las direcciones virtuales/efectivas de un motor de procesamiento de gráficos 431 se traducen a direcciones reales/físicas en memoria de sistema 411 por la MMU 439. Una realización del circuito de integración de acelerador 436 soporta múltiples (por ejemplo, 4, 8, 16) módulos de acelerador de gráficos 446 y/u otros dispositivos aceleradores. El módulo de acelerador de gráficos 446 puede estar dedicado a una única aplicación ejecutada en el procesador 407 o puede estar compartido entre múltiples aplicaciones. En una realización, se presenta un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 431-432, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos se pueden subdividir en "cortes" que se asignan a diferentes VM y/o aplicaciones en función de los requisitos de procesamiento y las prioridades asociadas a las VM y/o aplicaciones.
Por lo tanto, el circuito de integración de acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona servicios de traducción de direcciones y de caché de memoria de sistema. Además, el circuito de integración de acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador de anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de memoria.
Dado que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se mapean explícitamente al espacio de direcciones reales visto por el procesador de anfitrión 407, cualquier procesador de anfitrión puede acceder a estos recursos directamente usando un valor de dirección efectivo. Una función del circuito de integración de acelerador 436, en una realización, es la separación física de los motores de procesamiento de gráficos 431-432, N de modo que aparecen al sistema como unidades independientes.
Como se ha mencionado, en la realización ilustrada, una o más memorias de gráficos 433-434, M están acopladas a cada uno de los motores de procesamiento de gráficos 431-432, N, respectivamente. Las memorias de gráficos 433­ 434, M almacenan instrucciones y datos que son procesados por cada uno de los motores de procesamiento de gráficos 431 -432, N. Las memorias de gráficos 433-434, M pueden ser memorias volátiles, tales como DRAM (incluidas DRAM apiladas), memoria GDDR (por ejemplo, GDDR5, GDDR6) o HBM, y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram.
En una realización, para reducir el tráfico de datos a través del enlace 440, se usan técnicas de desvío para garantizar que los datos almacenados en las memorias de gráficos 433-434, M son datos que se usarán de manera más frecuente por los motores de procesamiento de gráficos 431-432, N y, preferentemente, no se usarán por los núcleos 460A-460D (al menos no de manera frecuente). De manera similar, el mecanismo de desvío intenta mantener los datos necesarios por los núcleos (y, preferentemente, no los motores de procesamiento de gráficos 431-432, N) dentro de las cachés 462A-462D, 456 de los núcleos y la memoria de sistema 411.
La Figura 4C ilustra otra realización en la que el circuito de integración de acelerador 436 está integrado dentro del procesador 407. En esta realización, los motores de procesamiento de gráficos 431 -432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración de acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, puede utilizar cualquier forma de bus o protocolo de interfaz). El circuito de integración de acelerador 436 puede realizar las mismas operaciones que aquellas descritas con respecto a la Figura 4B, pero potencialmente a un caudal superior dada su proximidad cercana al bus de coherencia 462 y a las cachés 462A-462D, 426.
Una realización soporta diferentes modelos de programación que incluyen un modelo de programación de proceso especializado (sin virtualización de módulo de aceleración de gráficos) y modelos de programación compartida (con virtualización). Estos últimos puede incluir modelos de programación que están controlados por el circuito de integración de acelerador 436 y modelos de programación que están controlados por el módulo de aceleración de gráficos 446.
En una realización del modelo de proceso dedicado, los motores de procesamiento de gráficos 431-432, N están dedicados a una única aplicación o proceso bajo un único sistema operativo. La aplicación única puede canalizar otras solicitudes de aplicación hacia los motores de gráficos 431-432, N, proporcionando virtualización dentro de una VM/subdivisión.
En los modelos de programación de proceso especializado, los motores de procesamiento de gráficos 431-432, N, pueden estar compartidos por múltiples VM/subdivisiones de aplicación. Los modelos compartidos requieren un sistema hipervisor para virtualizar los motores de procesamiento de gráficos 431 -432, N para permitir acceso por cada sistema operativo. En cuanto a sistemas de subdivisión única sin hipervisor, los motores de procesamiento de gráficos 431-432, N pertenecen al sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 431 -432, N para proporcionar acceso a cada proceso o aplicación.
En cuanto al modelo de programación compartida, el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos individual 431-432, N selecciona un elemento de proceso usando un manejador de proceso. En una realización, los elementos de proceso se almacenan en la memoria de sistema 411 y pueden referenciarse usando las técnicas de traducción de direcciones efectivas a direcciones reales descritas en el presente documento. El manejador de proceso puede ser un valor específico de la implementación proporcionado al proceso de anfitrión cuando se registra su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, cuando se llama al software de sistema para añadir el elemento de proceso a la lista enlazada de elementos de proceso). Los 16 bits inferiores del manejador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista enlazada de elementos de proceso.
La Figura 4D ilustra un corte de integración de acelerador 490 ilustrativo. Como se usa en el presente documento, un "corte" comprende una porción especificada de los recursos de procesamiento del circuito de integración de acelerador 436. Un espacio de direcciones efectivas de aplicación 482 dentro de la memoria de sistema 411 almacena elementos de proceso 483. En una realización, los elementos de proceso 483 se almacenan en respuesta a invocaciones de GPU 481 de las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado de proceso para la aplicación 480 correspondiente. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En el segundo caso, el WD 484 es un puntero a la cola de solicitudes de trabajos en el espacio de direcciones 482 de la aplicación.
El módulo de aceleración de gráficos 446 y/o los motores de procesamiento de gráficos individuales 431 -432, N pueden ser compartidos por todos o un subconjunto de los procesos del sistema. Las realizaciones de la invención incluyen una infraestructura para configurar el estado de proceso y enviar un WD 484 a un módulo de aceleración de gráficos 446 para empezar un trabajo en un entorno virtualizado.
En una implementación, el modelo de programación de proceso especializado es específico de la implementación. En este modelo, un único proceso acapara el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos individual 431. Dado que un único proceso acapara el módulo de aceleración de gráficos 446, el hipervisor inicializa el circuito de integración de acelerador 436 para la subdivisión acaparadora y el sistema operativo inicializa el circuito de integración de acelerador 436 para el proceso acaparador en el momento en que se asigna el módulo de aceleración de gráficos 446.
En la operación, una unidad de extracción de WD 491 en el corte de integración de acelerador 490 extrae el siguiente WD 484 que incluye una indicación del trabajo que va a hacerse por uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Los datos del WD 484 pueden almacenarse en registros 445 y usarse por la MMU 439, el circuito de gestión de interrupción 447 y/o el circuito de gestión de contexto 446, como se ilustra. Por ejemplo, una realización de la MMU 439 incluye circuitería de paso de segmento/página para acceder a tablas de segmentos/páginas 486 dentro del espacio de direcciones virtual del SO 485. El circuito de gestión de interrupción 447 puede procesar eventos de interrupción 492 recibidos del módulo de aceleración de gráficos 446. Cuando se realizan operaciones de gráficos, una dirección efectiva 493 generada por un motor de procesamiento de gráficos 431 -432, N se traduce a una dirección real mediante la MMU 439.
En una realización, se duplica el mismo conjunto de registros 445 para cada motor de procesamiento de gráficos 431 -432, N y/o módulo de aceleración de gráficos 446 y puede inicializarse por el hipervisor o el sistema operativo. Cada uno de estos registros duplicados puede incluirse en un corte de integración de acelerador 490. Se muestran los registros ilustrativos que pueden inicializarse por el hipervisor en la Tabla 1.
Tabla 1 - Registros inicializados por el hipervisor
Figure imgf000014_0001
Se muestran los registros ilustrativos que pueden inicializarse por el sistema operativo en la Tabla 2.
Tabla 2 - Registros inicializados por el sistema operativo
Figure imgf000014_0002
En una realización, cada WD 484 es específico de un módulo de aceleración de gráficos particular 446 y/o de un motor de procesamiento de gráficos 431-432, N. Contiene toda la información que un motor de procesamiento de gráficos 431-432, N requiere para realizar su trabajo o puede ser un puntero a una ubicación de memoria donde la aplicación ha configurado una cola de comandos de trabajo a completar.
La Figura 4E ilustra detalles adicionales para una realización de un modelo compartido. Esta realización incluye un espacio de direcciones reales de hipervisor 498 en el que se almacena una lista de elementos de proceso 499. El espacio de direcciones reales de hipervisor 498 es accesible a través de un hipervisor 496 que virtualiza los motores de módulo de aceleración de gráficos para el sistema operativo 495.
Los modelos de programación compartidos permiten que todos o un subconjunto de procesos de todas o un subconjunto de subdivisiones del sistema usen un módulo de aceleración de gráficos 446. Hay dos modelos de programación donde el módulo de aceleración de gráficos 446 se comparte por múltiples procesos y particiones: compartido en intervalos de tiempo y compartido dirigido por gráficos.
En este modelo, el hipervisor de sistema 496 acapara el módulo de aceleración de gráficos 446 y pone sus funciones a disposición de todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte virtualización por el hipervisor de sistema 496, el módulo de aceleración de gráficos 446 puede adherirse a los siguientes requisitos: 1) Una solicitud de trabajo de la aplicación debe ser autónoma (es decir, el estado no necesita mantenerse entre trabajos), o el módulo de aceleración de gráficos 446 debe proporcionar un mecanismo de grabación y restauración de contexto. 2) El módulo de aceleración de gráficos 446 garantiza que la solicitud de trabajo de una aplicación se complete en una cantidad de tiempo especificada, incluido cualquier fallo de traducción, o el módulo de aceleración de gráficos 446 proporciona la capacidad de anticipar el procesamiento del trabajo. 3) El módulo de aceleración de gráficos 446 debe garantizar equidad entre procesos cuando opera en el modelo de programación compartido dirigido.
En una realización, para el modelo compartido, se requiere que la aplicación 480 realice una llamada de sistema al sistema operativo 495 con un tipo de módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero a área de grabación/restauración de contexto (CSRP). El tipo de módulo de aceleración de gráficos 446 describe la función de aceleración dirigida para la llamada de sistema. El tipo de módulo de aceleración de gráficos 446 puede ser un valor específico del sistema. El WD tiene un formato específico para el módulo de aceleración de gráficos 446 y puede estar en forma de comando de módulo de aceleración de gráficos 446, puntero de dirección efectiva a una estructura definida por el usuario, puntero de dirección efectiva a una cola de comandos o cualquier otra estructura de datos para describir el trabajo que debe realizar el módulo de aceleración de gráficos 446. En una realización, el valor de AMR es el estado de AMR para su uso para el proceso actual. El valor pasado al sistema operativo es similar a una aplicación que configura el AMR. Si las implementaciones del circuito de integración del acelerador 436 y del módulo de aceleración de gráficos 446 no soportan un Registro de Anulación de Máscara de Autoridad de Usuario (UAMOR), el sistema operativo puede aplicar el valor de UAMOR actual al valor de AMR antes de pasar el AMR en la llamada del hipervisor. El hipervisor 496 puede aplicar opcionalmente el valor actual del Registro de Anulación de Máscara de Autoridad (AMOR) antes de asignar el AMR al elemento de proceso 483. En una realización, el CSRP es uno de los registros 445 que contiene la dirección efectiva de un área en el espacio de direcciones 482 de la aplicación para que el módulo de aceleración de gráficos 446 grabe y restaure el estado de contexto. Este puntero es opcional si no se requiere que se grabe estado entre trabajos o cuando se anticipa un trabajo. El área de grabación/restauración de contexto puede residir en la memoria de sistema.
Al recibir la llamada al sistema, el sistema operativo 495 puede verificar que la aplicación 480 se ha registrado y se le ha otorgado la autoridad para usar el módulo de aceleración de gráficos 446. El sistema operativo 495, a continuación, llama al hipervisor 496 con la información mostrada en la Tabla 3.
Tabla 3 - Parámetros de llamada del OS al hipervisor
Figure imgf000015_0001
Al recibir la llamada al hipervisor, el hipervisor 496 verifica que el sistema operativo 495 se ha registrado y se le ha otorgado la autoridad para usar el módulo de aceleración de gráficos 446. A continuación, el hipervisor 496 introduce el elemento de proceso 483 en la lista enlazada de elementos de proceso para el tipo de módulo de aceleración de gráficos 446 correspondiente. El elemento de proceso puede incluir la información mostrada en la Tabla 4.
Tabla 4 - Información de elemento de proceso
Figure imgf000015_0002
En una realización, el hipervisor inicializa una pluralidad de registros 445 de corte de integración de acelerador 490.
Como se ilustra en la Figura 4F, una realización de la invención emplea una memoria unificada direccionable mediante un espacio de direcciones virtual de memoria común usado para acceder a las memorias de procesador físico 401 -402 y a las memorias de GPU 420-423. En esta implementación, las operaciones ejecutadas en las GPU 410-413 utilizan el mismo espacio de direcciones de memoria virtual/efectiva para acceder a las memorias de procesadores 401-402 y viceversa, simplificando de ese modo la programabilidad. En una realización, una primera porción del espacio de direcciones virtuales/efectivas está asignada a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420, y así sucesivamente. Todo el espacio de memoria virtual/efectiva (a veces denominado espacio de direcciones efectivas) se distribuye de este modo a través de cada una de las memorias de procesador 401-402 y las memorias de GPU 420-423, lo que permite que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual mapeada a esa memoria.
En una realización, la circuitería de gestión de desvío/coherencia 494A-494E dentro de una o más de las MMU 439A-439E garantiza la coherencia de caché entre las cachés de los procesadores de anfitrión (por ejemplo, 405) y las GPU 410-413, y también implementa técnicas de desvío que indican las memorias físicas en las que se deben almacenar determinados tipos de datos. Aunque se ilustran múltiples casos de circuitería de gestión de desvío/coherencia 494A-494E en la Figura 4F, la circuitería de desvío/coherencia puede implementarse dentro de la MMU de uno o más procesadores de anfitrión 405 y/o dentro del circuito de integración de acelerador 436.
Una realización permite que la memoria adjunta a la GPU 420-423 se mapee como parte de memoria de sistema, y se acceda usando tecnología de memoria virtual compartida (SVM), pero sin sufrir las desventajas de rendimiento típicas asociadas con la coherencia de caché de sistema completa. La capacidad de que se acceda a la memoria adjunta a la GPU 420-423 como memoria de sistema sin sobrecarga de coherencia de caché onerosa proporciona un entorno de operación beneficioso para la descarga de la GPU. Esta disposición permite que el software del procesador de anfitrión 405 establezca operandos y acceda a resultados de cómputo, sin la sobrecarga de las copias de datos de DMA de E/S tradicionales. Tales copias tradicionales implican llamadas de controlador, interrupciones y accesos de E/S mapeados a memoria (MMIO) que son, todos ellos, ineficientes en relación con los accesos a memoria sencillos. Al mismo tiempo, la capacidad de acceder a la memoria anexada a GPU 420-423 sin sobrecargas de coherencia de la caché puede ser crítica para el tiempo de ejecución de un cómputo descargado. En casos con tráfico sustancial de memoria de escritura de transmisión por flujo continuo, por ejemplo, la sobrecarga de coherencia de la caché puede reducir significativamente el ancho de banda de escritura eficaz observado por una GPU 410-413. La eficiencia del establecimiento de operandos, la eficiencia del acceso a resultados y la eficiencia del cómputo de GPU desempeñan, todas ellas, un papel en la determinación de la eficacia de la descarga de GPU.
En una implementación, la selección entre el desvío de GPU y el desvío de procesador de anfitrión es controlada por una estructura de datos de rastreador de desvío. Puede usarse una tabla de desvíos, por ejemplo, que puede ser una estructura granular a nivel de página (es decir, controlada con la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria anexada a GPU. La tabla de desvíos puede implementarse en un rango de memoria robado de una o más memorias anexadas a GPU 420-423, con o sin una caché de desvío en la GPU 410-413 (por ejemplo, para almacenar en caché entradas usadas de manera frecuente/reciente de la tabla de desvíos). Como alternativa, toda la tabla de desvíos puede mantenerse dentro de la GPU.
En una implementación, se accede a la entrada de tabla de desvíos asociada con cada acceso a la memoria anexada a GPU 420-423 antes del acceso real a la memoria de GPU, provocando las siguientes operaciones. En primer lugar, solicitudes locales desde la GPU 410-413 que encuentran su página en el desvío de GPU se reenvían directamente a una memoria de GPU 420-423 correspondiente. Las solicitudes locales de la GPU que encuentran su página en el desvío de anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como el analizado anteriormente). En una realización, las solicitudes del procesador 405 que encuentran la página solicitada en el desvío de procesador de anfitrión completan la solicitud como una lectura de memoria normal. Como alternativa, las solicitudes dirigidas a una página desviada de la GPU pueden redirigirse a la GPU 410-413. La GPU puede hacer entonces que la página pase a un desvío de procesador de anfitrión si no está utilizando actualmente la página.
El estado de desvío de una página puede cambiarse o bien mediante un mecanismo basado en software, o bien mediante un mecanismo basado en software asistido por hardware, o bien, para un conjunto limitado de casos, mediante un mecanismo basado puramente en hardware.
Un mecanismo para cambiar el estado de desvío emplea una llamada de API (por ejemplo, OpenCL), que, a su vez, llama al controlador de dispositivos de la GPU que, a su vez, envía un mensaje a (o pone en cola un descriptor de comandos para) la GPU que le indica que cambie el estado de desvío y, para algunas transiciones, que realice una operación de vaciado de caché en el anfitrión. Se requiere la operación de vaciado de caché para una transición desde un desvío del procesador de anfitrión 405 a un desvío de GPU, pero no se requiere para la transacción opuesta.
En una realización, la coherencia de caché se mantiene haciendo temporalmente que las páginas con desvío de GPU no puedan ser almacenadas en caché por el procesador de anfitrión 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso desde la GPU 410, que puede, o no, otorgar acceso de inmediato, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410, es beneficioso garantizar que las páginas desviadas por GPU sean las que requiere la GPU pero no el procesador de ordenador de anfitrión 405, y viceversa.
Canalización de procesamiento de gráficos
La Figura 5 es un diagrama conceptual de una canalización de procesamiento de gráficos 500, según una realización. En una realización, un procesador de gráficos puede implementar la canalización de procesamiento de gráficos 500 ilustrada. El procesador de gráficos puede estar incluir dentro de los subsistemas de procesamiento paralelo descritos en el presente documento, tal como el procesador paralelo 200 de la Figura 2, que, en una realización, es una variante de los procesadores paralelos 112 de la Figura 1. Los diversos sistemas de procesamiento paralelo pueden implementar la canalización de procesamiento de gráficos 500 mediante una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 202 de la Figura 2) como se describe en el presente documento. Por ejemplo, una unidad sombreadora (por ejemplo, el multiprocesador de gráficos 234 de la Figura 3) puede estar configurada para realizar las funciones de una o más de una unidad de procesamiento de vértices 504, una unidad de procesamiento de control de teselación 508, una unidad de procesamiento de evaluación de teselación 512, una unidad de procesamiento de geometría 516 y una unidad de procesamiento de fragmento/píxel 524. Las funciones del ensamblador de datos 502, los ensambladores de primitivas 506, 514, 518, la unidad de teselación 510, el rasterizador 522, y la unidad de operaciones de rasterización 526 pueden realizarse también por otros motores de procesamiento dentro de una agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 214 de la Figura 3) y una correspondiente unidad de subdivisión (por ejemplo, la unidad de subdivisión 220A-220N de la Figura 2). Como alternativa, la canalización de procesamiento de gráficos 500 puede implementarse usando unidades de procesamiento dedicadas para una o más funciones. En una realización, una o más porciones de la canalización de procesamiento de gráficos 500 se pueden realizar mediante una lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, una CPU). En una realización, una o más porciones de la canalización de procesamiento de gráficos 500 pueden acceder a memoria dentro de chip (por ejemplo, memoria de procesador paralelo 222 como en la Figura 2) a través de una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de la Figura 2.
En una realización, el ensamblador de datos 502 es una unidad de procesamiento que recopila datos de vértices para superficies de orden superior, primitivas, etc., y emite los datos de vértices, incluidos los atributos de vértices, a la unidad de procesamiento de vértices 504. La unidad de procesamiento de vértices 504 es una unidad de ejecución programable que está configurada para ejecutar programas sombreadores de vértices, que iluminan y transforman datos de vértices como especifican los programas sombreadores de vértices. Por ejemplo, la unidad de procesamiento de vértices 504 se puede programar para transformar los datos de vértices desde una representación de coordenadas basada en objetos (espacio de objetos) a un sistema de coordenadas alternativo tal como el espacio mundial o el espacio de coordenadas de dispositivo normalizadas (NDC). La unidad de procesamiento de vértices 504 puede leer datos almacenados en memoria caché, local o de sistema para su uso en el procesamiento de los datos de vértices.
Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértice desde la unidad de procesamiento de vértices 504, lee atributos de vértice almacenados según sea necesario y genera primitivas de gráficos para su procesamiento por la unidad de procesamiento de control de teselación 508, donde las primitivas de gráficos incluyen triángulos, segmentos de línea, puntos, parches, etc., según lo soportado por varias interfaces de programación de aplicaciones (API) de procesamiento de gráficos.
La unidad de procesamiento de control de teselación 508 trata los vértices de entrada como puntos de control para un parche geométrico y transforma estos puntos de control desde la representación de entrada del parche, a menudo denominada base del parche, a una representación adecuada para una evaluación de superficie efectiva por parte de la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también calcula factores de teselación para bordes de parches geométricos. Se aplica un factor de teselación a un único borde y cuantifica un nivel dependiente de la vista del detalle asociado con el borde. Una unidad de teselación 510 está configurada para recibir los factores de teselación para bordes de un parche y para teselar el parche en múltiples primitivas geométricas, tales como una línea, triángulo o primitivas cuadrilaterales, que se transmiten a una unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de evaluación de teselación 512 realiza operaciones en coordenadas parametrizadas del parche subdividido para generar una representación de superficie y atributos de vértice para cada vértice asociado a las primitivas geométricas.
Una segunda instancia de un ensamblador de primitivas 514 recibe atributos de vértices desde la unidad de procesamiento de evaluación de teselación 512, que lee los atributos de vértices almacenados según sea necesario y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de geometría 516. La unidad de procesamiento de geometría 516 es una unidad de ejecución programable que está configurada para ejecutar programas sombreadores de geometría, que transforman primitivas de gráficos recibidas desde el ensamblador de primitivas 514 como se especifica por los programas sombreadores de geometría. Por ejemplo, la unidad de procesamiento de geometría 516 puede programarse para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros, tales como coeficientes de ecuaciones de planos, que se usan para rasterizar las nuevas primitivas de gráficos.
En algunas realizaciones, la unidad de procesamiento de geometría 516 también puede añadir o eliminar elementos en el flujo de geometría. La unidad de procesamiento de geometría 516 proporciona los parámetros y vértices que especifican nuevas primitivas de gráficos al ensamblador de primitivas 518, que recibe los parámetros y vértices desde la unidad de procesamiento de geometría 516, leyendo los atributos de vértice almacenados, según sea necesario, y genera primitivas de gráficos para su procesamiento mediante una unidad de escalado, selección y recorte de área de visualización 520. La unidad de procesamiento de geometría 516 puede leer datos almacenados en memoria de procesador paralelo o memoria de sistema para su uso en el procesamiento de los datos de geometría. La unidad de escalado, selección y recorte de área de visualización 520 realiza el recorte, la selección y el escalado del área de visualización y emite primitivas de gráficos procesadas a un rasterizador 522.
El rasterizador 522 convierte las nuevas primitivas de gráficos y emite fragmentos y datos de cobertura a la unidad de procesamiento de fragmentos/píxeles 524. Adicionalmente, el rasterizador 522 puede configurarse para realizar una selección z y otras optimizaciones basadas en z.
La unidad de procesamiento de fragmentos/píxeles 524 es una unidad de ejecución programable que está configurada para ejecutar programas sombreadores de fragmentos o programas sombreadores de píxeles. La unidad de procesamiento de fragmentos/píxeles 524 que transforma fragmentos o píxeles recibidos desde el rasterizador 522, como se especifica por los programas sombreadores de fragmentos o de píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede programarse para realizar operaciones tales como corrección de perspectiva, mapeo de textura, sombreado, mezcla y similares, para producir fragmentos o píxeles sombreados que se emiten a la unidad de operaciones de rasterización 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer datos almacenados en memoria de procesador paralelo o memoria de sistema para su uso en el procesamiento de los datos de fragmento. Los programas sombreadores de fragmentos o píxeles pueden configurarse para sombrear en la muestra, píxel, tesela u otra granularidad, dependiendo de la frecuencia de muestreo programada.
La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de rasterización tales como estarcido, prueba z, mezcla y similares, y emite datos de píxeles como datos de gráficos procesados para su almacenamiento en la memoria de gráficos. Los datos de gráficos procesados pueden almacenarse en una memoria de gráficos, por ejemplo una memoria de procesador paralelo 222 como en la Figura 2 y/o una memoria de sistema 104 como en la Figura 1, para su visualización en un dispositivo de los uno o más dispositivos de visualización 110 o para su procesamiento adicional por un procesador de los uno o más procesadores 102 o procesadores paralelos 112. En algunas realizaciones, la unidad de operaciones de rasterización 526 está configurada para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde la memoria.
Coherencia de grano grueso
Las realizaciones descritas en el presente documento pueden reducir drásticamente el ancho de banda de monitorización del sistema requerido para accesos a memoria de GPGPU/CPU coherentes con el hardware, mejorando así el rendimiento y reduciendo la potencia para aplicaciones de procesamiento heterogéneo. En una realización, la coherencia de memoria se soporta a una gran granularidad en el rango de 1 kilobyte a 4 kilobytes. La coherencia de grano grande como se describe en el presente documento difiere de la coherencia de línea de caché (por ejemplo, 64 bytes) usada en implementaciones existentes. En una realización, se usa una combinación de coherencia basada en monitorización y basada en directorios para posibilitar la coherencia de caché de CPU y GPGPU basada en hardware. Tanto la GPGPU como la CPU pueden implementar una "tabla de titularidad" para hacer un seguimiento de la titularidad para el permiso de acceso a una región de memoria dada. Un agente (CPU o GPU) obtiene la titularidad de una región enviando una monitorización de región al sistema que define una región en la memoria para la que el agente está solicitando la titularidad. Una vez que la titularidad de la región se otorga al agente y se registra en una tabla de titularidad asociada al agente, se pueden realizar accesos posteriores a la región de memoria sin ninguna solicitud de monitorización.
La Figura 6 ilustra un sistema de procesamiento heterogéneo 600 que tiene coherencia de hardware heterogénea, de acuerdo con una realización de la invención. En la realización de la invención, el sistema de procesamiento heterogéneo 600 incluye múltiples procesadores (CPU 602A-602D) y una GPGPU 620. Cada CPU 602A-602D y la GPGPU 620 tienen acceso a memoria virtual compartida (SVM). En la realización de la invención, cualquier CPU 602A-602D puede asignar una superficie en la memoria de sistema 640. La superficie puede hacerse entonces accesible a la GPGPU 620 mapeando la dirección de la superficie en el espacio de memoria virtual de la GPGPU 620. En una realización, las CPU 602A-602D y la GPGPU 620 pueden acceder a la misma memoria física a través de diferentes direcciones de memoria virtual. En la realización de la invención, las CPU 602A-602D y la GPGPU 620 tienen un espacio de memoria virtual unificado en el que una CPU 602A-602D y la GPGPU 620 pueden acceder a al menos una porción de la memoria 640 usando la misma dirección virtual. Con la memoria virtual unificada, un proceso en una CPU 602A-602D puede pasar a la GPGPU 620 un puntero a una superficie.
Cada CPU 602A-602D puede incluir una caché de nivel 1 (caché L1 604), una caché de nivel 2 (caché L2606). La caché L1 604 puede incluir porciones separadas para instrucciones y datos. En una realización, cada CPU incluye múltiples núcleos. En una realización de este tipo, cada núcleo tiene una instancia separada de la caché L1 604, mientras que la caché L2606 se comparte entre los núcleos. Una caché de último nivel (LLC 610) se comparte entre todas las CPU 602A-602D. Las múltiples CPU 602A-602D pueden compartir datos entre sí y con la GpGp U 620 a través de la LLC 610.
La GPGPU 620 incluye una caché L1 621, una caché L2622 y una caché de nivel 3 (caché L3622). La caché L1 621 puede incluir porciones separadas para instrucciones y datos, o puede ser una caché unificada. La caché L2 622 puede incluir múltiples cachés, que incluyen una caché de representador o una caché de profundidad. En una realización, la GPGPU 620 también incluye memoria local 630. La memoria local 630 puede ser una memoria DRAM integrada, por ejemplo, donde la GPGPU 620 es una tarjeta de adición o un módulo de múltiples chips. En una realización, la memoria local 630 es una memoria SRAM que está en la pastilla de la GPGPU 620. La memoria local 630 también puede ser una memoria DRAM integrada en el paquete con la GPGPU 620.
Cada caché en las CPU 602A-602D y la GPGPU 620 se gestiona en base a las líneas de caché. El número de líneas de caché dentro de una caché depende del tamaño de la caché y del tamaño de cada línea de caché. El tamaño de las líneas de caché puede variar en las realizaciones y las diversas cachés pueden no usar las líneas de caché del mismo tamaño. En una realización, cada línea de caché de las CPU 602A-602D es de 64 bytes, aunque no todas las realizaciones están limitadas a líneas de caché de 64 bytes. En una realización de este tipo, la GPGPU 620 también incluye líneas de caché de 64 bytes.
El posibilitar la coherencia de caché gestionada por hardware entre las CPU 602A-602D y la GPGPU 620 simplificaría significativamente la programación de cargas de trabajo heterogéneas en un sistema de procesamiento heterogéneo. Sin embargo, la sobrecarga de monitorización introducida por la coherencia por línea de caché puede introducir una sobrecarga significativa en el sistema. Las realizaciones descritas en el presente documento posibilitan la coherencia de hardware entre las CPU 602A-602D y la GPGPU 620 a través de la coherencia de grano grueso, en la que la coherencia de memoria se soporta en la granularidad de kilobytes. La coherencia de grano grueso entre la GPGPU 620 y las múltiples CPU 602A-603D se puede posibilitar mediante el uso de una superlínea de caché (por ejemplo, superlínea). Una superlínea es una unidad de coherencia de grano grueso que incluye múltiples líneas de caché. El tamaño de la superlínea puede variar según las realizaciones. En una realización, la superlínea es una región de 1 kilobyte. En una realización, la superlínea es una región de 4 kilobytes. En una realización, el tamaño de la superlínea puede configurarse para N múltiplos del tamaño de una línea de caché. Por ejemplo, con un tamaño de línea de caché de 64 bytes, se puede configurar una superlínea de 1 kilobyte estableciendo N=16.
La coherencia a nivel de superlínea se posibilita a través de múltiples estructuras de datos y memorias caché dedicadas. La coherencia se posibilita mediante el uso de una tabla de titularidad de superlíneas (SLOT 632), una tabla de directorios de superlíneas (SDT 642) y una caché de tabla de directorios de superlíneas (SDTC 612). La SLOT 632 puede almacenarse en la memoria local 630 de la GPGPU 620. La SDT 642 se almacena en la memoria de sistema 640, a la que pueden acceder las CPU 602A-602D y la GPGPU 620. La SDTC 612 es una memoria caché que puede almacenar entradas de tablas de directorios de superlíneas. En una realización, la SDTC 612 es una memoria caché en pastilla de las CPU 602A-602D.
La SLOT 632 se usa para indicar la titularidad de superlínea para la GPGPU 620. Para la actividad de caché dentro de una superlínea que pertenece a la GPU, no se requiere flujo de coherencia y no se requiere que los datos de monitorización se difundan por la GPGPU 620. En una realización, la SLOT 632 puede rastrear si alguna línea de caché dentro de una superlínea está almacenada en la caché L3624. Al tiempo que se puede hacer un seguimiento de la coherencia de caché a nivel de superlínea, la caché L3624 puede seguir funcionando en la granularidad de la línea de caché. En una realización, una o más cachés internas dentro de las CPU 602A-602D y la GPGPU 620 no tienen coherencia de caché. Por ejemplo, la coherencia de sistema de grano grueso heterogéneo global puede limitarse a los datos almacenados dentro de la caché L3 623 de la GPGPU 620 y la caché de último nivel 610 compartida entre las CPU 602A-602D y la GPGPU 620. En una realización de este tipo, una región de la memoria 640 puede declararse memoria virtual compartida que será globalmente coherente, y los datos dentro de la memoria virtual compartida solo pueden almacenarse en memorias caché que participan en el sistema de coherencia de grano grueso heterogéneo global, omitiendo memorias caché de nivel inferior en la GPGPU 620 y/o las CPU 602A-602D.
La SDT 642 es una tabla que indica la titularidad de superlínea de las superlíneas almacenadas dentro de la DRAM. En una realización, la SDT 642 se almacena en una memoria "robada" a la que pueden acceder la GPGPU 620 y las CPU 602A-602D, pero a la que no puede acceder el sistema operativo que se ejecuta en la CPU. En una realización de este tipo, la SDT 642 está limitada a listar la titularidad de las superlíneas fuera de la memoria robada. El tamaño de la SDT 642 puede variar en función del tamaño de una superlínea y el tamaño de la memoria 640. Por ejemplo, y en una realización, con una superlínea de 2 kilobytes, una SDT 642 de aproximadamente 2 megabytes puede abarcar 8 gigabytes de memoria. Las entradas de la SDT 642 se pueden almacenar dentro de la SDTC 612. La SDTC 612 puede funcionar de manera similar a una TLB compartida entre la GPGPU 620 y las CPU 602A-602D, donde las entradas para la SDT 642 se almacenan en la SDTC 612 de forma similar a como las entradas de tabla de páginas de una tabla de páginas se almacenan en una TLB.
Para que un agente (una de las CPU 602A-602D o la GPGPU 620) en el sistema de procesamiento heterogéneo 600 tome posesión de una superlínea, el agente puede enviar una monitorización de región al sistema. Una vez que se obtiene la titularidad de la región (por ejemplo, una o más superlíneas) y se registra en las tablas de titularidad respectivas (por ejemplo, SDT 642, SLOT 632), se pueden realizar accesos posteriores a la región de memoria sin requerir o desencadenar solicitudes de monitorización. En una realización, la monitorización de región se puede realizar a través de una solicitud de operación de titularidad. La solicitud de operación de titularidad se puede usar cuando un agente (por ejemplo, la GPGPU 620) intente realizar escrituras de línea de caché en una superlínea que no pertenece actualmente al agente.
La Figura 7 ilustra estructuras lógicas usadas para la coherencia de grano grueso, de acuerdo con una forma de realización. En las realizaciones descritas en el presente documento, la coherencia de grano grueso puede posibilitarse en un sistema de procesamiento heterogéneo (por ejemplo, el sistema de procesamiento heterogéneo 600 de la Figura 6) en la granularidad de una superlínea 710. La superlínea es una región de memoria que tiene un tamaño de múltiples líneas de caché (por ejemplo, la línea de caché A-N). Un agente (CPU, GPU, etc.) dentro del sistema puede enviar una monitorización de región para un rango de direcciones. Basándose en el tamaño del rango de direcciones y el grado de asociatividad de las memorias caché dentro del sistema, N líneas de caché en varias cachés de procesador pueden mapearse al rango de direcciones especificado por la superlínea. En una realización, todas las memorias caché que tienen líneas de caché dentro de la superlínea mapearán esas líneas de caché a un único estado de coherencia.
Puede hacerse un seguimiento de las superlíneas que pertenecen a una GPGPU a través de entradas en una tabla de titularidad de superlíneas (por ejemplo, SLOT 632 de la Figura 6). Una entrada de SLOT 720 incluye una etiqueta de superlínea (etiqueta SL 722), un conjunto de bits de estado de protocolo de coherencia (por ejemplo, MESI 724), un conjunto de bits válidos por línea de caché 726 y bits de estado menos usados recientemente (LRU) 728. La etiqueta SL 722 se usa para identificar la superlínea 710 a la que está asociada la entrada de SLOT 720. Los bits de estado de protocolo de coherencia de caché hacen un seguimiento de los estados asociados al protocolo de coherencia de caché usado por el sistema de coherencia de grano grueso. La realización ilustrada usa el MESI 724 (modificado, exclusivo, compartido, no válido); sin embargo, otras realizaciones pueden usar otros protocolos de coherencia, con el comportamiento de coherencia de la realización adaptado en consecuencia. Por ejemplo, se puede usar un protocolo de reenvío modificado, exclusivo, compartido, no válido (MESIF), para posibilitar el reenvío de caché a caché de líneas de caché compartidas. Los bits válidos por línea de caché 726 indican un estado válido o no válido para cada línea de caché dentro de la superlínea 710. Los bits del campo LRU 728 hacen un seguimiento de un estado de menos usado recientemente para la entrada de SLOT 720 para cualquier caché que almacene la entrada. Por ejemplo, y en una realización, la entrada de SLOT 720 para una superlínea se puede almacenar en una caché de coherencia dentro de la GPGPU.
Una entrada de SDT 730 puede almacenarse en una tabla de directorios de superlíneas en memoria (por ejemplo, la SDT 642 de la Figura 6). La entrada de SDT 730 es una entrada de tres bits que se almacena para cada superlínea en memoria. Para cada superlínea, se usa un bit compartido/exclusivo (S/E 732) para indicar si la superlínea está en un estado compartido o en un estado exclusivo. Un bit de CPU 734 y un bit de GPU 736 indican si la titularidad reside dentro de una CPU o una GPU.
Una entrada de SDTC 740 puede almacenarse en la caché de tabla de directorios de superlíneas (SDTC 612), que es una memoria caché almacenada dentro de la pastilla de procesador de una CPU. La entrada de SDTC 740 incluye una etiqueta de superlínea (etiqueta SL 742) para identificar una superlínea, datos almacenados en caché de una entrada de SDT 730 (por ejemplo, S/E 732, bit de CPU 734, bit de GPU 736) y un campo LRU 748. En una realización, la etiqueta SL 742 se genera en función de la dirección de la superlínea. En una realización, la entrada de SDT 730 se indexa en función de una etiqueta de superlínea, y la etiqueta de SL 742 almacenada en la entrada de SDTC 740 es la etiqueta de superlínea que indexa la entrada de SDT 730 para la que se almacenan datos en caché. El campo LRU 748 para la entrada de SDTC 740 se usa para determinar qué entrada desalojar de la SDTC cuando se reemplazan las entradas de caché, donde la entrada menos usada recientemente se desaloja del SDTC.
En realizaciones en las que se posibilita un MESI o un protocolo de coherencia compatible con MESI para la coherencia heterogénea global, solo se puede escribir una superlínea si la superlínea está en el estado modificado o exclusivo. Si la superlínea está en el estado compartido, todas las líneas de caché asociadas a la superlínea se invalidan antes de que un agente realice una escritura con coherencia global. Una caché que contiene una línea de caché de una superlínea que está en el estado modificado monitoriza las lecturas que han tratado de realizar otras cachés globalmente coherentes en el sistema para detectar la ubicación de memoria principal correspondiente e inserta los datos que contenía en la caché. En una realización, esta operación se puede realizar interrumpiendo la lectura monitorizada, actualizando los datos almacenados en memoria y, a continuación, cambiando el estado de superlínea a un estado compartido. En una realización, a algunos agentes no se les permite mantener una superlínea en el estado modificado. Por ejemplo, y en una realización, la GPGPU 620 puede mantener una superlínea en el estado modificado, mientras que una CPU 602A-602D está limitada a un estado compartido o exclusivo. Una caché que contiene una línea de caché asociada a una superlínea en el estado compartido puede escuchar las transmisiones de invalidación o de solicitud de titularidad de otras cachés globalmente coherentes, y descartar la línea de caché si la superlínea asociada se invalida. En una realización, cuando un agente adquiere la titularidad de una superlínea, todas las líneas de caché asociadas a la superlínea pasan a un estado exclusivo.
La Figura 8 es un diagrama de flujo de lógica 800 para posibilitar la coherencia de grano grueso en un sistema de procesamiento heterogéneo. La lógica 800 puede distribuirse a través de sistemas de gestión de caché de un sistema de procesamiento heterogéneo (por ejemplo, el sistema de procesamiento heterogéneo 600 de la Figura 6), que incluye una caché L3 dentro de una GPGPU, una caché de último nivel compartida entre las CPU y la GPGPU, y uno o más controladores de memoria dentro del sistema.
En una realización, la lógica 800 puede solicitar acceder a una dirección de memoria virtual desde un proceso que se ejecuta en un agente del sistema de procesamiento heterogéneo, tal como se muestra en el bloque 802. En respuesta, la lógica 800 puede determinar si el agente tiene la titularidad de una superlínea asociada a la dirección virtual, como se muestra en el bloque 804. Al menos una de las múltiples líneas de caché en la superlínea está asociada a la dirección de memoria virtual solicitada. La lógica 800 puede entonces determinar si el agente posee la superlínea en el bloque 805. La lógica 800 puede determinar la titularidad de la superlínea comprobando un directorio de titularidad asociado al agente. Con referencia a la Figura 6, cuando el agente es una GPGPU, el agente comprueba una tabla de titularidad de superlíneas almacenada localmente (por ejemplo, la SLOT 632). Cuando el agente es una CPU, el agente comprueba una caché de tabla de directorios de superlíneas (por ejemplo, la SDTC 612) o una tabla de directorios de superlíneas (por ejemplo, la SDT 642) si falla el acceso a la caché de tabla de directorios de superlíneas.
Volviendo a la Figura 8, si el agente posee la superlínea, la lógica 800 permite que el agente pueda acceder a la dirección de memoria virtual como se muestra en el bloque 810. El acceso a la dirección de memoria virtual cuando la dirección está dentro del rango de una superlínea propia se puede realizar sin generar o requerir solicitudes de monitorización globales. En este escenario, cualquier otro agente que tenga líneas de caché asociadas a una dirección dentro del rango de superlíneas habrá invalidado esas líneas de caché tras la transferencia de titularidad al agente. Si el agente no posee la línea de caché, como se determina en el bloque 805, la lógica 800 envía una monitorización de región para adquirir la titularidad de la región de memoria que incluye la dirección de memoria virtual, como se muestra en el bloque 806. La monitorización de región indica que el agente tiene la intención de tomar posesión de cualquier línea de caché asociada a las superlíneas dentro de la región monitorizada. En una realización, la monitorización de región puede hacer que múltiples superlíneas cambien la titularidad.
El cambio de la titularidad de superlínea puede hacer que cualquier línea de caché mantenida por otros agentes dentro del sistema de coherencia de grano grueso heterogéneo global sea invalidada. Cualquier dato sucio dentro de esas cachés puede desalojarse y escribirse de nuevo en la memoria y, en algunas realizaciones, reenviarse a otras memorias caché. Una vez que se adquiere la titularidad, la lógica 800 puede entonces establecer la superlínea en un estado de pertenencia dentro del directorio o tabla de titularidad dentro del agente, como se muestra en el bloque 808. El estado de pertenencia específico puede variar según las realizaciones. En una realización, el estado de pertenencia es un estado exclusivo que puede establecerse dentro de una entrada de SLOT, SDT o SDTC, como se muestra en la Figura 7. El establecer la superlínea en el estado de pertenencia puede permitir que el agente acceda a la dirección de memoria virtual en el bloque 810.
La Figura 9 es un diagrama de bloques de un sistema de procesamiento de datos 900, de acuerdo con una realización. El sistema de procesamiento de datos 900 es un sistema de procesamiento heterogéneo que tiene un procesador 902, una memoria unificada 910 y una GPGPU 920. El procesador 902 puede ser cualquiera de los procesadores de propósito general o unidades de procesamiento central (CPU) descritos en el presente documento. La GPGPU 920 puede ser cualquiera de las GPGPU o procesadores paralelos descritos en el presente documento. En una realización, el procesador 902 y la GPGPU 920 están integrados dentro de un sistema en un circuito integrado de chip. En una realización, el procesador 902 y la GPGPU 920 están anexados a placas de sistema separadas. El procesador 902 puede estar conectado o soldado a una toma de placa base. La GPGPU 920 puede residir en una placa de un dispositivo de tarjeta gráfica de adición y conectarse al sistema a través de un bus de sistema, tal como un bus PCIe.
En una realización, el procesador 902 incluye una memoria caché 904 y un módulo de coherencia 905. La memoria caché 904 puede almacenar de manera coherente datos almacenados en una memoria virtual compartida coherente. Las operaciones de coherencia para el procesador 902 se pueden realizar mediante un módulo de coherencia 905. El módulo de coherencia 905 puede realizar cualquiera de las operaciones de coherencia del lado de la CPU descritas en el presente documento.
El procesador 902 puede ejecutar instrucciones para un compilador 915 almacenado en la memoria de sistema 912. El compilador 915 se ejecuta en el procesador 902 para compilar el código fuente 914A para dar el código compilado 914B. El código compilado 914B puede incluir código que puede ser ejecutado por el procesador 902 y/o código que puede ser ejecutado por la GPGPU 920. Durante la compilación, el compilador 915 puede realizar operaciones para insertar metadatos con respecto a diversas características y métricas relacionadas con el código fuente 914A y el código fuente compilado 914B. El compilador 915 puede incluir la información necesaria para realizar dichas operaciones o las operaciones pueden realizarse con la ayuda de una biblioteca de tiempo de ejecución 916. La biblioteca de tiempo de ejecución 916 también puede facilitar el compilador 915 en la compilación del código fuente 914A y también puede incluir instrucciones que están vinculadas en tiempo de ejecución al código compilado 914B para facilitar su ejecución en la GPGPU 920.
La memoria unificada 910 representa un espacio de direcciones unificado al que se puede acceder mediante el procesador 902 y la GPGPU 920. La memoria unificada incluye la memoria de sistema 912, así como la memoria de GPGPU 918. La memoria de GPGPU 918 incluye la memoria local de GPGPU 928 dentro de la GPGPU 920 y también puede incluir parte o toda la memoria de sistema 912. Por ejemplo, el código compilado 914B almacenado en la memoria de sistema 912 también puede mapearse en la memoria de GPGPU 918 para su acceso por parte de la GPGPU 920.
La GPGPU 920 incluye múltiples bloques de cálculo 921A-921N, que pueden incluir múltiples agrupaciones de cálculo, tal como la agrupación de cálculo 214 de la Figura 2C. La GPGPU 920 también incluye un conjunto de registros 924, memoria caché 926 y un módulo de coherencia 925 que se puede compartir entre los bloques de cálculo 921A-921N. El módulo de coherencia 925 puede estar configurado para gestionar operaciones de coherencia en la GPGPU 920 para posibilitar la coherencia de grano grueso heterogénea global para la memoria virtual compartida. La GPGPU 920 puede incluir adicionalmente una memoria local de GPGPU 928, que es una memoria física que comparte una tarjeta gráfica o un módulo de múltiples chips con la GPGPU 920.
En una realización, cada uno de los bloques de cálculo 921A-921N incluye un TLB 922A-922N y al menos una caché 923A-923N que se comparte entre las agrupaciones de cálculo dentro de los bloques de cálculo 921A-921N. Los recursos comunes que se comparten entre los elementos de cálculo de los bloques de cálculo se pueden aprovechar de manera efectiva al intentar planificar hilos que accederán a datos comunes en el mismo bloque de cálculo. En una realización, se puede posibilitar un sistema de coherencia de grano grueso heterogéneo global en la GPGPU 920 a través del módulo de coherencia 925, que puede realizar cualquiera de las operaciones de coherencia de grano grueso del lado de la GPU descritas en el presente documento. La coherencia de caché global se puede mantener entre una o más memorias caché dentro de la GPGPU 920 (por ejemplo, caché 923A-923N y/o caché compartida 926) y la memoria caché 904 dentro del procesador 902.
Sistema de procesamiento de gráficos ilustrativo adicional
Los detalles de las realizaciones descritas anteriormente se pueden incorporar en los sistemas y dispositivos de procesamiento de gráficos descritos a continuación. El sistema y los dispositivos de procesamiento de gráficos de la FIG. 10 a FIG. 23 ilustran sistemas alternativos y hardware de procesamiento de gráficos que pueden implementar todas y cada una de las técnicas descritas anteriormente.
Vista global de sistema de procesamiento de gráficos ilustrativa adicional
La Figura 10 es un diagrama de bloques de un sistema de procesamiento 1000, de acuerdo con una realización. En diversas realizaciones, el sistema 1000 incluye uno o más procesadores 1002 y uno o más procesadores de gráficos 1008, y puede ser un sistema de sobremesa de procesador único, un sistema de estación de trabajo de multiprocesador, o un sistema de servidor que tiene un gran número de procesadores 1002 o núcleos de procesador 1007. En una realización, el sistema 1000 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
Una realización del sistema 1000 puede incluir, o estar incorporada dentro de una plataforma de juegos basada en servidor, una consola de juegos, que incluye una consola de juegos y medios, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos en línea. En algunas realizaciones, el sistema 1000 es un teléfono móvil, teléfono inteligente, dispositivo informático de tableta o dispositivo de Internet móvil. El sistema de procesamiento de datos 1000 puede incluir también, estar acoplado con, o estar integrado dentro de un dispositivo llevable, tal como un dispositivo llevable de reloj inteligente, dispositivo de gafas inteligentes, dispositivo de realidad aumentada o dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento de datos 1000 es un dispositivo de televisión o decodificador de salón que tiene uno o más procesadores 1002 y una interfaz gráfica generada por uno o más procesadores de gráficos 1008.
En algunas realizaciones, cada procesador de los uno o más procesadores 1002 incluye uno o más núcleos de procesador 1007 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para el sistema y el software de usuario. En algunas realizaciones, cada uno del uno o más núcleos de procesador 1007 está configurado para procesar un conjunto de instrucciones específico 1009. En algunas realizaciones, el conjunto de instrucciones 1009 puede facilitar el cálculo de conjunto de instrucciones complejo (CISC), el cálculo de conjunto de instrucciones reducido (RISC) o el cálculo mediante una palabra de instrucción muy larga (VLIW). Cada uno de múltiples núcleos de procesador 1007 puede procesar un conjunto de instrucciones diferente 1009, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo de procesador 1007 puede incluir también otros dispositivos de procesamiento, tal como un procesador de señales digitales (DSP).
En algunas realizaciones, el procesador 1002 incluye memoria caché 1004. Dependiendo de la arquitectura, el procesador 1002 puede tener una única caché interna o múltiples niveles de caché interna. En algunas realizaciones, la memoria caché se comparte entre diversos componentes del procesador 1002. En algunas realizaciones, el procesador 1002 también usa una caché externa (por ejemplo, una caché de nivel 3 (L3) o caché de último nivel (LLC)) (no mostrada), que puede compartirse entre los núcleos de procesador 1007 usando técnicas de coherencia de caché conocidas. Se incluye adicionalmente, en el procesador 1002, un archivo de registro 1006 que puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de número entero, registros de coma flotante, registros de estado y un registro de puntero de instrucción). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos del diseño del procesador 1002.
En algunas realizaciones, el procesador 1002 está acoplado con un bus de procesador 1010 para transmitir señales de comunicación tales como señales de dirección, de datos o de control entre el procesador 1002 y otros componentes en el sistema 1000. En una realización, el sistema 1000 usa una arquitectura de sistema de "concentrador" ilustrativo, que incluye un concentrador de controlador de memoria 1016 y un concentrador de controlador de entrada/salida (E/S) 1030. Un concentrador de controlador de memoria 1016 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1000, mientras que un concentrador de controlador de E/S (ICH) 1030 proporciona conexiones a dispositivos de E/S a través de un bus de E/S local. En una realización, la lógica del concentrador de controlador de memoria 1016 está integrada dentro del procesador.
El dispositivo de memoria 1020 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), dispositivo de memoria flash, dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como una memoria de proceso. En una realización, el dispositivo de memoria 1020 puede operar como memoria de sistema para el sistema 1000, para almacenar datos 1022 e instrucciones 1021 para su uso cuando el uno o más procesadores 1002 ejecutan una aplicación o proceso. El concentrador de controlador de memoria 1016 también se acopla con un procesador de gráficos externo opcional 1012, que puede comunicarse con el uno o más procesadores de gráficos 1008 en los procesadores 1002 para realizar operaciones de gráficos y de medios.
En algunas realizaciones, el ICH 1030 posibilita que los periféricos se conecten al dispositivo de memoria 1020 y al procesador 1002 mediante un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero sin limitación, un controlador de audio 1046, una interfaz de firmware 1028, un transceptor inalámbrico 1026 (por ejemplo, Wi-Fi, Bluetooth), un dispositivo de almacenamiento de datos 1024 (por ejemplo, unidad de disco duro, memoria flash, etc.), y un controlador de E/S heredado 1040 para acoplar dispositivos heredados (por ejemplo, de sistema personal 2 (PS/2)) al sistema. Uno o más controladores de bus serie universal (USB) 1042 conectan dispositivos de entrada, tales como las combinaciones de teclado y ratón 1044. Un controlador de red 1034 puede acoplarse también con el ICH 1030. En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de procesador 1010. Se apreciará que el sistema 1000 mostrado es ilustrativo y no limitativo, ya que también se pueden usar otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, el concentrador de controlador de E/S 1030 puede integrarse dentro de los uno o más procesadores 1002, o el concentrador de controlador de memoria 1016 y el concentrador de controlador de E/S 1030 pueden integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 1012.
La Figura 11 es un diagrama de bloques de una realización de un procesador 1100 que tiene uno o más núcleos de procesador 1102A-1102N, un controlador de memoria integrado 1114 y un procesador de gráficos integrado 1108. Aquellos elementos de la Figura 11 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. El procesador 1100 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 1102N representado por los recuadros con línea discontinua. Cada uno de los núcleos de procesador 1102A-1102N incluye una o más unidades de caché internas 1104A-1104N. En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades de caché compartida 1106.
Las unidades de caché internas 1104A-1104N y las unidades de caché compartidas 1106 representan una jerarquía de memoria caché dentro del procesador 1100. La jerarquía de memoria caché puede incluir al menos un nivel de instrucción y caché de datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartida, tal como un nivel 2 (L2), nivel 3 (L3), nivel 4 (L4) u otros niveles de caché, donde el nivel más alto de caché antes de la memoria externa se clasifica como la LLC. En algunas realizaciones, la lógica de coherencia de caché mantiene la coherencia entre las diversas unidades de caché 1106 y 1104A-1104N.
En algunas realizaciones, el procesador 1100 también puede incluir un conjunto de una o más unidades de controlador de bus 1116 y un núcleo de agente de sistema 1110. Las una o más unidades controladoras de bus 1116 gestionan un conjunto de buses de periféricos, tales como uno o más buses de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express). El núcleo de agente de sistema 1110 proporciona funcionalidad de gestión para los diversos componentes de procesador. En algunas realizaciones, el núcleo de agente de sistema 1110 incluye uno o más controladores de memoria integrados 1114 para gestionar el acceso a varios dispositivos de memoria externos (no mostrados).
En algunas realizaciones, uno o más de los núcleos de procesador 1102A-1102N incluyen soporte para múltiples hilos simultáneos. En una realización de este tipo, el núcleo de agente de sistema 1110 incluye componentes para coordinar y operar los núcleos 1102A-1102N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 1110 puede incluir adicionalmente una unidad de control de potencia (PCU), que incluye lógica y componentes para regular el estado de potencia de los núcleos de procesador 1102A-1102N y el procesador de gráficos 1108.
En algunas realizaciones, el procesador 1100 incluye adicionalmente el procesador de gráficos 1108 para ejecutar operaciones de procesamiento de gráficos. En algunas realizaciones, el procesador de gráficos 1108 se acopla con el conjunto de unidades de caché compartidas 1106 y el núcleo de agente de sistema 1110, incluyendo los uno o más controladores de memoria integrados 1114. En algunas realizaciones, un controlador de visualización 1111 está acoplado al procesador de gráficos 1108 para dirigir la salida del procesador de gráficos a uno o más dispositivos de visualización acoplados. En algunas realizaciones, el controlador de visualización 1111 puede ser un módulo separado acoplado con el procesador de gráficos mediante al menos una interconexión, o puede estar integrado dentro del procesador de gráficos 1108 o del núcleo de agente de sistema 1110.
En algunas realizaciones, se usa una unidad de interconexión basada en anillo 1112 para acoplar los componentes internos del procesador 1100. Sin embargo, se puede usar una unidad de interconexión alternativa, tal como una interconexión de punto a punto, una interconexión conmutada u otras técnicas, incluidas técnicas ampliamente conocidas en la técnica. En algunas realizaciones, el procesador de gráficos 1108 se acopla con la interconexión de anillo 1112 mediante un enlace de E/S 1113.
El enlace de E/S 1113 ilustrativo representa al menos una de múltiples variedades de interconexiones de E/S, que incluyen una interconexión de E/S de paquete, que facilita la comunicación entre diversos componentes de procesador y un módulo de memoria integrado de alto rendimiento 1118, tal como un módulo de eDRAM. En algunas realizaciones, cada uno de los núcleos de procesador 1102A-1102N y del procesador de gráficos 1108 usan módulos de memoria integrados 1118 como una caché de último nivel compartida.
En algunas realizaciones, los núcleos de procesador 1102A-1102N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra realización, los núcleos de procesador 1102A-1102N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 1102A-1102N ejecutan un primer conjunto de instrucciones, mientras que al menos uno de los otros núcleos ejecuta un subconjunto del primer conjunto de instrucciones o un conjunto de instrucciones diferente. En una realización, los núcleos de procesador 1102A-1102N son heterogéneos en cuanto a la microarquitectura, donde uno o más núcleos que tienen un consumo de energía relativamente mayor están acoplados a uno o más núcleos de potencia que tienen un consumo de energía menor. Adicionalmente, el procesador 1100 se puede implementar en uno o más chips o como un circuito integrado de SoC que tiene los componentes ilustrados, además de otros componentes.
La Figura 12 es un diagrama de bloques de un procesador de gráficos 1200, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento. En algunas realizaciones, el procesador de gráficos se comunica mediante una interfaz de E/S de memoria mapeada a registros en el procesador de gráficos y con comandos colocados en la memoria de procesador. En algunas realizaciones, el procesador de gráficos 1200 incluye una interfaz de memoria 1214 para acceder a memoria. La interfaz de memoria 1214 puede ser una interfaz para la memoria local, una o más cachés internas, una o más cachés externas compartidas y/o para la memoria del sistema.
En algunas realizaciones, el procesador de gráficos 1200 también incluye un controlador de visualización 1202 para dirigir los datos de salida de visualización a un dispositivo de visualización 1220. El controlador de visualización 1202 incluye hardware para uno o más planos de superposición para la visualización y composición de múltiples capas de elementos de interfaz de usuario o de vídeo. En algunas realizaciones, el procesador de gráficos 1200 incluye un motor de códec de vídeo 1206 para codificar, descodificar o transcodificar medios a, desde o entre uno o más formatos de codificación de medios, incluyendo, pero sin limitación, formatos del Grupo de Expertos en Imágenes en Movimiento (MPEG) tales como MPEG-2, formatos de Codificación de Vídeo Avanzada (AVC) tales como H.264/MPEG-4 AVC, así como de la Sociedad de Ingenieros de Imágenes en Movimiento y de Televisión (SMPTE) 421MNC-1 y formatos del Grupo Conjunto de Expertos en Fotografía (JPEG) tales como los formatos JPEG y Motion JPEG (MJPEG).
En algunas realizaciones, el procesador de gráficos 1200 incluye un motor de transferencia de imágenes en bloque (BLIT) 1204 para realizar operaciones de rasterizador bidimensionales (2D), incluyendo, por ejemplo, transferencias de bloque de frontera de bits. Sin embargo, en una realización, se realizan operaciones de gráficos 2D usando uno o más componentes del motor de procesamiento de gráficos (GPE) 1210. En algunas realizaciones, el GPE 1210 es un motor de cómputo para realizar operaciones de gráficos, incluyendo operaciones de gráficos tridimensionales (3D) y operaciones de medios.
En algunas realizaciones, el GPE 310 incluye una canalización de 3D 1212 para realizar operaciones 3D, tales como representar imágenes y escenas tridimensionales usando funciones de procesamiento que actúan sobre formas de primitivas 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 1212 incluye elementos de función programable y fija que realizan diversas tareas dentro del elemento y/o abarcan hilos de ejecución en un subsistema 3D/de medios 1215. Aunque puede usarse la canalización 3D 1212 para realizar operaciones de medios, una realización del GPE 1210 también incluye una canalización de medios 1216 que se usa específicamente para realizar operaciones de medios, tales como postprocesamiento de vídeo y mejora de imagen.
En algunas realizaciones, la canalización de medios 1216 incluye unidades de lógica de función fija o programable para realizar una o más operaciones de medios especializadas, tales como aceleración de decodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar de, o en nombre del motor de códec de vídeo 1206. En algunas realizaciones, la canalización de medios 1216 incluye adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 1215. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema 3D/de medios 1215.
En algunas realizaciones, el subsistema 3D/de medios 1215 incluye lógica para ejecutar hilos generados por la canalización en 3D 1212 y la canalización de medios 1216. En una realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema 3D/de medios 1215, que incluye lógica de despacho de hilo para arbitrar y despachar las diversas solicitudes a recursos de ejecución de hilo disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los hilos 3D y los medios. En algunas realizaciones, el subsistema 3D/de medios 1215 incluye una o más cachés internas para instrucciones y datos de hilo. En algunas realizaciones, el subsistema también incluye memoria compartida, que incluye registros y memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
Motor de procesamiento de gráficos ilustrativo adicional
La Figura 13 es un diagrama de bloques de un motor de procesamiento de gráficos 1310 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 1310 es una versión del GPE 1210 mostrado en la Figura 12. Los elementos de la Figura 13 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. Por ejemplo, se ilustra la canalización 3D 1212 y la canalización de medios 1216 de la Figura 12. La canalización de medios 1216 es opcional en algunas realizaciones del GPE 1310 y puede no incluirse explícitamente dentro del GPE 1310. Por ejemplo y, en al menos una realización, un procesador de medios y/o de imágenes separado está acoplado al GPE 1310.
En algunas realizaciones, el GPE 1310 se acopla con o incluye un transmisor por flujo continuo de comandos 1303, que proporciona un flujo de comandos a la canalización 3D 1212 y/o a las canalizaciones de medios 1216. En algunas realizaciones, el transmisor por flujo continuo de comandos 1303 está acoplado con memoria, que puede ser memoria de sistema, o una o más de memoria de caché interna y memoria de caché compartida. En algunas realizaciones, el transmisor por flujo continuo de comandos 1303 recibe comandos desde la memoria y envía los comandos a la canalización 3D 1212 y/o a la canalización de medios 1216. Los comandos son directivas extraídas desde una memoria intermedia de anillo, que almacena comandos para la canalización 3D 1212 y la canalización de medios 1216. En una realización, la memoria intermedia de anillo puede incluir adicionalmente unas memorias intermedias de comandos en lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización 3D 1212 pueden incluir también referencias a datos almacenados en memoria, tales como, pero sin limitación, datos de vértices y geometría para la canalización 3D 1212 y/o datos de imagen y objetos de memoria para la canalización de medios 1216. La canalización 3D 1212 y la canalización de medios 1216 procesan los comandos y los datos realizando operaciones mediante la lógica dentro de las respectivas canalizaciones o despachando uno o más hilos de ejecución a una matriz de núcleo de gráficos 1314.
En diversas realizaciones, la canalización 3D 1212 puede ejecutar uno o más programas sombreadores, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cómputo u otros programas sombreadores, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleo de gráficos 1314. La matriz de núcleo de gráficos 1314 proporciona un bloque unificado de recursos de ejecución. La lógica de ejecución de múltiples fines (por ejemplo, unidades de ejecución) de la matriz de núcleo de gráficos 1314 incluye soporte para diversos lenguajes de sombreadores de API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados a múltiples sombreadores.
En algunas realizaciones, la matriz de núcleo de gráficos 1314 también incluye una lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. En una realización, las unidades de ejecución incluyen adicionalmente una lógica de propósito general que es programable para realizar operaciones computacionales de propósito general paralelas, además de operaciones de procesamiento de gráficos. La lógica de propósito general puede realizar operaciones de procesamiento en paralelo o en conjunto con la lógica de propósito general dentro del núcleo o núcleos de procesador 1007 de la Figura 10 o el núcleo 1102A-1102N como en la Figura 11.
Los datos de salida generados por hilos que se ejecutan en la matriz de núcleo de gráficos 1314 pueden emitir datos a memoria en una memoria intermedia de retorno unificada (URB) 1318. La URB 1318 puede almacenar datos para múltiples hilos. En algunas realizaciones, la URB 1318 puede usarse para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleo de gráficos 1314. En algunas realizaciones, la URB 1318 se puede usar adicionalmente para la sincronización entre hilos de la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de función compartida 1320.
En algunas realizaciones, la matriz de núcleo de gráficos 1314 es ajustable a escala, de modo que la matriz incluye un número variable de núcleos de gráficos, teniendo cada uno un número variable de unidades de ejecución basándose en la potencia objetivo y en el nivel de rendimiento del GPE 1310. En una realización, los recursos de ejecución son dinámicamente ajustables a escala, de manera que los recursos de ejecución pueden habilitarse o inhabilitarse según sea necesario.
La matriz de núcleo de gráficos 1314 está acoplada a la lógica de función compartida 1320 que incluye múltiples recursos que se comparten entre los núcleos de gráficos de la matriz de núcleo de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 1320 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleo de gráficos 1314. En diversas realizaciones, la lógica de funciones compartidas 1320 incluye, pero sin limitación, la lógica del muestreador 1321, del cálculo matemático 1322 y de la comunicación entre hilos (ITC) 1323. Adicionalmente, algunas realizaciones implementan una o más cachés 1325 dentro de la lógica de funciones compartidas 1320. Se implementa una función compartida donde la demanda de una función especializada dada es insuficiente para su inclusión dentro de la matriz de núcleo de gráficos 1314. En su lugar, una única instanciación de esa función especializada se implementa como una entidad autónoma en la lógica de funciones compartidas 1320 y se comparte entre los recursos de ejecución dentro de la matriz de núcleo de gráficos 1314. El conjunto preciso de funciones que se comparten entre la matriz de núcleo de gráficos 1314 y se incluyen dentro de la matriz de núcleo de gráficos 1314 varía entre realizaciones.
La Figura 14 es un diagrama de bloques de otra realización de un procesador de gráficos 1400. Los elementos de la Figura 14 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto.
En algunas realizaciones, el procesador de gráficos 1400 incluye una interconexión de anillo 1402, un extremo frontal de canalización 1404, un motor de medios 1437 y núcleos de gráficos 1480A-1480N. En algunas realizaciones, la interconexión de anillo 1402 acopla el procesador de gráficos a otras unidades de procesamiento, que incluyen otros procesadores de gráficos o uno o más núcleos de procesadores de propósito general. En algunas realizaciones, el procesador de gráficos es uno de muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
En algunas realizaciones, el procesador de gráficos 1400 recibe lotes de comandos a través de la interconexión de anillo 1402. Los comandos entrantes son interpretados por un transmisor por flujo continuo de comandos 1403 en el extremo frontal de canalización 1404. En algunas realizaciones, el procesador de gráficos 1400 incluye una lógica de ejecución ajustable a escala para realizar un procesamiento de geometría 3D y un procesamiento de medios mediante el núcleo o núcleos de gráficos 1480A-1480N. Para los comandos de procesamiento de geometría 3D, el transmisor por flujo continuo de comandos 1403 suministra comandos a la canalización de geometría 1436. Para al menos algunos comandos de procesamiento de medios, el transmisor por flujo continuo de comandos 1403 suministra los comandos a un extremo frontal de vídeo 1434, que está acoplado a un motor de medios 1437. En algunas realizaciones, el motor de medios 1437 incluye un motor de calidad de vídeo (VQE) 1430 para el posprocesamiento de imágenes y vídeo y un motor de codificación/descodificación de múltiples formatos (MFX) 1433 para proporcionar codificación y descodificación de datos de medios acelerados por hardware. En algunas realizaciones, la canalización de geometría 1436 y el motor de medios 1437 generan, cada uno, hilos de ejecución para los recursos de ejecución de hilos proporcionados por al menos un núcleo de gráficos 1480A.
En algunas realizaciones, el procesador de gráficos 1400 incluye recursos de ejecución de hilos ajustables a escala que cuentan con los núcleos modulares 1480A-1480N (denominados, en ocasiones, cortes de núcleo), teniendo cada uno múltiples subnúcleos 1450A-550N, 1460A-1460N (denominados, en ocasiones, subcortes de núcleo). En algunas realizaciones, el procesador de gráficos 1400 puede tener cualquier número de núcleos de gráficos 1480A a 1480N. En algunas realizaciones, el procesador de gráficos 1400 incluye un núcleo de gráficos 1480A que tiene al menos un primer subnúcleo 1450A y un segundo subnúcleo 1460A. En otras realizaciones, el procesador de gráficos es un procesador de baja potencia con un único subnúcleo (por ejemplo, 1450A). En algunas realizaciones, el procesador de gráficos 1400 incluye múltiples núcleos de gráficos 1480A-1480N, incluyendo cada uno un conjunto de primeros subnúcleos 1450A-1450N y un conjunto de segundos subnúcleos 1460A-1460N. Cada subnúcleo del conjunto de primeros subnúcleos 1450A-1450N incluye al menos un primer conjunto de unidades de ejecución 1452A-1452N y muestreadores de medios/textura 1454A-1454N. Cada subnúcleo del conjunto de segundos subnúcleos 1460A-1460N incluye al menos un segundo conjunto de unidades de ejecución 1462A-1462N y muestreadores 1464A-1464N. En algunas realizaciones, cada subnúcleo 1450A-1450N, 1460A-1460N comparte un conjunto de recursos compartidos 1470A-1470N. En algunas realizaciones, los recursos compartidos incluyen memoria caché compartida y lógica de operaciones de píxeles. Pueden incluirse también otros recursos compartidos en las diversas realizaciones del procesador de gráficos.
Unidades de ejecución ilustrativas adicionales
La Figura 15 ilustra lógica de ejecución de hilo 1500 que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones de un GPE. Los elementos de la Figura 15 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto.
En algunas realizaciones, la lógica de ejecución de hilo 1500 incluye un procesador sombreador 1502, un despachador de hilo 1504, una caché de instrucciones 1506, una matriz de unidad de ejecución escalable que incluye una pluralidad de unidades de ejecución 1508A-1508N, un muestreador 1510, una caché de datos 1512 y un puerto de datos 1514. En una realización, la unidad de ejecución escalable puede escalar dinámicamente activando o desactivando una o más unidades de ejecución (por ejemplo, cualquiera de la unidad de ejecución 1508A, 1508B, 1508C, 1508D, a 1508N-1 y 1508N) basándose en los requisitos de cálculo de una carga de trabajo. En una realización, los componentes incluidos están interconectados mediante un tejido de interconexión que se enlaza a cada uno de los componentes. En algunas realizaciones, la lógica de ejecución de hilo 1500 incluye una o más conexiones a memoria, tal como la memoria de sistema o memoria caché, a través de una o más de la caché de instrucciones 1506, el puerto de datos 1514, el muestreador 1510 y las unidades de ejecución 1508A-1508N. En algunas realizaciones, cada unidad de ejecución (por ejemplo, 1508A) es una unidad de cálculo de propósito general programable autónoma que puede ejecutar múltiples hilos de hardware simultáneos mientras se procesan múltiples elementos de datos en paralelo para cada hilo. En diversas realizaciones, la matriz de unidades de ejecución 1508A-1508N es escalable para incluir cualquier número de unidades de ejecución individuales.
En algunas realizaciones, las unidades de ejecución 1508A-1508N se usan principalmente para ejecutar programas sombreadores. Un procesador sombreador 1502 puede procesar los diversos programas sombreadores y despachar los hilos de ejecución asociados con los programas sombreadores mediante un despachador de hilo 1504. En una realización, el despachador de hilo incluye lógica para arbitrar las solicitudes de iniciación de hilo desde las canalizaciones de gráficos y de medios e instanciar los hilos solicitados en una o más unidades de ejecución en las unidades de ejecución 1508A-1508N. Por ejemplo, la canalización de geometría (por ejemplo, 1436 de la Figura 14) puede despachar sombreadores de vértices, teselación o geometría a la lógica de ejecución de hilos 1500 (Figura 15) para el procesamiento. En algunas realizaciones, el despachador de hilo 1504 puede procesar también hilos en tiempo de ejecución que abarcan solicitudes desde los programas sombreadores de ejecución.
En algunas realizaciones, las unidades de ejecución 1508A-1508N soportan un conjunto de instrucciones que incluye el soporte nativo para muchas instrucciones del sombreador de gráficos de 3D convencional, de manera que se ejecutan los programas sombreadores de las bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) con una traducción mínima. Las unidades de ejecución soportan procesamiento de vértices y de geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y procesamiento de propósito general (por ejemplo, sombreadores de cálculo y de medios). Cada una de las unidades de ejecución 1508A-1508N es capaz de una ejecución de una sola instrucción de múltiples datos de emisión múltiple (SnVID) y el funcionamiento con múltiples hilos posibilita un entorno de ejecución eficaz de cara a los accesos a memoria de mayor latencia. Cada hilo de hardware dentro de cada unidad de ejecución tiene un archivo de registro de ancho de banda alto dedicado y un estado de hilo independiente asociado. La ejecución es de múltiples emisiones por reloj a canalizaciones aptas para operaciones de números enteros, y de coma flotante de precisión sencilla y doble, capacidad de ramal de SIMD, operaciones lógicas, operaciones transcendentales y otras operaciones misceláneas. Mientras se esperan los datos de la memoria o una de las funciones compartidas, la lógica de dependencia dentro de las unidades de ejecución 1508A-1508N hace que un hilo en espera pase a inactividad hasta que se devuelvan los datos solicitados. Mientras el hilo en espera estaba en inactividad, los recursos de hardware pueden dedicarse a procesar otros hilos. Por ejemplo, durante un retardo asociado con una operación de sombreador de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, sombreador de fragmentos u otro tipo de programa sombreador, que incluye un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 1508A-1508N opera en matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución", o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso de elemento de datos, el enmascaramiento y el control de flujo dentro de las instrucciones. El número de canales puede ser independiente del número de unidades aritméticológicas (ALU) o unidades de coma flotante (FPU) físicas para un procesador de gráficos particular. En algunas realizaciones, las unidades de ejecución 1508A-1508N soportan tipos de datos enteros y de coma flotante.
El conjunto de instrucciones de la unidad de ejecución incluye instrucciones de SIMD. Los diversos elementos de datos se pueden almacenar como un tipo de datos empaquetados en un registro y la unidad de ejecución procesará los diversos elementos basándose en el tamaño de datos de los elementos. Por ejemplo, cuando se opera sobre un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera sobre el vector como cuatro elementos de datos empaquetados de 64 bits separados (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados de 32 bits separados (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados de 16 bits separados (elementos de datos de tamaño de palabra (W)) o treinta y dos elementos de datos de 8 bits separados (elementos de datos de tamaño de byte (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
Una o más cachés de instrucciones internas (por ejemplo, 1506) se incluyen en la lógica de ejecución de hilos 1500 para almacenar en caché instrucciones de hilo para las unidades de ejecución. En algunas realizaciones, se incluyen una o más cachés de datos (por ejemplo, 1512) para almacenar en caché datos de hilo durante la ejecución de hilo. En algunas realizaciones, se incluye un muestreador 1510 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunas realizaciones, el muestreador 1510 incluye funcionalidad de muestreo de textura o medios especializada para procesar datos de textura o medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, las canalizaciones de gráficos y de medios envían solicitudes de iniciación de hilo a la lógica de ejecución de hilos 1500 mediante una lógica de generación y de despacho de hilos. Una vez que se ha procesado y rasterizado un grupo de objetos geométricos para obtener datos de píxel, se invoca una lógica de procesador de píxeles (por ejemplo, lógica de sombreado de píxeles, lógica de sombreado de fragmentos, etc.) dentro del procesador de sombreado 1502 para computar adicionalmente información de salida y hacer que se escriban resultados para emitir superficies (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de estarcido, etc.). En algunas realizaciones, un sombreador de píxeles o un sombreador de fragmentos calcula los valores de los diversos atributos de vértice que se van a interpolar a lo largo del objeto rasterizado. En algunas realizaciones, una lógica de procesador de píxeles dentro del procesador de sombreado 1502 ejecuta entonces un programa de sombreado de píxeles o de fragmentos suministrado por una interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreado, el procesador de sombreado 1502 despacha hilos a una unidad de ejecución (por ejemplo, 1508A) mediante el despachador de hilos 1504. En algunas realizaciones, el sombreador de píxeles 1502 usa una lógica de muestreo de textura en el muestreador 1510 para acceder a datos de textura en mapeos de textura almacenadas en memoria. Unas operaciones aritméticas sobre los datos de textura y los datos de geometría de entrada computan datos de color de píxel para cada fragmento geométrico, o descartan el procesamiento adicional de uno o más píxeles.
En algunas realizaciones, el puerto de datos 1514 proporciona un mecanismo de acceso de memoria para que la lógica de ejecución de hilos 1500 emita datos procesados a la memoria para su procesamiento en una canalización de salida de procesador de gráficos. En algunas realizaciones, el puerto de datos 1514 incluye o se acopla a una o más memorias caché (por ejemplo, la caché de datos 1512) para almacenar en caché datos para un acceso de memoria mediante el puerto de datos.
La Figura 16 es un diagrama de bloques que ilustra formatos de instrucciones de procesador de gráficos 1600 de acuerdo con algunas realizaciones. En una o más realizaciones, las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tienen instrucciones en múltiples formatos. Los recuadros con línea continua ilustran los componentes que se incluyen en general en una unidad de instrucción de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que únicamente están incluidos en un subconjunto de instrucciones. En algunas realizaciones, el formato de instrucción 1600 descrito e ilustrado son macro-instrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a microoperaciones resultantes de la descodificación de instrucciones una vez que se ha procesado la instrucción.
En algunas realizaciones, las unidades de ejecución de procesador de gráficos soportan de manera nativa instrucciones en un formato de instrucción de 128 bits 1610. Un formato de instrucción compactado de 64 bits 1630 está disponible para algunas instrucciones basándose en la instrucción, las opciones de instrucción y el número de operandos seleccionados. El formato de instrucción de 128 bits nativo 710 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 1630. Las instrucciones nativas disponibles en el formato de 64 bits 1630 varían según la realización. En algunas realizaciones, la instrucción se compacta en parte usando un conjunto de valores de índice en un campo de índice 1613. El hardware de la unidad de ejecución consulta un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 1610.
Para cada formato, el código de operación de instrucción 1612 define la operación que ha de realizar la unidad de ejecución. Las unidades de ejecución ejecutan cada instrucción en paralelo a lo largo de los múltiples elementos de datos de cada operando. Por ejemplo, en respuesta a una instrucción de suma, la unidad de ejecución realiza una operación de suma simultánea a lo largo de cada canal de color que representa un elemento de textura o un elemento de imagen. Por defecto, la unidad de ejecución ejecuta cada instrucción a lo largo de todos los canales de datos de los operandos. En algunas realizaciones, el campo de control de instrucción 1614 habilita el control sobre ciertas opciones de ejecución, tales como la selección de canales (por ejemplo, predicación) y el orden de canal de datos (por ejemplo, referenciación). Para instrucciones en el formato de instrucción de 128 bits 1610, un campo de tamaño de ejecución 1616 limita el número de canales de datos que se ejecutarán en paralelo. En algunas realizaciones, el campo de tamaño de ejecución 1616 no está disponible para su uso en el formato de instrucción compacto de 64 bits 1630.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 1620, src1 1622 y un destino 1618. En algunas realizaciones, las unidades de ejecución soportan instrucciones de destino dual, donde uno de los destinos está implícito. Las instrucciones de manipulación de datos pueden tener un tercer operando de origen (por ejemplo, SRC2 1624), donde el código de operación de instrucción 1612 determina el número de operandos de origen. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de manera rígida) pasado con la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 1610 incluye un campo de modo de acceso/dirección 1626 que especifica, por ejemplo, si se usa el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se usa el modo de direccionamiento de registro directo, la dirección de registro de uno o más operandos es proporcionada directamente por bits en la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 1610 incluye un campo de modo de acceso/dirección 1626, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una realización, el modo de acceso se usa para definir una alineación de acceso de datos para la instrucción. Algunas realizaciones soportan modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de 1 byte, donde la alineación de bytes del modo de acceso determina la alineación de acceso de los operandos de instrucción. Por ejemplo, cuando está en un primer modo, la instrucción puede usar un direccionamiento alineado por byte para los operandos de origen y de destino y, cuando está en un segundo modo, la instrucción puede usar un direccionamiento alineado por 16 bytes para todos los operandos de origen y de destino.
En una realización, la porción de modo de dirección del campo de modo de acceso/dirección 1626 determina si la instrucción va a usar un direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, unos bits de la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se usa un modo de direccionamiento de registro indirecto, la dirección de registro de uno o más operandos se puede computar basándose en un valor de registro de dirección y un campo inmediato de dirección en la instrucción.
En algunas realizaciones, las instrucciones se agrupan basándose en los campos de bits del código de operación 1612 para simplificar la descodificación de código de operación 1640. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación de código de operación precisa mostrada es simplemente un ejemplo. En algunas realizaciones, un grupo de códigos de operaciones lógicas y de movimiento 1642 incluye instrucciones lógicas y de movimiento de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas realizaciones, el grupo de lógica y movimiento 1642 comparte los cinco bits más significativos (MSB), donde las instrucciones de movimiento (mov) están en forma de 0000xxxxb y las instrucciones lógicas están en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 1644 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 1646 incluye una mezcla de instrucciones, incluidas instrucciones de sincronización (por ejemplo, esperar, enviar) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones matemáticas en paralelo 1648 incluye instrucciones aritméticas orientadas a componentes (por ejemplo, sumar, multiplicar (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cálculo matemático en paralelo 1648 realiza las operaciones aritméticas en paralelo a lo largo de canales de datos. El grupo de cálculo matemático vectorial 1650 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101 xxxxb (por ejemplo, 0x50). El grupo de cálculo matemático vectorial realiza una aritmética tal como cálculos de producto escalar sobre operandos de vectores.
Canalización de gráficos ilustrativa adicional
La Figura 17 es un diagrama de bloques de otra realización de un procesador de gráficos 1700. Los elementos de la Figura 17 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto.
En algunas realizaciones, el procesador de gráficos 1700 incluye una canalización de gráficos 1720, una canalización de medios 1730, un motor de visualización 1740, lógica de ejecución de hilo 1750 y una canalización de salida del representador 1770. En algunas realizaciones, el procesador de gráficos 1700 es un procesador de gráficos dentro de un sistema de procesamiento de múltiples núcleos que incluye uno o más núcleos de procesamiento de propósito general. El procesador de gráficos se controla por las escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 1700 mediante una interconexión de anillo 1702. En algunas realizaciones, la interconexión de anillo 1702 acopla el procesador de gráficos 1700 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de propósito general. Los comandos desde la interconexión de anillo 1702 se interpretan por un transmisor por flujo continuo de comandos 1703, que suministra instrucciones a componentes individuales de la canalización de gráficos 1720 o la canalización de medios 1730.
En algunas realizaciones, el transmisor por flujo continuo de comandos 1703 dirige la operación de un extractor de vértices 1705 que lee los datos de vértices de memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor de envío por flujo continuo 1703. En algunas realizaciones, el extractor de vértices 1705 proporciona datos de vértices a un sombreador de vértices 1707, que realiza operaciones de transformación espacial de coordenadas y de iluminación en cada vértice. En algunas realizaciones, el extractor de vértices 1705 y el sombreador de vértices 1707 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a unidades de ejecución 1752A-1752B mediante un despachador de hilo 1731.
En algunas realizaciones, las unidades de ejecución 1752A-1752B son una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunas realizaciones, las unidades de ejecución 1752A-1752B tienen una caché L1 adjunta 1751 que es específica para cada matriz o está compartida entre las matrices. La caché puede estar configurada como una caché de datos, una caché de instrucciones o una única caché que está subdividida para contener datos e instrucciones en diferentes particiones.
En algunas realizaciones, la canalización de gráficos 1720 incluye componentes de teselación para realizar teselación acelerada por hardware de objetos 3D. En algunas realizaciones, un sombreador de casco programable 811 configura las operaciones de teselación. Un sombreador del domino programable 817 proporciona una evaluación de extremo trasero de la salida de teselación. Un teselador 1713 opera en la dirección del sombreador de casco 1711 y contiene lógica de propósito especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico aproximado que se proporciona como entrada a la canalización de gráficos 1720. En algunas realizaciones, si no se usa la teselación, pueden omitirse los componentes de teselación (por ejemplo, el sombreador de casco 1711, el teselador 1713 y el sombreador de dominio 1717).
En algunas realizaciones, pueden procesarse objetos geométricos completos por un sombreador de geometría 1719 mediante uno o más hilos despachados a unidades de ejecución 1752A-1752B, o pueden continuar directamente al recortador 1729. En algunas realizaciones, el sombreador de geometría opera en objetos geométricos enteros, en lugar de en vértices o parches de vértices como en etapas anteriores de la canalización de gráficos. Si se desactiva la teselación, el sombreador de geometría 1719 recibe entrada desde el sombreador de vértices 1707. En algunas realizaciones, el sombreador de geometría 1719 es programable por un programa sombreador de geometría para realizar teselación de geometría si las unidades de teselación están desactivadas.
Antes de la rasterización, un recortador 1729 procesa datos de vértices. El recortador 1729 puede ser un recortador de función fija o un recortador programable que tiene funciones de recortador y de sombreado de geometría. En algunas realizaciones, un componente de prueba de rasterizador y profundidad 1773 en la canalización de salida del representador 1770 despacha sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxeles. En algunas realizaciones, la lógica de sombreador de píxeles está incluida en la lógica de ejecución de hilo 1750. En algunas realizaciones, una aplicación puede omitir el componente de prueba de rasterizador y profundidad 1773 y accede a datos de vértice no rasterizados mediante una unidad de salida de flujo 1723.
El procesador de gráficos 1700 tiene un bus de interconexión, tejido de interconexión o algún otro mecanismo de interconexión que permite que los datos y los mensajes pasen entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 1752A-1752B y la caché o cachés asociadas 1751, el muestreador de textura y de medios 1754 y la caché de textura/muestreador 1758 se interconectan mediante un puerto de datos 1756 para realizar el acceso a memoria y comunicarse con los componentes de canalización de salida del representador del procesador. En algunas realizaciones, el muestreador 1754, las cachés 1751, 1758 y las unidades de ejecución 1752A-1752B cada uno tienen rutas de acceso a memoria separadas.
En algunas realizaciones, la canalización de salida del representador 1770 contiene un componente de prueba de rasterizador y profundidad 1773 que convierte objetos basados en vértices en una representación basada en píxeles asociada. En algunas realizaciones, la lógica del rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar rasterización de triángulo y de línea de función fija. Una caché de representador asociada 1778 y caché de profundidad 1779 también están disponibles en algunas realizaciones. Un componente de operaciones de píxel 1777 realiza operaciones basadas en píxel en los datos, aunque, en algunos casos, las operaciones de píxeles asociadas con las operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) se realizan por el motor 2D 1741, o se sustituyen en el momento de visualización por el controlador de visualización 1743 usando planos de visualización superpuestos. En algunas realizaciones, está disponible una caché L3 compartida 1775 para todos los componentes de gráficos, lo que permite la compartición de datos sin el uso de memoria de sistema principal.
En algunas realizaciones, la canalización de medios de procesador de gráficos 1730 incluye un motor de medios 1737 y un extremo frontal de vídeo 1734. En algunas realizaciones, el extremo frontal de vídeo 1734 recibe comandos de canalización desde el transmisor por flujo continuo de comandos 1703. En algunas realizaciones, la canalización de medios 1730 incluye un transmisor por flujo continuo de comandos separado. En algunas realizaciones, el extremo frontal de vídeo 1734 procesa comandos de medios antes de enviar el comando al motor de medios 1737. En algunas realizaciones, el motor de medios 1737 incluye funcionalidad de generación de hilos para generar hilos para su despacho a la lógica de ejecución de hilos 1750 a través del despachador de hilo 1731.
En algunas realizaciones, el procesador de gráficos 1700 incluye un motor de visualización 1740. En algunas realizaciones, el motor de visualización 1740 es externo al procesador 1700 y está acoplado al procesador de gráficos a través de la interconexión de anillo 1702 o algún otro bus o tejido de interconexión. En algunas realizaciones, el motor de visualización 1740 incluye un motor 2D 1741 y un controlador de visualización 1743. En algunas realizaciones, el motor de visualización 1740 contiene lógica de propósito especial capaz de funcionar de forma independiente a la canalización 3D. En algunas realizaciones, el controlador de visualización 1743 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en sistema, como en un ordenador portátil, o un dispositivo de visualización externo anexado mediante un conector de dispositivo de visualización.
En algunas realizaciones, la canalización de gráficos 1720 y la canalización de medios 1730 se pueden configurar para realizar operaciones basándose en múltiples interfaces de programación de gráficos y de medios y no son específicas de ninguna interfaz de programación de aplicaciones (API) concreta. En algunas realizaciones, el software de controlador para el procesador de gráficos traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. En algunas realizaciones, se proporciona soporte para la Biblioteca de Gráficos Abierta (OpenGL), Lenguaje Informático Abierto (OpenCL) y/o API de gráficos y de cómputo Vulkan, todas ellas del grupo Khronos. En algunas realizaciones, también se puede proporcionar soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas realizaciones, se puede soportar una combinación de estas bibliotecas. También se puede proporcionar soporte para la Biblioteca de Visión Informática de Código Abierto (OpenCV). También se soportaría una API futura con una canalización de 3D compatible si se puede hacer un mapeo desde la canalización de la API futura a la canalización del procesador de gráficos.
Programación de canalización de gráficos
La Figura 18A es un diagrama de bloques que ilustra un formato de comando de procesador de gráficos 1800 de acuerdo con algunas realizaciones. La Figura 18B es un diagrama de bloques que ilustra una secuencia de orden de procesador de gráficos 1810 de acuerdo con una realización. Los recuadros de línea continua en la Figura 18A ilustran los componentes que están incluidos en general en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que están incluidos únicamente en un subconjunto de comandos de gráficos. El formato de comando de procesador de gráficos 1800 ilustrativo de la Figura 18A incluye campos de datos para identificar un cliente objetivo 1802 del comando, un código de operación del comando (código de operación) 1804 y los datos relevantes 1806 para el comando. También se incluye un subcódigo de operación 1805 y un tamaño de comando 1808 en algunos comandos.
En algunas realizaciones, el cliente 1802 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En algunas realizaciones, un analizador de comandos de procesador de gráficos examina el campo de cliente de cada comando para determinar un procesamiento adicional del comando y encaminar los datos de comando a la unidad de cliente apropiada. En algunas realizaciones, las unidades de cliente de procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad representadora, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que se recibe el comando por la unidad de cliente, la unidad de cliente lee el código de operación 1804 y, si está presente, el subcódigo de operación 1805 para determinar la operación a realizar. La unidad de cliente realiza el comando usando información en el campo de datos 1806. Para algunos comandos, es de esperar que un tamaño de comando explícito 1808 especifique el tamaño del comando. En algunas realizaciones, el analizador de comandos determina automáticamente el tamaño de al menos algunos de los comandos basándose en el código de operación de comando. En algunas realizaciones, los comandos se alinean mediante múltiplos de una palabra doble.
El diagrama de flujo en la Figura 18B muestra una secuencia de comandos de procesador de gráficos ilustrativo 1810. En algunas realizaciones, el software o firmware de un sistema de procesamiento de datos que presenta una realización de un procesador de gráficos usa una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra una secuencia de comandos de muestra y se describe para los fines de ejemplo únicamente ya que las realizaciones no están limitadas a estos comandos específicos o para esta secuencia de comandos. Además, pueden emitirse los comandos como un lote de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos en al menos parcialmente concurrencia.
En algunas realizaciones, la secuencia de comandos del procesador de gráficos 1810 puede comenzar con un comando de vaciado de canalización 1812 para hacer que alguna canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización 3D 1822 y la canalización de medios 1824 no operan concurrentemente. Se realiza el vaciado de la canalización para hacer que la canalización de gráficos activa complete algún comando pendiente. En respuesta a un vaciado de canalización, el analizador de comando para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las cachés de lectura pertinentes. Opcionalmente, cualquier dato en la caché de representador que se marca 'sucio' puede vaciarse a memoria. En algunas realizaciones, puede usarse el comando de vaciado de canalización 1812 para la sincronización de canalización o antes de colocar el procesador de gráficos en un estado de baja potencia.
En algunas realizaciones, se usa un comando de selección de canalización 1813 cuando una secuencia de comandos requiere el procesador de gráficos para conmutar explícitamente entre canalizaciones. En algunas realizaciones, se requiere únicamente un comando de selección de canalización 1813 una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea emitir comandos para ambas canalizaciones. En algunas realizaciones, se requiere un comando de vaciado de canalización 1812 inmediatamente antes de un conmutador de canalización mediante el comando de selección de canalización 1813.
En algunas realizaciones, un comando de control de canalización 1814 configura una canalización de gráficos para la operación y se usa para programar la canalización 3D 1822 y la canalización de medios 1824. En algunas realizaciones, el comando de control de canalización 1814 configura el estado de la canalización para la canalización activa. En una realización, se usa el comando de control de canalización 1814 para sincronización de canalización y para limpiar datos de una o más memorias de caché dentro de la canalización activa antes de procesar un lote de comandos.
En algunas realizaciones, se usan comandos de estado de memoria intermedia de retorno 1816 para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o más memorias intermedias de retorno en las que las operaciones escriben datos intermedios durante el procesamiento. En algunas realizaciones, el procesador de gráficos también usa una o más memorias intermedias de retorno para almacenar datos de salida y realizar comunicación de hilo cruzada. En algunas realizaciones, el estado de la memoria intermedia de retorno 1816 incluye seleccionar el tamaño y número de memorias intermedias de retorno para usar para un conjunto de operaciones de canalización.
Los comandos restantes en la secuencia de comandos difieren basándose en la canalización activa para las operaciones. Basándose en una determinación de la canalización 1820, la secuencia de comandos se adapta a la canalización 3D 1822 que comienza con el estado de canalización 3D 1830 o a la canalización de medios 1824 que comienza en el estado de canalización de medios 1840.
Los comandos para configurar el estado de canalización 3D 1830 incluyen los comandos de ajuste de estado 3D para el estado de memoria intermedia de vértice, estado de elemento de vértice, estado de color constante, estado de memoria intermedia de profundidad y otras variables de estado que han de configurarse antes de que se procesen los comandos de primitiva 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en uso. En algunas realizaciones, los comandos de estado de canalización 3D 1830 también son capaces de inhabilitar u omitir de manera selectiva determinados elementos de canalización si esos elementos no van a usarse.
En algunas realizaciones, el comando de la primitiva 1832 3D se usa para enviar primitivas 3D para que sean procesadas por la canalización de 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos mediante el comando de la primitiva 18323D se reenvían a la función de extracción de vértices en la canalización de gráficos. La función de extracción de vértices usa los datos de comando de la primitiva 3D 1832 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. En algunas realizaciones, el comando de la primitiva 3D 1832 se usa para realizar operaciones de vértices en primitivas 3D mediante sombreadores de vértices. Para procesar sombreadores de vértices, la canalización de 3D 1822 despacha hilos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
En algunas realizaciones, la canalización de 3D 1822 se desencadena mediante un comando o evento de ejecución 1834. En algunas realizaciones, una escritura de registro desencadena una ejecución de comando. En algunas realizaciones, la ejecución se desencadena mediante un comando 'ir' o 'poner en marcha' en la secuencia de comandos. En una realización, la ejecución de comando se desencadena usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La canalización de 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez que se han completado las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles da color a los píxeles resultantes. También se pueden incluir comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo trasero de píxeles para esas operaciones.
En algunas realizaciones, la secuencia de comandos de procesador de gráficos 1810 sigue la ruta de la canalización de medios 1824 cuando se realizan operaciones de medios. En general, el uso específico y manera específicos de programación para la canalización de medios 1824 depende de las operaciones de medios o de cómputo a realizar. Se pueden descargar operaciones de descodificación de medios específicas a la canalización de medios durante la descodificación de medios. En algunas realizaciones, la canalización de medios también se puede omitir y la descodificación de medios se puede realizar, en su totalidad o en parte, usando recursos proporcionados por uno o más núcleos de procesamiento de propósito general. En una realización, la canalización de medios también incluye elementos para operaciones de la unidad del procesador de gráficos de propósito general (GPGPU), donde el procesador de gráficos se usa para realizar operaciones vectoriales de SIMD usando programas de sombreado computacional que no están relacionados explícitamente con la representación de primitivas de gráficos.
En algunas realizaciones, la canalización de medios 1824 se configura de una manera similar a la de la canalización de 3D 1822. Un conjunto de comandos para configurar el estado de canalización de medios 1840 se despacha o se coloca en una cola de comandos antes de los comandos de objeto de medios 1842. En algunas realizaciones, los comandos para el estado de canalización de medios 1840 incluyen datos para configurar los elementos de canalización de medios que se utilizarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de descodificación de vídeo y de codificación de vídeo de la canalización de medios, tal como el formato de codificación o descodificación. En algunas realizaciones, los comandos para el estado de canalización de medios 1840 también admiten el uso de uno o más punteros a elementos de estado "indirecto" que contienen un lote de configuraciones de estado.
En algunas realizaciones, los comandos de objeto de medios 1842 suministran punteros a objetos de medios para su procesamiento mediante la canalización de medios. Los objetos de medios incluyen memorias intermedias de memoria que contienen datos de vídeo que hay que procesar. En algunas realizaciones, todos los estados de canalización de medios han de ser válidos antes de emitir un comando de objeto de medios 1842. Una vez que se ha configurado el estado de canalización y los comandos de objeto de medios 1842 se han puesto en cola, la canalización de medios 1824 se desencadena mediante un comando de ejecución 1844 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida desde la canalización de medios 1824 puede postprocesarse entonces mediante operaciones proporcionadas por la canalización de 3D 1822 o la canalización de medios 1824. En algunas realizaciones, las operaciones de GPGPU se configuran y se ejecutan de una manera similar a la de las operaciones de medios.
Arquitectura de software de gráficos
La Figura 19 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos 1900 de acuerdo con algunas realizaciones. En algunas realizaciones, la arquitectura de software incluye una aplicación de gráficos 3D 1910, un sistema operativo 1920 y al menos un procesador 1930. En algunas realizaciones, el procesador 1930 incluye un procesador de gráficos 1932 y uno o más núcleos de procesador de propósito general 1934. La aplicación de gráficos 1910 y el sistema operativo 1920 se ejecutan, cada uno, en la memoria de sistema 1950 del sistema de procesamiento de datos.
En algunas realizaciones, la aplicación de gráficos 3D 1910 contiene uno o más programas de sombreado que incluyen las instrucciones de sombreador 1912. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el lenguaje de sombreador de alto nivel (HLSL) o el lenguaje de sombreador de OpenGL (GLSL). La aplicación también incluye instrucciones ejecutables 1914 en un lenguaje máquina adecuado para su ejecución por el núcleo de procesador de propósito general 1934. La aplicación también incluye los objetos de gráficos 1916 definidos por los datos de vértices.
En algunas realizaciones, el sistema operativo 1920 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo similar a UNIX propietario o un sistema operativo similar a UNIX de código abierto que usa una variante del núcleo Linux. El sistema operativo 1920 puede soportar una API de gráficos 1922 tal como la API Direct3D, la API OpenGL o la API Vulkan. Cuando está en uso la API Direct3D, el sistema operativo 1920 usa un compilador de sombreador de extremo frontal 1924 para compilar cualquier instrucción de sombreador 1912 en HLSL en un lenguaje de sombreador de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede realizar una compilación previa de sombreador. En algunas realizaciones, los sombreadores de alto nivel se compilan en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 1910. En algunas realizaciones, las instrucciones del sombreador 1912 se proporcionan en una forma intermedia, tal como una versión de la Representación Intermedia Portátil Convencional (SPIR) usada por la API Vulkan.
En algunas realizaciones, el controlador de gráficos de modo de usuario 1926 contiene un compilador de sombreador de extremo trasero 1927 para convertir las instrucciones del sombreador 1912 en una representación específica de hardware. Cuando está en uso la API OpenGL, las instrucciones del sombreador 1912 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 1926 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 1926 usa las funciones de modo de núcleo de sistema operativo 1928 para comunicarse con un controlador de gráficos de modo de núcleo 1929. En algunas realizaciones, el controlador de gráficos de modo de núcleo 1929 se comunica con el procesador de gráficos 1932 para despachar comandos e instrucciones.
Implementaciones de núcleo de IP
Uno o más aspectos de al menos una realización se pueden implementar mediante código representativo almacenado en un medio legible por máquina que representa y/o define lógica dentro de un circuito integrado, tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan una lógica diversa dentro del procesador. Cuando son leídas por una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", son unidades reutilizables de lógica para un circuito integrado que pueden almacenarse en un medio legible por máquina tangible como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que fabrican el circuito integrado. El circuito integrado se puede fabricar de manera que el circuito realice operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
La Figura 20 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 2000 que puede usarse para fabricar un circuito integrado para realizar las operaciones de acuerdo con una realización. El sistema de desarrollo de núcleo de IP 2000 puede usarse para generar diseños reutilizables modulares que pueden incorporarse en un diseño más grande o usarse para construir un circuito integrado entero (por ejemplo, un circuito de SOC integrado). Una instalación de diseño 2030 puede generar una simulación de software 2010 de un diseño de núcleo de IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). La simulación de software 2010 se puede utilizar para diseñar, probar y verificar el comportamiento del núcleo de IP usando un modelo de simulación 2012. El modelo de simulación 2012 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. Un diseño de nivel de transferencia de registro (RTL) 2015 se puede crear o sintetizar a partir del modelo de simulación 2012. El diseño de RTL 2015 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registros de hardware, incluyendo la lógica asociada realizada usando las señales digitales modeladas. Además de un diseño de RTL 2015, también se pueden crear, diseñar o sintetizar diseños de nivel inferior a nivel de lógica o a nivel de transistores. Por lo tanto, los detalles particulares del diseño y simulación inicial pueden variar.
El diseño de RTL 2015, o un equivalente, puede ser sintetizado adicionalmente por la instalación de diseño para obtener un modelo de hardware 2020, que puede estar en un lenguaje de descripción de hardware (HDL) o alguna otra representación de datos de diseño físico. El HDL se puede simular o someter a prueba adicionalmente para verificar el diseño de núcleo de IP. El diseño de núcleo de IP puede almacenarse para su entrega a una instalación de fabricación de 3os 2065 usando memoria no volátil 2040 (por ejemplo, disco duro, memoria flash o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo de IP puede transmitirse (por ejemplo, mediante Internet) a través de una conexión alámbrica 2050 o conexión inalámbrica 2060. La instalación de fabricación 2065 puede a continuación fabricar un circuito integrado que está basado al menos en parte en el diseño de núcleo de IP. El circuito integrado fabricado puede estar configurado para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
Sistema ilustrativo en un circuito de chip integrado
Las Figuras 21-23 ilustran circuitos integrados de manera ilustrativa y procesadores de gráficos asociados que pueden fabricarse usando uno o más núcleos de IP, de acuerdo con diversas realizaciones descritas en el presente documento. Además de lo que se ilustra, puede incluirse otra lógica y circuitos, que incluyen procesadores/núcleos de gráficos adicionales, controladores de interfaz periférica o núcleos de procesador de propósito general.
La Figura 21 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo 2100 que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El circuito integrado 2100 ilustrativo incluye uno o más procesador o procesadores de aplicación 2105 (por ejemplo, las CPU), al menos un procesador de gráficos 2110, y puede incluir adicionalmente un procesador de imágenes 2115 y/o un procesador de vídeo 2120, cualquiera de los que puede ser un núcleo de IP modular desde las mismas o múltiples diferentes instalaciones de diseño. El circuito integrado 2100 incluye una lógica de bus o de periféricos que incluye un controlador de USB 2125, un controlador de UART 2130, un controlador de SPI/SDIO 2135 y un controlador de I2S/I2C 2140. Adicionalmente, el circuito integrado puede incluir un dispositivo de visualización 2145 acoplado a uno o más de un controlador de interfaz multimedios de alta definición (HDMI) 2150 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 2155. El almacenamiento puede ser proporcionado por un subsistema de memoria flash 2160 que incluye una memoria flash y un controlador de memoria flash. La interfaz de memoria se puede proporcionar mediante un controlador de memoria 2165 para el acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 2170.
La Figura 22 es un diagrama de bloques que ilustra un procesador de gráficos 2210 ilustrativo de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El procesador de gráficos 2210 puede ser una variante del procesador de gráficos 2110 de la Figura 21. El procesador de gráficos 2210 incluye un procesador de vértices 2205 y uno o más procesador o procesadores de fragmentos 2215A-2215N (por ejemplo, 2215A, 2215B, 2215C, 2215D a 2215N-1, y 2215N). El procesador de gráficos 2210 puede ejecutar diferentes programas sombreadores mediante lógica separada, de manera que el procesador de vértices 2205 está optimizado para ejecutar operaciones para programas de sombreador de vértices, mientras que el uno o más procesador o procesadores de fragmentos 2215A-2215N ejecutan operaciones de sombreado de fragmento (por ejemplo, de píxeles) para programas sombreadores de fragmento o de píxel. El procesador de vértices 2205 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera datos de primitivas y de vértices. El procesador o procesadores de fragmentos 2215A-2215N usan datos de primitiva y de vértice generados por el procesador de vértices 2205 para producir una memoria intermedia de fotograma que se visualiza en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 2215A-2215N están optimizados para ejecutar programas sombreadores de fragmento según se proporciona en la API OpenGL, que pueden usarse para realizar operaciones similares como un programa sombreador de píxeles como se proporciona en la API Direct 3D.
El procesador de gráficos 2210 incluye adicionalmente una o más unidades de gestión de memoria (MMU) 2220A-2220B, caché o cachés 2225A-2225B e interconexión o interconexiones de circuito 2230A-2230B. La una o más MMU 2220A-2220B proporcionan mapeo de dirección virtual a física para el circuito integrado 2210, incluyendo para el procesador de vértices 2205 y/o el procesador o procesadores de fragmentos 2215A-2215N, que pueden hacer referencia a los datos de vértice o de imagen/textura almacenados en memoria, además de los datos de vértice o imagen/textura almacenados en la una o más caché o cachés 2225A-2225B. En una realización, la una o más MMU 2220A-2220B pueden estar sincronizadas con otras MMU dentro del sistema, que incluyen una o más MMU asociadas con el uno o más procesador o procesadores de aplicación 2105, el procesador de imagen 2115 y/o el procesador de vídeo 2120 de la Figura 21, de manera que cada procesador 2105-2120 puede participar en un sistema virtual de memoria compartida o unificada. La una o más interconexión o interconexiones de circuito 2230A-2230B posibilitan que el procesador de gráficos 2210 interconecte con otros núcleos de IP dentro del SoC, mediante un bus interno del SoC o mediante una conexión directa, de acuerdo con las realizaciones.
La Figura 23 es un diagrama de bloques que ilustra un procesador de gráficos 2310 ilustrativo adicional de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El procesador de gráficos 2310 puede ser una variante del procesador de gráficos 2110 de la Figura 21. El procesador de gráficos 2310 incluye las una o más MMU 2220A-2220B, cachés 2225A-2225B e interconexiones de circuito 2230A-2230B del circuito integrado 2200 de la Figura 22.
El procesador de gráficos 2310 incluye uno o más núcleos de sombreador 2315A-2315N (por ejemplo, 2315A, 2315B, 2315C, 2315D, 2315E, 2315F hasta 2315N-1 y 2315N), que proporcionan una arquitectura de núcleo de sombreador unificada en la que un solo núcleo o tipo o núcleo puede ejecutar todos los tipos de código de sombreador programable, incluido el código de programa de sombreador, para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cómputo. El número exacto de núcleos de sombreador presentes puede variar entre realizaciones e implementaciones. Adicionalmente, el procesador de gráficos 2310 incluye un gestor de tareas entre núcleos 2305, que actúa como un despachador de hilos para despachar hilos de ejecución a uno o más núcleos de sombreador 2315A-2315N y una unidad de teselado 2318 para acelerar operaciones de teselado para una representación basada en teselas, en la que las operaciones de representación para una escena se subdividen en el espacio de imágenes, por ejemplo, para aprovechar la coherencia espacial local dentro de una escena o para optimizar el uso de cachés internas.
Las realizaciones descritas en el presente documento hacen referencia a configuraciones específicas de hardware, tales como circuitos integrados específicos de la aplicación (ASIC), configuradas para realizar determinadas operaciones o que tienen una funcionalidad predeterminada. Tales dispositivos electrónicos habitualmente incluyen un conjunto de uno o más procesadores acoplados a uno o más de otros componentes, tales como uno o más dispositivos de almacenamiento (medios de almacenamiento legibles por máquina no transitorios), dispositivos de entrada/salida de usuario (por ejemplo, un teclado, una pantalla táctil y/o una pantalla) y conexiones de red. El acoplamiento del conjunto de procesadores y otros componentes habitualmente se produce a través de uno o más buses y puentes (también denominados controladores de bus). El dispositivo de almacenamiento y las señales que portan el tráfico de red representan, respectivamente, uno o más medios de almacenamiento legibles por máquina y medios de comunicación legibles por máquina. Por tanto, los dispositivos de almacenamiento de un dispositivo electrónico dado habitualmente almacenan un código y/o datos para su ejecución en el conjunto de uno o más procesadores de ese dispositivo electrónico.
Por supuesto, una o más partes de una realización pueden implementarse usando diferentes combinaciones de software, firmware y/o hardware. A lo largo de esta descripción detallada, con fines explicativos, se han expuesto numerosos detalles específicos para proporcionar un entendimiento exhaustivo de la presente invención. Sin embargo, será evidente para un experto en la materia que las realizaciones pueden ponerse en práctica sin algunos de estos detalles específicos. En determinados casos, estructuras y funciones ampliamente conocidas no se han descrito en detalle para no complicar la materia objeto inventiva de las realizaciones. En consecuencia, el alcance de la invención debería evaluarse en términos de las reivindicaciones que se aportan a continuación.

Claims (6)

REIVINDICACIONES
1. Un sistema de procesamiento heterogéneo (600), que comprende
una pluralidad de unidades de procesamiento central (602), CPU, y una caché de tabla de directorios de superlíneas, SDTC, (612);
una memoria de sistema (640) que incluye una tabla de directorios de superlíneas (642), SDT, y
un espacio de direcciones virtuales; y
una unidad de procesamiento de gráficos de propósito general (620), GPGPU, que incluye:
un bloque de cálculo de procesamiento de gráficos de propósito general para procesar una carga de trabajo que incluye gráficos u operaciones de cálculo;
una primera memoria caché;
un módulo de coherencia que posibilita que la primera memoria caché almacene de forma coherente datos almacenados en la memoria de sistema (640) dentro del espacio de direcciones virtual, en donde el módulo de coherencia hace un seguimiento de la coherencia en la granularidad de superlíneas, en donde una superlínea incluye múltiples líneas de caché, y el almacenamiento de datos para la primera memoria caché se gestiona en la granularidad de líneas caché; y
una tabla de titularidad de superlíneas (632), SLOT, para almacenar un conjunto de superlíneas que pertenecen a la GPGPU;
en donde el espacio de direcciones virtuales es compartido por la GPGPU y la pluralidad de CPU;
en donde antes de que se realice una escritura de datos por la GPGPU en una línea de caché dentro de la primera memoria caché, el módulo de coherencia debe determinar, en base a la SLOT (632), un estado de titularidad para una superlínea asociada a la línea de caché, difundir una monitorización de región para tomar posesión de la superlínea asociada a la línea de caché cuando la superlínea pertenece ahora a la GPGPU, y actualizar una entrada de SLOT (632) para la superlínea asociada a la línea de caché para registrar la titularidad de la superlínea;
en donde antes de que una de las CPU (602) realice un acceso a una dirección virtual, la CPU debe comprobar que la SDTC (612) sea propietaria de una superlínea asociada a la dirección virtual y, si la verificación falla, comprobar la SDT (642);
en donde la SLOT (632) incluye una entrada para cada superlínea del conjunto de superlíneas que pertenecen al dispositivo de procesamiento de gráficos de propósito general y cada entrada de la SLOT (632) incluye una etiqueta de superlínea que se usa para identificar la superlínea (710) a
la que está asociada la entrada de SLOT (720), y un estado de protocolo de coherencia para la superlínea;
en donde la SDT (642) indica la titularidad de superlínea de superlíneas almacenadas en la memoria de sistema (640), en donde una entrada de SDT (730) está compuesta por tres bits que se almacenan para cada superlínea en la memoria, en donde un bit compartido/exclusivo (732) se usa para indicar si la superlínea está en un estado compartido o en un estado exclusivo, y un bit de CPU (734) y un bit de GPU (736) indican si la titularidad reside dentro de una CPU o una GPU, y en donde la SDTC (612) incluye entradas que incluyen otra etiqueta de superlínea (742) para identificar una superlínea, datos almacenados en caché de una entrada de SDT y un campo LRU, y en donde la entrada de SDT (730) se indexa en función de una etiqueta de superlínea, y en donde la etiqueta de superlínea (742) almacenada en la entrada de SDTC (740) es la etiqueta de superlínea que indexa la entrada de SDT (730) para la que se almacenan datos en caché.
2. El sistema de procesamiento de gráficos heterogéneo (600) según la reivindicación 1, en donde el bloque de cálculo de procesamiento de gráficos de propósito general incluye múltiples agrupaciones de cálculo, donde cada agrupación de cálculo incluye múltiples multiprocesadores de gráficos.
3. El sistema de procesamiento de gráficos heterogéneo (600) según la reivindicación 1, en donde la primera memoria caché es una memoria caché de nivel 3.
4. El sistema de procesamiento de gráficos heterogéneo (600) según la reivindicación 1, en donde el estado del protocolo de coherencia es uno de modificado, exclusivo, compartido o no válido.
5. El sistema de procesamiento de gráficos heterogéneo (600) según la reivindicación 1, donde cada entrada de la tabla de titularidad de superlíneas incluye adicionalmente un bit válido para cada línea de caché dentro de la superlínea.
6. Un método en un agente de un sistema de procesamiento heterogéneo, comprendiendo el método:
recibir una solicitud para acceder a una dirección de memoria virtual desde un proceso que se ejecuta en el agente; determinar si el agente tiene la titularidad de una primera superlínea asociada a la dirección de memoria virtual, donde la primera superlínea asociada a una región de memoria abarca múltiples líneas de caché;
acceder a la dirección de memoria virtual desde el agente sin desencadenar una solicitud de monitorización cuando el agente tiene la titularidad de la primera superlínea; y
enviar una solicitud de monitorización de región para adquirir la titularidad de la primera superlínea cuando el agente no tiene la titularidad de la primera superlínea;
en donde si el agente es una unidad de procesamiento de gráficos de propósito general (620), GPGPU, la determinación de si el agente tiene la titularidad de una primera superlínea incluye leer una entrada para la primera superlínea desde una tabla de titularidad de superlíneas (632), SLOT, dentro de la memoria de la GPGPU (620), y en donde antes de que la GPGPU realice una escritura de datos en una línea de caché dentro de la primera memoria caché, determinar, en base a la SLOT (632), un estado de titularidad para una superlínea asociada a la línea de caché, difundir una monitorización de región para tomar posesión de la superlínea asociada a la línea de caché cuando la superlínea pertenece ahora a la GPGPU, y actualizar una entrada de SLOT (632) para la superlínea asociada a la línea de caché para registrar la titularidad de la superlínea; y
en donde, si el agente es una unidad de procesamiento central (602), CPU, antes de que se realice un acceso a una dirección virtual, la determinación de si el agente tiene la titularidad de una primera superlínea incluye leer una entrada para la primera superlínea desde una caché de tabla de directorios de superlíneas (612), SDTC, y, si falla el acceso a la SDTC (612), comprobar una tabla de directorios de superlíneas (642), SDT;
en donde la CPU (602) es parte de una pluralidad de CPU (602);
en donde la dirección de memoria virtual está asociada a un espacio de direcciones virtuales en una memoria de sistema (640), dicho espacio de direcciones virtuales compartido por las CPU (602) y la GPGPU (620), incluyendo además dicha memoria de sistema (640) la SDT (642);
en donde la SLOT (632) incluye una entrada para cada superlínea del conjunto de superlíneas que pertenecen a la GPGPU (620) y cada entrada de la SLOT (632) incluye una etiqueta de superlínea que se usa para identificar la superlínea a la que está asociada la entrada de SLOT (720), y un estado de protocolo de coherencia para la superlínea; en donde la SDT (642) indica la titularidad de superlínea de superlíneas almacenadas en la memoria de sistema, en donde una entrada de SDT (730) está compuesta por tres bits que se almacenan para cada superlínea en la memoria, en donde un bit compartido/exclusivo (732) se usa para indicar si la superlínea está en un estado compartido o en un estado exclusivo, y un bit de CPU (734) y un bit de GPU (736) indican si la titularidad reside dentro de una CPU o una GPU, y en donde la SDTC (612) incluye entradas que incluyen otra etiqueta de superlínea (742) para identificar una superlínea, datos almacenados en caché de una entrada de SDT y un campo LRU, y en donde la entrada de SDT (730) se indexa en función de una etiqueta de superlínea, y en donde la etiqueta de superlínea (742) almacenada en la entrada de SDTC (740) es la etiqueta de superlínea que indexa la entrada de SDT (730) para la que se almacenan datos en caché.
ES18160824T 2017-04-09 2018-03-08 Coherencia de grano grueso Active ES2948954T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/482,810 US10373285B2 (en) 2017-04-09 2017-04-09 Coarse grain coherency

Publications (1)

Publication Number Publication Date
ES2948954T3 true ES2948954T3 (es) 2023-09-22

Family

ID=63393277

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18160824T Active ES2948954T3 (es) 2017-04-09 2018-03-08 Coherencia de grano grueso

Country Status (5)

Country Link
US (4) US10373285B2 (es)
EP (1) EP3385847B1 (es)
CN (1) CN108765257A (es)
ES (1) ES2948954T3 (es)
PL (1) PL3385847T3 (es)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10373285B2 (en) 2017-04-09 2019-08-06 Intel Corporation Coarse grain coherency
US10606755B2 (en) 2017-06-30 2020-03-31 Intel Corporation Method and system for performing data movement operations with read snapshot and in place write update
US10452545B1 (en) * 2017-10-06 2019-10-22 Veritas Technologies Llc Systems and methods for maintaining cache coherency
US10599568B2 (en) * 2018-04-09 2020-03-24 Intel Corporation Management of coherent links and multi-level memory
US11055226B2 (en) 2018-06-29 2021-07-06 Intel Corporation Mitigation of cache-latency based side-channel attacks
US10795817B2 (en) * 2018-11-16 2020-10-06 Western Digital Technologies, Inc. Cache coherence for file system interfaces
WO2020103766A1 (en) * 2018-11-23 2020-05-28 Huawei Technologies Co., Ltd. Filter independent l1 mapping of convolution data into general purpose register
CN109656566B (zh) * 2018-12-14 2020-01-10 中科寒武纪科技股份有限公司 异构计算系统可执行文件获取方法、运行方法及相关产品
US11243883B2 (en) * 2019-05-24 2022-02-08 Texas Instruments Incorporated Cache coherence shared state suppression
US11947821B2 (en) * 2019-11-25 2024-04-02 Alibaba Group Holding Limited Methods and systems for managing an accelerator's primary storage unit
US11016913B1 (en) 2020-03-30 2021-05-25 Apple Inc. Inter cluster snoop latency reduction
CN111881078B (zh) * 2020-07-17 2022-04-19 上海芷锐电子科技有限公司 基于gpgpu芯片的多用户通用计算处理方法和系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5895489A (en) * 1991-10-16 1999-04-20 Intel Corporation Memory management system including an inclusion bit for maintaining cache coherency
US6891543B2 (en) 2002-05-08 2005-05-10 Intel Corporation Method and system for optimally sharing memory between a host processor and graphics processor
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7680987B1 (en) * 2006-03-29 2010-03-16 Emc Corporation Sub-page-granular cache coherency using shared virtual memory mechanism
US8451281B2 (en) * 2009-06-23 2013-05-28 Intel Corporation Shared virtual memory between a host and discrete graphics device in a computing system
US20120102273A1 (en) * 2009-06-29 2012-04-26 Jichuan Chang Memory agent to access memory blade as part of the cache coherency domain
US8285969B2 (en) * 2009-09-02 2012-10-09 International Business Machines Corporation Reducing broadcasts in multiprocessors
US9952977B2 (en) * 2009-09-25 2018-04-24 Nvidia Corporation Cache operations and policies for a multi-threaded client
US9128849B2 (en) * 2010-04-13 2015-09-08 Apple Inc. Coherent memory scheme for heterogeneous processors
US8937622B2 (en) * 2010-09-20 2015-01-20 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US8856456B2 (en) * 2011-06-09 2014-10-07 Apple Inc. Systems, methods, and devices for cache block coherence
US9218289B2 (en) * 2012-08-06 2015-12-22 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US20140108734A1 (en) * 2012-10-17 2014-04-17 Advanced Micro Devices, Inc. Method and apparatus for saving processor architectural state in cache hierarchy
US10310973B2 (en) * 2012-10-25 2019-06-04 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US8996781B2 (en) * 2012-11-06 2015-03-31 OCZ Storage Solutions Inc. Integrated storage/processing devices, systems and methods for performing big data analytics
US9119313B2 (en) * 2013-04-25 2015-08-25 Intel Corporation Package substrate with high density interconnect design to capture conductive features on embedded die
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US10073776B2 (en) * 2016-06-23 2018-09-11 Advanced Micro Device, Inc. Shadow tag memory to monitor state of cachelines at different cache level
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10373285B2 (en) 2017-04-09 2019-08-06 Intel Corporation Coarse grain coherency

Also Published As

Publication number Publication date
EP3385847B1 (en) 2023-04-12
CN108765257A (zh) 2018-11-06
PL3385847T3 (pl) 2023-07-31
US20200342564A1 (en) 2020-10-29
US20190304052A1 (en) 2019-10-03
EP3385847A1 (en) 2018-10-10
US20210272231A1 (en) 2021-09-02
US11436695B2 (en) 2022-09-06
US20180293693A1 (en) 2018-10-11
US10657618B2 (en) 2020-05-19
US10373285B2 (en) 2019-08-06
US10949945B2 (en) 2021-03-16

Similar Documents

Publication Publication Date Title
US10769078B2 (en) Apparatus and method for memory management in a graphics processing environment
ES2948954T3 (es) Coherencia de grano grueso
ES2929978T3 (es) Fichero de registro jerárquico para una unidad GPGPU
US10303594B2 (en) Guaranteed forward progress mechanism
US11537403B2 (en) Control flow mechanism for execution of graphics processor instructions using active channel packing
ES2924825T3 (es) Fallo de página y prioridad selectiva
US10522114B2 (en) Programmable controller and command cache for graphics processors
US11314654B2 (en) Cache optimization for graphics systems
US11675711B2 (en) Memory access compression using clear code for tile pixels
US10909037B2 (en) Optimizing memory address compression
US11508338B2 (en) Register spill/fill using shared local memory space
US10452549B2 (en) Method and apparatus for page table management
US10884932B2 (en) Independent and separate entity-based cache