ES2953885T3 - Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software - Google Patents

Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software Download PDF

Info

Publication number
ES2953885T3
ES2953885T3 ES20206209T ES20206209T ES2953885T3 ES 2953885 T3 ES2953885 T3 ES 2953885T3 ES 20206209 T ES20206209 T ES 20206209T ES 20206209 T ES20206209 T ES 20206209T ES 2953885 T3 ES2953885 T3 ES 2953885T3
Authority
ES
Spain
Prior art keywords
graphics
memory
processing
cache
error correction
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
ES20206209T
Other languages
English (en)
Inventor
Altug Koker
Abhishek R Appu
Kiran C Veernapu
Joydeep Ray
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 ES2953885T3 publication Critical patent/ES2953885T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • G06F11/1052Bypassing or disabling error detection or correction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Métodos y aparatos relacionados con técnicas para evitar la búsqueda de caché en frío. En un ejemplo, un aparato comprende lógica, que comprende al menos parcialmente lógica de hardware, para recibir metadatos de una aplicación, en donde los metadatos indican una o más operaciones de procesamiento que pueden acomodar un nivel predeterminado de errores de bits en operaciones de lectura de la memoria, determinar, a partir de los metadatos, datos de píxeles para los cuales es aceptable omitir el código de corrección de errores, y generar una o más sugerencias de omisión de código de corrección de errores para el acceso posterior a la memoria caché de los datos de píxeles para los cuales es aceptable omitir el código de corrección de errores, y transmitir una o más correcciones de errores sugerencias de omisión de código para una canalización de procesamiento de gráficos. También se divulgan y reivindican otras realizaciones. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software
CAMPO TÉCNICO
La presente divulgación se refiere, en general, el campo de la electrónica. Más particularmente, algunas realizaciones se refieren a técnicas para omitir el procesamiento de código de corrección de errores (ECC) basándose en una indicación de software.
ANTECEDENTES
A medida que mejora la tecnología de fabricación de circuitos integrados, los fabricantes pueden integrar funciones adicionales en un solo sustrato de silicio. A medida que aumenta el número de funciones, también lo hace el número de componentes en un solo chip de circuito integrado (IC). Los componentes adicionales añaden conmutación de señal adicional y, a su vez, generan más calor y/o consumen más energía. El calor adicional puede dañar los componentes del chip, por ejemplo, por expansión térmica. Además, el consumo de energía adicional puede limitar las ubicaciones de uso y/o los modelos de uso para dichos dispositivos, por ejemplo, especialmente para los dispositivos que dependen de la energía de la batería para funcionar. Por lo tanto, la gestión eficiente de la energía puede tener un impacto directo en la eficiencia, la longevidad y los modelos de uso de los dispositivos electrónicos.
Además, el procesamiento de datos de gráficos paralelo actual incluye sistemas y métodos desarrollados para realizar operaciones específicas en datos de gráficos, tales como, por ejemplo, interpolación lineal, teselación, rasterización, mapeo de texturas, prueba de profundidad, etc. De manera tradicional, los procesadores de gráficos usan unidades computacionales de función fija para procesar datos de gráficos; sin embargo, más recientemente, se han hecho programables porciones de los procesadores de gráficos, lo que posibilita que tales procesadores soporten una gama más amplia de operaciones para procesar datos de vértices y de fragmentos.
Para aumentar adicionalmente el rendimiento, los procesadores de gráficos habitualmente implementan técnicas de procesamiento, tales como encauzamiento en 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 de SIMT, grupos de hilos paralelos intentan ejecutar conjuntamente instrucciones de programa de manera sincrónica tan a menudo como sea posible para aumentar la eficiencia 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 2013/262958 A1 divulga un procesador de gráficos que omite el procesamiento de ECC para datos. Se divulgan las siguientes tres posibilidades para omitir el procesamiento de ECC: 1. Una memoria comprende un rango de direcciones que se etiqueta como área libre de ECC. Para todos los accesos a la memoria (escritura, lectura,...) que tengan direcciones en el área libre de ECC, se elude el procesamiento de ECC. 2. Cada línea de caché tiene una bandera (por ejemplo, en una tabla de mapa de memoria) que indica si para esta línea de caché se debe procesar u omitir el procesamiento de ECC. 3. El procesamiento de ECC se omite para todos los datos de píxeles.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Para que la forma en que las características citadas anteriormente de las presentes realizaciones puedan entenderse en detalle, se puede obtener una descripción más particular de las realizaciones, brevemente resumida anteriormente, con referencia a las realizaciones, algunas de las cuales se ilustran en los dibujos adjuntos. Sin embargo, se ha de observar que los dibujos adjuntos ilustran únicamente realizaciones típicas y, por lo tanto, no han de considerarse limitantes de su alcance.
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.
Las Figuras 2A-2D ilustran 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 realizaciones.
Las Figuras 4A-4F ilustran 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 ilustra una canalización de procesamiento de gráficos, de acuerdo con una realización.
Las Figuras 6-7A son diagramas de flujo que ilustran operaciones en un método para omitir el procesamiento de código de corrección de errores (ECC) basándose en una indicación de software, de acuerdo con realizaciones.
La Figura 7B es un diagrama de bloques esquemático de flujos de datos en un método para omitir el procesamiento de código de corrección de errores (ECC) basándose en una indicación de software, de acuerdo con realizaciones.
La Figura 8 ilustra un diagrama de bloques de un regulador de conmutación de acuerdo con una realización. La Figura 9 es un diagrama de bloques de un sistema que incluye un multiprocesador de transmisión por flujo continuo, de acuerdo con una o más realizaciones.
La Figura 10 ilustra un diagrama de bloques de un sistema de procesamiento paralelo, de acuerdo con una realización.
La Figura 11 es un diagrama de bloques de un sistema de procesamiento, de acuerdo con una realización. La Figura 12 es un diagrama de bloques de un procesador de acuerdo con una realización.
La Figura 13 es un diagrama de bloques de un procesador de gráficos, de acuerdo con una realización. La Figura 14 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 15 es un diagrama de bloques de un procesador de gráficos proporcionado por una realización adicional.
La Figura 16 ilustra una lógica de ejecución de hilos que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones.
La Figura 17 es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos de acuerdo con algunas realizaciones.
La Figura 18 es un diagrama de bloques de un procesador de gráficos de acuerdo con otra realización. Las Figuras 19A-19B ilustran un formato de comando de procesador de gráficos y una secuencia de comandos, de acuerdo con algunas realizaciones.
La Figura 20 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos de acuerdo con algunas realizaciones.
La Figura 21 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP, de acuerdo con una realización.
La Figura 22 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo, de acuerdo con una realización.
La Figura 23 es un diagrama de bloques que ilustra un procesador de gráficos ilustrativo adicional.
La Figura 24 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
La invención está definida por las reivindicaciones independientes adjuntas.
En la siguiente descripción, se exponen numerosos detalles específicos para proporcionar un entendimiento completo de diversas realizaciones. Sin embargo, se pueden poner en práctica diversas realizaciones sin los detalles específicos. En otros casos, los métodos, procedimientos, componentes y circuitos bien conocidos no se han descrito en detalle para no oscurecer las realizaciones particulares. Además, diversos aspectos de las realizaciones se pueden realizar usando diversos medios, tales como circuitos semiconductores integrados ("hardware"), instrucciones legibles por ordenador organizadas en uno o más programas ("software") o alguna combinación de hardware y software. A los efectos de esta divulgación, la referencia a "lógica" significará hardware, software, firmware o alguna combinación de los mismos.
Algunas realizaciones analizadas en el presente documento pueden aplicarse en cualquier procesador (tal como GPCPU, CPU, GPU, etc.), controladores de gráficos, etc. También se divulgan y reivindican otras realizaciones. Además, algunas realizaciones se pueden aplicar en sistemas informáticos que incluyen uno o más procesadores (por ejemplo, con uno o más núcleos de procesador), tales como los que se analizan en el presente documento, incluidos, por ejemplo, dispositivos informáticos móviles, por ejemplo, un teléfono inteligente, tableta, UMPC (ordenador personal ultramóvil), ordenador portátil, dispositivo informático Ultrabook™, dispositivos ponibles (tales como un reloj inteligente o gafas inteligentes), etc.
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, a continuación, usa circuitería/lógica especializada para el procesamiento de manera eficaz de estos comandos/instrucciones.
En la siguiente descripción, se exponen numerosos detalles específicos para proporcionar un entendimiento más minucioso. 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 otras instancias, no se han descrito características bien conocidas para evitar oscurecer los detalles de las presentes realizaciones.
Vista 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 procesador o procesadores 102 y una memoria de sistema 104 que se comunica mediante 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 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 permitir que el sistema informático 100 reciba una entrada desde uno o más dispositivos de entrada 108. Adicionalmente, el concentrador de E/S 107 puede habilitar a un controlador de visualización, que puede incluirse en los uno o más procesadores 102, para que proporcione salidas a uno o más dispositivos de visualización I I OA. En una realización, los uno o más dispositivos de visualización 110A acoplados con el concentrador de E/S 107 pueden incluir un dispositivo de visualización local, interno o embebido.
En una realización, el subsistema de procesamiento 101 incluye uno o más procesadores paralelos 112 acoplados al concentrador de memoria 105 mediante un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser uno de cualquier número de tecnologías o protocolos de enlace de comunicación basados en normas, tales como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones o tejido de comunicaciones específico de distribuidor. En una realización, los uno o más procesadores paralelos 112 forman un sistema de procesamiento paralelo o vectorial de enfoque computacional que incluye un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tal 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 de los uno o más o dispositivos de visualización 110A acoplados mediante el concentrador de E/S 107. Los uno o más procesadores paralelos 112 pueden incluir también un controlador de visualización y una interfaz de visualización (no mostrados) para habilitar una conexión directa a uno o más dispositivos de visualización IIOB.
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 habilitar conexiones entre el concentrador de E/S 107 y otros componentes, tales como un adaptador de red 118 y/o un adaptador de red inalámbrico 119 que pueden integrarse en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivos de complemento 120. El adaptador de red 118 puede ser un adaptador de Ethernet u otro adaptador de red cableado. El adaptador de red inalámbrico 119 puede incluir uno o más de un dispositivo de red de Wi-Fi, de Bluetooth, de comunicación de campo cercano (NFC) o de otro tipo que incluya una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes no explícitamente mostrados, incluyendo USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo, y similares, también puede conectarse 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, incluyendo el número y disposición de puentes, el número de procesadores 102, y el número de procesadores paralelos 112, puede modificarse como 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, el procesador o procesadores paralelos 112 están conectados al concentrador de E/S 107 o directamente a uno 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 único chip, Algunas realizaciones pueden incluir dos o más conjuntos de procesador o procesadores 102 adjuntos mediante múltiples zócalos, que pueden acoplarse con dos o más instancias del procesador o procesadores paralelos 112,
Algunos de los componentes particulares mostrados en el presente documento son opcionales y pueden no estar incluidos en todas las implementaciones del sistema informático 100, Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos de complemento, o pueden eliminarse algunos componentes, Adicionalmente, algunas arquitecturas pueden usar diferente terminología para componentes similares a aquellos ilustrados en la Figura 1, Por ejemplo, el concentrador de memoria 105 puede denominarse un puente norte en algunas arquitecturas, mientras que el concentrador de E/S 107 puede denominarse un puente sur,
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, tales como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o matrices de puertas programables en campo (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, que incluyen 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 se conecta con una interfaz de anfitrión 206 y una barra transversal de memoria 216, donde la interfaz de anfitrión 206 recibe comandos dirigidos a realizar las 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 comando mediante la unidad de E/S 204, la interfaz de anfitrión 206 puede dirigir operaciones de trabajo para realizar aquellos comandos a un extremo delantero 208, En una realización, el extremo delantero 208 se acopla con un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupación de procesamiento 212, En una realización, el planificador 210 garantiza que la matriz de agrupación de procesamiento 212 está configurada apropiadamente y en un estado válido antes de que se distribuyan las tareas a las agrupaciones de procesamiento de la matriz de agrupación de procesamiento 212,
La matriz de agrupación de procesamiento 212 puede incluir hasta "N" núcleos de procesamiento (por ejemplo, la agrupación 214A, la agrupación 214B a la agrupación 214N), Cada agrupación 214A-214N de la matriz de agrupación de procesamiento 212 puede ejecutar un gran número de hilos concurrentes, El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupación 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 surge para cada tipo de programa o cómputo, La planificación puede ser manejada dinámicamente por el planificador 210, o puede estar asistida, en parte, por una lógica de compilador durante la compilación de lógica de programa configurada para su ejecución por la matriz de agrupaciones de procesamiento 212. En una realización, pueden asignarse diferentes agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cómputos.
La matriz de agrupaciones de procesamiento 212 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. En una realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de cómputo paralelo de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, incluyendo filtración de datos de vídeo y/o de audio, realizar operaciones de modelado, incluyendo operaciones de física y realizar transformaciones de datos.
En una realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos paralelo. 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 una lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, incluyendo, pero sin limitación, una lógica de muestreo de textura para realizar operaciones de textura, así como una 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 sombreadores 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 pueden almacenarse en memoria en chip (por ejemplo, memoria de procesador paralelo 222) durante el procesamiento y, a continuación, escribirse de vuelta en la memoria de sistema.
En una realización, cuando se usa la unidad de procesamiento paralelo 202 para realizar el procesamiento de gráficos, el planificador 210 puede estar configurado para dividir la carga de trabajo de procesamiento en tareas de tamaño aproximadamente igual, para posibilitar mejor la distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 214A-214N de la matriz de agrupación 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 la operación, la matriz de agrupación de procesamiento 212 puede recibir tareas de procesamiento para que se ejecuten mediante el planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo delantero 208. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos que van a procesarse, por ejemplo, datos de superficie (parche), datos de primitivas, datos de vértices y/o datos de píxeles, así como parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa ha de ejecutarse). El planificador 210 puede estar configurado para extraer los índices que corresponden a las tareas o puede recibir los índices desde el extremo delantero 208. El extremo delantero 208 puede estar configurado para garantizar que la matriz de agrupación de procesamiento 212 está configurada en un estado válido antes de que se inicie la carga de trabajo especificada por las memorias intermedias de comando de entrada (por ejemplo, memorias intermedias de lote, memorias intermedias de inserción, etc.).
Cada una de la una o más instancias de la unidad de procesamiento paralelo 202 puede acoplarse con 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, la unidad de subdivisión 220A, la unidad de subdivisión 220B a la unidad de subdivisión 220N) que cada una puede acoplarse a una porción (por ejemplo, la unidad de memoria) de la memoria de procesador paralelo 222. En una implementación, el número de unidades de subdivisión 220A-220N está configurado para que sea igual al número de unidades de memoria, de manera que una primera unidad de subdivisión 220A tiene una correspondiente primera unidad de memoria 224A, una segunda unidad de subdivisión 220B tiene una correspondiente unidad de memoria 224B y una unidad de subdivisión de orden N 220N tiene una correspondiente unidad de memoria de orden N 224N. 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 puede seleccionarse de uno de diversos diseños convencionales. Los objetivos de representación, tales como las memorias intermedias de tramas 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 agrupación de procesamiento 212 puede procesar datos que se escribirán en cualquiera de las unidades de memoria 224A-224N dentro de la memoria de procesador paralelo 222. La barra transversal de memoria 216 puede estar configurada para transferir la salida de cada agrupación 214A-214N en cualquier unidad de subdivisión 220A-220N o en otra agrupación 214A-214N, que puede realizar operaciones de procesamiento adicionales en la salida. 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, pueden proporcionarse múltiples instancias de la unidad de procesamiento paralelo 202 en una única tarjeta de complemento, o pueden interconectarse múltiples tarjetas de complemento. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden estar configuradas para inter-operar 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 el procesador paralelo 200 pueden implementarse en una diversidad de configuraciones y factores de forma, incluyendo, pero sin limitación, ordenadores personales de sobremesa, 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 tramas 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 tramas 225 para su procesamiento. Pueden enviarse también las actualizaciones sucias a la memoria intermedia de tramas mediante la interfaz de memoria intermedia de tramas 225 para su procesamiento oportunista. En una realización, la interfaz de memoria intermedia de tramas 225 interconecta con una de las unidades de memoria en 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 las 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. La ROP 226 a continuación emite los datos de gráficos procesados que se almacenan en la memoria de gráficos. En algunas realizaciones, la ROP 226 incluye una lógica de compresión para comprimir datos de z o de color que se escriben en la memoria y descomprimir datos de z o de color que se leen desde la memoria. En algunas realizaciones, la ROP 226 está incluida dentro de cada agrupación de procesamiento (por ejemplo, la agrupación 214A-214N de la Figura 2) en lugar de dentro de la unidad de subdivisión 220. En tal realización, las solicitudes de lectura y escritura para datos de píxeles se transmiten a través de la barra transversal de memoria 216 en lugar de los datos de fragmento de píxel. Los datos de gráficos procesados pueden visualizarse en un dispositivo de visualización, tal como uno del uno o más dispositivo o dispositivos de visualización 110 de la Figura 1, encaminarse para su procesamiento adicional por el procesador o 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 emisión de instrucciones de única instrucción de múltiples datos (SIMD) para soportar la ejecución paralela de un 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.
La operación de la agrupación de procesamiento 214 puede controlarse mediante un gestor de canalizaciones 232 que distribuye las tareas de procesamiento a procesadores paralelos de SIMT. El gestor de canalizaciones 232 recibe instrucciones desde el planificador 210 de la Figura 2 y gestiona la ejecución de esas 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 de SIMT. Sin embargo, pueden incluirse diversos tipos de procesadores paralelos de SIMT de arquitecturas diferentes dentro de la agrupación de procesamiento 214. Pueden incluirse una o más instancias del multiprocesador de gráficos 234 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 canalizaciones 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 carga-almacén, etc.). La lógica de ejecución funcional puede configurarse de una manera canalizada en la que pueden emitirse instrucciones nuevas antes de que se hayan completado instrucciones previas. La lógica de ejecución funcional soporta una diversidad de operaciones que incluyen aritmética de números enteros y de coma flotante, operaciones de comparación, operaciones booleanas, desplazamiento de bits y del cálculo de diversas funciones algebraicas. En una realización, puede aprovecharse el mismo hardware funcional-unitario para realizar diferentes operaciones y puede estar presente cualquier combinación de unidades funcionales.
Las instrucciones transmitidas a la agrupación de procesamiento 214 constituyen un hilo. Un conjunto de hilos que se ejecutan a través del conjunto de motores de procesamiento paralelo es un grupo de hilos. Un grupo de hilos ejecuta el mismo programa en diferentes datos de entrada. Cada hilo dentro de un grupo de hilos puede asignarse 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. Cuando un grupo de hilos incluye menos hilos que el número de motores de procesamiento, uno o más de los motores de procesamiento pueden encontrarse inactivos durante los ciclos en los que se está procesando ese grupo de hilos. Un grupo de hilos puede incluir también más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando el grupo de hilos incluye más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, puede realizarse el procesamiento a través de ciclos de reloj consecutivos. En una realización, pueden ejecutarse múltiples grupos de hilos concurrentemente en un multiprocesador de gráficos 234.
En una realización, el multiprocesador de gráficos 234 incluye una memoria 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 puede acceder también a memoria global fuera de chip, que puede incluir uno 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 en 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 localidad de acceso de datos de superficie para permitir una intercalación de solicitud eficaz entre unidades de subdivisión. El índice de línea de caché puede usarse para determinar si una solicitud para una línea de caché es un acierto o un fallo.
En aplicaciones de gráficos e informáticas, puede configurarse una agrupación de procesamiento 214 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 muestra de textura, leer datos de textura y filtrar Ios 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, aunque únicamente se muestra una agrupación de procesamiento 214, la unidad de procesamiento paralelo, como se describe 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 estar configurada para operar independientemente de 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 tal realización, el multiprocesador de gráficos 234 se acopla con el gestor de canalizaciones 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 archivo 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/almacén 266 están acoplados con la memoria caché 272 y la memoria compartida 270 mediante 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 canalizaciones 232, Las instrucciones se almacenan en caché en la caché de instrucciones 252 y se despachan para su ejecución por la unidad de instrucciones 254, La unidad de instrucciones 254 puede despachar instrucciones como grupos de hilos (por ejemplo, envolventes), con cada hilo del grupo de hilos 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 puede usarse para traducir direcciones en el espacio de direcciones unificado en una dirección de memoria distinta que puede a la que pueden acceder las unidades de carga/almacén 266,
El archivo de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 324, El archivo 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 archivo de registro 258 se divide entre cada una de las unidades funcionales de manera que cada unidad funcional está asignada a una porción especializada del archivo de registro 258, En una realización, el archivo 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 pueden incluir, cada uno, 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 puede incluir también lógica de función fija o especial,
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 archivo 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 archivo de registro 258, El archivo de registro 258 puede operar a la misma frecuencia que los núcleos de GPGPU 262, por lo tanto, la transferencia de datos entre los núcleos de GPGPU 262 y el archivo de registro 258 es de muy baja latencia, La memoria compartida 270 puede usarse para posibilitar la comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234, 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. La memoria compartida 270 puede usarse también como un programa gestionado almacenado en caché. Los hilos que se ejecutan en los núcleos de GPGPU 262 pueden almacenar datos mediante programación dentro de la memoria compartida además de los datos almacenados automáticamente en caché que se almacenan dentro de la memoria caché 272.
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 configurarse como un multiprocesador de transmisión 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 , el archivo de registro 334A-334B y la unidad o unidades de texturas 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de unidades de ejecución de cómputo o de gráficos (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/almacenamiento 340A-340B. En una realización, las unidades de recurso de ejecución tienen una caché de instrucciones común 330, memoria caché de textura y/o de datos 342 y 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, archivos de registro, núcleos de GPGPU y unidades de cargaalmacén, como se ilustra en la Figura 2D y en 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 apropiadamente, que incluye, sin limitación, uno o más procesadores de aplicación móvil, una o más unidades de procesamiento central (CPU) de sobremesa 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 alejarse 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, a continuación, usa circuitería/lógica especializada para el procesamiento de manera eficaz de 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 protocolos/enlaces o diferentes que aquellos usados para enlaces de alta velocidad 440-443. De manera similar, dos o más de Ios procesadores de múltiples núcleos 405-406 pueden conectarse a través del enlace de alta velocidad 433 que pueden ser buses de múltiples procesadores simétricos (SMP) que operan a 20 GB/s, 30 GB/s, 120 GB/s o mayor. 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, mediante las 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 las 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 no como 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) (que incluyen DRAM apiladas), SDRAM DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6), o Memoria de Ancho de Banda Alto (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 las diversas GPU 410-413 pueden acoplarse físicamente a una memoria 401-402, 420-423 particular, respectivamente, puede implementarse una arquitectura de memoria unificada en la que el mismo espacio de direcciones de sistema virtual (también denominado espacio "de direcciones eficaces") está distribuido 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 ilustrado 407 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, descodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y de nivel 2 (L2). Además, puede incluirse una o más cachés compartidas 426 en la jerarquía de almacenamiento en caché y compartirse 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 está compartida 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 en la memoria de sistema 441 mediante la comunicación inter-núcleo a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener una lógica/circuitería de coherencia de caché asociada con 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 se acopla comunicativamente al 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 par 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 servicios de gestión de caché, de acceso de memoria, de gestión de contexto y de gestión de interrupciones en beneficio 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 cambios de contexto (por ejemplo, cuando se graba un primer hilo y se almacena un segundo hilo de modo que el segundo hilo puede ejecutarse por un motor de procesamiento de gráficos). Por ejemplo, en un cambio de contexto, el circuito de gestión de contexto 448 puede almacenar valores de registro actuales en una región designada en memoria (por ejemplo, identificada por un puntero de contexto). A continuación, puede restablecer los valores de registro cuando se vuelve al contexto. En una realización, un circuito de gestión de interrupciones 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 acelerador de gráficos 446 puede estar especializado a una única aplicación ejecutada en el procesador 407 o puede compartirse 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 pueden subdividirse en "cortes" que se asignan a diferentes VM y/o aplicaciones basándose en los requisitos de procesamiento y las propiedades asociadas con las VM y/o las 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.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se mapean explícitamente al espacio de direcciones real observado por el procesador de anfitrión 407, cualquier procesador de anfitrión puede dirigir 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 se procesan 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 (incluyendo DRAM apiladas), memoria de 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 las descritas con respecto a la Figura 4B, pero potencialmente a un caudal superior dada su proximidad estrecha 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 dedicado (sin virtualización de módulo de aceleración de gráficos) y modelos de programación compartida (con virtualización). Este último puede incluir modelos de programación que son controlados por el circuito de integración de acelerador 436 y modelos de programación que son 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 única aplicación puede encauzar otras solicitudes de aplicación a 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 dedicado, los motores de procesamiento de gráficos 431-432, N, pueden estar compartidos por múltiples subdivisiones de aplicación/V M. Los modelos compartidos requieren que un hipervisor de sistema virtualice los motores de procesamiento de gráficos 431-432, N para permitir el acceso de cada sistema operativo. Para sistemas de subdivisión única sin un hipervisor, los motores de procesamiento de gráficos 431-432, N son propiedad del 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.
Para el 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 son direccionables usando las técnicas de traducción de dirección efectiva a dirección real 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, llamando al software de sistema para añadir el elemento de proceso a la lista vinculada de elementos de proceso). Los 16 bits inferiores del manejador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista vinculada de elementos de proceso.
La Figura 4D ilustra un corte de integración del 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. El espacio de direcciones efectivo de la 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 desde las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado de proceso para la correspondiente aplicación 480. 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 último caso, el WD 484 es un puntero a la cola de solicitudes de trabajo 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 compartirse por todos o un subconjunto de los procesos en el 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 dedicado es específico de la implementación. En este modelo, un único proceso posee el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos individual 431. Debido a que el módulo de aceleración de gráficos 446 es de propiedad de un único proceso, el hipervisor inicializa el circuito de integración de acelerador 436 para la subdivisión de propiedad y el sistema operativo inicializa el circuito de integración de acelerador 436 para el proceso de propiedad en el momento cuando 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 los registros 445 y usarse por la MMU 439, el circuito de gestión de interrupciones 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, se traduce una dirección efectiva 493 generada por un motor de procesamiento de gráficos 431 -432, N a una dirección real por 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 Ios 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 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 446 y/o de un motor de procesamiento de gráficos 431-432, N particular. Este contiene toda la información que requiere un motor de procesamiento de gráficos 431-432, N para hacer su trabajo, o puede ser un puntero a una ubicación de memoria en la que la aplicación ha establecido una cola de comandos de trabajo que hay que completar.
La Figura 4E ilustra detalles adicionales para una realización de un modelo compartido. Esta realización incluye un espacio de direcciones real del hipervisor 498 en el que se almacena una lista de elementos de proceso 499. El espacio de direcciones real de hipervisor 498 es accesible mediante 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 compartida permiten que todos o un subconjunto de procesos de todas o un subconjunto de las subdivisiones en el 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 subdivisiones: compartido en cortes de tiempo y compartido dirigido a gráficos.
En este modelo, el hipervisor de sistema 496 tiene propiedad del módulo de aceleración de gráficos 446 y pone a disposición su función a todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte una virtualización por el hipervisor de sistema 496, el módulo de aceleración de gráficos 446 puede satisfacer 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) Se garantiza una solicitud de trabajo de la aplicación por el módulo de aceleración de gráficos 446 para completar en una cantidad especificada de tiempo, que incluye cualquier fallo de traducción, o el módulo de aceleración de gráficos 446 proporciona la capacidad de anticiparse al 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 haga una llamada de sistema a un 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 de á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 de sistema. El WD se formatea específicamente para el módulo de aceleración de gráficos 446 y puede estar en forma de un comando de módulo de aceleración de gráficos 446, un puntero de dirección efectiva a una estructura definida por el usuario, un puntero de dirección efectiva a una cola de comandos o cualquier otra estructura de datos para describir el trabajo que va a hacerse por 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 de registro de anulación de máscara de autoridad (AMOR) actual antes de colocar el AMR en el 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 de la aplicación 482 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 estar fijada en la memoria de sistema.
Después de recibir la llamada de sistema, el sistema operativo 495 puede verificar que se ha registrado la aplicación 480 y que se le ha dado 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 de SO a hipervisor
1
2
3
4
5
6
7
Figure imgf000015_0001
Después de recibir la llamada del hipervisor, el hipervisor 496 verifica que se ha registrado el sistema operativo 495 y se le ha dado la autoridad para usar el módulo de aceleración de gráficos 446. El hipervisor 496, a continuación, pone el elemento de proceso 483 en la lista de elementos de proceso vinculados para el correspondiente tipo de módulo de aceleración de gráficos 446. 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 del 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/efeotiva 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 virtual/efectivo está asignada a la memoria del procesador 401, una segunda porción a la memoria del segundo procesador 402, una tercera porción a la memoria de GPU 420 y así sucesivamente. El espacio de memoria virtual/efectivo total (en ocasiones denominado el espacio de direcciones efectivo) está distribuido de esta manera 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 e implementa técnicas de desvío que indican las memorias físicas en las que deben almacenarse ciertos 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 correlacionados con memoria (MMIO) que son, todos ellos, ineficientes en relación con los accesos de 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 del anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). En una realización, las solicitudes del procesador 405 que encuentran la página solicitada en el desvío del 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 realice una transición a un desvío de procesador de anfitrión si no está usando 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 conceder, o no, acceso de manera inmediata, 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 con desvío de GPU son aquellas que son requeridas por la GPU, pero no por el procesador de anfitrión 405, y viceversa.
Canalización de procesamiento de gráficos
La Figura 5 ilustra una canalización de procesamiento de gráficos 500, de acuerdo con 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 incluido dentro de los subsistemas de procesamiento paralelo como se describe en el presente documento, tal como el procesador paralelo 200 de la Figura 2, que, en una realización, es una variante del procesador o 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 control de proceso 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 fragmentos/píxeles 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 del rasterizador 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). La canalización de procesamiento de gráficos 500 puede implementarse también usando unidades de procesamiento especializadas para una o más funciones. En una realización, puede realizarse una o más porciones de la canalización de procesamiento de gráficos 500 mediante lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, la CPU). En una realización, una o más porciones de la canalización de procesamiento de gráficos 500 pueden acceder a una memoria en chip (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2) mediante 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 y primitivas. El ensamblador de datos 502, a continuación, emite los datos de vértices, que incluyen 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 ejecuta programas del sombreador de vértices, datos de vértices de iluminación y transformación como se especifica por los programas del sombreador de vértices. La unidad de procesamiento de vértices 504 lee datos que se almacenan en caché, en memoria local o de sistema para su uso al procesar los datos de vértice y puede estar programada para transformar los datos de vértice de una representación de coordenadas basada en objeto a un espacio de coordenadas del espacio mundial o un espacio de coordenadas de dispositivo normalizado.
Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértices desde la unidad de procesamiento de vértices 50. El ensamblador de primitivas 506 lee atributos de vértices almacenados según sea necesario y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de control de teselación 508. Las primitivas de gráficos incluyen triángulos, segmentos de línea, puntos, parches y así sucesivamente, según sea soportado por diversas 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. Los puntos de control se transforman de una representación de entrada a partir del parche (por ejemplo, las bases del parche) a una representación que es adecuada para su uso en una evaluación superficial por la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también puede computar 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 opera en coordenadas parametrizadas del parche subdividido para generar una representación superficial y atributos de vértices para cada vértice asociado con 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 ejecuta programas sombreadores de geometría para transformar primitivas de gráficos recibidas desde el ensamblador de primitivas 514 como se especifica por los programas sombreadores de geometría. En una realización, la unidad de procesamiento de geometría 516 está programada para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
En algunas realizaciones, la unidad de procesamiento de geometría 516 puede añadir o borrar elementos en el flujo de geometría. La unidad de procesamiento de geometría 516 emite los parámetros y vértices que especifican primitivas de gráficos nuevas al ensamblador de primitivas 518. El ensamblador de primitivas 518 recibe los parámetros y vértices desde la unidad de procesamiento de geometría 516 y construye primitivas de gráficos para su procesamiento por una unidad de escalado, selección y recorte de ventana gráfica 520. La unidad de procesamiento de geometría 516 lee datos que están almacenados en la memoria de procesador paralelo o en la memoria de sistema para su uso en el procesamiento de los datos de geometría. La unidad de escalado, selección y recorte de ventana gráfica 520 realiza el recorte, la selección y el ajuste a escala de la ventana gráfica y emite primitivas de gráficos procesadas a un rasterizador 522.
El rasterizador 522 puede realizar optimizaciones de selección de profundidad y otras basadas en profundidad. El rasterizador 522 también realiza una conversión de exploración sobre las nuevas primitivas de gráficos para generar fragmentos y emitir esos fragmentos y datos de cobertura asociados a la unidad de procesamiento de fragmentos/píxeles 524. 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. Transformando, la unidad de procesamiento de fragmentos/píxeles 524, fragmentos o píxeles recibidos desde el rasterizador 522, según lo especificado 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 que incluyen, pero sin limitación, correlación de textura, sombreado, mezcla, corrección de textura y corrección de perspectiva para producir fragmentos o píxeles sombreados que se emiten a una unidad de operaciones de rasterización 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer datos que se almacenan o bien en la memoria de procesador paralelo o bien en la memoria de sistema para su uso cuando se procesan los datos de fragmento. Pueden configurarse programas sombreadores de fragmentos o de píxeles para sombrear con granularidades de muestra, de píxel, de tesela u otras dependiendo de las tasas de muestreo configuradas para las unidades de procesamiento.
La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de rasterización que incluyen, pero sin limitación estarcido, prueba z, mezcla y similares, y emite datos de píxel como datos de gráficos procesados que hay que almacenar en una memoria de gráficos (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2, y/o la memoria de sistema 104 como en la Figura 1, para visualizarse en los uno o más dispositivos de visualización 110 o para su procesamiento adicional por uno de los uno o más procesadores 102 o procesador 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.
Muchos sistemas de procesamiento existentes, tales como, por ejemplo, los sistemas de gráficos, implementan el procesamiento de código de corrección de errores (ECC) para cada transacción en la memoria caché, incluyendo caché L3, para proporcionar datos sin errores. El procesamiento de ECC consume recursos computacionales y recursos de energía significativos.
La materia objeto descrita en el presente documento aborda estos y otros problemas al proporcionar técnicas para omitir el procesamiento de ECC para algunas operaciones de acceso a la memoria caché. Por ejemplo, algunas aplicaciones, por ejemplo, muestreo de textura o coloración, solo se requieren datos de textura/color rojo, verde, azul, alfa (RGBA). En tales aplicaciones, puede ser aceptable tener errores de bits menores en los valores de RGBA recuperados de la caché, ya que los errores menores no deterioran la calidad de la imagen más allá de límites aceptables. Como se describe en el presente documento, en algunos ejemplos, una aplicación puede pasar información que indica qué conjuntos de datos pueden tolerar errores menores en los datos recuperados de la caché. Los datos pueden usarse para proporcionar indicaciones a un controlador tal como, por ejemplo, un controlador de caché en un sistema de procesamiento de gráficos para indicar si una operación de acceso a la caché en particular puede omitir el procesamiento de ECC.
Las técnicas descritas en el presente documento abordan estos y otros problemas al permitir que uno o más controladores en un sistema de procesamiento, tal como un sistema de procesamiento gráfico, reciban metadatos de una aplicación, en donde los metadatos indican una o más operaciones de procesamiento que pueden adaptarse a un nivel predeterminado de errores de bits en operaciones de lectura desde una memoria. Los controladores pueden determinar, a partir de los metadatos, los datos de píxeles para los que es aceptable la omisión del código de corrección de errores y generar una o más indicaciones de omisión del código de corrección de errores para el posterior acceso de caché a los datos de píxeles para los que es aceptable la omisión del código de corrección de errores. Las una o más indicaciones de omisión de código de corrección de errores se pueden transmitir a una canalización de procesamiento de gráficos.
La canalización de procesamiento de gráficos puede los uno o más códigos de corrección de errores omitan las indicaciones y utilicen las indicaciones para determinar si se debe omitir una lógica de código de corrección de errores cuando la indicación de omitir el código de corrección de errores indica que la omisión de la lógica del código de corrección de errores es aceptable para los datos de procesamiento de gráficos recuperados de la memoria caché.
Las Figuras 6-7 son diagramas de flujo que ilustran operaciones en un método para omitir el procesamiento de código de corrección de errores (ECC) basándose en una indicación de software, de acuerdo con realizaciones. En algunos ejemplos, las operaciones representadas en las Figuras 6-7 pueden implementarse como lógica ejecutable en uno o más controladores. En diversos ejemplos, la lógica puede implementarse como Instrucciones lógicas almacenadas en una memoria y ejecutables en un procesador (es decir, software). En otros ejemplos, la lógica puede reducirse a circuitos programables tales como una matriz de puertas programables en campo (FPGA) o reducirse a circuitería fija en hardware, o combinaciones de los mismos.
Haciendo referencia a las Figuras 6-7 en la operación 610, los metadatos de las aplicaciones se reciben en un controlador, por ejemplo, en un procesador que ejecuta un controlador de gráficos en modo de usuario. En la operación 615, el controlador determina, a partir de los metadatos, si hay alguno de los datos de píxeles asociados con los gráficos para la aplicación para los que es aceptable una omisión del código de corrección de errores (ECC). Por ejemplo, para aplicaciones como el muestreo de texturas o la coloración que solo leen datos de textura/color de RGBA, pueden tolerar cierto grado de error en los valores de RGBA leídos desde la caché, ya que no deteriorará la calidad de la imagen a un nivel inaceptable.
En la operación 620, el controlador genera una o más indicaciones de omisión del código de corrección de errores (ECC) para el posterior acceso a la memoria caché. En algunos ejemplos, las indicación de omisión del código de corrección de errores (ECC) pueden identificar ubicaciones de caché específicas asociadas con los datos. En otros ejemplos, las indicaciones de omisión del código de corrección de errores (ECC) pueden identificar operaciones de procesamiento de gráficos (por ejemplo, muestreo o coloración de texturas) para las cuales la omisión del código de corrección de errores (ECC) es aceptable. En la operación 625, se transmiten las una o más indicaciones de omisión del código de corrección de errores (ECC) a una canalización de procesamiento de gráficos.
En la Figura 7A se representa un ejemplo de operaciones para usar indicaciones de código de corrección de errores (ECC) para omitir el procesamiento del código de corrección de errores (ECC). Haciendo referencia a las Figuras 7A-7B, en la operación 710 se recibe una trama en la canalización de procesamiento de gráficos para su procesamiento. En la operación 715, la canalización de procesamiento de gráficos inicia operaciones de procesamiento de gráficos en la trama recibida en la operación 710.
En la operación 720, la indicación o las indicaciones de omisión del código de corrección de errores (ECC) generadas por las operaciones en la Figura 6 se reciben en la canalización de procesamiento de gráficos y en la operación 725, los datos de píxeles se recuperan de una caché, por ejemplo, una caché L3, para procesamiento.
Si, en la operación 730, la indicación o las indicaciones de omisión de código de corrección de errores (ECC) recibidas en la operación 720 para los datos de píxeles recuperados de la caché en la operación 725 indican que los datos de píxeles recuperados en la operación 725 no pueden omitir el procesamiento de código de corrección de errores (ECC), a continuación, el control pasa a la operación 735 y el procesamiento de código de corrección de errores (ECC) se aplica a los datos de píxeles recuperados de la caché en la operación 725. Por el contrario, si en la operación 735, la indicación o las indicaciones de omisión de código de corrección de errores (ECC) recibidas en la operación 720 para los datos de píxeles recuperados de la caché en la operación 725 indican que los datos de píxeles recuperados en la operación 725 pueden omitir el procesamiento de código de corrección de errores (ECC), a continuación, el control pasa a la operación 735 y el procesamiento de código de corrección de errores (ECC) se omite para los datos de píxeles recuperados de la caché en la operación 725.
Una vez completadas las operaciones 735 o 740, el control pasa de nuevo a la operación 720 y se reciben las indicaciones de omisión para el siguiente conjunto de datos de píxeles. Las operaciones de la figura 7A pueden repetirse sucesivamente, de manera que el procesamiento del código de corrección de errores (ECC) puede aplicarse selectivamente a los datos de píxeles recuperados de la caché. Esto reduce el coste computacional, la latencia de la memoria y el consumo de energía del sistema de gráficos.
La figura 7B es un diagrama de bloques esquemático de flujos de datos en un método para omitir el procesamiento del código de corrección de errores (ECC) basándose en una indicación de software, de acuerdo con las realizaciones. Como se ilustra en la Figura 7B, los datos de entrada de la memoria caché se introducen en el multiplexor 770 por medio de la línea 752 y las una o más indicaciones de código de corrección de errores (ECC) se introducen en el multiplexor 770 como un control por medio de la línea 754.
Si la indicación o indicaciones de código de corrección de errores (ECC) indican que los datos de entrada de la caché requieren un procesamiento del código de corrección de errores (ECC), entonces los datos de entrada de la caché se introducen en el bloque de ECC 1320, que puede incluir uno o más módulos de transformada rápida de Fourier 760, 762, 764. Por el contrario, si las indicaciones de código de corrección de errores (ECC) indican que los datos de entrada de la caché no requieren el procesamiento del código de corrección de errores (ECC), entonces los datos de entrada de la caché no se introducen en el bloque de ECC 1320.
El multiplexor 770 recibe como entradas de datos la salida del bloque de ECC 1320 y los datos de entrada de la caché por medio de la línea 752. Si la o las indicaciones de código de corrección de errores (ECC) introducidas como un control por medio de la línea 754 indican que los datos de entrada de la caché requieren procesamiento de código de corrección de errores (ECC), entonces el multiplexor 770 selecciona la salida del bloque de ECC 1320 como una salida. Por el contrario, si la o las indicaciones de código de corrección de errores (ECC) introducidas como un control por medio de la línea 754 indican que Ios datos de entrada de la caché no requieren procesamiento de código de corrección de errores (ECC), entonces el multiplexor 770 selecciona los datos de entrada de la caché como una salida.
Componentes de energía
La Figura 8 ilustra un diagrama de bloques de un regulador de conmutación de acuerdo con una realización. Uno o más reguladores de conmutación que se muestran en la Figura 8 pueden incorporarse en diversos sistemas analizados en el presente documento para proporcionar energía a uno o más chips de circuito integrado (IC). Mientras que una sola fase del regulador de conmutación de estacionamiento de corriente con un solo inductor puede analizarse con referencia a la figura 8, una o más de las múltiples fases del regulador de conmutación de estacionamiento de corriente pueden implementarse con un inductor dividido. Además, se puede usar una combinación de uno o más reguladores de conmutación de estacionamiento de corriente (con o sin un inductor dividido) con uno o más dispositivos convencionales de conversión de energía eléctrica para proporcionar energía a la carga (por ejemplo, la circuitería lógica 814).
Más particularmente, la figura 8 ilustra un sistema 800 que incluye un regulador de conmutación (a veces denominado regulador de conmutación de estacionamiento de corriente). El regulador de conmutación de estacionamiento de corriente puede ser un regulador de conmutación multifase en diversas realizaciones. La unidad de control multifase 802 está acoplada a múltiples fases, donde cada fase puede incluir una o más fases aguas arriba 804 y una o más fases aguas abajo 806. Como se muestra, una fuente de energía eléctrica 808 está acoplada a la lógica de control aguas arriba 810 (que proporciona mecanismos de control de corriente en cada fase aguas arriba). Se puede usar más de una lógica de control aguas arriba en diversas implementaciones. Cada fase aguas arriba puede incluir un inductor (no mostrado) que está acoplado a una fase aguas abajo respectiva. En una realización, cada una de las fases aguas arriba puede incluir uno o más inductores. La unidad de control multifase 802 puede configurar cualquier lógica de control aguas arriba activa 810, por ejemplo, para generar una corriente a través de un inductor acoplado entre las fases aguas arriba y las fases aguas abajo. La lógica de control aguas abajo 812 puede ser configurada por la unidad de control multifase 802 para estar ENCENDIDA, APAGADA o conmutada para regular el nivel de voltaje en la carga (por ejemplo, la circuitería lógica 814). A su vez, la lógica de control aguas abajo 812 puede ser configurada por la unidad de control multifase 802 para mantener el nivel de voltaje en la carga dentro de un intervalo basado al menos en parte en los valores Vmín (voltaje mínimo) y Vmáx (voltaje máximo).
En una realización, un inductor (acoplado entre una fase aguas abajo y una fase aguas arriba respectiva) puede situarse fuera de un paquete de semiconductores 816 que incluye la carga 814. Se puede situar otro inductor (no mostrado) dentro del paquete 816, por ejemplo, para reducir la capacitancia parásita. En una realización, el inductor dentro del paquete 816 puede ser un inductor de núcleo de aire plano que está acoplado al circuito lógico 814 por medio de una o más lógicas de conmutación que incluyen transistores de efecto de campo de semiconductores de óxido metálico (MOSFET) planos. Además, uno o más de los componentes analizados en el presente documento (por ejemplo, con referencia a las Figuras 8m 9 y/o 10, que incluyen, por ejemplo, caché L3, lógica de control aguas arriba y/o lógica de control aguas abajo) se pueden proporcionar en la o las capas del sustrato (por ejemplo, entre paquetes de semiconductores), en una matriz de circuito integrado, o fuera de un paquete de semiconductores (por ejemplo, en una placa de circuito impreso (PCB)) en diversas realizaciones.
La Figura 9 es un diagrama de bloques de un sistema 900 que incluye un multiprocesador de transmisión por flujo continuo 902, de acuerdo con una o más realizaciones. El multiprocesador de transmisión por flujo continuo puede incluir 32 carriles 904 de múltiples hilos de instrucción única (SIMT) que son capaces de emitir colectivamente hasta 32 instrucciones por ciclo de reloj, por ejemplo, uno a partir de cada uno de 32 hilos. Dependiendo de la implementación, pueden estar presentes más o menos carriles, tales como 64, 128, 256, etc. Los carriles SIMT 904 pueden, a su vez, incluir una o más: Unidades aritméticas lógicas (ALU) 906, Unidades de funciones especiales (SFU) 908, unidades de memoria (MEM) 910 y/o unidades de textura (TEX) 912.
En algunas realizaciones, una o más ALU 906 y/o unidad o unidades TEX 912 pueden ser de baja energía o alta capacidad, por ejemplo, como se describe con referencia a los elementos 920 y 922. Por ejemplo, el sistema puede mapear el 100 % de las direcciones de registro para los hilos 0-30 a la porción de baja energía y el 100 % de las direcciones de registro para los hilos 31-127 a la porción de alta capacidad. Como otro ejemplo, el sistema puede mapear el 20 % de los registros de cada hilo a la porción de baja energía y mapear el 80 % de los registros de cada hilo a la porción de alta capacidad. Además, el sistema puede determinar el número de entradas asignadas por hilo basándose en la información de tiempo de ejecución.
Como se ilustra en la figura 9, el multiprocesador de transmisión por flujo continuo 902 también incluye un archivo de registro 914, una lógica de planificador 916 (por ejemplo, para planificar hilos o grupos de hilos, o ambos) y memoria compartida 918, por ejemplo, almacenamiento temporal local. Como se describe en el presente documento, un "grupo de hilos" se refiere a una pluralidad de hilos que se agrupan con índices de hilos ordenados (por ejemplo, secuenciales o consecutivos). En general, un archivo de registro se refiere a una matriz de registros a los que acceden los componentes de un procesador (incluyendo un procesador de gráficos) como los que se analizan en el presente documento. El archivo de registro 914 incluye una porción o estructura de baja energía 920 y una porción o estructura de alta capacidad 922. El multiprocesador de transmisión por flujo continuo 902 puede configurarse para direccionar el archivo de registro 914 usando un único espacio de nombres lógico tanto para la porción de baja energía como para la porción de alta capacidad.
En algunas realizaciones, el sistema puede incluir varios registros físicos que pueden ser compartidos por los hilos que se ejecutan simultáneamente en el sistema. Esto permite que el sistema use un solo espacio de nombres para implementar un esquema de mapeo de registro flexible. A continuación, un compilador puede asignar intervalos activos de registros a direcciones de registros, y el compilador puede usar un mecanismo de asignación de registros para minimizar o reducir la cantidad de registros usados por hilo. Se pueden asignar múltiples intervalos activos a la misma dirección de registro siempre que los intervalos activos no se superpongan en una realización. Esto permite determinar, por ejemplo, en tiempo de ejecución y después de que se hayan compilado las instrucciones, cuántas entradas por hilo se asignarán en la porción de baja energía frente a la porción de alta capacidad. Por ejemplo, el sistema puede mapear el 100 % de las direcciones de registro para los hilos 0-30 a la porción de baja energía y el 100 % de las direcciones de registro para los hilos 31-127 a la porción de alta capacidad. Como otro ejemplo, el sistema puede mapear el 20 % de los registros de cada hilo a la porción de baja energía y mapear el 80 % de los registros de cada hilo a la porción de alta capacidad. El sistema puede determinar la cantidad de entradas asignadas por hilo basándose en la información de tiempo de ejecución, por ejemplo, con respecto a la cantidad de grupos de hilos que se ejecutan y el beneficio marginal de iniciar más grupos de hilos o asignar a un número menor de grupos de hilos más espacio en la porción de baja energía.
La Figura 10 ilustra un diagrama de bloques de un sistema de procesamiento paralelo 1000, de acuerdo con una realización. El Sistema 1000 incluye un subsistema de Procesamiento Paralelo 1002 (Presentado Previamente) que a su vez incluye una o más Unidades de Procesamiento Paralelo (PPU) PPU-0 a PPU-P. Cada PPU está acoplada a una memoria de procesamiento paralelo (PP) local (por ejemplo, Mem-0 a MEM-P, respectivamente). En algunas realizaciones, el sistema de subsistema de PP 1002 puede incluir un número P de PPU. La PPU-01004 y las memorias de procesamiento paralelo 1006 pueden implementarse usando uno o más dispositivos de circuito integrado, tales como procesadores programables, circuitos integrados específicos de aplicación (ASIC) o dispositivos de memoria.
Haciendo referencia a la figura 10, se muestran varios conmutadores o conexiones opcionales 1007 que pueden usarse en el sistema 1000 para gestionar la energía. Si bien se muestran varios conmutadores 1007, las realizaciones no se limitan a los conmutadores mostrados específicamente y se pueden utilizar más o menos conmutadores dependiendo de la implementación. Estas conexiones/conmutadores 1007 se pueden utilizar para activación de reloj o activación de energía general. Por lo tanto, los elementos 1007 pueden incluir uno o más de un transistor de energía, un conmutador integrado en el chip, conexiones del plano de energía o similares. En una realización, antes de cortar la alimentación a una porción del sistema 1000 por medio de los conmutadores/conexiones 1007, la lógica (por ejemplo, un microcontrolador, un procesador de señales digitales, firmware, etc.) puede garantizar que los resultados de la operación se comprometan (por ejemplo, a la memoria) o se finalicen para mantener la corrección.
Además, en algunas realizaciones, una o más de las PPU en el subsistema de procesamiento paralelo 1002 son procesadores de gráficos con canalizaciones de representación que pueden configurarse para realizar diversas tareas, tales como las que se analizan en el presente documento con respecto a otras figuras. Los datos/información gráfica pueden comunicarse a través del puente de memoria 1008 con otros componentes de un sistema informático (incluidos los componentes del sistema 1000). Los datos pueden comunicarse a través de un bus compartido y/o una o más interconexiones 1010 (incluyendo, por ejemplo, uno o más enlaces directos o punto a punto). La PPU-0 1004 puede acceder a su memoria de procesamiento paralelo local 1014 (que puede usarse como memoria gráfica que incluye, por ejemplo una memoria intermedia de tramas) para almacenar y actualizar datos de píxeles, entregar datos de píxeles a un dispositivo de visualización (tal como los que se analizan en el presente documento), etc.En algunas realizaciones, el subsistema de procesamiento paralelo 1002 puede incluir una o más PPU que funcionan como procesadores de gráficos y una o más PPU que funcionan para realizar cómputos de propósito general. Las PPU pueden ser idénticas o diferentes, y cada PPU puede tener acceso a sus propios dispositivos de memoria de procesamiento paralelo dedicados, ningún dispositivo o dispositivos de memoria de procesamiento paralelo dedicados, o un dispositivo de memoria compartida o caché.
En una realización, las operaciones realizadas por las PPU pueden ser controladas por otro procesador (o una de las PPU) generalmente denominado procesador maestro o núcleo de procesador. En una realización, el procesador/núcleo maestro puede escribir un flujo de comandos para cada PPU en una memoria intermedia de inserción en varias ubicaciones, tal como una memoria de sistema principal, una caché u otra memoria tales como las que se describen en el presente documento con referencia a otras figuras. A continuación, cada PPU puede leer los comandos escritos y ejecutarlos de forma asíncrona en relación con la operación del procesador/núcleo maestro.
Además, como se muestra en la Figura 10, la PPU-0 incluye una lógica de extremo delantero 1020 que puede incluir una unidad de entrada/salida (E/S o ES) (por ejemplo, para comunicarse con otros componentes del sistema 1000 a través del puente de memoria 1008) y/o una interfaz de anfitrión (por ejemplo, que recibe comandos relacionados con tareas de procesamiento). El extremo delantero 1020 puede recibir comandos leídos por la interfaz de anfitrión (por ejemplo, desde la memoria intermedia de inserción)). El extremo delantero 1020, a su vez, proporciona los comandos a una unidad de planificación de trabajo 1022 que planifica y asigna operaciones/tareas asociadas con los comandos a una matriz de agrupación de procesamiento o subsistema aritmético 1024 para su ejecución.
Como se muestra en la figura 10, la matriz de agrupación de procesamiento 1024 puede Incluir una o más unidades de agrupación de procesamiento general (GPC) (por ejemplo, GPC-0 1026, GPC-1 1028, hasta GPC-M 1030). Cada GPC puede ser capaz de ejecutar una gran cantidad (por ejemplo, cientos o miles) de hilos al mismo tiempo, donde cada hilo es una instancia de un programa. En diversas aplicaciones, pueden asignarse diferentes GPC para procesar diferentes tipos de programas o para realizar diferentes tipos de cómputos. Por ejemplo, en una aplicación de gráficos, se puede asignar un primer conjunto de GPC (por ejemplo, que incluya una o más unidades de GPC) para realizar operaciones de teselación y producir topologías primitivas para parches, y un segundo conjunto de GPC (por ejemplo, que incluya una o más unidades de GPC) pueden asignarse para realizar sombreado de teselación para evaluar los parámetros de parche para las topologías primitivas y para determinar las posiciones de los vértices y otros atributos por vértice. La asignación de GPC puede variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cómputo.
Adicionalmente, las tareas de procesamiento asignadas por la unidad de planificación de trabajo 1022 pueden incluir índices de datos que van a procesarse, tales como datos de superficie/parche, datos de primitivas, datos de vértices, datos de píxeles y/o parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa ha de ejecutarse). La unidad de planificación de trabajo 1022 puede estar configurada para extraer los índices que corresponden a las tareas o puede recibir los índices desde el extremo delantero 1020. El extremo delantero 1020 también puede garantizar que las GPC estén configuradas en un estado válido antes de que se inicie el procesamiento especificado por las memorias intermedias de inserción.
En una realización, la ruta de comunicación 1012 es un enlace express (o PCI-e) de interfaz de componentes periféricos (PCI), en el que se pueden asignar carriles dedicados a cada PPU. También se pueden usar otras rutas de comunicación. Por ejemplo, los comandos relacionados con las tareas de procesamiento pueden dirigirse a la interfaz de anfitrión 1018, mientras que los comandos relacionados con las operaciones de memoria (por ejemplo, leer o escribir en la memoria de procesamiento paralelo 1014) pueden dirigirse a una unidad de barra transversal de memoria 1032.
En algunas realizaciones, el subsistema de procesamiento paralelo 1002 puede implementarse como una tarjeta de complemento que se inserta en una ranura de expansión del sistema informático o servidor (tal como un servidor Blade). En otras realizaciones, una PPU puede integrarse en un solo chip con un puente de bus, tal como un puente de memoria 1008, un puente de E/S, etc. Aún en otras realizaciones, algunos o todos los componentes de la PPU pueden integrarse en un solo chip de circuito integrado con uno o más núcleos de procesador, dispositivos de memoria, cachés, etc.
Además, uno de los principales problemas con los procesadores modernos de hoy en día es que han alcanzado un límite de velocidad de reloj de aproximadamente 4 GHz. En este punto, simplemente generan demasiado calor para la tecnología actual y requieren soluciones de enfriamiento especiales y costosas. Esto se debe a que a medida que aumentamos la frecuencia del reloj, aumenta el consumo de energía. De hecho, el consumo de energía de una CPU, si fijas el voltaje, es aproximadamente el cubo de su frecuencia de reloj. Para empeorar esto, a medida que aumenta el calor generado por la CPU, para la misma frecuencia de reloj, el consumo de energía también aumenta debido a las propiedades del silicio. Esta conversión de energía en calor es una completa pérdida de energía. Este uso cada vez más ineficiente de la energía eventualmente significa que no puede alimentar o enfriar el procesador lo suficiente y alcanza los límites térmicos del dispositivo o su carcasa, el llamado muro de energía.
Enfrentados a no poder aumentar la velocidad del reloj, haciendo procesadores cada vez más rápidos, los fabricantes de procesadores tuvieron que idear otra estrategia. Se han visto obligados a seguir el camino de añadir más núcleos a los procesadores, en lugar de intentar continuamente aumentar las velocidades de reloj de la CPU y/o extraer más instrucciones por reloj a través del paralelismo de nivel de instrucciones.
Además, el uso de energía es una gran consideración cuando se diseñan máquinas que funcionan constantemente. A menudo, los costes operativos de hacer funcionar un superordenador durante unos pocos años pueden equivaler al coste de instalarla en primer lugar. Ciertamente, el coste de hacer funcionar una máquina de este tipo durante su vida útil superará fácilmente los costes de instalación originales. El uso de energía proviene de los componentes mismos, pero también del enfriamiento necesario para permitir que tales ordenadores funcionen. Incluso una estación de trabajo de gama alta con cuatro GPU requiere cierta planificación sobre cómo mantenerla fresca. A menos que viva en un clima frío y pueda desterrar la computadora a un lugar frío, hará un buen trabajo al calentar la oficina para usted. Coloque varias de estas máquinas en una habitación y, muy rápidamente, la temperatura del aire en esa habitación comenzará a elevarse a niveles bastante inaceptables.
Por lo tanto, se gasta una cantidad significativa de energía en la instalación de sistemas de aire acondicionado para garantizar que los ordenadores permanezcan fríos y puedan funcionar sin producir errores. Esto es especialmente así donde las temperaturas de verano pueden alcanzar los 85H 30C o más. El aire acondicionado es caro de mantener. Se debe pensar mucho en la mejor manera de enfriar un sistema de este tipo y si la energía térmica se puede reutilizar de alguna manera. Los sistemas enfriados por líquido son muy eficientes de esta manera, ya que el líquido puede circular a través de un intercambiador de calor y hacia un sistema de calefacción convencional sin ninguna posibilidad de que Ios dos líquidos se mezclen. Con Ios costes cada vez mayores de Ios recursos naturales y las crecientes presiones sobre las compañías para que se las considere ecológicas, simplemente sacar el calor por la ventana ya no es económica o socialmente aceptable.
Los sistemas refrigerados por líquido ofrecen una opción interesante en términos de reciclaje de la energía térmica residual. Si bien un sistema enfriado por aire solo se puede usar para calentar el área inmediata en la que se encuentra, el calor de Ios refrigerantes líquidos se puede bombear a otra parte. Mediante el uso de un intercambiador de calor, el refrigerante se puede enfriar con agua convencional. A continuación, este puede bombearse a un sistema de calefacción o incluso usarse para calentar una piscina al aire libre u otra gran masa de agua. Cuando se instalan varios de estos sistemas, tal como en un centro informático de una empresa o una universidad, puede tener mucho sentido usar esta energía térmica residual para reducir la factura de calefacción en otras partes de la organización.
Muchas instalaciones de superordenadores se ubican junto a un río importante precisamente porque necesitan un suministro de agua fría. Otras usan grandes torres de refrigeración para disipar la energía térmica residual. Ninguna solución es particularmente verde. Habiendo pagado ya por la energía, tiene poco sentido simplemente desperdiciarla cuando podría usarse tan fácilmente para calefacción. Al considerar el uso de energía, también se debe recordar que el diseño del programa en realidad juega un papel muy importante en el consumo de energía. La operación más costosa, desde el punto de vista de la energía, es mover datos dentro y fuera del chip. Por lo tanto, simplemente hacer un uso eficiente de Ios registros y la memoria compartida dentro del dispositivo reduce enormemente el uso de energía. Si también considera que el tiempo total de ejecución de Ios programas bien escritos es mucho menor que el de Ios mal escritos, puede ver que reescribir Ios programas antiguos para hacer uso de nuevas funciones, tales como una memoria compartida más grande, puede incluso reducir Ios costes operativos en una gran centro de datos.
Haciendo referencia a la Figura 10, la interfaz de memoria 1014 incluye N unidades de subdivisión (por ejemplo, Unidad-0 1034, Unidad-1 1036, Unidad-N 10-38) que están directamente acopladas a una porción correspondiente de la memoria de procesamiento paralelo 1006 (tal como Mem-0 1040, Mem-1 1042, hasta Mem-N 1044). La cantidad de unidades de subdivisión generalmente puede ser igual a la cantidad de memoria presentada previamente (o N, como se muestra). La memoria presentada anteriormente puede implementarse con una memoria volátil tal como la memoria dinámica de acceso aleatorio (DRAM) u otros tipos de memoria volátil como las que se analizan en el presente documento. En otras realizaciones, el número de unidades de subdivisión puede no igualar el número de dispositivos de memoria. Los datos de gráficos (tales como objetivos de representación, memorias intermedias de tramas o mapas de textura) pueden almacenarse en dispositivos de memoria presentados anteriormente, lo que permite que las unidades de subdivisión escriban porciones de datos de gráficos en paralelo para usar de manera eficiente el ancho de banda disponible de la memoria de procesamiento paralelo 1006.
Además, cualquiera de las GPC puede procesar datos para escribirlos en cualquiera de las unidades de subdivisión dentro de la memoria de procesamiento paralelo. La unidad de barra transversal 1032 puede implementarse como una interconexión que está configurada para encaminar la salida de cada GPC a la entrada de cualquier unidad de subdivisión o a otra GPC para su posterior procesamiento. Por lo tanto, las GPC 1026 a 1030 pueden comunicarse con la interfaz de memoria 1014 a través de la unidad de barra transversal 1032 para leer o escribir en diversos otros dispositivos de memoria (o externos). Como se muestra, la unidad de barra transversal 1032 puede comunicarse directamente con el extremo delantero 1020, además de tener un acoplamiento (directo o indirecto) a la memoria local 1006, para permitir que Ios núcleos de procesamiento dentro de las diferentes GPC se comuniquen con la memoria de sistema y/u otra memoria que no es local para PPU. Además, la unidad de barra transversal 1032 puede utilizar canales virtuales para organizar flujos de tráfico entre las GPC y las unidades de subdivisión.
Vista general del sistema
La Figura 11 es un diagrama de bloques de un sistema de procesamiento 1100, de acuerdo con una realización. En diversas realizaciones, el sistema 1100 incluye uno o más procesadores 1102 y uno o más procesadores de gráficos 1108, 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 1102 o núcleos de procesador 1107. En una realización, el sistema 1100 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, de mano o integrados.
Una realización del sistema 1100 puede incluir, o incorporarse dentro de, una plataforma de juegos basada en servidor, una consola de juegos, incluyendo una consola de juegos y de medios, una consola de juegos móvil, una consola de juegos de mano o una consola de juegos en línea. En algunas realizaciones, el sistema 1100 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tipo tableta o un dispositivo de Internet móvil. El sistema de procesamiento de datos 1100 también puede incluir, acoplarse con o integrarse dentro de un dispositivo ponible, tal como un dispositivo ponible de reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento de datos 1100 es un dispositivo de televisión o de descodificador de salón que tiene uno o más procesadores 1102 y una interfaz gráfica generada por uno o más procesadores de gráficos 1108.
En algunas realizaciones, cada uno de Ios uno o más procesadores 1102 Incluye uno o más núcleos de procesador 1107 para procesar Instrucciones que, cuando se ejecutan, realizan operaciones para software de usuario y sistema. En algunas realizaciones, cada uno de los uno o más núcleos de procesador 1107 está configurado para procesar un conjunto de Instrucciones 1109 específico, En algunas realizaciones, el conjunto de Instrucciones 1109 puede facilitar el cómputo de un conjunto de Instrucciones complejo (CISC), el cómputo de un conjunto de Instrucciones reducido (RISC) o el cómputo mediante una palabra de Instrucción muy larga (VLIW), Múltiples núcleos de procesador 1107 pueden procesar, cada uno, un conjunto de Instrucciones 1109 diferente, que puede Incluir Instrucciones para facilitar la emulación de otros conjuntos de Instrucciones, El núcleo de procesador 1107 también puede Incluir otros dispositivos de procesamiento, tales como un procesador de señales digitales (DSP).
En algunas realizaciones, el procesador 1102 Incluye la memoria caché 1104, Dependiendo de la arquitectura, el procesador 1102 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 1102, En algunas realizaciones, el procesador 1102 también usa una caché externa (por ejemplo, una caché de nivel 3 (L3) o una caché de último nivel (LLC)) (no mostrada), que puede compartirse entre los núcleos de procesador 1107 usando técnicas de coherencia de caché conocidas, Se Incluye adicionalmente, en el procesador 1102, un archivo de registro 1106 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 1102,
En algunas realizaciones, el procesador 1102 está acoplado con un bus de procesador 1110 para transmitir señales de comunicación tales como señales de dirección, de datos o de control entre el procesador 1102 y otros componentes en el sistema 1100, En una realización, el sistema 1100 usa una arquitectura de sistema de 'concentrador' Ilustrativa, Incluyendo un concentrador de controlador de memoria 1116 y un concentrador de controlador de entrada-salida (E/S) 1130, Un concentrador de controlador de memoria 1116 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1100, mientras que un concentrador de controlador de E/S (ICH) 1130 proporciona conexiones a dispositivos de E/S mediante un bus de E/S local, En una realización, la lógica del concentrador de controlador de memoria 1116 está Integrada dentro del procesador,
El dispositivo de memoria 1120 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 1120 puede operar como memoria de sistema para el sistema 1100, para almacenar datos 1122 e Instrucciones 1121 para su uso cuando los uno o más procesadores 1102 ejecutan una aplicación o proceso, El concentrador de controlador de memoria 1116 también se acopla con un procesador de gráficos externo opcional 1112, que puede comunicarse con los uno o más procesadores de gráficos 1108 en los procesadores 1102 para realizar operaciones de gráficos y de medios,
En algunas realizaciones, el ICH 1130 posibilita que los periféricos se conecten al dispositivo de memoria 1120 y al procesador 1102 mediante un bus de E/S de alta velocidad, Los periféricos de E/S Incluyen, pero sin limitación, un controlador de audio 1146, una Interfaz de firmware 1128, un transceptor Inalámbrico 1126 (por ejemplo, WI-FI, Bluetooth), un dispositivo de almacenamiento de datos 1124 (por ejemplo, unidad de disco duro, memoria flash, etc,), y un controlador de E/S heredado 1140 para acoplar dispositivos heredados (por ejemplo, de sistema personal 2 (PS/2)) al sistema, Uno o más controladores de bus serie universal (USB) 1142 conectan dispositivos de entrada, tales como las combinaciones de teclado y ratón 1144, Un controlador de red 1134 puede acoplarse también con el ICH 1130, En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de procesador 1110, Se apreciará que el sistema 1100 mostrado es Ilustrativo y no limitante, debido a que también pueden usarse otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente, Por ejemplo, el concentrador de controlador de E/S 1130 puede Integrarse dentro de los uno o más procesadores 1102, o el concentrador de controlador de memoria 1116 y el concentrador de controlador de E/S 1130 pueden Integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 1112,
La Figura 12 es un diagrama de bloques de una realización de un procesador 1200 que tiene uno o más núcleos de procesador 1202A-1202N, un controlador de memoria Integrado 1214 y un procesador de gráficos Integrado 1208, Aquellos elementos de la Figura 12 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 1200 puede Incluir núcleos adicionales hasta e Incluyendo el núcleo adicional 1202N representado por los recuadros en líneas discontinuas, Cada uno de los núcleos de procesador 1202A-1202N Incluye una o más unidades de caché Internas 1204A-1204N, En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades almacenadas en caché compartidas 1206,
Las unidades de caché Internas 1204A-1204N y las unidades de caché compartidas 1206 representan una jerarquía de memoria caché dentro del procesador 1200, La jerarquía de memoria caché puede Incluir al menos un nivel de caché de Instrucciones y de datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartida, tal como una caché de Nivel 2 (L2), de Nivel 3 (L3), de Nivel 4 (L4) o de otros niveles, donde el nivel más alto de caché antes de la memoria externa se clasifica como LLC. En algunas realizaciones, la lógica de coherencia de caché mantiene la coherencia entre las diversas unidades de caché 1206 y 1204A-1204N.
En algunas realizaciones, el procesador 1200 también puede incluir un conjunto de una o más unidades de controlador de bus 1216 y un núcleo de agente de sistema 1210. Las una o más unidades controladoras de bus 1216 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 1210 proporciona funcionalidad de gestión para los diversos componentes de procesador. En algunas realizaciones, el núcleo de agente de sistema 1210 incluye uno o más controladores de memoria integrados 1214 para gestionar el acceso a diversos dispositivos de memoria externos (no mostrados).
En algunas realizaciones, uno o más de los núcleos de procesador 1202A-1202N incluyen soporte para múltiples hilos simultáneos. En una realización de este tipo, el núcleo de agente de sistema 1210 incluye componentes para coordinar y operar los núcleos 1202A-1202N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 1210 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 1202A-1202N y el procesador de gráficos 1208.
En algunas realizaciones, el procesador 1200 incluye adicionalmente un procesador de gráficos 1208 para ejecutar operaciones de procesamiento de gráficos. En algunas realizaciones, el procesador de gráficos 1208 se acopla con el conjunto de unidades de caché compartidas 1206 y el núcleo de agente de sistema 1210, incluyendo los uno o más controladores de memoria integrados 1214. En algunas realizaciones, un controlador de visualización 1211 está acoplado con el procesador de gráficos 1208 para controlar una salida del procesador de gráficos a una o más pantallas acopladas. En algunas realizaciones, el controlador de visualización 1211 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 1208 o del núcleo de agente de sistema 1210.
En algunas realizaciones, se usa una unidad de interconexión basada en anillo 1212 para acoplar los componentes internos del procesador 1200. 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, incluyendo técnicas bien conocidas en la técnica. En algunas realizaciones, el procesador de gráficos 1208 se acopla con la interconexión en anillo 1212 mediante un enlace de E/S 1213.
El enlace de E/S 1213 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 1218, tal como un módulo de eDRAM. En algunas realizaciones, cada uno de los núcleos de procesador 1202A-1202N y del procesador de gráficos 1208 usan módulos de memoria integrados 1218 como una caché de último nivel compartida.
En algunas realizaciones, los núcleos de procesador 1202A-1202N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra realización, los núcleos de procesador 1202A-1202N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 1202A-1202N 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 1202A-1202N son heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de energía relativamente superior se acoplan con uno o más núcleos de potencia que tienen un consumo de energía inferior. Adicionalmente, el procesador 1200 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 13 es un diagrama de bloques de un procesador de gráficos 1300, 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 correlacionada con la memoria, con registros en el procesador de gráficos y con comandos colocados en la memoria de procesador. En algunas realizaciones, el procesador de gráficos 1300 incluye una interfaz de memoria 1314 para acceder a la memoria. La interfaz de memoria 1314 puede ser una interfaz a una memoria local, una o más cachés internas, una o más cachés externas compartidas y/o a una memoria de sistema.
En algunas realizaciones, el procesador de gráficos 1300 también incluye un controlador de visualización 1302 para controlar los datos de salida de visualización a un dispositivo de visualización 1320. El controlador de visualización 1302 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 1300 incluye un motor de códec de vídeo 1306 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) 421M/V C-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 1300 incluye un motor de transferencia de imágenes en bloque (BLIT) 1304 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) 1310. En algunas realizaciones, el GPE 1310 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 1312 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 de 3D 1312 incluye elementos de función programable y fija que realizan diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema de 3D/de medios 1315. Aunque la canalización de 3D 1312 se puede usar para realizar operaciones de medios, una realización del GPE 1310 también incluye una canalización de medios 1316 que se usa específicamente para realizar operaciones de medios, tales como post-procesamiento de vídeo y potenciación de imagen.
En algunas realizaciones, la canalización de medios 1316 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 descodificació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 1306. En algunas realizaciones, la canalización de medios 1316 incluye adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 1315. Los hilos generados realizan cómputos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema 3D/de medios 1315.
En algunas realizaciones, el subsistema 3D/de medios 1315 incluye lógica para ejecutar hilos generados por la canalización de 3D 1312 y la canalización de medios 1316. En una realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema 3D/de medios 1315, 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 1315 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
La Figura 14 es un diagrama de bloques de un motor de procesamiento de gráficos 1410 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 1410 es una versión del GPE 1310 mostrado en la Figura 13. Los elementos de la Figura 14 que tienen los mismos números de referencia (o nombres) 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 del presente documento, pero no se limitan a tal cosa. Por ejemplo, se ilustra la canalización de 3D 1312 y la canalización de medios 1316 de la Figura 13. La canalización de medios 1316 es opcional en algunas realizaciones del GPE 1410 y puede no incluirse explícitamente dentro del GPE 1410. Por ejemplo y, en al menos una realización, un procesador de medios y/o de imágenes separado está acoplado al GPE 1410.
En algunas realizaciones, el GPE 1410 se acopla con o incluye un transmisor de envío por flujo continuo de comandos 1403, que proporciona un flujo de comandos a la canalización de 3D 1312 y/o a las canalizaciones de medios 1316. En algunas realizaciones, el transmisor por flujo continuo de comandos 1403 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 1403 recibe comandos desde la memoria y envía los comandos a la canalización de 3D 1312 y/o a la canalización de medios 1316. Los comandos son directivas extraídas desde una memoria intermedia de anillo, que almacena comandos para la canalización de 3D 1312 y la canalización de medios 1316. 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 de 3D 1312 también pueden incluir referencias a datos almacenados en memoria, tales como, pero sin limitación, datos de vértice y de geometría para la canalización de 3D 1312 y/o datos de imagen y objetos de memoria para la canalización de medios 1316. La canalización de 3D 1312 y la canalización de medios 1316 procesan los comandos y datos realizando operaciones mediante una lógica dentro de las canalizaciones respectivas o despachando uno o más hilos de ejecución a una matriz de núcleo de gráficos 1414.
En diversas realizaciones, la canalización de 3D 1312 puede ejecutar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cómputo u otros programas de sombreado, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleo de gráficos 1414. La matriz de núcleo de gráficos 1414 proporciona un bloque unificado de recursos de ejecución. La lógica de ejecución de múltiples propósitos (por ejemplo, unidades de ejecución) dentro de la matriz de núcleo de gráficos 1414 Incluye un soporte para diversos lenguajes de sombreador de API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados con múltiples sombreadores.
En algunas realizaciones, la matriz de núcleo de gráficos 1414 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 107 de la Figura 1 o el núcleo 1202A-1202N como en la Figura 12.
Los datos de salida generados por hilos que se ejecutan en la matriz de núcleo de gráficos 1414 pueden emitir datos a la memoria en una memoria intermedia de retorno unificada (URB) 1418. La URB 1418 puede almacenar datos para múltiples hilos. En algunas realizaciones, la URB 1418 puede usarse para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleo de gráficos 1414. En algunas realizaciones, la URB 1418 se puede usar adicionalmente para la sincronización entre hilos en la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de funciones compartidas 1420.
En algunas realizaciones, la matriz de núcleos de gráficos 1414 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 1410. 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 deshabilitarse según sea necesario.
La matriz de núcleo de gráficos 1414 se acopla con la lógica de funciones compartidas 1420 que incluye múltiples recursos que se comparten entre los núcleos de gráficos en la matriz de núcleo de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 1420 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleo de gráficos 1414. En diversas realizaciones, la lógica de funciones compartidas 1420 incluye, pero sin limitación, la lógica del muestreador 1421, del cálculo matemático 1422 y de la comunicación entre hilos (ITC) 1423. Adicionalmente, algunas realizaciones implementan una o más cachés 1425 dentro de la lógica de funciones compartidas 1420. 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 1414. 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 1420 y se comparte entre los recursos de ejecución dentro de la matriz de núcleo de gráficos 1414. El conjunto preciso de funciones que se comparten entre la matriz de núcleo de gráficos 1414 y se incluyen dentro de la matriz de núcleo de gráficos 1414 varía entre realizaciones.
La Figura 15 es un diagrama de bloques de otra realización de un procesador de gráficos 1500. Los elementos de la Figura 15 que tienen los mismos números de referencia (o nombres) 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 del presente documento, pero no se limitan a tal cosa.
En algunas realizaciones, el procesador de gráficos 1500 incluye una interconexión en anillo 1502, un extremo delantero de canalización 1504, un motor de medios 1537 y unos núcleos de gráficos 1580A-1580N. En algunas realizaciones, la interconexión en anillo 1502 acopla el procesador de gráficos a otras unidades de procesamiento, incluyendo otros procesadores de gráficos o uno o más núcleos de procesador 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 1500 recibe lotes de comandos mediante la interconexión en anillo 1502. Los comandos entrantes son interpretados por un transmisor por flujo continuo de comandos 1503 en el extremo delantero de canalización 1504. En algunas realizaciones, el procesador de gráficos 1500 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 1580A-1580N. Para los comandos de procesamiento de geometría 3D, el transmisor por flujo continuo de comandos 1503 suministra comandos a la canalización de geometría 1536. Para al menos algunos comandos de procesamiento de medios, el transmisor por flujo continuo de comandos 1503 suministra los comandos a un extremo delantero de vídeo 1534, que se acopla con un motor de medios 1537. En algunas realizaciones, el motor de medios 1537 incluye un motor de calidad de vídeo (VQE) 1530 para el post-procesamiento de vídeo y de imagen y un motor de codificación/descodificación (MFX) de múltiples formatos 1533 para proporcionar una codificación y descodificación de datos de medios acelerada por hardware. En algunas realizaciones, la canalización de geometría 1536 y el motor de medios 1537 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 1580A.
En algunas realizaciones, el procesador de gráficos 1500 incluye recursos de ejecución de hilos ajustables a escala que cuentan con los núcleos modulares 1580A-1580N (denominados, en ocasiones, cortes de núcleo), teniendo cada uno múltiples subnúcleos 1550A-550N, 1560A-1560N (denominados, en ocasiones, subcortes de núcleo). En algunas realizaciones, el procesador de gráficos 1500 puede tener cualquier número de núcleos de gráficos 1580A a 1580N. En algunas realizaciones, el procesador de gráficos 1500 incluye un núcleo de gráficos 1580A que tiene al menos un primer subnúcleo 1550A y un segundo subnúcleo 1560A. En otras realizaciones, el procesador de gráficos es un procesador de baja potencia con un único subnúcleo (por ejemplo, 1550A). En algunas realizaciones, el procesador de gráficos 1500 incluye múltiples núcleos de gráficos 1580A-1580N, incluyendo cada uno un conjunto de primeros subnúcleos 1550A-1550N y un conjunto de segundos subnúcleos 1560A-1560N. Cada subnúcleo del conjunto de primeros subnúcleos 1550A-1550N incluye al menos un primer conjunto de unidades de ejecución 1552A-1552N y muestreadores de medios/texturas 1554A-1554N. Cada subnúcleo del conjunto de segundos subnúcleos 1560A-1560N incluye al menos un segundo conjunto de unidades de ejecución 1562A-1562N y muestreadores 1564A-1564N. En algunas realizaciones, cada subnúcleo 1550A-1550N, 1560A-1560N comparte un conjunto de recursos compartidos 1570A-1570N. En algunas realizaciones, los recursos compartidos incluyen una memoria caché compartida y una lógica de operación de píxel. Pueden incluirse también otros recursos compartidos en las diversas realizaciones del procesador de gráficos.
Unidades de ejecución
La Figura 16 ilustra la lógica de ejecución de hilos 1600 que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones de un GPE. Los elementos de la Figura 16 que tienen los mismos números de referencia (o nombres) 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 del presente documento, pero no se limitan a tal cosa.
En algunas realizaciones, la lógica de ejecución de hilos 1600 incluye un procesador sombreador 1602, un despachador de hilos 1604, una caché de instrucciones 1606, una matriz de unidades de ejecución ajustable a escala que incluye una pluralidad de unidades de ejecución 1608A-1608N, un muestreador 1610, una caché de datos 1612 y un puerto de datos 1614. En una realización, la matriz de unidades de ejecución ajustable a escala puede realizar un ajuste a escala dinámico habilitando o deshabilitando una o más unidades de ejecución (por ejemplo, cualquiera de las unidades de ejecución 1608A, 1608B, 1608C, 1608D a 1608N-1 y 1608N) basándose en los requisitos computacionales de una carga de trabajo. En una realización, los componentes incluidos están interconectados mediante un tejido de interconexión que se enlaza con cada uno de los componentes. En algunas realizaciones, la lógica de ejecución de hilos 1600 incluye una o más conexiones a memoria, tales como una memoria de sistema o memoria caché, a través de una o más de la caché de instrucciones 1606, el puerto de datos 1614, el muestreador 1610 y las unidades de ejecución 1608A-1608N. En algunas realizaciones, cada unidad de ejecución (por ejemplo, 1608A) es una unidad computacional de propósito general programable autónoma que es capaz de 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 1608A-1608N es ajustable a escala para incluir cualquier número de unidades de ejecución individuales.
En algunas realizaciones, las unidades de ejecución 1608A-1608N se usan principalmente para ejecutar programas sombreadores. Un procesador sombreador 1602 puede procesar los diversos programas sombreadores y despachar hilos de ejecución asociados con los programas sombreadores mediante un despachador de hilos 1604. En una realización, el despachador de hilos incluye una lógica para arbitrar solicitudes de iniciación de un 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 1608A-1608N. Por ejemplo, la canalización de geometría (por ejemplo, 1536 de la Figura 15) puede despachar sombreadores de vértices, de teselación o de geometría a la lógica de ejecución de hilos 1600 (la Figura 16) para su procesamiento. En algunas realizaciones, el despachador de hilos 1604 también puede procesar solicitudes de generación de hilos en tiempo de ejecución desde los programas sombreadores en ejecución.
En algunas realizaciones, las unidades de ejecución 1608A-1608N soportan un conjunto de instrucciones que incluye un soporte nativo para muchas instrucciones de sombreador de gráficos 3D convencionales, de modo que los programas sombreadores desde bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traducción mínima. Las unidades de ejecución soportan un procesamiento de vértices y de geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), un procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y un procesamiento de propósito general (por ejemplo, sombreadores de cómputo y de medios). Cada una de las unidades de ejecución 1608A-1608N es capaz de múltiples emisiones de ejecución de múltiples datos de instrucción única (SIMD), y un funcionamiento de múltiples hilos habilita un entorno de ejecución eficiente frente a accesos de memoria de latencia superior. 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 1608A-1608N 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 1608A-1608N 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éticas Ló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 1608A-1608N soportan tipos de datos de números 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, 1606) se incluyen en la lógica de ejecución de hilos 1600 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, 1612) para almacenar en caché datos de hilo durante la ejecución de hilo. En algunas realizaciones, se incluye un muestreador 1610 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunas realizaciones, el muestreador 1610 incluye una funcionalidad de muestreo de textura o de medios especializada para procesar datos de textura o de 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 1600 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 sombreador de píxeles, lógica de sombreador de fragmentos, etc.) dentro del procesador sombreador 1602 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 sombreador 1602 ejecuta entonces un programa sombreador de píxeles o de fragmentos suministrado por una interfaz de programación de aplicaciones (API). Para ejecutar el programa sombreador, el procesador sombreador 1602 despacha hilos a una unidad de ejecución (por ejemplo, 1608A) mediante el despachador de hilos 1604. En algunas realizaciones, el sombreador de píxeles 1602 usa una lógica de muestreo de textura en el muestreador 1610 para acceder a datos de textura en correlaciones 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 1614 proporciona un mecanismo de acceso de memoria para que la lógica de ejecución de hilos 1600 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 1614 incluye o se acopla a una o más memorias caché (por ejemplo, la caché de datos 1612) para almacenar en caché datos para un acceso de memoria mediante el puerto de datos.
La Figura 17 es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos 1700 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 tiene instrucciones en múltiples formatos. Los recuadros en línea continua ilustran los componentes que se incluyen, en general, en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de las instrucciones. En algunas realizaciones, el formato de instrucción 1700 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 1710. Un formato de instrucción compactado de 64 bits 1730 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 1730. Las instrucciones nativas disponibles en el formato de 64 bits 1730 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 1713. 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 oompaotaolón para reconstruir una Instrucción nativa en el formato de Instrucción de 128 bits 1710.
Para cada formato, el código de operación de instrucción 1712 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 1714 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 1710, un campo de tamaño de ejecución 1716 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 1716 no está disponible para su uso en el formato de instrucción compacto de 64 bits 1730.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 1720, src1 1722 y un destino 1718. 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 1724), donde el código de operación de instrucción 1712 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 1710 incluye un campo de modo de acceso/dirección 1726 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 1710 incluye un campo de modo de dirección/acceso 1726, 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 1726 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 1712 para simplificar la descodificación de código de operación 1740. 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ódigo de operación de movimiento y de lógica 1742 incluye instrucciones de movimiento y de lógica de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas realizaciones, el grupo de movimiento y lógica 1742 comparte los cinco bits más significativos (MSB), donde las instrucciones mover (mov) están en forma de 0000xxxxb y las instrucciones de lógica están en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 1744 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 1746 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, esperar, enviar) en forma de 0011 xxxxb (por ejemplo, 0x30). Un grupo de instrucciones de cálculo matemático paralelo 1748 incluye instrucciones aritméticas a nivel de componente (por ejemplo, sumar, multiplicar (mult)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cálculo matemático paralelo 1748 realiza las operaciones aritméticas en paralelo a lo largo de canales de datos. El grupo de cálculo matemático vectorial 1750 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (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
La Figura 18 es un diagrama de bloques de otra realización de un procesador de gráficos 1800. Los elementos de la Figura 18 que tienen los mismos números de referencia (o nombres) 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 del presente documento, pero no se limitan a tal cosa.
En algunas realizaciones, el procesador de gráficos 1800 incluye una canalización de gráficos 1820, una canalización de medios 1830, un motor de visualización 1840, una lógica de ejecución de hilos 1850 y una canalización de salida de representación 1870. En algunas realizaciones, el procesador de gráficos 1800 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 es controlado por escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 1800 mediante una interconexión en anillo 1802. En algunas realizaciones, la interconexión en anillo 1802 acopla el procesador de gráficos 1800 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de propósito general. Los comandos desde la interconexión en anillo 1802 son interpretados por un transmisor por flujo continuo de comandos 1803, que suministra instrucciones a componentes individuales de la canalización de gráficos 1820 o la canalización de medios 1830.
En algunas realizaciones, el transmisor por flujo continuo de comandos 1803 dirige la operación de un extractor de vértices 1805 que lee datos de vértice desde memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor por flujo continuo de comandos 1803. En algunas realizaciones, el extractor de vértices 1805 proporciona datos de vértice a un sombreador de vértices 1807, que realiza operaciones de transformación y de iluminación de espacio de coordenadas en cada vértice. En algunas realizaciones, el extractor de vértices 1805 y el sombreador de vértices 1807 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a las unidades de ejecución 1852A-1852B mediante un despachador de hilos 1831.
En algunas realizaciones, las unidades de ejecución 1852A-1852B son una matriz de procesadores de vectores que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunas realizaciones, las unidades de ejecución 1852A-1852B tienen una caché L1 adjunta 1851 que es específica para cada matriz o está compartida entre las matrices. La caché se puede configurar como una caché de datos, una caché de instrucciones o una única caché que se subdivide para contener datos e instrucciones en diferentes subdivisiones.
En algunas realizaciones, la canalización de gráficos 1820 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 de dominio programable 817 proporciona una evaluación de extremo trasero de la salida de teselación. Un teselador 1813 opera en la dirección del sombreador de casco 1811 y contiene una lógica de propósito especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico grueso que se proporciona como entrada a la canalización de gráficos 1820. En algunas realizaciones, si no se usa la teselación, pueden eludirse los componentes de teselación (por ejemplo, el sombreador de casco 1811, el teselador 1813 y el sombreador de dominio 1817).
En algunas realizaciones, unos objetos geométricos completos pueden ser procesados por un sombreador de geometría 1819 mediante uno o más hilos despachados a las unidades de ejecución 1852A-1852B, o puede avanzar directamente al recortador 1829. En algunas realizaciones, el sombreador de geometría opera sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en fases previas de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 1819 recibe una entrada desde el sombreador de vértices 1807. En algunas realizaciones, el sombreador de geometría 1819 se puede programar mediante un programa sombreador de geometría para realizar un teselación de geometría si las unidades de teselación están deshabilitadas.
Antes de la rasterización, un recortador 1829 procesa datos de vértice. El recortador 1829 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y de sombreador de geometría. En algunas realizaciones, un componente de prueba de rasterizador y de profundidad 1873 en la canalización de salida de representación 1870 despacha sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxel. En algunas realizaciones, la lógica de sombreador de píxeles se incluye en la lógica de ejecución de hilos 1850. En algunas realizaciones, una aplicación puede omitir el componente de prueba de rasterizador y de profundidad 1873 y acceder a datos de vértice sin rasterizar mediante una unidad de salida de flujo 1823.
El procesador de gráficos 1800 tiene un bus de interconexión, un tejido de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y de mensajes entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 1852A-1852B y la caché o cachés 1851 asociadas, el muestreador de textura y de medios 1854 y la caché de textura/muestreador 1858 se interconectan mediante un puerto de datos 1856 para realizar un acceso de memoria y comunicarse con componentes de canalización de salida de representación del procesador. En algunas realizaciones, el muestreador 1854, las cachés 1851, 1858 y las unidades de ejecución 1852A-1852B tienen, cada uno, rutas de acceso de memoria separadas.
En algunas realizaciones, la canalización de salida de representación 1870 contiene un componente de prueba de rasterizador y de profundidad 1873 que convierte objetos basados en vértices en una representación asociada basada en píxeles. En algunas realizaciones, la lógica de rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de líneas y de triángulos de función fija. Una caché de representación 1878 y una caché de profundidad 1879 asociadas también están disponibles en algunas realizaciones. Un componente de operaciones de píxel 1877 realiza operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxel asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) son realizadas por el motor 2D 1841, o son sustituidas en el momento de la visualización por el controlador de visualización 1843 usando planos de visualización de superposición. En algunas realizaciones, está disponible una caché de L3 compartida 1875 para todos los componentes de gráficos, permitiendo la compartición de datos sin el uso de memoria de sistema principal.
En algunas realizaciones, la canalización de medios del procesador de gráficos 1830 incluye un motor de medios 1837 y un extremo delantero de vídeo 1834. En algunas realizaciones, el extremo delantero de vídeo 1834 recibe comandos de canalización desde el transmisor de envío por flujo continuo 1803. En algunas realizaciones, la canalización de medios 1830 incluye un transmisor de envío por flujo continuo separado. En algunas realizaciones, el extremo delantero de vídeo 1834 procesa comandos de medios antes de enviar el comando al motor de medios 1837. En algunas realizaciones, el motor de medios 1837 incluye una funcionalidad de generación de hilos para generar hilos para despacharlos a la lógica de ejecución de hilos 1850 mediante el despachador de hilos 1831.
En algunas realizaciones, el procesador de gráficos 1800 incluye un motor de visualización 1840. En algunas realizaciones, el motor de visualización 1840 es externo al procesador 1800 y se acopla con el procesador de gráficos mediante la interconexión en anillo 1802, o algún otro bus o tejido de interconexión. En algunas realizaciones, el motor de visualización 1840 incluye un motor 2D 1841 y un controlador de visualización 1843. En algunas realizaciones, el motor de visualización 1840 contiene una lógica de propósito especial capaz de operar independientemente de la canalización de 3D. En algunas realizaciones, el controlador de visualización 1843 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 1820 y la canalización de medios 1830 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 una correlación 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 19A es un diagrama de bloques que ilustra un formato de orden de procesador de gráficos 1900 de acuerdo con algunas realizaciones. La Figura 19B es un diagrama de bloques que ilustra una secuencia de comando de procesador de gráficos 1910 de acuerdo con una realización. Los recuadros en línea continua en la Figura 19A ilustran los componentes que se incluyen, en general, en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de los comandos de gráficos. El formato de comando de procesador de gráficos 1900 ilustrativo de la Figura 19A incluye campos de datos para identificar un cliente objetivo 1902 del comando, un código de operación del comando (código de operación) 1904 y los datos relevantes 1906 para el comando. También se incluye un subcódigo de operación 1905 y un tamaño de comando 1908 en algunos comandos.
En algunas realizaciones, el cliente 1902 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En algunas realizaciones, un analizador de comando de procesador de gráficos examina el campo de cliente de cada comando para acondicionar el 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 1904 y, si está presente, el subcódigo de operación 1905 para determinar la operación a realizar. La unidad de cliente realiza el comando usando información en el campo de datos 1906. Para algunos comandos, se espera que un tamaño de comando explícito 1908 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 19B muestra una secuencia de comandos de procesador de gráficos 1910 ilustrativa. 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 Ios 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 de procesador de gráficos 1910 puede comenzar con un comando de vaciado de canalización 1912 para hacer que cualquier canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización de 3D 1922 y la canalización de medios 1924 no operan de manera concurrente. El vaciado de canalización se realiza para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de canalización, el analizador de comandos 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 relevantes. Opcionalmente, cualquier dato en la caché del representador que se marca 'sucio' puede vaciarse a memoria. En algunas realizaciones, el comando de vaciado de canalización 1912 se puede usar para la sincronización de canalización o antes de poner el procesador de gráficos en un estado de baja potencia.
En algunas realizaciones, se usa un comando de selección de canalización 1913 cuando una secuencia de comandos requiere que el procesador de gráficos conmute explícitamente entre canalizaciones. En algunas realizaciones, se requiere un comando de selección de canalización 1913 solo 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 1912 inmediatamente antes de una conmutación de canalización mediante el comando de selección de canalización 1913.
En algunas realizaciones, un comando de control de canalización 1914 configura una canalización de gráficos para la operación y se usa para programar la canalización de 3D 1922 y la canalización de medios 1924. En algunas realizaciones, el comando de control de canalización 1914 configura el estado de canalización para la canalización activa. En una realización, el comando de control de canalización 1914 se usa para la sincronización de canalización y para borrar datos de una o más memorias 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 1916 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 1916 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 canalización 1920, la secuencia de comandos se adapta a la canalización de 3D 1922 comenzando con el estado de canalización de 3D 1930, o a la canalización de medios 1924 comenzando en el estado de canalización de medios 1940.
Los comandos para configurar el estado de canalización de 3D 1930 incluyen comandos de ajuste de estado de 3D para el estado de memoria intermedia de vértice, el estado de elemento de vértice, el estado de color constante, el 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 del estado de canalización de 3D 1930 también son capaces de deshabilitar u omitir selectivamente ciertos elementos de canalización si esos elementos no se van a usar.
En algunas realizaciones, el comando de la primitiva 1932 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 19323D 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 1932 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 1932 se usa para realizar operaciones de vértice sobre primitivas 3D mediante sombreadores de vértices. Para procesar sombreadores de vértices, la canalización de 3D 1922 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 1922 se desencadena mediante un comando o evento de ejecución 1934. 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 Ios 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 1910 sigue la ruta de la canalización de medios 1924 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 1924 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 sombreadores 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 1924 se configura de una manera similar a la de la canalización de 3D 1922. Un conjunto de comandos para configurar el estado de canalización de medios 1940 se despacha o se coloca en una cola de comandos antes de los comandos de objeto de medios 1942. En algunas realizaciones, los comandos de estado de canalización de medios 1940 incluyen datos para configurar los elementos de canalización de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de descodificación de vídeo y codificación de vídeo dentro de la canalización de medios, tal como el formato de codificación o descodificación. En algunas realizaciones, los comandos de estado de canalización de medios 1940 también soportan el uso de uno o más punteros a elementos de estado "indirecto" que contienen un lote de ajustes de estado.
En algunas realizaciones, los comandos de objeto de medios 1942 suministran punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias que contienen datos de vídeo que van a procesarse. En algunas realizaciones, todos los estados de canalización de medios deben ser válidos antes de que se emita un comando de objeto de medios 1942. Una vez que está configurado el estado de la canalización y se ponen en cola los comandos de objeto de medios 1942, se activa la canalización de medios 1924 mediante un comando de ejecución 1944 o un evento de ejecución equivalente (por ejemplo, escritura de registro). La salida de la canalización de medios 1924 puede post procesarse a continuación por las operaciones proporcionadas por la canalización de 3D 1922 o la canalización de medios 1924. En algunas realizaciones, las operaciones de GPGPU se configuran y ejecutan de una manera similar a las operaciones de medios.
Arquitectura de software de gráficos
La Figura 20 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos 2000 de acuerdo con algunas realizaciones. En algunas realizaciones, la arquitectura de software incluye una aplicación de gráficos 3D 2010, un sistema operativo 2020 y al menos un procesador 2030. En algunas realizaciones, el procesador 2030 incluye un procesador de gráficos 2032 y uno o más núcleos de procesador de propósito general 2034. La aplicación de gráficos 2010 y el sistema operativo 2020 se ejecutan, cada uno, en la memoria de sistema 2050 del sistema de procesamiento de datos.
En algunas realizaciones, la aplicación de gráficos 3D 2010 contiene uno o más programas sombreadores que incluyen las instrucciones de sombreador 2012. 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 2014 en un lenguaje máquina adecuado para su ejecución por el núcleo de procesador de propósito general 2034. La aplicación también incluye los objetos de gráficos 2016 definidos por los datos de vértices.
En algunas realizaciones, el sistema operativo 2020 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo similar a UNIX patentado o un sistema operativo similar a UNIX de código abierto que usa una variante del núcleo Linux. El sistema operativo 2020 puede soportar una API de gráficos 2022 tal como la API Direct3D, la API OpenGL o la API Vulkan. Cuando está en uso la API Direct3D, el sistema operativo 2020 usa un compilador de sombreador de extremo delantero 2024 para compilar cualquier instrucción de sombreador 2012 en HLSL en un lenguaje de sombreador de nivel inferior. La compilación puede ser una compilación justo a tiempo (J IT) 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 2010. En algunas realizaciones, las instrucciones de sombreador 2012 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 2026 contiene un compilador de sombreador de extremo trasero 2027 para convertir las instrucciones de sombreador 2012 en una representación específica de hardware. Cuando está en uso la API OpenGL, las instrucciones de sombreador 2012 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 2026 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 2026 usa las funciones de modo de núcleo de sistema operativo 2028 para comunicarse con un controlador de gráficos de modo de núcleo 2029. En algunas realizaciones, el controlador de gráficos de modo de núcleo 2029 se comunica con el procesador de gráficos 2032 para despachar comandos e instrucciones.
Implementaciones de núcleo de IP
Uno o más aspectos de al menos una realización pueden implementarse mediante un código representativo almacenado en un medio legible por máquina que representa y/o define una 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 realiza operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
La Figura 21 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 2100 que puede usarse para fabricar un circuito integrado para realizar operaciones de acuerdo con una realización. El sistema de desarrollo de núcleo de IP 2100 se puede usar para generar diseños modulares reutilizables que pueden incorporarse en un diseño más grande o usarse para construir todo un circuito integrado (por ejemplo, un circuito integrado de SoC). Una instalación de diseño 2130 puede generar una simulación de software 2110 de un diseño de núcleo de IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). El software de simulación 2110 se puede usar para diseñar, someter a prueba y verificar el comportamiento del núcleo de IP usando un modelo de simulación 2112. El modelo de simulación 2112 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. A continuación, puede crearse o sintetizarse un diseño de nivel de transferencia de registro (RTL) 2115 a partir del modelo de simulación 2112. El diseño de RTL 2115 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 2115, 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 2115, o un equivalente, puede ser sintetizado adicionalmente por la instalación de diseño para obtener un modelo de hardware 2120, 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 2165 usando memoria no volátil 2140 (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 2150 o conexión inalámbrica 2160. La instalación de fabricación 2165 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 22-24 ilustran circuitos integrados ilustrativos 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, se pueden incluir otros circuitos y lógica, incluyendo procesadores/núcleos de gráficos adicionales, controladores de interfaz de periféricos o núcleos de procesador de propósito general.
La Figura 22 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo 2200 que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El circuito integrado 2200 ilustrativo incluye uno o más procesador o procesadores de aplicaciones 2205 (por ejemplo, unas CPU), al menos un procesador de gráficos 2210, y puede incluir adicionalmente un procesador de imágenes 2215 y/o un procesador de vídeo 2220, cualquiera de los cuales puede ser un núcleo de IP modular desde las mismas o múltiples instalaciones de diseño diferentes. El circuito integrado 2200 incluye una lógica de bus o de periféricos que incluye un controlador de USB 2225, un controlador de UART 2230, un controlador de SPI/SDIO 2235 y un controlador de I2S/I2C 2240. Adicionalmente, el circuito integrado puede incluir un dispositivo de visualización 2245 acoplado a uno o más de un controlador de interfaz multimedios de alta definición (HDMI) 2250 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 2255. El almacenamiento puede ser proporcionado por un subsistema de memoria flash 2260 que incluye una memoria flash y un controlador de memoria flash. La interfaz de memoria se puede proporcionar mediante un controlador de memoria 2265 para el acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 2270.
La Figura 23 es un diagrama de bloques que ilustra un procesador de gráficos 2310 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 2310 puede ser una variante del procesador de gráficos 2210 de la Figura 22. El procesador de gráficos 2310 incluye un procesador de vértices 2305 y uno o más procesadores de fragmentos 2315A-2315N (por ejemplo, 2315A, 2315B, 2315C, 2315D a 2315N-1 y 2315N). El procesador de gráficos 2310 puede ejecutar diferentes programas sombreadores mediante una lógica separada, de modo que el procesador de vértices 2305 está optimizado para ejecutar operaciones para programas sombreadores de vértices, mientras que los uno o más procesadores de fragmentos 2315A-2315N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas sombreadores de fragmentos o de píxeles. El procesador de vértices 2305 realiza la fase de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértice. El procesador o procesadores de fragmentos 2315A-2315N usan los datos de primitiva y de vértice generados por el procesador de vértices 2305 para producir una memoria intermedia de tramas que se visualiza en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 2315A-2315N están optimizados para ejecutar programas sombreadores de fragmentos según lo previsto en la API de OpenGL, que se pueden usar para realizar operaciones similares como un programa sombreador de píxeles según lo previsto en la API de Direct 3D.
El procesador de gráficos 2310 incluye adicionalmente una o más unidades de gestión de memoria (MMU) 2320A-2320B, caché o cachés 2325A-2325B e interconexión o interconexiones de circuito 2330A-2330B. La una o más MMU 2320A-2320B proporcionan mapeo de dirección virtual a física para el circuito integrado 2310, incluyendo para el procesador de vértices 2305 y/o el procesador o procesadores de fragmentos 2315A-2315N, 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 2325A-2325B. En una realización, la una o más MMU 2325A-2325B 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 2205, el procesador de imagen 2215 y/o el procesador de vídeo 2220 de la Figura 22, de manera que cada procesador 2205-2220 puede participar en un sistema virtual de memoria compartida o unificada. Las una o más interconexiones de circuito 2330A-2330B habilitan la interacción del procesador de gráficos 2310 con otros núcleos de IP dentro del SoC, o bien mediante un bus interno del SoC o bien mediante una conexión directa, de acuerdo con unas realizaciones.
La Figura 24 es un diagrama de bloques que ilustra un procesador de gráficos 2410 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 2410 puede ser una variante del procesador de gráficos 2210 de la Figura 22. El procesador de gráficos 2410 incluye las una o más MMU 2320A-2320B, las cachés 2325A-2325B y las interconexiones de circuito 2330A-2330B del circuito integrado 2300 de la Figura 23.
El procesador de gráficos 2410 incluye uno o más núcleos de sombreador 2415A-2415N (por ejemplo, 2415A, 2415B, 2415C, 2415D, 2415E, 2415F a 2415N-1 y 2415N), lo que prevé una arquitectura de núcleo de sombreador unificada en la que un único núcleo o tipo o núcleo puede ejecutar todos los tipos de código sombreador programable, incluyendo un código de programa 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 2410 incluye un gestor de tareas inter-núcleo 2405, que actúa como un despachador de hilo para despachar hilos de ejecución a uno o más núcleos de sombreador 2415A-2415N y una unidad de mosaico 2418 para acelerar las operaciones de mosaico para la representación basada en mosaico, en las que las operaciones de representación para una escena se subdividen en el espacio de imágenes, por ejemplo, para aprovechar la coherencia de espacio local dentro de una escena o para optimizar el uso de cachés internas.
En diversas realizaciones, las operaciones analizadas en el presente documento pueden implementarse como hardware (por ejemplo, circuitería lógica), software, firmware o combinaciones de los mismos, que pueden proporcionarse como un producto de programa informático, por ejemplo, que incluye un medio legible por máquina o por ordenador tangible (por ejemplo, no transitorio) que tiene almacenadas instrucciones (o procedimientos de software) usadas para programar un ordenador para realizar un proceso analizado en el presente documento. El medio legible por máquina puede incluir un dispositivo de almacenamiento de información.
Además, dichos medios legibles por ordenador pueden descargarse como un producto de programa informático, donde el programa puede transferirse desde un ordenador remoto (por ejemplo, un servidor) a un ordenador solicitante (por ejemplo, un cliente) por medio de señales de datos proporcionadas en un onda portadora u otro medio de propagación a través de un enlace de comunicación (por ejemplo, un bus, un módem o una conexión de red).
La referencia en la memoria descriptiva a "una realización" significa que un rasgo característico, estructura y/o característica particular descrita en relación con la realización puede incluirse en al menos una implementación. Las apariciones de la expresión "en una realización" en diversos lugares de la memoria descriptiva pueden referirse o no a la misma realización.
También, en la siguiente descripción y reivindicaciones, pueden usarse los términos "acoplado" y "conectado", junto con sus derivados. En algunas realizaciones, "conectado" puede usarse para indicar que dos o más elementos están en contacto físico o eléctrico directo entre sí. "Acoplado" puede significar que dos o más elementos están en contacto físico o eléctrico directo. Sin embargo, "acoplado" también puede significar que dos o más elementos pueden no estar en contacto directo entre sí, pero aun así pueden cooperar o interactuar entre sí.
Por tanto, aunque las realizaciones se han descrito en un lenguaje específico para rasgos característicos estructurales y/o los actos metodológicos, debe entenderse que la materia objeto reivindicada puede no estar limitada a los rasgos característicos o actos específicos descritos. Más bien, los rasgos característicos y actos específicos se divulgan como formas de muestra para implementar la materia objeto reivindicada.

Claims (11)

REIVINDICACIONES
1. Un aparato que comprende:
un procesador de gráficos para:
recibir, en una canalización de procesamiento de gráficos implementada en el procesador de gráficos, una trama; iniciar operaciones de procesamiento de gráficos en la trama;
caracterizado por que el procesador de gráficos está configurado además para:
recibir una o más indicaciones de omisión de código de corrección de errores que identifican datos de píxeles en la trama para la cual la omisión de procesamiento de código de corrección de errores al leer los datos de píxeles de una memoria caché no deteriora la calidad de una imagen a un nivel inaceptable; y omitir el procesamiento de código de corrección de errores en respuesta a una o más indicaciones de omisión de código de corrección de errores cuando se recuperan los datos de píxeles de la memoria caché.
2. El aparato de la reivindicación 1, en donde las una o más operaciones de procesamiento de gráficos comprenden al menos una operación de texturización o una operación de coloreado.
3. El aparato de la reivindicación 1, que comprende además:
un bloque de código de corrección de errores acoplado comunicativamente a la memoria caché para realizar el procesamiento de código de corrección de errores en los datos de píxeles de la memoria caché, comprendiendo el bloque de código de corrección de errores uno o más circuitos de transformada rápida de Fourier.
4. El aparato de la reivindicación 3, que comprende además:
una puerta acoplada comunicativamente a la memoria caché para:
recibir los datos de píxeles de la memoria caché y la indicación de código de corrección de errores, y enviar los datos de píxeles de la memoria caché cuando la indicación de código de corrección de errores indica que se debe habilitar el procesamiento de código de corrección de errores.
5. El aparato de la reivindicación 4, que comprende además:
un multiplexor acoplado comunicativamente a la memoria caché y a la salida del bloque de código de corrección de errores, el multiplexor para:
recibir la indicación de omisión de código de corrección de errores como una señal de control, en particular el multiplexor para:
emitir uno de los datos de píxel de la memoria caché o la salida del bloque de código de corrección de errores en respuesta a un valor de la indicación de omisión de código de corrección de errores.
6. El aparato de una cualquiera de las reivindicaciones anteriores, que comprende además:
una memoria legible por ordenador acoplada comunicativamente al procesador de gráficos.
7. Un método, que comprende:
recibir, en una canalización de procesamiento de gráficos implementada en un procesador de gráficos, una trama; iniciar operaciones de procesamiento de gráficos en la trama;
estando el método caracterizado por:
recibir una o más indicaciones de omisión de código de corrección de errores que identifican datos de píxeles en la trama para la cual la omisión de procesamiento de código de corrección de errores al leer los datos de píxeles de una memoria caché no deteriora la calidad de una imagen a un nivel inaceptable; y omitir el procesamiento de código de corrección de errores en respuesta a una o más indicaciones de omisión de código de corrección de errores cuando se recuperan los datos de píxeles de la memoria caché.
8. El método de la reivindicación 7, en donde las una o más operaciones de procesamiento de gráficos comprenden al menos una operación de texturización o una operación de coloreado.
9. El método de la reivindicación 7, en donde un bloque de código de corrección de errores está acoplado comunicativamente a la memoria caché para realizar el procesamiento de código de corrección de errores en los datos de píxeles de la memoria caché, comprendiendo el bloque de código de corrección de errores uno o más circuitos de transformada rápida de Fourier.
10. El método de la reivindicación 9, en donde una puerta se acopla comunicativamente a la memoria caché para: recibir los datos de píxeles de la memoria caché y la indicación de código de corrección de errores, y enviar los datos de píxeles de la memoria caché cuando la indicación de código de corrección de errores indica que se debe habilitar el procesamiento de código de corrección de errores.
11. El método de la reivindicación 10, en donde un multiplexor está acoplado comunicativamente a la memoria caché y a la salida del bloque de código de corrección de errores, el multiplexor para:
recibir la indicación de omisión de código de corrección de errores como una señal de control, en particular que comprende además:
emitir, desde el multiplexor uno de Ios datos de píxel de la memoria caché o la salida del bloque de código de corrección de errores en respuesta a un valor de la indicación de omisión de código de corrección de errores.
ES20206209T 2017-04-17 2018-03-15 Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software Active ES2953885T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/489,041 US10261859B2 (en) 2017-04-17 2017-04-17 Bypassing error correction code (ECC) processing based on software hint

Publications (1)

Publication Number Publication Date
ES2953885T3 true ES2953885T3 (es) 2023-11-16

Family

ID=61873260

Family Applications (1)

Application Number Title Priority Date Filing Date
ES20206209T Active ES2953885T3 (es) 2017-04-17 2018-03-15 Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software

Country Status (5)

Country Link
US (3) US10261859B2 (es)
EP (2) EP3809268B1 (es)
CN (1) CN108734632A (es)
ES (1) ES2953885T3 (es)
PL (1) PL3809268T3 (es)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261859B2 (en) 2017-04-17 2019-04-16 Intel Corporation Bypassing error correction code (ECC) processing based on software hint
US11061772B2 (en) * 2018-12-14 2021-07-13 Samsung Electronics Co., Ltd. FPGA acceleration system for MSR codes
CN111651715A (zh) * 2020-06-01 2020-09-11 中国科学院空天信息创新研究院 基于fpga的数据处理方法、处理器、设备和介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
TWI254848B (en) 2004-11-16 2006-05-11 Via Tech Inc Method and related apparatus for performing error checking-correcting
US9444737B2 (en) * 2009-04-27 2016-09-13 Intel Corporation Packet data processor in a communications processor architecture
US8692836B2 (en) 2009-10-08 2014-04-08 Ocz Technology Group, Inc. Computer system and processing method utilizing graphics processing unit with ECC and non-ECC memory switching capability
US8738993B2 (en) 2010-12-06 2014-05-27 Intel Corporation Memory device on the fly CRC mode
US9612901B2 (en) 2012-03-30 2017-04-04 Intel Corporation Memories utilizing hybrid error correcting code techniques
US9268702B2 (en) * 2013-04-11 2016-02-23 Institute of Computer Science (ICS) of the Foundation for Research and Technology—Hellas (FORTH) Storage I/O path partitioning to eliminate I/O interference in consolidated servers
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
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
US10282812B2 (en) * 2017-04-09 2019-05-07 Intel Corporation Page faulting and selective preemption
US10261859B2 (en) 2017-04-17 2019-04-16 Intel Corporation Bypassing error correction code (ECC) processing based on software hint
US11442795B2 (en) * 2018-09-11 2022-09-13 Nvidia Corp. Convergence among concurrently executing threads
US20210304736A1 (en) * 2020-03-30 2021-09-30 Nvidia Corporation Media engagement through deep learning
US20210326694A1 (en) * 2020-04-20 2021-10-21 Nvidia Corporation Distance determinations using one or more neural networks

Also Published As

Publication number Publication date
US10261859B2 (en) 2019-04-16
CN108734632A (zh) 2018-11-02
PL3809268T3 (pl) 2023-10-16
EP3809268A1 (en) 2021-04-21
EP3392772A1 (en) 2018-10-24
US10831598B2 (en) 2020-11-10
EP3809268B1 (en) 2023-06-07
US20210055992A1 (en) 2021-02-25
US11301322B2 (en) 2022-04-12
EP3392772B1 (en) 2020-11-18
US20190391871A1 (en) 2019-12-26
US20180300201A1 (en) 2018-10-18

Similar Documents

Publication Publication Date Title
ES2929978T3 (es) Fichero de registro jerárquico para una unidad GPGPU
US11587273B2 (en) Low power foveated rendering to save power on GPU and/or display
US20210109589A1 (en) Shutting down gpu components in response to unchanged scene detection
US20180308450A1 (en) Color mapping for better compression ratio
US10908905B2 (en) Efficient multi-context thread distribution
US11762696B2 (en) Hybrid low power homogenous grapics processing units
US10289179B2 (en) Dynamic control of liquid cooling pumps to provide thermal cooling uniformity
US20180285278A1 (en) Sector cache for compression
ES2907728T3 (es) Mezcla de coma fija especializada para eficiencia de consumo de energía
US20220051473A1 (en) Hierarchical depth buffer back annotation
US20180300951A1 (en) Adaptive tessellation for foveated rendering
ES2953885T3 (es) Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software
US20200201420A1 (en) Dynamically power on/off processing clusters during execution
US10769072B2 (en) Avoid cache lookup for cold cache
US11636831B2 (en) Adaptive multibit bus for energy optimization
US11409571B2 (en) High bandwidth connection between processor dies
EP3392873A1 (en) Active window rendering optimization and display