ES2969061T3 - Motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesador - Google Patents
Motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesador Download PDFInfo
- Publication number
- ES2969061T3 ES2969061T3 ES21184960T ES21184960T ES2969061T3 ES 2969061 T3 ES2969061 T3 ES 2969061T3 ES 21184960 T ES21184960 T ES 21184960T ES 21184960 T ES21184960 T ES 21184960T ES 2969061 T3 ES2969061 T3 ES 2969061T3
- Authority
- ES
- Spain
- Prior art keywords
- graphics
- memory
- processor
- processing
- data
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/113—Details of archiving
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
- Multi Processors (AREA)
Abstract
En un ejemplo, un aparato comprende una pluralidad de unidades de ejecución, y una primera memoria acoplada comunicativamente a la pluralidad de unidades de ejecución, en donde la primera memoria compartida es compartida por la pluralidad de unidades de ejecución y un motor de copia para copiar datos de estado de contexto de al menos al menos una primera de la pluralidad de unidades de ejecución a la primera memoria compartida. También se divulgan y reivindican otras realizaciones. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesadorCAMPO
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 implementar un motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesador.
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 microprocesador de circuito integrado (IC). Los componentes adicionales añaden cambio 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 microprocesador, 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 típicamente implementan técnicas de procesamiento, tales como canalizaciones, que intentan procesar, en paralelo, tantos datos de gráficos como sea posible a lo largo de todas las diferentes partes de la canalización de gráficos. Los procesadores de gráficos paralelos con arquitecturas de múltiples subprocesos y única instrucción (SIMT) se diseñan para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura de SIMT, grupos de subprocesos paralelos intentan ejecutar instrucciones de programa de manera síncrona conjuntamente 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 US2006100986 divulga un método y un sistema para reducir los tiempos de cambio de contexto.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
De acuerdo con un aspecto de la presente invención, se proporcionan un multiprocesador de gráficos de acuerdo con la reivindicación 1 y un método de acuerdo con la reivindicación 10.
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 acopladas en comunicación 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.
La Figura 6A es una ilustración esquemática de una arquitectura para implementar un archivo de registro general (GRF) jerárquico para bloques de ejecución, de acuerdo con las realizaciones.
La Figura 6B es una ilustración esquemática de un diagrama de flujo para implementar un archivo de registro general (GRF) jerárquico para bloques de ejecución, de acuerdo con las realizaciones.
Las Figuras 7A-7C son ilustraciones esquemáticas de arquitecturas para implementar un archivo de registro general (GRF) jerárquico para bloques de ejecución, de acuerdo con las realizaciones.
La Figura 8 ilustra un diagrama de bloques de un regulador de cambio 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 subprocesos 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 comandos 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 en un microprocesador del sistema 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 microprocesador integrado, de acuerdo con una realización.
Descripción detallada
En la siguiente descripción, se exponen numerosos detalles específicos para proporcionar un entendimiento completo de diversas realizaciones. Sin embargo, se pueden practicar diversas realizaciones sin los detalles específicos, en realizaciones que no están de acuerdo con la invención reivindicada. 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.
En realizaciones que no se ajustan a la invención reivindicada, algunas realizaciones analizadas en el presente documento se pueden aplicar en cualquier procesador (tal como GPCPU, CPU, GPU, etc.}, controladores gráficos, etc. Las realizaciones según la invención reivindicada se aplican en un sistema gráfico. multiprocesador. También se describen 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 gráfico (GPU} se acopla con capacidad de comunicación con núcleos del sistema central/procesador para acelerar las operaciones de gráficos, operaciones de aprendizaje automatizado, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU se puede acoplar con capacidad de comunicación con el procesador/núcleos del sistema central a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad como por ejemplo PCIe o NVLink). En otras realizaciones, la GPU se puede integrar en el mismo paquete o microprocesador que los núcleos y se puede acoplar con capacidad de comunicación con los núcleos a través de un bus/interconexión interna del procesador (es decir, interna al paquete o procesador). Independientemente de la manera en la que esté conectada la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en forma de secuencias de órdenes/instrucciones contenidas en un descriptor de trabajo. La GPU utiliza entonces circuitos/lógica dedicados para procesar de forma efectiva estas órdenes/instrucciones.
En la siguiente descripción, se exponen numerosos detalles específicos para proporcionar una comprensión más minuciosa. Sin embargo, será evidente para un experto en la técnica que las realizaciones descritas en el presente documento pueden ponerse en práctica sin uno o más de estos detalles específicos, en las realizaciones que no están de acuerdo con la invención reivindicada. En otros casos, no se han descrito características bien conocidas para evitar oscurecer los detalles de las presentes realizaciones.
Vista general del sistema
LaFigura 1es 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(es) 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 microprocesadores o puede integrarse dentro del/de los uno o más procesador(es) 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 mediante un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede posibilitar que el sistema informático 100 reciba una entrada desde uno o más dispositivo(s) de entrada 108. Adicionalmente, el concentrador de E/S 107 puede posibilitar que un controlador de visualización, que puede incluirse en el/los uno o más procesador(es) 102, proporcione salidas a uno o más dispositivo(s) de visualización 110A. En una realización, el/los uno o más dispositivo(s) de visualización 110A acoplado(s) con el concentrador de E/S 107 puede(n) 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 del proveedor. En una realización, el uno o más procesadores paralelos 112 forman un sistema de procesamiento paralelo o vectorial computacionalmente enfocado 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, el uno o más procesadores paralelos 112 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno del uno o más dispositivos de visualización 110A acoplados mediante el concentrador de E/S 107. El uno o más procesadores paralelos 112 pueden incluir también un controlador de visualización e interfaz de visualización (no mostrados) para permitir una conexión directa a uno o más dispositivos de visualización 110B.
Dentro del subsistema de E/S 111, una unidad de almacenamiento de sistema 114 puede conectarse al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Puede usarse un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para posibilitar conexiones entre el concentrador de E/S 107 y otros componentes, 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 dispositivo(s) de adición 120. El adaptador de red 118 puede ser un adaptador de Ethernet u otro adaptador de red cableada. El adaptador de red inalámbrica 119 puede incluir uno o más de un dispositivo de Wi-Fi, Bluetooth, de comunicación de campo cercano (NFC) u otra red que incluye una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes no explícitamente mostrados, que incluyen USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo y similares que 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, el 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, el 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, los componentes del sistema informático 100 pueden estar integrados con uno o más otros 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 microprocesador (S<o>C). 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 microprocesadores (MCM), que puede interconectarse con otros módulos de múltiples microprocesadores para dar 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 procesador(es) 102, y el número de procesador(es) paralelo(s) 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 del uno o más procesador o 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 microprocesador. Algunas realizaciones pueden incluir dos o más conjuntos del 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.
Alguno de los componentes particulares mostrados en el presente documento es opcional y puede no estar incluido en todas las implementaciones del sistema informático 100. Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos de adición, o pueden eliminarse algunos componentes. 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.
LaFigura 2Ailustra un procesador paralelo 200, de acuerdo con una realización. Los diversos componentes del procesador paralelo 200 pueden implementarse usando uno o más dispositivos de circuito integrado, tal como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o matrices de puertas programables en campo (FPGA). El procesador paralelo 200 ilustrado es una variante del 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 frontal 208. En una realización, el extremo frontal 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 agrupaciones de procesamiento 212 puede ejecutar un gran número de subprocesos concurrentes. El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 usando diversos algoritmos de planificación y/o de distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo. La planificación puede ser manejada dinámicamente por el planificador 210, o puede ser asistida, en parte, por 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 agrupación de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
La matriz de agrupación de procesamiento 212 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. En una realización, la matriz de agrupación de procesamiento 212 está configurada para realizar operaciones de cálculo paralelo de propósito general. Por ejemplo, la matriz de agrupación de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento que incluye filtración de datos de vídeo y/o de audio, realización de operaciones de modelado, que incluye operaciones físicas y realización de transformaciones de datos.
En una realización, la matriz de agrupación de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos en paralelo. En realizaciones en las que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupación 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 grupos 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 microprocesador (por ejemplo, memoria de procesador paralelo 222) durante el procesamiento y, a continuación, escribirse de vuelta en 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 permitir 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, porciones de la matriz de agrupación de procesamiento 212 se pueden configurar para realizar diferentes tipos de procesamiento. Por ejemplo, una primera porción puede estar configurada para realizar sombrado de vértices y generación de topología, una segunda porción puede estar configurada para realizar teselación y sombreado de geometría, y una tercera porción puede estar configurada para realizar sombreado de píxeles u otras operaciones de espacio de pantalla, para producir una imagen representada para su visualización. Los datos intermedios producidos por una o más de las agrupaciones 214A-214N pueden almacenarse en memorias intermedias para permitir que se transmitan los datos intermedios entre las agrupaciones 214A-214N para su procesamiento adicional.
Durante el funcionamiento, la matriz de grupos de procesamiento 212 puede recibir tareas de procesamiento que hay que ejecutar mediante el planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos que hay que procesar, por ejemplo, datos de superficie (parche), datos de primitiva, datos de vértice y/o datos de píxel, 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 configurarse para extraer los índices que corresponden a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede configurarse para garantizar que la matriz de agrupaciones de procesamiento 212 está configurada en un estado válido antes de que se inicie la carga de trabajo especificada por memorias intermedias de comando de entrada (por ejemplo, memorias intermedias de lotes, memorias intermedias de inserción, etc.).
Cada una de las 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 agrupaciones de procesamiento 212, así como 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 división (por ejemplo, la unidad de división 220A, la unidad de división 220B a la unidad de división 220N), cada una acoplable 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 división 220A-220N está configurado para que sea igual al número de unidades de memoria, de manera que una primera unidad de división 220A tiene una correspondiente primera unidad de memoria 224A, una segunda unidad de división 220B tiene una correspondiente unidad de memoria 224B y una unidad de división de comando N 220N tiene una correspondiente unidad de memoria de comando 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 divisió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 los grupos 214A-214N de la matriz de grupo 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 grupo 214A-214N en cualquier unidad de división 220A-220N o en otro grupo 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 adición, o pueden interconectarse múltiples tarjetas de adición. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden estar configuradas para interoperar 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.
LaFigura 2Bes 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 fotograma 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 almacenamiento 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é L2 221 a la interfaz de memoria intermedia de fotograma 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 grupo de procesamiento (por ejemplo, el grupo 214A-214N de la Figura 2) en lugar de dentro de la unidad de divisió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 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.
LaFigura 2Ces 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 subprocesos en paralelo, donde el término "subproceso" 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 instrucción de única instrucción de múltiples datos (SIMD) para soportar la ejecución paralela de un gran número de subprocesos sin proporcionar múltiples unidades de instrucción independientes. En otras realizaciones, se usan técnicas de única instrucción de múltiples subprocesos (SIMT) para soportar la ejecución paralela de un gran número de subprocesos 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 subprocesos sigan más fácilmente rutas de ejecución divergentes a través de un programa de subprocesos 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 texturas 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. Puede 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 del clúster 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-almacenamiento, etc.). La lógica de ejecución funcional puede configurarse de una manera canalizada en la que pueden emitirse nuevas instrucciones 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 subproceso. Un conjunto de subprocesos que se ejecutan a través del conjunto de motores de procesamiento paralelo es un grupo de subprocesos. Un grupo de subprocesos ejecuta el mismo programa en diferentes datos de entrada. Cada subproceso dentro de un grupo de subprocesos puede asignarse a un motor de procesamiento diferente dentro de un multiprocesador de gráficos 234. Un grupo de subprocesos puede incluir menos subprocesos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando un grupo de subprocesos incluye menos subprocesos que el número de motores de procesamiento, uno o más de los motores de procesamiento pueden encontrarse en reposo durante ciclos en los que se está procesando ese grupo de subprocesos. Un grupo de subprocesos puede incluir también más subprocesos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando el grupo de subprocesos incluye más subprocesos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, el procesamiento se puede realizar durante ciclos de reloj consecutivos. En una realización, pueden ejecutarse múltiples grupos de subprocesos 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 almacenamiento. 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é L1308) 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 (p. ej., 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 subprocesos. El multiprocesador de gráficos 234 puede acceder también a memoria global fuera de microprocesador, que puede incluir uno o más de memoria de procesador paralelo local y/o memoria de sistema. Cualquier memoria externa a la unidad de procesamiento paralelo 202 puede usarse 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é de L1 308.
Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para correlacionar 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 el grupo de procesamiento 214. La dirección física se procesa para distribuir la localidad de acceso a los datos de superficie para permitir un entrelazado eficiente de solicitudes entre unidades de divisió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ática, se puede configurar un grupo de procesamiento 214 de modo que cada multiprocesador de gráficos 234 esté acoplado a una unidad de textura 236 para realizar operaciones de mapeo de textura, por ejemplo, determinar posiciones de muestras de textura, leer datos de textura y filtrar los datos de textura. Los datos de textura se leen desde una caché L1 de textura interna (no mostrada) o, en algunas realizaciones, desde la caché L1 dentro del multiprocesador de gráficos 234 y se extraen desde una caché L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador de gráficos 234 emite tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su procesamiento adicional o para almacenar la tarea procesada en una caché L2, memoria de procesador paralelo local o memoria de sistema mediante la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones previas a la rasterización) está configurada para recibir datos desde el multiprocesador de gráficos 234, dirigir datos a las unidades de ROP, que pueden estar ubicadas con unidades de subdivisión como se describe en el presente documento (p. ej., 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 variaciones y 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 solo se muestra una agrupación de procesamiento 214, una 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 grupo de procesamiento 214 puede configurarse para funcionar independientemente de otros grupos de procesamiento 214 usando unidades de procesamiento separadas y distintas, cachés L1, etc.
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/almacenamiento 266. Los núcleos de GPGPU 262 y las unidades de carga/almacenamiento 266 están acoplados con la memoria caché 272 y a 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 envían para su ejecución por la unidad de instrucciones 254. La unidad de instrucciones 254 puede despachar instrucciones como grupos de subprocesos (por ejemplo, envolventes), con cada subproceso del grupo de subprocesos 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 a la que puede accederse por las unidades de carga/almacenamiento 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, núcleos GPGPU 262, unidades de carga/almacenamiento 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.
Cada uno de los núcleos GPGPU 262 puede incluir unidades de punto flotante (FPU) y/o unidades lógicas aritméticas enteras (ALU) 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/almacenamiento 266 implemente operaciones de carga y almacenamiento entre la memoria compartida 270 y el archivo de registro 258. El archivo de registro 258 puede funcionar 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 subprocesos 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 subprocesos que se ejecutan en los núcleos GPGPU 262 pueden almacenar datos mediante programación dentro de la memoria compartida además de Ios datos almacenados en caché automáticamente que se almacenan dentro de la memoria caché 272.
LasFiguras 3A-3Bilustran multiprocesadores de gráficos adicionales, de acuerdo con realizaciones. Los multiprocesadores de gráficos 325, 350 ilustrados son variantes del multiprocesador de gráficos 234 de la Figura 2C. Los multiprocesadores de gráficos 325, 350 ilustrados pueden estar configurados como un multiprocesador de envío por flujo continuo (SM) que puede realizar la ejecución simultánea de un gran número de subprocesos 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 textura 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de gráficos o unidades de ejecución de cálculo (por ejemplo, núcleo GPGPU 336A-336B, núcleo GPGpU 337A-337B, núcleo 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 una memoria compartida 346. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 327. En una realización, el tejido de interconexión 327 incluye uno o más conmutadores de barra transversal para habilitar 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 cargaalmacenamiento, 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(s) unidad(es) de textura 360A-360D para operaciones de textura, mientras comparten una memoria caché de instrucciones 354 y una 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 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 de anfitrión/núcleos a través de un bus u otra interconexión (p. ej., una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU se puede integrar en el mismo paquete o microprocesador que los núcleos y se puede acoplar con capacidad de comunicación con los núcleos a través de un bus/interconexión interna del procesador (es decir, interna al paquete o procesador). Independientemente de la manera en la que esté conectada la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en forma de secuencias de órdenes/instrucciones contenidas en un descriptor de trabajo. La GPU utiliza entonces circuitos/lógica dedicados para procesar de forma efectiva estas órdenes/instrucciones.
Técnicas para interconexión de GPU a procesador de anfitrión
LaFigura 4Ailustra 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 los 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 Ios diversos componentes de sistema mostrados en laFigura 4Apuede conseguirse usando Ios mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, según se mencionó, 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 multinúcleo 405-406 se acopla con capacidad de comunicación a una memoria de procesador 401-402, por medio de interconexiones de memoria 430-431, respectivamente, y cada GPU 410-413 se acopla con capacidad de comunicación a la memoria GPU 420-423 a través de interconexiones de memoria 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, tal como memorias de acceso aleatorio dinámicas (DrAm ) (que incluyen DRAM apiladas), SDRAM DDR de gráficos (Gd DR) (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 GPU 410-413 pueden estar físicamente acoplados a una memoria particular 401-402, 420-423, 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, las memorias de procesador 401-402 puede cada una comprender 64 GB de la memoria del espacio de direcciones de sistema y las memorias de GPU 420-423 puede cada una comprender 32 GB de la memoria del espacio de direcciones de sistema (dando como resultado un total de 256 GB de memoria direccionable en este ejemplo).
LaFigura 4Bilustra 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 microprocesadores 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 microprocesador 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 han ilustrado para evitar oscurecer los principios subyacentes de la invención, (por ejemplo, unidades de extracción de instrucción, unidades de predicción de ramal, decodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y de nivel 2 (L2). Además, una o más memorias caché compartidas 426 pueden incluirse en la jerarquía de almacenamiento en memoria caché y ser compartidas por conjuntos de 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 es 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
La coherencia se mantiene para los datos e instrucciones almacenadas en las diversas memorias caché 462A-462D, 456 y la memoria del sistema 441 mediante comunicación entre núcleos 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 técnica 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 proxy 425 acopla con capacidad de comunicación el módulo de aceleración de gráficos 446 al bus de coherencia 464, permitiendo al módulo de aceleración de gráficos 446 participar en el protocolo de coherencia de caché como un par de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito 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é, acceso a memoria, gestión de contexto y gestión de interrupciones en nombre de una pluralidad de motores de procesamiento de gráficos 431, 432, N del módulo de aceleración de gráficos 446. Cada uno de los motores de procesamiento de gráficos 431,432, N puede comprender una unidad de procesamiento de gráficos (GPU) separada. Alternativamente, 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 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 Ios motores de procesamiento de gráficos 431-432, N pueden ser GPU individuales integradas en un paquete, tarjeta de línea o microprocesador 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 efectiva 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/efectiva 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 intermediario 425 que toma parte en el mecanismo de coherencia de caché en beneficio de la caché 438 y las memorias 433-434, N (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con modificaciones/accesos de líneas de caché en las cachés de procesador 462A-462D, 456 y recibiendo actualizaciones desde la caché 438).
Un conjunto de registros 445 almacenan datos de contexto para subprocesos 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 subproceso. 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 subprocesos durante cambios de contexto (por ejemplo, cuando se graba un primer subproceso y se almacena un segundo subproceso de modo que el segundo subproceso 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 de acelerador de gráficos 446 puede estar especializado en 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 "porciones" que se asignan a diferentes VM y/o aplicaciones en función de los requisitos de procesamiento y las prioridades asociadas con las VM y/o aplicaciones.
Por lo tanto, el circuito de integración de acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona servicios de traducción de direcciones y de caché de memoria de sistema. Además, el circuito de integración de acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador de anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de memoria.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se mapean explícitamente con el 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 eficaz. 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 serán usados de la manera más frecuente por los motores de procesamiento de gráficos 431 -432, N y preferentemente no serán usados por los núcleos 460A-460D (al menos, no con frecuencia). De manera similar, el mecanismo de desvío intenta mantener datos que necesitan 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.
LaFigura 4Cilustra otra realización en la que el circuito de integración de acelerador 436 está integrado dentro del procesador 407. En esta realización, los motores de procesamiento de gráficos 431 -432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración de acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, puede utilizar cualquier forma de bus o protocolo de interfaz}. El circuito de integración de acelerador 436 puede realizar las mismas operaciones que aquellas descritas con respecto a laFigura 4B,pero potencialmente a un caudal superior dada su proximidad cercana al bus de coherencia 462 y a las cachés 462A-462D, 426.
Una realización admite diferentes modelos de programación, incluido un modelo de programación de proceso dedicado (sin virtualización del módulo de aceleración de gráficos} y modelos de programación compartidos (con virtualización}. Estos últimos pueden incluir modelos de programación controlados por el circuito de integración acelerador 436 y modelos de programación controlados por el módulo de aceleración de gráficos 446.
En una realización del modelo de proceso dedicado, los motores de procesamiento de gráficos 431-432, N están dedicados a una única aplicación o proceso bajo un único sistema operativo. La única aplicación puede encauzar otras solicitudes de aplicación a los motores de gráficos 431-432, N, lo que proporciona virtualización dentro de una VM/subdivisión.
En los modelos de programación de proceso especializado, los motores de procesamiento de gráficos 431-432, N, pueden compartirse por múltiples VM/subdivisiones de aplicación. Los modelos compartidos requieren un sistema hipervisor para virtualizar los motores de procesamiento de gráficos 431 -432, N para permitir acceso por cada sistema operativo. Para sistemas de subdivisión única sin un hipervisor, los motores de procesamiento de gráficos 431-432, N son de 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 del proceso se almacenan en la memoria del sistema 411 y se pueden direccionar utilizando 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.
LaFigura 4Dilustra un segmento de integración de acelerador 490 ilustrativo. Como se usa en el presente documento, un "segmento" comprende una porción especificada de los recursos de procesamiento del circuito de integración de acelerador 436. El espacio de direcciones eficaces de aplicación 482 dentro de la memoria de sistema 411 almacena los 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 aplicación correspondiente 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 solicitud 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 especializado 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 divisió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 segmento de integración de acelerador 490 extrae el siguiente WD 484 que incluye una indicación del trabajo que va a hacerse por uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Los datos del WD 484 pueden almacenarse en registros 445 y ser utilizados 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 recorrido de páginas/segmentos para acceder a las tablas de segmentos/páginas 486 dentro del espacio de direcciones virtual del SO 485. El circuito de gestión de interrupciones 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 segmento de integración de acelerador 490. Se muestran Ios registros ilustrativos que pueden inicializarse por el hipervisor en laTabla 1.
Tabla 1- R i r ini i liz r l hi rvi r
Los registros de ejemplo que pueden ser inicializados por el sistema operativo se muestran en laTabla 2.
Tabla 2- R i r ini i liz r i m r iv
En una realización, cada WD 484 es específico de un módulo de aceleración de gráficos 446 particular y/o motor de procesamiento de gráficos 431-432, N. Contiene toda la información que un motor de procesamiento de gráficos 431 432, N requiere para realizar su trabajo o puede ser un puntero a una ubicación de memoria donde la aplicación ha configurado una cola de comandos de trabajo para completar.
LaFigura 4Eilustra 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 divisiones en el sistema utilicen 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 segmentos de tiempo y compartido dirigido a gráficos.
En este modelo, el hipervisor del sistema 496 posee el módulo de aceleración de gráficos 446 y pone su función a disposición de todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte virtualización por el hipervisor de sistema 496, el módulo de aceleración de gráficos 446 puede adherirse a los siguientes requisitos: 1) La solicitud de trabajo de una aplicación ha de ser autónoma (es decir, no es necesario mantener el estado entre trabajos), o el módulo de aceleración de gráficos 446 ha de proporcionar un mecanismo de grabación y restauración de contexto. 2) Se garantiza, por el módulo de aceleración de gráficos 446, que la solicitud de trabajo de una aplicación se completa en una cantidad especificada de tiempo, incluyendo cualquier fallo de traducción, o el módulo de aceleración de gráficos 446 proporciona la capacidad de dar prioridad al procesamiento del trabajo. 3) Se ha de garantizar al módulo de aceleración de gráficos 446 la equidad entre procesos cuando se 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 al sistema operativo 495 con un tipo de módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de área de grabación/restauración de contexto (CSRP). El tipo del módulo de aceleración de gráficos 446 describe la función de aceleración dirigida como objetivo para la llamada de sistema. El tipo del 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 eficaz a una estructura definida por el usuario, un puntero de dirección eficaz 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 utilización 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 de 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 de hipervisor. Opcionalmente, el hipervisor 496 puede aplicar 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 contienen la dirección eficaz de un área en el espacio de direcciones 482 de la aplicación para que el módulo de aceleración de gráficos 446 guarde y restablezca el estado de contexto. Este puntero es opcional si no se requiere que se guarde estado alguno entre trabajos o cuando se da prioridad a 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 laTabla 3.
Tabla 3- P r m r ll m hi rvi r
Al recibir la llamada del hipervisor, el hipervisor 496 verifica que el sistema operativo 495 se haya registrado y se le haya otorgado 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 laTabla 4.
Tabla 4- Inf rm i n l m n r
En una realización, el hipervisor inicializa una pluralidad de registros 445 del segmento 490 de integración del acelerador.
Como se ilustra en laFigura 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 401402 y a las memorias de GPU 420-423. En esta implementaoión, las operaciones ejecutadas en las GPU 410-413 utilizan el mismo espacio de direcciones de memoria virtual/efectivo para acceder a las memorias de procesador 401 -402 y viceversa, simplificando de esta manera la programabilidad. En una realización, una primera porción del espacio de direcciones virtual/efectivo está asignada a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420 y así sucesivamente. El espacio de memoria virtual/eficaz total (en ocasiones denominado el espacio de direcciones eficaz) está distribuido, de esta manera, a través de cada una de las memorias de procesador 401-402 y de las memorias de GPU 420-423, permitiendo 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 (p. ej., 405) y las GPU 410 413 e implementa técnicas de desvío que indican las memorias físicas en las que deberían almacenarse ciertos tipos de datos. Aunque se ilustran múltiples casos de circuitería de gestión de desvío/coherencia 494A-494E en laFigura 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 anexada a GPU 420-423 se mapee como parte de la memoria de sistema, y que se acceda a la misma usando tecnología de memoria virtual compartida (SVM), pero sin sufrir de las desventajas de rendimiento típicas asociadas con la coherencia de caché de sistema completa. La capacidad para acceder a la memoria anexada a GPU 420-423 como memoria de sistema sin una onerosa sobrecarga de coherencia de la caché proporciona un entorno de operación beneficioso para la descarga de GPU. Esta disposición permite que el software del procesador de anfitrión 405 establezca operandos y acceda a resultados de cálculo, sin la sobrecarga de las copias de datos de DMA de E/S tradicionales. Dichas copias tradicionales implican llamadas de controlador, interrupciones y accesos de E/S asignados en 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 conectada a la GPU 420-423 sin sobrecargas de coherencia de caché puede ser fundamental para el tiempo de ejecución de un cálculo descargado. En casos con tráfico de memoria de escritura de transmisión por flujo continuo sustancial, por ejemplo, la sobrecarga de coherencia de 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álculo 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 se controla por una estructura de datos del rastreador de desvío. Puede usarse una tabla de desvío, por ejemplo, que puede ser una estructura de página granular (es decir, controlada a la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria anexada a la GPU. La tabla de desvío puede implementarse en un intervalo 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ío). Como alternativa, toda la tabla de desvío puede mantenerse dentro de la GPU.
En una implementación, se accede a la entrada de tabla de desvío asociada con cada acceso a la memoria adjunta a la GPU 420-423 antes del acceso real a la memoria de GPU, provocando las siguientes operaciones. En primer lugar, las solicitudes locales de la GPU 410-413 que encuentran su página en el desvío de GPU se reenvían directamente a una correspondiente memoria de GPU 420-423. Las solicitudes locales desde la GPU que encuentran su página en el desvío de anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). En una realización, las solicitudes del procesador 405 que encuentran la página solicitada en el desvío de procesador de anfitrión completan la solicitud como una lectura de memoria normal. Como alternativa, las solicitudes dirigidas a una página con desvío de GPU pueden redirigirse a la GPU 410-413. La GPU puede pasar, a continuación, la página 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 mediante un mecanismo basado en software, mediante un mecanismo basado en software asistido por hardware, o, 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 API (por ejemplo, OpenCL), que, a su vez, llama al controlador del dispositivo de la GPU que, a su vez, envía un mensaje (o pone en cola un descriptor de comandos) a la GPU que la dirige para cambiar el estado de desvío y, para algunas transiciones, realiza 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 el 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 el acceso de inmediato, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410, es ventajoso garantizar que las páginas con GPU de desvío sean aquellas que se requieren por la GPU, pero no por el procesador de anfitrión 405 y viceversa.
Canalización de procesamiento de gráficos
LaFigura 5ilustra 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 (p. ej., la unidad de procesamiento paralelo 202 de la Figura 2) como se describe en el presente documento. Por ejemplo, una unidad sombreadora (p. ej., 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 (p. ej., la agrupación de procesamiento 214 de la Figura 3) y una correspondiente unidad de subdivisión (p. ej., 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, pueden 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 microprocesador (p. ej., 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 sombreadores de vértices, iluminando y transformando datos de vértice según lo especificado por los programas sombreadores de vértices. La unidad de procesamiento de vértices 504 lee datos que se almacenan en memoria caché, local o de sistema para su uso en el procesamiento de los datos de vértices y puede programarse para transformar los datos de vértices desde una representación de coordenadas basada en objetos hasta un espacio de coordenadas de 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 gráficas incluyen triángulos, segmentos de línea, puntos, parches, etcétera, según lo soportado por diversas interfaces de programación de aplicaciones (API) de procesamiento gráfico.
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 calcular 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 los bordes de un parche y para teselar el parche en múltiples primitivas geométricas tales como primitivas de línea, triángulo o cuadrilátero, 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 de superficie y atributos de vértice 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 de sombreador de geometría para transformar primitivas de gráficos recibidas desde el ensamblador de primitivas 514 como se especifica por los programas de sombreador 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 envía los parámetros y vértices que especifican nuevas primitivas gráficas al ensamblador primitivo 518. El ensamblador de primitivas 518 recibe los parámetros y vértices de la unidad de procesamiento de geometría 516 y construye primitivas de gráficos para su procesamiento mediante una unidad de escala, 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 escala, selección y recorte de ventana gráfica 520 realiza recorte, selección y escalado de 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 la conversión de exploración en las nuevas primitivas de gráficos para generar fragmentos y emitir aquellos 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 de sombreador de fragmentos o programas de sombreador de píxeles. Transformando, la unidad de procesamiento de fragmentos/píxeles 524, fragmentos o píxeles recibidos desde el rasterizador 522, según sea especificado por los programas de sombreado 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, mapeo 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 en cualquiera de la memoria de procesador paralelo o la memoria de sistema para su uso cuando se procesan los datos de fragmento. Los programas sombreadores de fragmentos o de píxeles pueden estar configurados para sombrear a granularidad de muestra, de píxel, de mosaico u otras dependiendo de la tasa de muestreo configurada 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íxeles como datos de gráficos procesados para que se almacenen en la memoria de gráficos (p. ej., la memoria de procesador paralelo 222 como en la Figura 2, y/o la memoria de sistema 104 como en la Figura 1, para que se visualicen en el uno o más dispositivos de visualización 110 o para su procesamiento adicional por uno del uno o más procesadores 102 o procesadores paralelos 112. En algunas realizaciones, la unidad de operaciones de rasterización 526 está configurada para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde la memoria.
En algunos ejemplos, para optimizar los tiempos de cambio de contexto en máquinas grandes, es posible utilizar el almacenamiento interno (es decir, cachés grandes, etc.) para reducir el tiempo necesario para grabar y restaurar la información de contexto del hardware. Muchas arquitecturas de GPU existentes escriben los datos de contexto del hardware en una memoria. Durante la restauración de contexto, los datos del contexto se leen de la memoria para cargar el estado del hardware antes de la ejecución del subproceso en una unidad de ejecución diferente.
Las limitaciones del ancho de banda de la memoria y el tamaño de los datos de contexto del hardware que deben grabarse y restaurarse contribuyen a los tiempos de grabación y restauración del contexto. Por lo tanto, se deben tomar decisiones sobre hardware y software con respecto a cuándo adelantarse a un contexto ya ejecutado. Sin embargo, a veces la prioridad es inevitable para proporcionar un cierto nivel de calidad de servicio.
Con referencia a la Figura 6A, el almacenamiento de hardware grande 620 (es decir, caché en microprocesador o memoria interna) se usa para almacenar el estado del hardware como parte de una operación de grabación de contexto. El proceso de grabación en memoria se descarga a un motor de copia paralelo 625 que se realiza en paralelo mientras la ejecución del nuevo contexto está en curso y/o mientras se restaura un estado de hardware. El programador 615 indicará al motor de copia 625 que recupere el contenido del contexto previamente apropiado en el almacenamiento interno 620. Cuando se complete la operación de copia, el programador de hardware 615 iniciará la operación de restauración utilizando los datos del almacenamiento en microprocesador 620.
Con referencia a la Figura 6B, se implementa el siguiente flujo operativo. En la operación 650, el programador 615 señala el proceso de prioridad al hardware. En la operación 655, se puede preparar el almacenamiento en microprocesador 620 si se trata de un almacenamiento multipropósito.
En la operación 660, el hardware detiene la ejecución del contexto existente y en la operación 665 graba su estado en el almacenamiento en microprocesador. Esto es mucho más rápido dado que las estructuras internas de una GPU tienen un ancho de banda mucho mayor que el de la memoria externa (es decir, lo típico es 4x).
Una vez que se completa la grabación, en la operación 670, el hardware indica al programador que se ha completado la prioridad y se puede cargar un nuevo contexto para su ejecución.
En la operación 675, el planificador descarga el contenido del almacenamiento en microprocesador en la memoria 630. Dada la prioridad de esta operación considerada inferior, no interfiere con la ejecución del nuevo contexto que se presenta.
Una vez que se completa la operación de grabar en la memoria, en la operación 680, el hardware envía una señal al planificador y el planificador restaura la operación principal del almacenamiento en microprocesador (si es que hay alguna).
Algunos sistemas de gráficos existentes utilizan memoria del sistema o memoria de gráficos (por ejemplo, DDR. GDDR o HBM) para grabar datos de estado de contexto. Por lo tanto, el proceso de cambio de contexto es más lento ya que la memoria gráfica o del sistema tiene una latencia alta y un ancho de banda relativamente menor en comparación con la memoria gráfica en microprocesador. Para abordar este problema, se proporciona un algoritmo novedoso que reutiliza SLM para almacenar el contexto de la aplicación. El ancho de banda SLM suele ser varios órdenes de magnitud mayor que el de la DRAM y su latencia suele ser 10 veces menor que la de la DRAM.
En un ejemplo, se puede utilizar la memoria local compartida (SLM) para grabar datos de estado de contexto tridimensionales (3D) para implementar un cambio de contexto más rápido. La memoria local compartida se puede utilizar para grabar el estado de un contexto 3D. En cargas de trabajo 3D no es necesario utilizar el SLM. Por lo tanto, el SLM se puede utilizar para almacenar el estado de uno o más contextos 3D "de fondo", y volver a esos contextos será muy rápido ya que no se necesita carga de estado desde la memoria del sistema. Además, se puede utilizar la compresión de datos sin pérdidas para ajustarse al estado del contexto de la aplicación en el espacio SLM disponible.
Como se ilustra en la Figura 7A, cada SMM 720 en una GPU 700 tiene un grupo de EU que comparte un bloque SLM 724. Fuera de los SMM, hay una caché compartida 710 y una interfaz de memoria gráfica o de sistema. Durante su funcionamiento, cuando una GPU 700 cambia el contexto de una aplicación 3D a otra aplicación 3D, la memoria local compartida (SLM) 724 se utiliza para grabar el contexto de la aplicación actual. Además, un módulo de compresión de datos sin pérdidas 722 puede implementar técnicas que pueden usarse para ajustarse a todo el contexto en el SLM 724 disponible. Si el estado del contexto no se ajusta al SLM 724 incluso después de la compresión, se usan otras cachés compartidas internas 710 (por ejemplo, L3, LLC) y/o memoria del sistema para el desbordamiento.
SLM es una memoria integrada de alto ancho de banda y baja latencia, muy similar a los sombreadores de cálculo de gráficos y al hardware de función fija. Es una memoria arquitectónica definida para API de cálculo, pero no expuesta a aplicaciones 3D.
Por lo tanto, la memoria local compartida 724 en un SMM 720 puede usarse para grabar el estado del subproceso de los EU de ese SMM. El compresor de datos de bloque de hardware de función fija 722 puede proporcionar comprimir o descomprimir sin pérdidas el estado del subproceso a medida que se graba o restaura desde el SLM.
En muchos sistemas gráficos existentes, un puente de interfaz de enlace escalable (SLI) proporciona un enlace entre tarjetas gráficas para transmitir sincronización y datos de píxeles entre las tarjetas gráficas. Sin embargo, el puente SLI no tiene ninguna lógica de procesamiento para facilitar la sincronización. En cambio, el controlador de la GPU debe realizar esas operaciones en la CPU. Esto consume energía y recursos de procesamiento y puede reducir la eficiencia operativa de un sistema de gráficos.
En un ejemplo, el rendimiento se puede mejorar agregando un procesador de comandos en serie a la interfaz de enlace escalable (SLI) y las llamadas de extracción se pueden sincronizar entre las GPU SLI utilizando el procesador de comandos en serie. Haciendo referencia a las Figuras 7B-7C, en algunos ejemplos, dos o más GPU 730 pueden estar acopladas mediante un puente SLI 740. Se puede usar un procesador en serie 742 en el puente SLI 740 para facilitar la sincronización.
La Figura 7C es una representación esquemática de una arquitectura alternativa en la que una pluralidad de GPU 750 están acopladas a un procesador puente SLI 754, que a su vez está acoplado a una interfaz PCI-Express (PCI-E) 760 y una CPU 770.
Componentes de energía
La Figura 8 ilustra un diagrama de bloques de un regulador de cambio de acuerdo con una realización. Uno o más reguladores de cambio 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 microprocesadores de circuito integrado (IC). Mientras que una sola fase del regulador de cambio 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 cambio 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 cambio 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 cambio (a veces denominado regulador de cambio de estacionamiento de corriente). El regulador de cambio de estacionamiento de corriente puede ser un regulador de cambio 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 cambio 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.
LaFigura 9es 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 subprocesos 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 subprocesos. 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 subprocesos 0-30 a la porción de baja energía y el 100 % de las direcciones de registro para los subprocesos 31 -127 a la porción de alta capacidad. Como otro ejemplo, el sistema puede mapear el 20 % de los registros de cada subproceso a la porción de baja energía y mapear el 80 % de los registros de cada subproceso a la porción de alta capacidad. Además, el sistema puede determinar el número de entradas asignadas por subproceso 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 subprocesos o grupos de subprocesos, o ambos) y memoria compartida 918, por ejemplo, almacenamiento temporal local. Como se describe en el presente documento, un "grupo de subprocesos" se refiere a una pluralidad de subprocesos que se agrupan con índices de subprocesos 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 subprocesos 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 subproceso. 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 subproceso 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 subprocesos 0-30 a la porción de baja energía y el 100 % de las direcciones de registro para los subprocesos 31 -127 a la porción de alta capacidad. Como otro ejemplo, el sistema puede mapear el 20 % de los registros de cada subproceso a la porción de baja energía y mapear el 80 % de los registros de cada subproceso a la porción de alta capacidad. El sistema puede determinar la cantidad de entradas asignadas por subproceso basándose en la información de tiempo de ejecución, por ejemplo, con respecto a la cantidad de grupos de subprocesos que se ejecutan y el beneficio marginal de iniciar más grupos de subprocesos o asignar a un número menor de grupos de subprocesos más espacio en la porción de baja energía.
LaFigura 10ilustra 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 microprocesador, 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 frontal 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 frontal 1020 puede recibir comandos leídos por la interfaz de anfitrión (por ejemplo, desde la memoria intermedia de inserción)). El extremo frontal 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 subprocesos al mismo tiempo, donde cada subproceso 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álculos. 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 frontal 1020. El extremo frontal 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 exprés (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 microprocesador 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 microprocesador 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 85F/ 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 los dos líquidos se mezclen. Con los costes cada vez mayores de los 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 los 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 microprocesador. 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 los programas bien escritos es mucho menor que el de los mal escritos, puede ver que reescribir los programas antiguos para hacer uso de nuevas funciones, tales como una memoria compartida más grande, puede incluso reducir los costes operativos en un 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 frontal 1020, además de tener un acoplamiento (directo<o>indirecto) a la memoria local 1006, para permitir que los 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
LaFigura 11es 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 microprocesador (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 los 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 del procesador 1107 también puede incluir otros dispositivos de procesamiento, tales como un procesador de señal digital (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 varios 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 (p. ej., 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 dirección, datos o señales 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, que incluye un concentrador de controlador de memoria 1116 y un concentrador de controlador de entrada y 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 los 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 dar servicio 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 también puede acoplarse 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.
LaFigura 12es 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 laFigura 12que 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 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 datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartido, tal como Nivel 2 (L2), Nivel 3 (L3), Nivel 4 (L4), u otros niveles de caché, donde el nivel más alto de caché antes de la memoria externa se clasifica como 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, como por ejemplo 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 del sistema 1210 incluye uno o más controladores de memoria integrados 1214 para gestionar el acceso a varios dispositivos de memoria externos (no mostrados).
En algunas realizaciones, uno o más de los núcleos de procesador 1202A-1202N incluyen soporte para múltiples subprocesos 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 subprocesos. El núcleo de agente de sistema 1210 puede incluir adicionalmente una unidad de control de energía (PCU), que incluye lógica y componentes para regular el estado de energía de los núcleos de procesador 1202A-1202N y el procesador de gráficos 1208.
En algunas realizaciones, el procesador 1200 Incluye adicionalmente el procesador de gráficos 1208 para ejecutar las 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, que Incluye el 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 la 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 el 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 utilizar una unidad de Interconexión alternativa, tal como una Interconexión punto a punto, una Interconexión conmutada u otras técnicas, Incluidas 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 microprocesadores o como un circuito Integrado de SoC que tiene los componentes Ilustrados, además de otros componentes.
LaFigura 13es 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 pantalla 1302 para conducir los datos de salida de pantalla 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, decodificar 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/VC-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álculo 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 llevar a cabo operaciones 3D, como por ejemplo representar Imágenes y escenas tridimensionales utilizando 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 llevan a cabo diversas tareas dentro del elemento y/o generan subprocesos de ejecución en un subsistema de 3D/medios 1315. Aunque la canalización de 3D 1312 se puede utilizar para llevar a cabo operaciones de medios, una realización del GPE 1310 también Incluye una canalización de medios 1316 que se utiliza específicamente para llevar a cabo operaciones de medios, como por ejemplo post-procesamiento de vídeo y mejora de imagen.
En algunas realizaciones, la canalización de medios 1316 Incluye unidades lógicas programables<o>de función fija para llevar a cabo una o más operaciones de medios especializadas, como por ejemplo 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 subprocesos para generar subprocesos para su ejecución en el subsistema 3D/de medios 1315. Los subprocesos 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 subprocesos 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 subprocesos al subsistema 3D/de medios 1315, que incluye lógica de despacho de subproceso para arbitrar y despachar las diversas solicitudes a recursos de ejecución de subproceso disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los subprocesos 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 subproceso. En algunas realizaciones, el subsistema también incluye memoria compartida, que incluye registros y memoria direccionable, para compartir datos entre subprocesos y para almacenar datos de salida.
Motor de procesamiento de gráficos
LaFigura 14es 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 laFigura 13. Los elementos de laFigura 14que 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 laFigura 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 se acopla 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 obtenidas de una memoria intermedia de anillo, que almacena comandos para el canal 3D 1312 y el canal de medios 1316. En una realización, la memoria intermedia en anillo puede incluir adicionalmente memorias intermedias de comandos por 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 subprocesos 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álculo u otros programas de sombreado, procesando las instrucciones y despachando subprocesos 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 multipropósito (por ejemplo, unidades de ejecución) dentro de la matriz de núcleo gráfico 1414 incluye soporte para varios lenguajes de sombreador API 3D y puede ejecutar múltiples subprocesos 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 fin general que es programable para realizar operaciones computacionales de fin 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 laFigura 1o el núcleo 1202A-1202N como en laFigura 12.
Los datos de salida generados por subprocesos que se ejecutan en la matriz de núcleos de gráficos 1414 pueden emitir datos a memoria en una memoria intermedia de retorno unificada (URB) 1418. La URB 1418 puede almacenar datos para múltiples subprocesos. En algunas realizaciones, la URB 1418 puede usarse para enviar datos entre diferentes subprocesos 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 subprocesos en la matriz central de gráficos y la lógica de función fija dentro de la lógica de función compartida 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ómputo matemático 1422 y de la comunicación entre subprocesos (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.
LaFigura 15es un diagrama de bloques de otra realización de un procesador de gráficos 1500. Los elementos de laFigura 15que 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 frontal 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 frontal 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 frontal 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 post procesamiento de vídeo y de imagen y un motor de codificación/decodificación de múltiples formatos (MFX) 1533 para proporcionar codificación y decodificación de datos de medios acelerados por hardware. En algunas realizaciones, la canalización de geometría 1536 y el motor de medios 1537 generan, cada uno, subprocesos de ejecución para los recursos de ejecución de subprocesos 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 subprocesos ajustables a escala que cuentan con los núcleos modulares 1580A-1580N (denominados, en ocasiones, segmentos de núcleo), teniendo cada uno múltiples subnúcleos 1550A-550N, 1560A-1560N (denominados, en ocasiones, subsegmentos 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 memoria caché compartida y lógica de operación de píxeles. Se pueden incluir también otros recursos compartidos en las diversas realizaciones del procesador de gráficos.
Unidades de ejecución
LaFigura 16ilustra la lógica de ejecución de subprocesos 1600 que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones de un GPE. Los elementos de laFigura 16que 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 subprocesos 1600 incluye un procesador sombreador 1602, un despachador de subprocesos 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 subprocesos 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 subprocesos de hardware simultáneos mientras se procesan múltiples elementos de datos en paralelo para cada subproceso. 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 de sombreado 1602 puede procesar los diversos programas de sombreado y enviar subprocesos de ejecución asociados con los programas de sombreado por medio de un despachador de subprocesos 1604. En una realización, el despachador de subprocesos incluye lógica para arbitrar las solicitudes de iniciación de subproceso desde las canalizaciones de gráficos y de medios e instanciar los subprocesos 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 laFigura 15) puede despachar sombreadores de vértices, de teselación o de geometría a la lógica de ejecución de subprocesos 1600 (laFigura 16) para su procesamiento. En algunas realizaciones, el despachador de subprocesos 1604 también puede procesar solicitudes de generación de subprocesos 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 fin general (por ejemplo, sombreadores de cálculo 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 subprocesos posibilita un entorno de ejecución eficiente frente a accesos de memoria de latencia superior. Cada subproceso de hardware dentro de cada unidad de ejecución tiene un archivo de registro de alto ancho de banda dedicado y un estado de subproceso independiente asociado. La ejecución es de múltiples emisiones por reloj a canalizaciones que pueden realizar operaciones de números enteros, de coma flotante de precisión sencilla y doble, de capacidad de ramificación de SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones misceláneas. Mientras se esperan datos desde la memoria o una de las funciones compartidas, una lógica de dependencia dentro de las unidades de ejecución 1608A-1608N hace que un subproceso en espera pase a estar inactivo hasta que se hayan devuelto los datos solicitados. Mientras el subproceso en espera está inactivo, pueden dedicarse recursos de hardware a procesar otros subprocesos. 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, un sombreador de fragmentos u otro tipo de programa de sombreado, incluyendo un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 1608A-1608N opera sobre 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, enmascaramiento y control de flujo de elementos de datos 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 subprocesos 1600 para almacenar en caché instrucciones de subproceso 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 subproceso durante la ejecución del subproceso. 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 funcionalidad especializada de muestreo de textura o de medios 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 subproceso a la lógica de ejecución de subprocesos 1600 por medio de una lógica de generación y de despacho de subprocesos. 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 de sombreado 1602 para calcular 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 subprocesos a una unidad de ejecución (por ejemplo, 1608A) mediante el despachador de subprocesos 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 subprocesos 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.
LaFigura 17es 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 con 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 únicamente están incluidos en un subconjunto de las instrucciones. En algunas realizaciones, el formato de instrucción 1700 descrito e ilustrado son macroinstrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a microoperaciones resultantes de la decodificació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 hace referencia a un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 1710.
Para cada formato, el codope de instrucción 1712 define la operación que ha de llevar a cabo 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 adición, la unidad de ejecución realiza una operación de adición simultánea en cada canal de color que representa un elemento de textura o elemento de imagen. Por defecto, la unidad de ejecución realiza cada instrucción a través de todos los canales de datos de los operandos. En algunas realizaciones, el campo de control de instrucción 1714 posibilita 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, mezcla). Para las 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 utilización en el formato de instrucción compacto de 64 bits 1730.
Algunas instrucciones de 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 codope 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 fija) 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 utiliza el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se utiliza 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 utiliza 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 utilizar un direccionamiento alineado por byte para los operandos de origen y de destino y, cuando está en un segundo modo, la instrucción puede utilizar un direccionamiento alineado por 16 bytes para todos los operandos de origen y de destino.
En una realización, la parte de modo de dirección del campo de modo de acceso/dirección 1726 determina si la instrucción va a utilizar direccionamiento directo o indirecto. Cuando se utiliza 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 utiliza un modo de direccionamiento de registro indirecto, la dirección de registro de uno o más operandos se puede calcular en función de 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 en función de los campos de bits del codope 1712 para simplificar la descodificación de codope 1740. Para un codope de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de codope. La agrupación de codope precisa mostrada es simplemente un ejemplo. En algunas realizaciones, un grupo de codope de movimiento y de lógica 1742 incluye instrucciones de movimiento y de lógica de datos (p. ej., 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, espera, envío) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones de cómputo matemático paralelo 1748 incluye instrucciones aritméticas a nivel de componente (por ejemplo, suma, multiplicación (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cómputo matemático paralelo 1748 realiza las operaciones aritméticas en paralelo a través de canales de datos. El grupo de cómputo matemático vectorial 1750 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo de cómputo matemático vectorial realiza aritmética tal como cálculos de producto escalar sobre operandos de vectores.
Canalización de gráficos
LaFigura 18es un diagrama de bloques de otra realización de un procesador de gráficos 1800. Los elementos de laFigura 18que 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 subprocesos 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 subprocesos de ejecución a las unidades de ejecución 1852A-1852B mediante un despachador de subprocesos 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é de L1 1851 anexada que es específica para cada matriz o que se comparte 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 extremo posterior del resultado de la 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 en función de un modelo geométrico en bruto 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 subprocesos 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 una 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 rasterización y prueba de profundidad 1873 en el canal de salida de renderizado 1870 envía 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 subprocesos 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, una estructura 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 compartir 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 frontal de vídeo 1834. En algunas realizaciones, el extremo frontal de vídeo 1834 recibe comandos de canalización desde el emisor por flujo continuo de comandos 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 frontal 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 funcionalidad de generación de subprocesos para generar subprocesos para despachar a la lógica de ejecución de subprocesos 1850 mediante el despachador de subprocesos 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 a través de la interconexión de anillo 1802, o algún otro bus o estructura 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 que puede 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álculo 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, una combinación de estas bibliotecas puede ser compatible. También puede ser compatible con la biblioteca Open Source Computer Vision Library (OpenCV). Una futura API con una canalización de 3D compatible también puede ser compatible si se puede hacer una asignación desde la canalización de la futura API a la canalización del procesador de gráficos.
Programación de la canalización de gráficos
LaFigura 19Aes un diagrama de bloques que ilustra un formato de comandos de procesador de gráficos 1900 de acuerdo con algunas realizaciones. LaFigura 19Bes un diagrama de bloques que ilustra una secuencia de comandos de procesador de gráficos 1910 de acuerdo con una realización. Los recuadros en línea continua en laFigura 19Ailustran 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 comandos de procesador de gráficos 1900 ilustrativo de laFigura 19Aincluye campos de datos para identificar un cliente objetivo 1902 del comando, un código de operación del comando (codope) 1904 y los datos relevantes 1906 para el comando. También se incluye un sub-codope 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 comandos 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 cliente apropiada. En algunas realizaciones, las unidades cliente de procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad del representador, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que el comando ha sido recibido por la unidad de cliente, la unidad de cliente lee el codope 1904 y, si está presente, el sub-codope 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 codope de comandos. En algunas realizaciones, los comandos se alinean mediante múltiplos de una palabra doble.
El diagrama de flujo en laFigura 19Bmuestra 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 propósitos de ejemplo únicamente ya que las realizaciones no están limitadas a estos comandos específicos o para esta secuencia de comandos. Además, pueden emitirse los comandos como un lote de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos en concurrencia al menos parcialmente.
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é de representación que se marque como 'sucio' puede vaciarse a memoria.
En algunas realizaciones, el comando de descarga de canalización 1912 se puede utilizar para la sincronización de la canalización o antes de colocar el procesador de gráficos en un estado de bajo consumo.
En algunas realizaciones, un comando de selección de canalización 1913 se utiliza cuando una secuencia de órdenes requiere que el procesador de gráficos cambie explícitamente entre canalizaciones. En algunas realizaciones, un comando de selección de canalización 1913 se requiere sólo una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea para emitir órdenes para ambas canalizaciones. En algunas realizaciones, se requiere un comando de descarga de canalización 1912 inmediatamente antes de un cambio de canalización por medio del 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 su operación y se utiliza 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, se usa el comando de control de canalización 1914 para la sincronización de canalización y para limpiar datos de una o más memorias de caché dentro de la canalización activa antes de procesar un lote de comandos.
En algunas realizaciones, se usan comandos de estado de memoria intermedia de retorno 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 subprocesos 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 su uso 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 3D 1922 comenzando con el estado de canalización 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 3D 1930 incluyen comandos de ajuste de estado 3D para estado de memoria intermedia de vértice, estado de elemento de vértice, estado de color constante, estado de memoria intermedia de profundidad y otras variables de estado que han de configurarse antes de que se procesen los comandos de primitiva 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en uso. En algunas realizaciones, los comandos de estado de canalización de 3D 1930 también pueden desactivar o desviar selectivamente ciertos elementos de canalización si esos elementos no se usarán.
En algunas realizaciones, se usa el comando de primitiva 3D 1932 para enviar primitivas 3D para su procesamiento por la canalización 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos mediante el comando de primitiva 3D 1932 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 primitiva 3D 1932 para generar estructuras de datos de vértices. Las estructuras de datos de vértices se almacenan en una o más memorias intermedias de retorno. En algunas realizaciones, se usa el comando de primitiva 3D 1932 para realizar operaciones de vértice en primitivas 3D mediante sombreadores de vértices. Para procesar sombreadores de vértices, la canalización 3D 1922 despacha subprocesos de ejecución de sombreador a las unidades de ejecución de procesador de gráficos.
En algunas realizaciones, se activa la canalización 3D 1922 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 los píxeles resultantes. También pueden incluirse comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo posterior de píxeles para esas operaciones.
En algunas realizaciones, la secuencia de órdenes del procesador de gráficos 1910 sigue la trayectoria de la canalización de medios 1924 cuando se llevan a cabo operaciones de medios. En general, la utilización y la manera de programación específicas para la canalización de medios 1924 depende de las operaciones de medios o de cálculo a llevar a cabo. Las operaciones de decodificación de medios específicas pueden descargarse en la canalización de medios durante la decodificación de medios. En algunas realizaciones, puede desviarse también la canalización de medios y puede realizarse la decodificación de medios, en su totalidad o en parte, usando recursos proporcionados por uno o más núcleos de procesamiento de fin general. En una realización, la canalización de medios también incluye elementos para las operaciones de la unidad de procesador de gráficos de fin general (GPGPU), donde se usa el procesador de gráficos para realizar operaciones vectoriales SIMD usando programas de sombreador computacionales que no están relacionados explícitamente con la representación de primitivas de gráficos.
En algunas realizaciones, se configura la canalización de medios 1924 de una manera similar que la canalización 3D 1922. Un conjunto de comandos para configurar el estado de canalización de medios 1940 se despacha o 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 decodificación y codificación de vídeo dentro del canal de medios, como el formato de codificación o decodificació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 multimedia incluyen memorias intermedias de memoria que contienen datos de vídeo a procesar. 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 se ejecutan de una manera similar a la de las operaciones de medios.
Arquitectura de software de gráficos
LaFigura 20ilustra 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úcleo o núcleos de procesador de propósito general 2034. Cada uno de la aplicación de gráficos 2010 y el sistema operativo 2020 se ejecuta 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 instrucciones de sombreador 2012. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, como por ejemplo el lenguaje de sombreador de alto nivel (HLSL) o el lenguaje de sombreador de OpenGL (GLSL). La aplicación incluye también 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 frontal 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 (JIT) o la aplicación puede realizar una compilación previa de sombreador. En algunas realizaciones, los sombreadores de alto nivel se compilan en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 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 la 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 las lee una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en este 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 puede fabricarse de manera que el circuito realiza operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
LaFigura 21es 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 puede usarse para generar diseños reutilizables modulares 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++). La simulación de software 2110 se puede usar para diseñar, probar y verificar el comportamiento del núcleo 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. Puede crearse o sintetizarse, a continuación, 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 pueden crearse, diseñarse o sintetizarse 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 dar 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 puede simularse o someterse 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 terceros 2165 usando la 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 cableada 2150 o una conexión inalámbrica 2160. La instalación de fabricación 2165 puede fabricar, a continuación, un circuito integrado que se basa, al menos en parte, en el diseño de núcleo de IP. El circuito integrado fabricado puede configurarse para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
Circuito integrado en un microprocesador del sistema ilustrativo
LasFiguras 22-24ilustran 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.
LaFigura 22es un diagrama de bloques que ilustra un circuito integrado en un microprocesador del sistema 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. Además, el circuito integrado puede incluir un dispositivo de visualización 2245 acoplado a uno o más de un controlador 2250 de interfaz multimedia de alta definición (HDMI) y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 2255. El almacenamiento puede proporcionarse por un subsistema de memoria flash 2260 que incluye la 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.
LaFigura 23es un diagrama de bloques que ilustra un procesador de gráficos 2310 ilustrativo de un circuito integrado de sistema en un microprocesador 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 laFigura 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, hasta 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/los procesador(es) de fragmentos 2315A-2315N usa(n) los datos de primitiva y de vértice generados por el procesador de vértices 2305 para producir una memoria intermedia de fotogramas 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 laFigura 22,de manera que cada procesador 2205-2220 puede participar en un sistema virtual de memoria compartida o unificada. La(s) una o más interconexión(es) de circuito 2330A-2330B posibilitan que el procesador de gráficos 2310 interaccione 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 realizaciones.
LaFigura 24es un diagrama de bloques que ilustra un procesador de gráficos 2410 ilustrativo adicional de un circuito integrado de sistema en un microprocesador 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 laFigura 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 laFigura 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álculo. 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 subprocesos para despachar subprocesos 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 como los analizados con respecto a las Figuras en el presente documento.
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 una 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í.
Claims (11)
1. Un multiprocesador de gráficos que comprende:
una caché de instrucciones configurada para recibir un flujo de instrucciones;
una unidad de instrucciones configurada para enviar instrucciones en el flujo de instrucciones para su ejecución; un bloque de cálculo de procesamiento de gráficos de propósito general que comprende una pluralidad de núcleos de procesamiento de gráficos, comprendiendo los núcleos de procesamiento de gráficos una pluralidad de unidades de ejecución configuradas para ejecutar las instrucciones;
una primera memoria compartida (620) acoplada en comunicación con la pluralidad de unidades de ejecución, en donde la primera memoria compartida (620) es compartida por la pluralidad de unidades de ejecución; y un motor de copia (625) configurado para:
recibir una señal de un planificador (615) que indica un inicio de un proceso de prioridad;
detener una ejecución de un contexto existente en al menos una primera de la pluralidad de unidades de ejecución; copiar datos de estado de contexto del contexto existente en la al menos una primera de la pluralidad de unidades de ejecución en la primera memoria compartida (620);
generar una señal para indicar que se ha completado un proceso de prioridad de contexto; y
descargar los datos de contexto de la primera memoria compartida (620) en una memoria externa (630).
2. El multiprocesador de gráficos de la reivindicación 1, que comprende, además:
el planificador (615) configurado para iniciar el proceso de prioridad.
3. El multiprocesador de gráficos de la reivindicación 1, que comprende, además:
una primera estructura de comunicación configurada para acoplar en comunicación la pluralidad de unidades de ejecución a la primera memoria compartida (620).
4. El multiprocesador de gráficos de la reivindicación 1, que comprende, además:
una segunda estructura de comunicación configurada para acoplar en comunicación el motor de copia (625) a la memoria externa (630).
5. El multiprocesador de gráficos de la reivindicación 1, el motor de copia (625) configurado para:
copiar datos de estado de contexto del contexto existente en al menos una primera de la pluralidad de unidades de ejecución en la primera memoria compartida (620) en paralelo con la ejecución de un nuevo contexto en la pluralidad de unidades de ejecución.
6. El multiprocesador de gráficos de la reivindicación 1, que comprende además lógica, que incluye al menos parcialmente lógica de hardware, configurada para:
restaurar la primera memoria compartida (620).
7. El multiprocesador de gráficos de la reivindicación 3, en donde el motor de copia (625) está acoplado a la primera memoria compartida (620) mediante el primer tejido de comunicación.
8. El multiprocesador de gráficos de la reivindicación 7, en donde la primera memoria compartida (620) comprende una caché L3.
9. El multiprocesador de gráficos de la reivindicación 1, en donde la pluralidad de unidades de ejecución y un primer archivo de registro general están en un único circuito integrado.
10. Un método, que comprende:
recibir (650), en un motor de copia de un bloque de cálculo de procesamiento de gráficos de propósito general de un multiprocesador de gráficos, comprendiendo el bloque de cálculo de procesamiento de gráficos de propósito general una pluralidad de núcleos de procesamiento de gráficos, comprendiendo los núcleos de procesamiento de gráficos un procesador que tiene una pluralidad de unidades de ejecución para ejecutar las instrucciones; una señal de un planificador que indica el inicio de un proceso de prioridad;
detener (660) una ejecución de un contexto existente en la al menos una primera de la pluralidad de unidades de ejecución;
copiar (665) datos de estado de contexto del contexto existente en al menos una primera de la pluralidad de unidades de ejecución en una primera memoria compartida ubicada dentro del multiprocesador de gráficos;
generar (670) una señal para indicar que se ha completado un proceso de prioridad de contexto; y
descargar (675) los datos de contexto de la primera memoria compartida en una memoria externa ubicada fuera del multiprocesador de gráficos.
11. El método de la reivindicación 10, que comprende, además:
copiar datos de estado de contexto de un contexto existente en la al menos una primera de la pluralidad de unidades de ejecución en la primera memoria compartida en paralelo con la ejecución de un nuevo contexto en la pluralidad de unidades de ejecución.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US15/477,027 US10649956B2 (en) | 2017-04-01 | 2017-04-01 | Engine to enable high speed context switching via on-die storage |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2969061T3 true ES2969061T3 (es) | 2024-05-16 |
Family
ID=62017155
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES21184960T Active ES2969061T3 (es) | 2017-04-01 | 2018-03-30 | Motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesador |
Country Status (5)
| Country | Link |
|---|---|
| US (5) | US10649956B2 (es) |
| EP (2) | EP3916550B1 (es) |
| CN (1) | CN108694153B (es) |
| ES (1) | ES2969061T3 (es) |
| PL (1) | PL3916550T3 (es) |
Families Citing this family (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10649956B2 (en) * | 2017-04-01 | 2020-05-12 | Intel Corporation | Engine to enable high speed context switching via on-die storage |
| US11816500B2 (en) * | 2019-03-15 | 2023-11-14 | Intel Corporation | Systems and methods for synchronization of multi-thread lanes |
| US11227358B2 (en) | 2019-03-15 | 2022-01-18 | Intel Corporation | Systems and methods for exploiting queues and transitional storage for improved low-latency high-bandwidth on-die data retrieval |
| US12379955B1 (en) * | 2019-04-22 | 2025-08-05 | Rambus Inc. | Stall-driven multi-processing |
| US11055808B2 (en) * | 2019-06-27 | 2021-07-06 | Qualcomm Incorporated | Methods and apparatus for wave slot management |
| CN112749120B (zh) * | 2019-10-29 | 2024-09-20 | 辉达公司 | 将数据有效地传输至处理器的技术 |
| CN112445770A (zh) * | 2020-11-30 | 2021-03-05 | 清远职业技术学院 | 多维乱序存储的超大规模高性能数据库引擎及云服务平台 |
| US11899589B2 (en) * | 2021-06-22 | 2024-02-13 | Samsung Electronics Co., Ltd. | Systems, methods, and devices for bias mode management in memory systems |
| US12293090B2 (en) | 2022-07-14 | 2025-05-06 | Samsung Electronics Co., Ltd. | Systems and methods for managing bias mode switching |
Family Cites Families (29)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8028292B2 (en) * | 2004-02-20 | 2011-09-27 | Sony Computer Entertainment Inc. | Processor task migration over a network in a multi-processor system |
| US7873812B1 (en) | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
| US7475209B2 (en) * | 2004-05-13 | 2009-01-06 | International Business Machines Corporation | Moving hardware context structures in memory while maintaining system operation |
| US7603673B2 (en) | 2004-10-28 | 2009-10-13 | Intel Corporation | Method and system for reducing context switch times |
| JP2008033483A (ja) * | 2006-07-27 | 2008-02-14 | Nec Corp | 計算機システム、計算機および計算機動作環境の移動方法 |
| US20100110089A1 (en) * | 2008-11-06 | 2010-05-06 | Via Technologies, Inc. | Multiple GPU Context Synchronization Using Barrier Type Primitives |
| DE112010005821T5 (de) * | 2010-08-23 | 2013-06-06 | Empire Technology Development Llc | Kontextwechsel |
| US8615771B2 (en) * | 2011-06-20 | 2013-12-24 | International Business Machines Corporation | Effective management of blocked-tasks in preemptible read-copy update |
| US20130124838A1 (en) * | 2011-11-10 | 2013-05-16 | Lacky V. Shah | Instruction level execution preemption |
| US10095526B2 (en) * | 2012-10-12 | 2018-10-09 | Nvidia Corporation | Technique for improving performance in multi-threaded processing units |
| US9043559B2 (en) * | 2012-10-23 | 2015-05-26 | Oracle International Corporation | Block memory engine with memory corruption detection |
| JP6415016B2 (ja) * | 2012-11-12 | 2018-10-31 | キヤノン株式会社 | 画像符号化装置、画像符号化方法及びプログラム |
| US9064437B2 (en) * | 2012-12-07 | 2015-06-23 | Intel Corporation | Memory based semaphores |
| US20140181830A1 (en) * | 2012-12-26 | 2014-06-26 | Mishali Naik | Thread migration support for architectually different cores |
| US9710874B2 (en) * | 2012-12-27 | 2017-07-18 | Nvidia Corporation | Mid-primitive graphics execution preemption |
| US9128781B2 (en) | 2012-12-28 | 2015-09-08 | Intel Corporation | Processor with memory race recorder to record thread interleavings in multi-threaded software |
| US20150095614A1 (en) * | 2013-09-27 | 2015-04-02 | Bret L. Toll | Apparatus and method for efficient migration of architectural state between processor cores |
| US9311260B2 (en) * | 2013-12-09 | 2016-04-12 | Jack Mason | Context preservation during thread level speculative execution |
| US9934047B2 (en) * | 2014-03-20 | 2018-04-03 | Intel Corporation | Techniques for switching between operating systems |
| US10223333B2 (en) | 2014-08-29 | 2019-03-05 | Nvidia Corporation | Performing multi-convolution operations in a parallel processing system |
| US10242082B2 (en) * | 2014-12-12 | 2019-03-26 | Microsoft Technology Licensing, Llc | Context-driven multi-user communication |
| WO2017049538A1 (en) | 2015-09-24 | 2017-03-30 | Intel Corporation | Apparatus and method for pattern driven self-adaptive virtual graphics processor units |
| CN107015931A (zh) * | 2016-01-27 | 2017-08-04 | 三星电子株式会社 | 用于中断处理的方法和加速器单元 |
| US10528864B2 (en) | 2016-08-11 | 2020-01-07 | Nvidia Corporation | Sparse convolutional neural network accelerator |
| US10891538B2 (en) | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
| US10430310B2 (en) * | 2017-04-01 | 2019-10-01 | Intel Corporation | Dynamic voltage-frequency curve management |
| US10649956B2 (en) * | 2017-04-01 | 2020-05-12 | Intel Corporation | Engine to enable high speed context switching via on-die storage |
| US10452397B2 (en) * | 2017-04-01 | 2019-10-22 | Intel Corporation | Efficient multi-context thread distribution |
| US10423415B2 (en) * | 2017-04-01 | 2019-09-24 | Intel Corporation | Hierarchical general register file (GRF) for execution block |
-
2017
- 2017-04-01 US US15/477,027 patent/US10649956B2/en active Active
-
2018
- 2018-03-30 PL PL21184960.9T patent/PL3916550T3/pl unknown
- 2018-03-30 ES ES21184960T patent/ES2969061T3/es active Active
- 2018-03-30 EP EP21184960.9A patent/EP3916550B1/en active Active
- 2018-03-30 EP EP18165314.8A patent/EP3382539A1/en not_active Ceased
- 2018-04-02 CN CN201810283406.3A patent/CN108694153B/zh active Active
-
2020
- 2020-05-07 US US16/869,223 patent/US11210265B2/en active Active
-
2021
- 2021-12-23 US US17/561,427 patent/US11748302B2/en active Active
-
2023
- 2023-07-10 US US18/349,386 patent/US12399734B2/en active Active
-
2025
- 2025-07-16 US US19/271,039 patent/US20250348348A1/en active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US11748302B2 (en) | 2023-09-05 |
| EP3916550A1 (en) | 2021-12-01 |
| EP3916550B1 (en) | 2023-10-18 |
| US10649956B2 (en) | 2020-05-12 |
| US20250348348A1 (en) | 2025-11-13 |
| EP3382539A1 (en) | 2018-10-03 |
| PL3916550T3 (pl) | 2024-03-11 |
| CN108694153B (zh) | 2024-05-07 |
| US11210265B2 (en) | 2021-12-28 |
| US20180285374A1 (en) | 2018-10-04 |
| US20240004833A1 (en) | 2024-01-04 |
| CN108694153A (zh) | 2018-10-23 |
| US20220206990A1 (en) | 2022-06-30 |
| US20200334200A1 (en) | 2020-10-22 |
| US12399734B2 (en) | 2025-08-26 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US11263141B2 (en) | Sector cache for compression | |
| US11587273B2 (en) | Low power foveated rendering to save power on GPU and/or display | |
| ES2929978T3 (es) | Fichero de registro jerárquico para una unidad GPGPU | |
| US10908905B2 (en) | Efficient multi-context thread distribution | |
| US11762696B2 (en) | Hybrid low power homogenous grapics processing units | |
| US20180308450A1 (en) | Color mapping for better compression ratio | |
| ES2974516T3 (es) | Tamaño de cálculo adaptable por carga de trabajo | |
| US20210109589A1 (en) | Shutting down gpu components in response to unchanged scene detection | |
| ES2985696T3 (es) | Gestión de energía de procesador | |
| EP3916550B1 (en) | Engine to enable high speed context switching via on-die storage | |
| US11636831B2 (en) | Adaptive multibit bus for energy optimization | |
| US11409571B2 (en) | High bandwidth connection between processor dies | |
| US10372196B2 (en) | Dynamic pixel density adjustment | |
| US20180300951A1 (en) | Adaptive tessellation for foveated rendering | |
| US10769072B2 (en) | Avoid cache lookup for cold cache | |
| ES2953885T3 (es) | Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software | |
| US10452586B2 (en) | Avoid thread switching in cache management | |
| EP3392873A1 (en) | Active window rendering optimization and display |