ES2929978T3 - Fichero de registro jerárquico para una unidad GPGPU - Google Patents

Fichero de registro jerárquico para una unidad GPGPU Download PDF

Info

Publication number
ES2929978T3
ES2929978T3 ES18160823T ES18160823T ES2929978T3 ES 2929978 T3 ES2929978 T3 ES 2929978T3 ES 18160823 T ES18160823 T ES 18160823T ES 18160823 T ES18160823 T ES 18160823T ES 2929978 T3 ES2929978 T3 ES 2929978T3
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
Application number
ES18160823T
Other languages
English (en)
Inventor
Abhishek R Appu
Altug Koker
Joydeep Ray
Kamal Sinha
Kiran C Veernapu
Subramaniam Maiyuran
Prasoonkumar Surti
Guei-Yuan Lueh
David Puffer
Supratim Pal
Eric J Hoekstra
Travis T Schluessler
Linda L Hurd
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of ES2929978T3 publication Critical patent/ES2929978T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • G06F1/3215Monitoring of peripheral devices
    • G06F1/3225Monitoring of peripheral devices of memory devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3237Power saving characterised by the action undertaken by disabling clock generation or distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/324Power saving characterised by the action undertaken by lowering clock frequency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/325Power saving in peripheral device
    • G06F1/3275Power saving in memory, e.g. RAM, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Debugging And Monitoring (AREA)

Abstract

En un ejemplo, un aparato comprende una pluralidad de unidades de ejecución y un primer archivo de registro general (GRF) acoplado comunicativamente a la pluralidad de unidades de ejecución, donde el primer GRF es compartido por la pluralidad de unidades de ejecución. También se describen y reivindican otras realizaciones. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Fichero de registro jerárquico para una unidad GPGPU
CAMPO TÉCNICO
La presente invención, por lo general, se refiere al campo de la electrónica. Más en particular, algunas formas de realización se refieren a técnicas para poner en práctica un fichero de registro general (GRF) jerárquico para un bloque de ejecución.
ANTECEDENTES
A medida que mejora la tecnología de fabricación de circuitos integrados, los fabricantes pueden integrar funcionalidad adicional en un sustrato de silicio único. A medida que aumenta el número de funciones, también lo hace el número de componentes en un circuito integrado (IC) único. Los componentes adicionales añaden una conmutación de señal adicional y, a su vez, generan más calor y/o consumen más energía. El calor adicional puede dañar los componentes del circuito integrado, 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, así como en los modelos de uso para dispositivos electrónicos.
Además, el procesamiento de datos de gráficos en 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, asignación de texturas, pruebas de profundidad, etc. De manera tradicional, los procesadores de gráficos utilizaban unidades de cálculo de función fija para procesar datos de gráficos; sin embargo, más recientemente, partes de los procesadores de gráficos se han hecho programables, lo que permite que dichos procesadores admitan una variedad más amplia de operaciones para procesar datos de vértices y de fragmentos.
Para aumentar aún más el rendimiento, los procesadores de gráficos suelen poner en práctica técnicas de procesamiento tales como canalización, que intentan procesar, en paralelo, la mayor cantidad posible de datos de gráficos a través de las diferentes partes de la canalización de gráficos. Los procesadores de gráficos en paralelo con arquitecturas de una instrucción única y múltiples subprocesos (SIMT) están diseñados para maximizar la magnitud de procesamiento en paralelo en la canalización de gráficos. En una arquitectura SIMT, los grupos de subprocesos paralelos intentan ejecutar las instrucciones del programa de forma sincronizada con la mayor frecuencia posible para aumentar la eficiencia del procesamiento. Se podrá encontrar una descripción general del software y del hardware para las arquitecturas SIMT en Shane Cook, Programación de CUDA, Capítulo 3, páginas 37 a 51 (2013) y/o en Nicholas Wilt, Manual de CUDA, Una guía completa para la programación de GPU, Secciones 2.6.2 a 3.1.2 (junio de 2013).
El documento US 2014/164745 A1 da a conocer un método para asignar registros dentro de una unidad de procesamiento. Un compilador asigna una pluralidad de instrucciones a una pluralidad de grupos de procesamiento. Cada instrucción está configurada para acceder a un primer registro virtual dentro de un margen en directo. El compilador determina qué grupo de procesamiento de la pluralidad de grupos de procesamiento es un grupo propietario para el primer registro virtual dentro del margen en directo. El compilador configura una primera instrucción incluida en la pluralidad de instrucciones para acceder a un primer registro virtual global.
El documento US 2011/072243 A1 da a conocer una técnica para recopilar operandos especificados por una instrucción. A medida que se recibe una secuencia de instrucciones, los operandos especificados por las instrucciones se asignan a puertos, de modo que cada uno de los operandos especificados por una instrucción única se asigna a un puerto diferente. La lectura de los operandos de un fichero de registro multibanco se programa seleccionando un operando de cada uno de los diferentes puertos para obtener una solicitud de lectura de operando y asegurar que dos o más de los operandos seleccionados no se almacenen en el mismo banco del fichero de registro multibanco. Los operandos especificados por la solicitud de lectura de operandos son objeto de lectura desde el fichero de registro multibanco en un ciclo de reloj único. A continuación, cada instrucción se ejecuta a medida que los operandos especificados por la instrucción son objeto de lectura a partir del fichero de registro multibanco y se recopilan en uno o más ciclos de reloj.
El documento US 2008/133893 A1 da a conocer un fichero de registro jerárquico incluido en un microprocesador jerárquico que incluye una pluralidad de grupos de ejecución. Una forma de realización del fichero de registro jerárquico incluye un fichero de registro de primer nivel que comprende una pluralidad de registros asignables, en donde el fichero de registro de primer nivel está configurado para asignar los registros asignables para almacenar los resultados de ejecución de las instrucciones ejecutadas por los grupos de ejecución y proporcionar almacenamiento de registro secundario para cada uno de los grupos de ejecución. El fichero de registro jerárquico también incluye una pluralidad de ficheros de registro de segundo nivel acoplados de manera operativa con el fichero de registro de primer nivel, en donde la pluralidad de ficheros de registro de segundo nivel están configurados para almacenar operandos de instrucción y proporcionar los operandos de instrucción a las respectivas unidades de ejecución de los grupos de ejecución para su uso en la ejecución de instrucciones asociadas. El fichero de registro jerárquico incluye, además, una pluralidad de ficheros de registro de tercer nivel acoplados de manera operativa con el primer fichero de registro y los respectivos ficheros de registro de segundo nivel, en donde los ficheros de registro de tercer nivel están configurados para proporcionar operandos a unidades de ejecución y capturar valores literales inmediatos.
El documento US 8200949 B1 describe un sistema de procesador de subprocesos múltiples, un método y un producto de programa informático capaz de utilizar una memoria caché de fichero de registro para procesar, de manera simultánea, una pluralidad de subprocesos. Se proporciona un procesador capaz de procesar, de manera simultánea, una pluralidad de subprocesos. El procesador incluye un fichero de registro y una memoria caché de fichero de registro en comunicación con el fichero de registro.
La invención se define en las reivindicaciones independientes. Las formas de realización de la invención se definen en las reivindicaciones dependientes. La Figura 7B ilustra una forma de realización de la invención que cae dentro del alcance de las reivindicaciones, y que se describe en el párrafo [00140] siguiente. Otras referencias a formas de realización en la descripción son solamente para información de antecedentes.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Para que la manera en que las características mencionadas con anterioridad de las presentes formas de realización se puedan entender en detalle, se puede obtener una descripción más particular de las formas de realización, resumidas brevemente con anterioridad, con referencia a las formas de realización, algunas de las cuales se ilustran en los dibujos adjuntos. Sin embargo, conviene señalar que los dibujos adjuntos ilustran solamente formas de realización típicas y, por lo tanto, no deben considerarse limitativas de su alcance.
La Figura 1 es un diagrama de bloques que ilustra un sistema informático configurado para poner en práctica uno o más aspectos de las formas de realización descritas en este documento.
La Figura 2A-2D ilustran los componentes de un procesador en paralelo, según una forma de realización.
Las Figuras 3A-3B son diagramas de bloques de multiprocesadores de gráficos, según formas de realización.
La Figura 4A-4F ilustran una arquitectura, a modo de ejemplo, en donde una pluralidad de unidades GPUs se acoplan, de manera comunicativa, a una pluralidad de procesadores multinúcleo.
La Figura 5 ilustra una canalización de procesamiento de gráficos, según una forma de realización.
Las Figuras 6A-6B y 7A-7B son ilustraciones esquemáticas de arquitecturas para poner en práctica un fichero de registro general jerárquico (GRF) para bloques de ejecución, según formas de realización.
La Figura 8 ilustra un diagrama de bloques de un regulador de conmutación según una forma de realización.
La Figura 9 es un diagrama de bloques de un sistema que incluye un multiprocesador de transmisión continua, de conformidad con una o más formas de realización.
La Figura 10 ilustra un diagrama de bloques de un sistema de procesamiento en paralelo, según una forma de realización.
La Figura 11 es un diagrama de bloques de un sistema de procesamiento, según una forma de realización.
La Figura 12 es un diagrama de bloques de un procesador, según una forma de realización.
La Figura 13 es un diagrama de bloques de un procesador de gráficos, según una forma de 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 conformidad con algunas formas de realización.
La Figura 15 es un diagrama de bloques de un procesador de gráficos proporcionado por una forma de realización adicional.
La Figura 16 ilustra la lógica de ejecución de subprocesos que incluye una matriz de elementos de procesamiento empleados en algunas formas de realización.
La Figura 17 es un diagrama de bloques que ilustra los formatos de instrucción de un procesador de gráficos según algunas formas de realización.
La Figura 18 es un diagrama de bloques de un procesador de gráficos según otra forma de realización.
Las Figuras 19A-19B ilustran un formato de comando de procesador de gráficos y una secuencia de comando, de conformidad con algunas formas de realización.
La Figura 20 ilustra una arquitectura de software de gráficos, a modo de ejemplo, para un sistema de procesamiento de datos según algunas formas de realización.
La Figura 21 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP, según una forma de realización.
La Figura 22 es un diagrama de bloques que ilustra un sistema, a modo de ejemplo, en un circuito integrado, según una forma de realización.
La Figura 23 es un diagrama de bloques que ilustra un procesador de gráficos adicional a modo de ejemplo.
La Figura 24 es un diagrama de bloques que ilustra un procesador de gráficos adicional, a modo de ejemplo, de un sistema en un circuito integrado, según una forma de realización.
DESCRIPCIÓN DETALLADA
En la siguiente descripción, se exponen numerosos datos específicos para proporcionar una comprensión completa de diversas formas de realización. Sin embargo, se pueden practicar diversas formas de realización sin los datos específicos. En otros casos, los métodos, procedimientos, componentes y circuitos bien conocidos no se han descrito en detalle para no oscurecer las formas de realización particulares. Además, diversos aspectos de las formas de realización se pueden realizar utilizando varios medios, tales como circuitos de semicanalización integrados ("hardware"), instrucciones legibles por ordenador organizadas en uno o más programas ("software") o alguna combinación de hardware y de software. A los efectos de esta invención, la referencia a "lógica" significará hardware, software, firmware o alguna combinación de los mismos.
Algunas formas de realización descritas en este documento pueden aplicarse en cualquier procesador (tal como GPCPU, CPU, GPU, etc.), controladores de gráficos, etc. También se describen y reivindican otras formas de realización. Además, algunas formas de realización se pueden aplicar en sistemas informáticos que incluyen uno o más procesador(es) (por ejemplo, con uno o más núcleos de procesador), tal como los que se analizan en este documento, incluyendo, por ejemplo, dispositivos informáticos móviles, por ejemplo, un teléfono inteligente, una tableta electrónica, un UMPC (ordenador personal ultra-móvil), ordenador portátil, dispositivo informático Ultrabook™, dispositivos portátiles (tales como un reloj inteligente o gafas inteligentes), etc.
En algunas formas de realización, una unidad de procesamiento de gráficos (GPU) se acopla de manera comunicativa a los núcleos de concentrador/procesador para acelerar las operaciones de gráficos, las operaciones de aprendizaje automático, las operaciones de análisis de patrones y diversas funciones de la GPU de uso general (GPGPU). La GPU se puede acoplar de manera comunicativa al procesador/núcleos de concentrador a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras formas de realización, la GPU puede integrarse en el mismo paquete o circuito que los núcleos y acoplarse, de manera comunicativa, a los núcleos a través de un bus/interconexión de procesador interno (es decir, interno al paquete o circuito integrado). Independientemente de la forma en que se conecte la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en la forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza circuitos/lógica dedicados para procesar de manera eficiente estos comandos/instrucciones.
En la siguiente descripción, se exponen numerosos datos específicos para proporcionar una comprensión más completa. Sin embargo, será evidente para un experto en esta técnica que las formas de realización descritas en el presente documento pueden ponerse en práctica sin uno o más de estos datos específicos. En otros casos, no se han descrito características bien conocidas para evitar oscurecer los datos de las presentes formas de realización.
DESCRIPCIÓN GENERAL DEL SISTEMA
La Figura 1 es un diagrama de bloques que ilustra un sistema informático 100 configurado para poner en práctica uno o más aspectos de las formas de realización descritas en este documento. El sistema informático 100 incluye un subsistema de procesamiento 101 que tiene uno o más procesador(es) 102 y una memoria del sistema 104 que se comunica a través de una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente separado dentro de un componente de conjunto de circuitos o puede integrarse dentro de uno o más procesador(es) 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 a través de un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede permitir al sistema informático 100 recibir entrada desde uno o más dispositivo(s) de entrada 108. Además, el concentrador de E/S 107 puede habilitar un controlador de pantalla, que puede estar incluido en los uno o más procesador(es) 102, para proporcionar salidas a uno o más dispositivo(s) de visualización 110A. En una forma de realización, los uno o más dispositivo(s) de visualización 110A acoplados con el concentrador de E/S 107 pueden incluir un dispositivo de visualización local, interno o integrado.
En una forma de realización, el subsistema de procesamiento 101 incluye uno o más procesador(es) en paralelo 112 acoplados al concentrador de memoria 105 a través de un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser una de varias tecnologías de enlace de comunicación basadas en normas o protocolos, tales como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones o una estructura de comunicaciones específica del proveedor. En una forma de realización, los uno o más procesador(es) en paralelo 112 forman un sistema de procesamiento vectorial o paralelo enfocado informáticamente que incluye un gran número de núcleos de procesamiento y/o grupos de procesamiento, tales como un procesador de múltiples núcleos integrados (MIC). En una forma de realización, los uno o más procesador(es) en paralelo 112 forman un subsistema de procesamiento de gráficos que puede enviar píxeles a uno o más dispositivo(s) de visualización 110A acoplados mediante el concentrador de E/S 107. Los uno o más procesador(es) en paralelo 112 también puede incluir un controlador de pantalla y una interfaz de pantalla (no ilustrada) para permitir una conexión directa a uno o más dispositivo(s) de pantalla 110B.
Dentro del subsistema de E/S 111, una unidad de almacenamiento del sistema 114 se puede conectar al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Se puede utilizar un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para habilitar las 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 varios otros dispositivos que puedan agregarse a través de uno o más dispositivo(s) adicionales 120. El adaptador de red 118 puede ser un adaptador Ethernet u otro adaptador de red por cable. El adaptador de red inalámbrica 119 puede incluir uno o más de entre los dispositivos Wi-Fi, Bluetooth, comunicación de campo cercano (NFC) u otro dispositivo de red que incluya una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes que no se ilustran explícitamente, incluyendo USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo y similares, también se pueden conectar al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes en la Figura 1 pueden ponerse en práctica utilizando cualquier protocolo adecuado, tales como los protocolos basados en PCI (interconexión de componentes periféricos) (p. ej., PCI-Express), o cualquier otra interfaz y/o protocolo(s) de comunicación bus o punto a punto, tal como la interconexión de alta velocidad NV-Link o protocolos de interconexión conocidos en esta técnica.
En una forma de realización, los uno o más procesador(es) en paralelo 112 incorporan circuitos optimizados para procesamiento de gráficos y de vídeo, incluyendo, por ejemplo, circuitos de salida de vídeo, y constituyen una unidad de procesamiento de gráficos (GPU). En otra forma de realización, los uno o más procesador(es) en paralelo 112 incorporan circuitos optimizados para procesamiento de uso general, al tiempo que conservan la arquitectura informática subyacente, descrita con mayor detalle en este documento. En otra forma de realización adicional, los componentes del sistema informático 100 pueden integrarse con uno o más elementos del sistema en un circuito integrado único. Por ejemplo, los uno o más procesador(es) en paralelo 112, el concentrador de memoria 105, el procesador(es) 102 y el concentrador de E/S 107 pueden integrarse en un sistema en circuito integrado (SoC). De manera alternativa, los componentes del sistema informático 100 pueden integrarse en un paquete único para formar una configuración de sistema en paquete (SIP). En una forma de realización, al menos una parte de los componentes del sistema informático 100 se pueden integrar en un módulo de circuito integrado múltiple (MCM), que se puede interconectar con otros módulos de circuito integrado múltiple en un sistema informático modular.
Se apreciará que el sistema informático 100, aquí mostrado es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, que incluye el número y la disposición de los puentes, el número de procesador(es) 102 y el número de procesador(es) en paralelo 112, puede modificarse según se desee. Por ejemplo, en algunas formas de realización, la memoria del sistema 104 está conectada al (los) procesador (es) 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria del sistema 104 mediante el concentrador de memoria 105 y el(los) procesador(es) 102. En otras topologías alternativas, el(los) procesador(es) en paralelo 112 están conectados al concentrador de E/S 107 o directamente a uno de entre los uno o más procesador(es) 102, en lugar de al concentrador de memoria 105. En otras formas de realización, el concentrador de E/S 107 y el concentrador de memoria 105 pueden estar integrados en un circuito integrado único. Algunas formas de realización pueden incluir dos o más conjuntos de procesadores 102 conectados a través de múltiples zócalos, que pueden acoplarse con dos o más instancias del(los) procesador(es) en paralelo 112.
Algunos de los componentes particulares que aquí se ilustran son opcionales y pueden no estar incluidos en todas las puestas en práctica del sistema informático 100. Por ejemplo, se puede admitir cualquier cantidad de tarjetas adicionales o de periféricos, o se pueden eliminar algunos componentes. Además, algunas arquitecturas pueden utilizar una terminología diferente para componentes similares a los ilustrados en la Figura 1. Por ejemplo, el concentrador de memoria 105 puede denominarse Northbridge en algunas arquitecturas, mientras que el concentrador de E/S 107 puede denominarse Southbridge.
La Figura 2A ilustra un procesador en paralelo 200, según una forma de realización. Los diversos componentes del procesador en paralelo 200 pueden ponerse en práctica utilizando uno o más dispositivos de circuito, tal como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o conjuntos de puertas programables en campo (FPGA). El procesador en paralelo 200 ilustrado es una variante de los uno o más procesador(es) en paralelo 112 mostrados en la Figura 1, según una forma de realización.
En una forma de realización, el procesador en paralelo 200 incluye una unidad de procesamiento en paralelo 202. La unidad de procesamiento en paralelo incluye una unidad de E/S 204 que permite la comunicación con otros dispositivos, incluyendo otras instancias de la unidad de procesamiento en paralelo 202. La unidad de E/S 204 se puede conectar directamente a otros dispositivos. En una forma de 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 el 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 en paralelo 202, la unidad de E/S 204 se conecta con una interfaz de concentrador 206 y una barra transversal de memoria 216, en donde la interfaz de concentrador 206 recibe comandos dirigidos a realizar operaciones de procesamiento y la barra transversal de memoria 216 recibe comandos dirigidos a realizar operaciones de memoria.
Cuando la interfaz de concentrador 206 recibe una memoria intermedia de comando a través de la unidad de E/S 204, la interfaz de concentrador 206 puede dirigir las operaciones de trabajo para realizar dichos comandos a un extremo frontal 208. En una forma de realización, el extremo frontal 208 se acopla con un programador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de grupos de procesamiento 212. En una forma de realización, el programador 210 garantiza que la matriz de grupos de procesamiento 212 esté configurada de manera correcta y en un estado válido antes de que las tareas se distribuyan a los grupos de procesamiento de la matriz de grupos de procesamiento 212.
La matriz de grupos de procesamiento 212 puede incluir hasta "N" grupos de procesamiento (p. ej., grupo 214A, grupo 214B, grupo 214N). Cada grupo 214A-214N de la matriz de grupos de procesamiento 212 puede ejecutar una gran cantidad de subprocesos de manera simultánea. El programador 210 puede asignar trabajo a los grupos 214A-214N de la matriz de grupos de procesamiento 212 utilizando varios algoritmos de programación y/o de distribución del trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo. La programación puede ser gestionada, de manera dinámica, por el programador 210, o puede ser asistida en parte por la lógica del compilador durante la compilación de la lógica del programa configurada para ser ejecutada por la matriz de los grupos de procesamiento 212. En una forma de realización, diferentes grupos 214A-214N de la matriz de grupos de procesamiento 212 se pueden asignar para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
La matriz de grupos de procesamiento 212 se puede configurar para realizar diversos tipos de operaciones de procesamiento en paralelo. En una forma de realización, la matriz de grupos de procesamiento 212 está configurada para realizar operaciones informáticas en paralelo de uso general. Por ejemplo, la matriz de grupos de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, incluyendo el filtrado de datos de vídeo y/o de audio, realizar operaciones de modelado, incluyendo operaciones físicas, y realizar transformaciones de datos.
En una forma de realización, la matriz de grupos de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos en paralelo. En formas de realización en las que el procesador en paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de grupos de procesamiento 212 puede incluir lógica adicional para admitir la ejecución de dichas operaciones de procesamiento de gráficos, que incluyen, pero no se limitan, a lógica de muestreo de textura para realizar operaciones de textura, así como lógica de teselado y otra lógica de procesamiento de vértices. Además, la matriz de grupos de procesamiento 212 puede configurarse para ejecutar programas de sombreador relacionados con el procesamiento de gráficos tales como, pero sin limitación, a sombreadores de vértices, sombreadores de teselado, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento en paralelo 202 puede transferir datos desde la memoria del sistema a través de la unidad de E/S 204 para su procesamiento. Durante el procesamiento, los datos transferidos pueden almacenarse en la memoria del circuito integrado (por ejemplo, la memoria del procesador en paralelo 222) durante el procesamiento y luego volver a ser objeto de escritura en la memoria del sistema.
En una forma de realización, cuando la unidad de procesamiento en paralelo 202 se utiliza para realizar el procesamiento de gráficos, el programador 210 puede configurarse para dividir la carga de trabajo de procesamiento en tareas de tamaño aproximadamente igual, para permitir una mejor distribución de las operaciones de procesamiento de gráficos a múltiples grupos 214A-214N de la matriz de grupos de procesamiento 212. En algunas formas de realización, partes de la matriz de grupos de procesamiento 212 se pueden configurar para realizar diferentes tipos de procesamiento. Por ejemplo, una primera parte puede configurarse para realizar el sombreador de vértices y generación de topología, una segunda parte puede configurarse para realizar el teselado y sombreador de geometría, y una tercera parte puede configurarse para realizar el sombreador de píxeles u otras operaciones de espacio de pantalla, para obtener una imagen renderizada para visualizarse. Los datos intermedios obtenidos por uno o más de los grupos 214A-214N pueden almacenarse en memorias intermedias para permitir que los datos intermedios se transmitan entre los grupos 214A-214N para un procesamiento adicional.
Durante el funcionamiento, la matriz de grupos de procesamiento 212 puede recibir tareas de procesamiento para ser ejecutadas mediante el programador 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 para ser procesados, por ejemplo, datos de superficie (parche), datos primitivos, datos de vértices y/o datos de píxeles, así como parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa se ejecutará). El programador 210 puede configurarse para obtener los índices correspondientes a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede configurarse para garantizar que la matriz de grupos de procesamiento 212 esté configurada en un estado válido antes de que se inicie la carga de trabajo especificada por las memorias intermedias de comandos entrantes (por ejemplo, memorias intermedias por lotes, memorias intermedias de inserción, etc.).
Cada una o más instancias de la unidad de procesamiento en paralelo 202 pueden acoplarse con la memoria del procesador en paralelo 222. Se puede acceder a la memoria del procesador en paralelo 222 a través de la barra transversal de memoria 216, que puede recibir demandas de memoria desde la matriz de grupos de procesamiento 212 así como la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria del procesador en paralelo 222 a través de una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de partición (por ejemplo, unidad de partición 220A, unidad de partición 220B, a través de la unidad de partición 220N) que pueden acoplarse, cada una, a una parte (por ejemplo, una unidad de memoria) de la memoria del procesador en paralelo 222. En una puesta en práctica, el número de unidades de partición 220A-220N está configurado para ser igual al número de unidades de memoria, de modo que una primera unidad de partición 220A tenga una primera unidad de memoria 224A correspondiente, una segunda unidad de partición 220B tenga una unidad de memoria correspondiente 224B, y una N-ésima unidad de partición 220N tenga una N-ésima unidad de memoria 224N correspondiente. En otras formas de realización, el número de unidades de partición 220A-220N puede no ser igual al número de dispositivos de memoria.
En diversas formas de realización, las unidades de memoria 224A-224N pueden incluir diversos tipos de dispositivos de memoria, incluida la memoria dinámica de acceso aleatorio (DRAM) o la memoria gráfica de acceso aleatorio, tal como la memoria gráfica de acceso aleatorio sincrónica (SGRAM), que incluye la memoria de tasa de datos doble de gráficos (GDDR). En una forma de realización, las unidades de memoria 224A-224N también pueden incluir memoria apilada en 3D, que incluye, pero sin limitación, memoria de alto ancho de banda (HBM). Los expertos en esta técnica apreciarán que la puesta en práctica específica de las unidades de memoria 224A-224N puede variar y puede seleccionarse de entre varios diseños convencionales. Los objetivos de renderizado, tales como las memorias intermedias de tramas o los mapas de texturas, pueden almacenarse en las unidades de memoria 224A-224N, lo que permite que las unidades de partición 220A-220N realicen la escritura de partes de cada objetivo de renderizado en paralelo para utilizar, de manera eficiente, el ancho de banda disponible de la memoria del procesador en paralelo 222. En algunas formas de realización, una instancia local de la memoria del procesador en paralelo 222 puede excluirse en favor de un diseño de memoria unificado que utiliza la memoria del sistema junto con la memoria caché local.
En una forma de realización, cualquiera de los grupos 214A-214N de la matriz de grupos de procesamiento 212 puede procesar datos que serán objeto de escritura en cualquiera de las unidades de memoria 224A-224N dentro de la memoria del procesador en paralelo 222. La barra transversal de memoria 216 se puede configurar para transferir la salida de cada grupo 214A-214N a cualquier unidad de partición 220A-220N o a otro grupo 214A-214N, que puede realizar operaciones de procesamiento adicionales en la salida. Cada grupo 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para realizar la lectura o escritura en varios dispositivos de memoria externos. En una forma de 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 del procesador en paralelo 222, lo que permite que las unidades de procesamiento, dentro de los diferentes grupos de procesamiento 214A-214N, se comuniquen con la memoria del sistema u otra memoria que no sea local a la unidad de procesamiento en paralelo 202. En una forma de realización, la barra transversal de memoria 216 puede utilizar canales virtuales para separar los flujos de tráfico entre los grupos 214A-214N y las unidades de partición 220A-220N.
Aunque se ilustra una sola instancia de la unidad de procesamiento en paralelo 202 dentro del procesador en paralelo 200, se puede incluir cualquier número de instancias de la unidad de procesamiento en paralelo 202. Por ejemplo, se pueden proporcionar múltiples instancias de la unidad de procesamiento en paralelo 202 en una tarjeta única adicional, o se pueden interconectar múltiples tarjetas adicionales. Las diferentes instancias de la unidad de procesamiento en paralelo 202 pueden configurarse para operar entre sí incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes magnitudes de memoria de procesador en paralelo local y/u otras diferencias de configuración. Por ejemplo, y en una forma de realización, algunas instancias de la unidad de procesamiento en paralelo 202 pueden incluir unidades de coma flotante de mayor precisión en relación con otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento en paralelo 202 o el procesador en paralelo 200 se pueden poner en práctica en una diversidad de configuraciones y factores de forma, que incluyen, pero sin limitación, ordenadores de sobremesa, ordenador portátil o dispositivo portátil, servidores, estaciones de trabajo, consolas de juegos, y/o sistemas integrados.
La Figura 2B es un diagrama de bloques de una unidad de partición 220, según una forma de realización. En una forma de realización, la unidad de partición 220 es una instancia de una de las unidades de partición 220A-220N de la Figura 2A. Tal como se ilustra, la unidad de partición 220 incluye una memoria caché L2 221, una interfaz de memoria intermedia de tramas 225 y una unidad ROP 226 (unidad de operaciones de rasterizado). La memoria caché L2 221 es una memoria caché de lectura/escritura que está configurada para realizar operaciones de carga y almacenamiento recibidas desde la barra transversal de memoria 216 y la unidad ROP 226. Los errores de lectura y las demandas urgentes de reescritura son enviadas por la memoria caché L2221 a la interfaz de memoria intermedia de tramas 225 para su procesamiento. Las actualizaciones sin tratar también se pueden enviar a la memoria intermedia de tramas a través de la interfaz de memoria intermedia de tramas 225 para el procesamiento oportuno. En una forma de realización, la interfaz de memoria intermedia de tramas 225 interactúa con una de las unidades de memoria en la memoria del procesador en paralelo, tales como las unidades de memoria 224A-224N de la Figura 2 (por ejemplo, dentro de la memoria del procesador en paralelo 222).
En aplicaciones gráficas, la unidad ROP 226 es una unidad de procesamiento que realiza operaciones de trama tales como estarcido, prueba z, combinación y similares. A continuación, la unidad ROP 226 emite datos de gráficos procesados que se almacenan en la memoria de gráficos. En algunas formas de realización, la unidad ROP 226 incluye lógica de compresión para comprimir datos de color o z, que son objeto de escritura en la memoria y descomprimir datos de color o z, que son objeto de lectura desde la memoria. En algunas formas de realización, la unidad ROP 226 se incluye dentro de cada grupo de procesamiento (por ejemplo, el grupo 214A-214N de la Figura 2) en lugar de dentro de la unidad de partición 220. En dicha forma de realización, las demandas de lectura y de escritura para datos de píxeles se transmiten a través de la barra transversal de memoria 216 en lugar de datos de fragmentos de píxeles. Los datos de gráficos procesados pueden visualizarse en un dispositivo de visualización, tal como uno de entre los uno más dispositivo(s) de visualización 110 de la Figura 1, enrutado para su posterior procesamiento por el (los) procesador(es) 102, o enrutado para su posterior procesamiento por una de las entidades de procesamiento dentro del procesador en paralelo 200 de la Figura 2A.
La Figura 2C es un diagrama de bloques de un grupo de procesamiento 214 dentro de una unidad de procesamiento en paralelo, según una forma de realización. En una forma de realización, el grupo de procesamiento es una instancia de uno de los grupos de procesamiento 214A-214N de la Figura 2. El grupo de procesamiento 214 se puede configurar para ejecutar múltiples subprocesos en paralelo, en 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 formas de realización, se utilizan técnicas de emisión de instrucciones de instrucción única, datos múltiples (SIMD) para soportar la ejecución en paralelo de un gran número de subprocesos sin proporcionar múltiples unidades de instrucción independientes. En otras formas de realización, se utilizan técnicas de instrucción única, subprocesos múltiples (SIMT) para admitir la ejecución en paralelo de un gran número de subprocesos, por lo general sincronizados, utilizando una unidad de instrucción común configurada para emitir instrucciones a un conjunto de motores de procesamiento dentro de cada uno de los grupos de procesamiento. A diferencia de un régimen de ejecución SIMD, en donde todos los motores de procesamiento normalmente ejecutan instrucciones idénticas, la ejecución SIMT permite que diferentes subprocesos sigan más fácilmente rutas de ejecución divergentes a través de un programa de subproceso determinado. Los expertos en esta técnica comprenderán que un régimen de procesamiento SIMD representa un subconjunto funcional de un régimen de procesamiento SIMT.
El funcionamiento del grupo de procesamiento 214 se puede controlar mediante un gestor de canalización 232 que distribuye las tareas de procesamiento a los procesadores en paralelo SIMT. El gestor de canalización 232 recibe instrucciones del programador 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 ilustrado 234 es un ejemplo de un procesador en paralelo SIMT. Sin embargo, se pueden incluir varios tipos de procesadores en paralelo SIMT de diferentes arquitecturas dentro del grupo de procesamiento 214. Una o más instancias del multiprocesador de gráficos 234 se pueden incluir dentro de un grupo de procesamiento 214. El multiprocesador de gráficos 234 puede procesar datos y una barra transversal de datos 240 se puede utilizar para distribuir los datos procesados a uno de los múltiples destinos posibles, incluyendo otras unidades de sombreador. El gestor de canalización 232 puede facilitar la distribución de datos procesados especificando destinos para que los datos procesados se distribuyan a través de la barra transversal de datos 240.
Cada multiprocesador de gráficos 234, dentro del grupo de procesamiento 214, puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades lógicas aritméticas, unidades de almacenamiento de carga, etc.). La lógica de ejecución funcional se puede configurar de manera canalizada en donde se pueden emitir nuevas instrucciones antes de que se completen las instrucciones anteriores. La lógica de ejecución funcional admite 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 cálculo de diversas funciones algebraicas. En una forma de realización, se puede aprovechar el mismo hardware de unidad funcional para realizar diferentes operaciones y puede estar presente cualquier combinación de unidades funcionales.
Las instrucciones transmitidas al grupo de procesamiento 214 constituyen un subproceso. Un conjunto de subprocesos que se ejecutan en el conjunto de motores de procesamiento en 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, se puede asignar 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 estar inactivos durante los ciclos en los que se procesa dicho grupo de subprocesos. Un grupo de subprocesos también puede incluir 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 en ciclos de reloj consecutivos. En una forma de realización, múltiples grupos de subprocesos se pueden ejecutar de manera simultánea en un multiprocesador de gráficos 234.
En una forma de realización, el multiprocesador de gráficos 234 incluye una memoria caché interna para realizar operaciones de carga y de almacenamiento. En una forma de realización, el multiprocesador de gráficos 234 puede prescindir de una memoria caché interna y utilizar una memoria caché (por ejemplo, memoria caché L1 308) dentro del grupo de procesamiento 214. Cada multiprocesador de gráficos 234 también tiene acceso a memorias caché L2 dentro de las unidades de partición (por ejemplo, unidades de partición 220A-220N de la Figura 2) que se comparten entre todos los grupos de procesamiento 214 y se pueden utilizar para transferir datos entre subprocesos. El multiprocesador de gráficos 234 también puede acceder a la memoria global fuera del circuito integrado, que puede incluir una o más memorias de procesadores en paralelo locales y/o memorias del sistema. Cualquier memoria externa a la unidad de procesamiento en paralelo 202 puede utilizarse como memoria global. Las formas de realización en las que el grupo de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la memoria caché L1 308.
Cada grupo de procesamiento 214 puede incluir una unidad MMU 245 (unidad de gestión de memoria) que está configurada para asignar direcciones virtuales en direcciones físicas. En otras formas de realización, una o más instancias de la unidad MMU 245 pueden residir dentro de la interfaz de memoria 218 de la Figura 2. La unidad MMU 245 incluye un conjunto de entradas de tabla de páginas (PTEs) que se utilizan para asignar una dirección virtual a una dirección física de un mosaico (consultar más información sobre mosaicos) y, de manera opcional, un índice de línea de memoria caché. La unidad MMU 245 puede incluir memorias intermedias de búsqueda de traslación de direcciones (TLB) o memorias caché que pueden residir dentro del multiprocesador de gráficos 234 o en la memoria caché L1 o en el grupo de procesamiento 214. La dirección física se procesa para distribuir el lugar de acceso a datos de superficie para permitir un intercalado eficiente de demandas entre unidades de partición. El índice de línea de memoria caché se puede utilizar para determinar si una solicitud de una línea de memoria caché es un acierto o un error.
En las aplicaciones informáticas y de gráficos, un grupo de procesamiento 214 puede configurarse de modo que cada multiprocesador de gráficos 234 esté acoplado a una unidad de texturas 236 para realizar operaciones de asignación de texturas, por ejemplo, determinar posiciones de muestra de textura, realizar la lectura de datos de texturas y filtrar los datos de texturas. Los datos de texturas son objeto de lectura desde una memoria caché L1 de textura interna (no ilustrada) o en algunas formas de realización desde la memoria caché L1 dentro del multiprocesador de gráficos 234 y se extraen desde una memoria caché L2, memoria de procesador en paralelo local o memoria del sistema, según sea necesario. Cada multiprocesador de gráficos 234 envía tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otro grupo de procesamiento 214 para su posterior procesamiento o para almacenar la tarea procesada en una memoria caché L2, memoria de procesador en paralelo local o memoria del sistema a través de la barra transversal de memoria 216. Una unidad ROP previa 242 (unidad de operaciones previa a la trama) está configurada para recibir datos desde el multiprocesador de gráficos 234, datos directos a unidades ROP, que pueden ubicarse con unidades de partición tal como se describe en este documento (por ejemplo, unidades de partición 220A-220N de la Figura 2). La unidad ROP previa 242 puede realizar optimizaciones para la combinación de colores, organizar datos de color de píxeles y realizar traslaciones de direcciones.
Se apreciará que la arquitectura central descrita en este documento es ilustrativa y que son posibles variaciones y modificaciones. Cualquier número de unidades de procesamiento, por ejemplo, multiprocesador de gráficos 234, unidades de textura 236, unidades ROPs previas 242, etc., puede incluirse dentro de un grupo de procesamiento 214. Asimismo, aunque solamente se ilustra un grupo de procesamiento 214, una unidad de procesamiento en paralelo, tal como se describe en este documento, puede incluir cualquier número de instancias del grupo de procesamiento 214. En una forma de realización, cada grupo de procesamiento 214 se puede configurar para operar de manera independiente de otros grupos de procesamiento 214 utilizando unidades de procesamiento separadas y distintas, memorias cachés L1, etc.
La Figura 2D muestra un multiprocesador de gráficos 234, según una forma de realización. En dicha forma de realización, el multiprocesador de gráficos 234 se acopla con el administrador de canalizaciones 232 del grupo de procesamiento 214. El multiprocesador de gráficos 234 tiene una canalización de ejecución que incluye, pero sin limitación, una memoria caché de instrucciones 252, una unidad de instrucciones 254, una unidad de asignación de direcciones 256, un fichero de registro 258, uno o más núcleos de unidades de procesamiento de gráficos de uso 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 se acoplan con la memoria caché 272 y la memoria compartida 270 mediante una interconexión de memoria y de memoria caché 268.
En una forma de realización, la memoria caché de instrucciones 252 recibe un flujo de instrucciones para ejecutar desde el gestor de canalización 232. Las instrucciones se almacenan en la memoria caché de instrucciones 252 y se envían para su ejecución por la unidad de instrucciones 254. La unidad de instrucciones 254 puede enviar instrucciones como grupos de subprocesos (por ejemplo, deformaciones), con cada subproceso del grupo de subprocesos asignado a una unidad de ejecución diferente dentro del núcleo GPGPU 262. Una instrucción puede acceder a cualquier espacio de direcciones local, compartido o global, especificando una dirección dentro de un espacio de direcciones unificado. La unidad de asignación de direcciones 256 puede utilizarse para trasladar direcciones en el espacio de direcciones unificado en una dirección de memoria distinta a la que puede acceder mediante las unidades de carga/almacenamiento 266.
El fichero de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 324. El fichero de registro 258 proporciona almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, núcleos GPGPU 262, unidades de carga/almacenamiento 266) del multiprocesador de gráficos 324. En una forma de realización, el fichero de registro 258 se divide entre cada una de las unidades funcionales de manera que a cada unidad funcional se le asigna una parte dedicada del fichero de registro 258. En una forma de realización, el fichero de registro 258 es dividido entre las diferentes deformaciones que está ejecutando el multiprocesador de gráficos 324.
Cada uno de los núcleos GPGPU 262 puede incluir unidades de coma flotante (FPUs) y/o unidades de lógica aritmética de enteros (ALUs) que se utilizan para ejecutar instrucciones del multiprocesador de gráficos 324. Los núcleos GPGPU 262 pueden tener una arquitectura similar o pueden diferir en arquitectura, según las formas de realización. Por ejemplo, y en una forma de realización, una primera parte de los núcleos de GPGPU 262 incluye una unidad FPU de precisión simple y una unidad ALU de número entero, mientras que una segunda parte de los núcleos de GPGPU incluye una unidad FPU de doble precisión. En una forma de realización, las unidades FPUs pueden poner en práctica la norma IEEE 754-2008 para aritmética de coma flotante o permitir aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 324 puede incluir, de manera adicional, una o más unidades de función fija o de función especial para realizar funciones específicas tales como copiar rectángulos u operaciones de combinación de píxeles. En una forma de realización, uno o más de los núcleos de GPGPU también pueden incluir una lógica de función fija o especial.
La interconexión de memoria y de memoria caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 324 al fichero de registro 258 y a la memoria compartida 270. En una forma de realización, la interconexión de memoria y memoria caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacenamiento 266 ponga en práctica operaciones de carga y almacenamiento entre la memoria compartida 270 y el fichero de registro 258. El fichero de registro 258 puede operar a la misma frecuencia que los núcleos GPGPU 262, por lo que la transferencia de datos entre los núcleos GPGPU 262 y el fichero de registro 258 tiene una latencia muy baja. La memoria compartida 270 se puede utilizar para permitir la comunicación entre subprocesos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234. La memoria caché 272 se puede utilizar como una memoria caché de datos, por ejemplo, para almacenar en memoria caché datos de texturas comunicados entre las unidades funcionales y la unidad de texturas 236. La memoria compartida 270 también se puede utilizar como un programa gestionado en memoria 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 los datos automáticamente almacenados en memoria caché que se almacenan dentro de la memoria caché 272.
Las Figuras 3A-3B ilustran multiprocesadores de gráficos adicionales, según formas de realización. 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 ilustrados 325, 350 pueden configurarse como un multiprocesador de transmisión (SM) capaz de ejecutar, de manera simultánea, un gran número de subprocesos de ejecución.
La Figura 3A muestra un multiprocesador de gráficos 325 según una forma de realización adicional. El multiprocesador de gráficos 325 incluye múltiples instancias adicionales de unidades de recursos de ejecución en relación con el 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 instrucción 332A-332B, el fichero de registro 334A-334B y la(s) unidad(es) de texturas 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 forma de realización, las unidades de recursos de ejecución tienen una memoria caché de instrucciones 330 común, una memoria caché de texturas y/o datos 342 y una memoria compartida 346. Los diversos componentes pueden comunicarse mediante una estructura de interconexión 327. En una forma de realización, la estructura de interconexión 327 incluye uno o más conmutadores de barra transversal para permitir la comunicación entre los diversos componentes del multiprocesador de gráficos 325.
La Figura 3B muestra un multiprocesador de gráficos 350 según una forma de realización adicional. El procesador de gráficos incluye múltiples conjuntos de recursos de ejecución 356A-356D, en donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucción, ficheros de registro, núcleos GPGPU y unidades de almacenamiento de carga, tal como se ilustra en la Figura 2D y en la Figura 3A. Los recursos de ejecución 356A-356D pueden trabajar en conjunto con la(s) unidad(es) de texturas 360A-360D para operaciones de textura, mientras comparten una memoria caché de instrucciones 354 y una memoria compartida 362. En una forma de realización, los recursos de ejecución 356A-356D pueden compartir una memoria caché de instrucciones 354 y una memoria compartida 362, así como múltiples instancias de una textura y/o memoria caché de datos 358A-358B. Los diversos componentes pueden comunicarse a través de una estructura de interconexión 352 similar a la estructura de interconexión 327 de la Figura 3A.
El experto en esta técnica comprenderá que la arquitectura descrita en las Figuras 1,2A-2D y 3A-3B son descriptivas y no limitativas en cuanto al alcance de las presentes formas de realización. Por lo tanto, las técnicas descritas en este documento pueden ponerse en práctica en cualquier unidad de procesamiento configurada de manera correcta, incluyendo, sin limitación, uno o más procesadores de aplicaciones móviles, una o más unidades de procesamiento central (CPUs) de sobremesa o de servidor, incluyendo las CPUs de varios núcleos, las una o más unidades de procesamiento en paralelo, tales como la unidad de procesamiento en paralelo 202 de la Figura 2, así como los uno o más procesadores de gráficos o unidades de procesamiento de uso especial, sin desviarse del alcance de las formas de realización descritas en este documento.
En algunas formas de realización, un procesador en paralelo o GPGPU, tal como se describe en este documento, se acopla, de manera comunicativa, a los núcleos/procesador concentrador para acelerar las operaciones de gráficos, las operaciones de aprendizaje automático, las operaciones de análisis de patrones y diversas funciones de GPU de uso general (GPGPU). La unidad GPU se puede acoplar de manera comunicativa a los núcleos/procesador concentrador a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras formas de realización, la GPU puede integrarse en el mismo paquete o circuito integrado que los núcleos y acoplarse, de manera comunicativa, a los núcleos mediante un bus/interconexión de procesador interno (es decir, interno al paquete o circuito integrado). De manera independiente de la forma en que se conecte la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en la forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza circuitos/lógica dedicados para procesar de manera eficiente estos comandos/instrucciones.
Técnicas para la interconexión de la GPU al procesador concentrador
La Figura 4A ilustra una arquitectura, a modo de ejemplo, en donde una pluralidad de GPUs 410-413 se acoplan, de manera comunicativa, a una pluralidad de procesadores multinúcleo 405-406 a través de enlaces de alta velocidad 440-443 (por ejemplo, buses, interconexiones punto a punto, etc.). En una forma de realización, los enlaces de alta velocidad 440-443 admiten un rendimiento de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o superior, según la puesta en práctica. Se pueden utilizar varios protocolos de interconexión, incluyendo, sin limitación, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes no se limitan a ningún protocolo de comunicación o rendimiento en particular.
Además, en una forma de realización, dos o más de las unidades GPUs 410-413 están interconectadas a través de enlaces de alta velocidad 444-445, que pueden ponerse en práctica utilizando los mismos o diferentes protocolos/enlaces que los utilizados para los enlaces de alta velocidad 440-443. De manera similar, dos o más de los procesadores multinúcleo 405-406 se pueden conectar a través del enlace de alta velocidad 433 que pueden ser buses de multiprocesador simétrico (SMP) que funcionan a 20 GB/s, 30 GB/s, 120 GB/s o una velocidad superior. De manera alternativa, toda la comunicación entre los diversos componentes del sistema que se ilustran en la Figura 4A puede lograrse utilizando los mismos protocolos/enlaces (por ejemplo, a través de una estructura de interconexión común). Sin embargo, tal como se describió, los principios subyacentes no se limitan a ningún tipo particular de tecnología de interconexión.
En una forma de realización, cada procesador multinúcleo 405-406 está acoplado, de manera comunicativa, a una memoria de procesador 401-402, a través de las interconexiones de memoria 430-431, respectivamente, y cada unidad GPU 410-413 está acoplada, de manera comunicativa, a la memoria GPU 420-423 a través de las interconexiones de memoria GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar las mismas o diferentes tecnologías de acceso a la memoria. A modo de ejemplo, y sin limitación, las memorias del procesador 401-402 y las memorias de la GPU 420-423 pueden ser memorias volátiles tales como las memorias dinámicas de acceso aleatorio (DRAMs) (incluyendo las DRAMs apiladas), SDRAM de DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6) o Memorias de Alto Ancho de Banda (HBM) y/o pueden ser memorias no volátiles tales como 3D XPoint o Nano-Ram. En una forma de realización, una parte de las memorias puede ser una memoria volátil y otra parte puede ser una memoria no volátil (por ejemplo, utilizando una jerarquía de memoria de dos niveles (2LM)).
Tal como se describe a continuación, aunque los diversos procesadores 405-406 y las unidades GPUs 410-413 pueden acoplarse físicamente a una memoria particular 401-402, 420-423, respectivamente, se puede poner en práctica una arquitectura de memoria unificada en donde el mismo espacio de dirección de sistema virtual (también denominado espacio de "direcciones efectivas") se distribuye entre todas las diversas memorias físicas. Por ejemplo, cada una de las memorias del procesador 401 -402 puede comprender 64 GB del espacio de direcciones de la memoria del sistema y las memorias de GPU 420-423 pueden comprender cada una 32 GB del espacio de direcciones de la memoria del sistema (lo que da como resultado un total de 256 GB de memoria direccionable en este ejemplo).
La Figura 4B ilustra datos adicionales para una interconexión entre un procesador multinúcleo 407 y un módulo de aceleración de gráficos 446 de conformidad con una forma de realización. El módulo de aceleración de gráficos 446 puede incluir uno o más circuitos GPU integrados en una tarjeta de línea que está acoplada al procesador 407 a través del enlace de alta velocidad 440. De manera alternativa, el módulo de aceleración de gráficos 446 puede estar integrado en el mismo paquete o circuito que el procesador 407.
El procesador ilustrado 407 incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de búsqueda de traslación 461A-461D y una o más memorias cachés 462A-462D. Los núcleos pueden incluir varios otros componentes para ejecutar instrucciones y procesar datos que no se ilustran para evitar oscurecer los principios subyacentes (por ejemplo, unidades de obtención de instrucciones, unidades de predicción de bifurcación, decodificadores, unidades de ejecución, memorias intermedias de reorden, etc.). Las memorias cachés 462A-462D pueden comprender memorias caché de nivel 1 (L1) y 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 forma de realización del procesador 407 incluye 24 núcleos, cada uno con su propia memoria caché L1, doce memorias cachés L2 compartidas y doce memorias cachés L3 compartidas. En esta forma de realización, dos núcleos adyacentes comparten una de las memorias caché L2 y L3. El procesador 407 y el módulo de integración del acelerador de gráficos 446 se conectan con la memoria del sistema 441, que puede incluir las memorias del procesador 401-402.
La coherencia se mantiene para los datos y las instrucciones almacenados en las diversas memorias caché 462A-462D, 456 y la memoria del sistema 441 a través de la comunicación entre núcleos mediante un bus de coherencia 464. Por ejemplo, cada memoria caché puede tener una lógica/circuitos de coherencia de memoria caché asociados con ella para comunicarse a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de memoria caché particulares. En una puesta en práctica, se pone en práctica un protocolo de espionaje de memoria caché a través del bus de coherencia 464 para espiar los accesos a la memoria caché. Las técnicas de indagación/coherencia de memoria caché son bien conocidas por los expertos en esta técnica y no se describirán en detalle aquí para evitar oscurecer los principios subyacentes.
En una forma de realización, un circuito proxy 425 acopla, de manera comunicativa, el módulo de aceleración de gráficos 446 al bus de coherencia 464, permitiendo que el módulo de aceleración de gráficos 446 participe en el protocolo de coherencia de memoria caché como un homólogo de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito proxy 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 puesta en práctica, un circuito de integración de acelerador 436 proporciona servicios de gestión de memoria 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. Los motores de procesamiento de gráficos 431,432, N pueden comprender cada uno una unidad de procesamiento de gráficos (GPU) separada. De manera alternativa, los motores de procesamiento de gráficos 431, 432, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tales como unidades de ejecución de gráficos, motores de procesamiento de medios (por ejemplo, codificadores/decodificadores de vídeo), muestreadores y motores blit. Dicho de otro modo, el módulo de aceleración de gráficos puede ser una GPU con una pluralidad de motores de procesamiento de gráficos 431-432, N o los motores de procesamiento de gráficos 431-432, N pueden ser GPU individuales integradas en un paquete común, una tarjeta de línea o un circuito integrado.
En una forma de 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 traslaciones de memoria virtual a física (también denominadas traslaciones de memoria efectiva a real) y protocolos de acceso a la memoria para acceder a la memoria del sistema 441. La unidad MMU 439 también puede incluir una memoria intermedia de búsqueda de traslación (TLB) (no ilustrada) para almacenar en memoria caché las traslaciones de direcciones virtuales/efectivas a físicas/reales. En una puesta en práctica, una memoria caché 438 almacena comandos y datos para un acceso eficiente por parte de los motores de procesamiento de gráficos 431-432, N. En una forma de realización, los datos almacenados en la memoria caché 438 y en las memorias de gráficos 433-434, N se mantienen coherentes con las memorias caché de núcleos 462A-462D, 456 y la memoria del sistema 411. Tal como se describió, lo que antecede puede lograrse a través del circuito proxy 425 que participa en el mecanismo de coherencia de la memoria caché en renderizado de la memoria caché 438 y de las memorias 433-434, N (por ejemplo, enviando actualizaciones a la memoria caché 438 relacionadas con modificaciones/accesos de líneas de memoria caché en las memorias caché del procesador 462A-462D, 456 y recibir actualizaciones desde la memoria caché 438).
Un conjunto de registros 445 almacena 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 subprocesos. Por ejemplo, el circuito de gestión de contexto 448 puede realizar operaciones de guardar y restaurar para guardar y restaurar contextos de varios subprocesos durante las conmutaciones de contexto (por ejemplo, cuando se guarda un primer subproceso y se almacena un segundo subproceso para que el segundo subproceso pueda ser ejecutado por un motor de procesamiento de gráficos). Por ejemplo, en una conmutación de contexto, el circuito de gestión de contexto 448 puede almacenar valores de registro actuales en una zona designada en la memoria (por ejemplo, identificada por un puntero de contexto). A continuación, puede restaurar los valores de registro al volver al contexto. En una forma de realización, un circuito de gestión de interrupciones 447 recibe y procesa las interrupciones recibidas desde dispositivos del sistema.
En una puesta en práctica, las direcciones virtuales/efectivas de un motor de procesamiento de gráficos 431 se trasladan a direcciones reales/físicas en la memoria del sistema 411 por la unidad MMU 439. Una forma de realización del circuito de integración de acelerador 436 admite múltiples (por ejemplo, 4, 8, 16) módulos aceleradores de gráficos 446 y/u otros dispositivos aceleradores. El módulo acelerador de gráficos 446 puede estar dedicado a una aplicación única ejecutada en el procesador 407 o puede compartirse entre múltiples aplicaciones. En una forma de realización, se presenta un entorno de ejecución de gráficos virtualizados en donde 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 "segmentos" que se asignan a diferentes máquinas virtuales y/o aplicaciones en función de los requisitos de procesamiento y de las prioridades asociadas con las máquinas virtuales y/o las aplicaciones.
Por lo tanto, el circuito de integración de acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona traslación de direcciones y servicios de memoria caché del sistema. Además, el circuito de integración de acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador concentrador gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de la memoria.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se asignan explícitamente al espacio de direcciones real visto por el procesador concentrador 407, cualquier procesador concentrador puede direccionar estos recursos directamente utilizando un valor de dirección efectivo. Una función del circuito de integración de acelerador 436, en una forma de realización, es la separación física de los motores de procesamiento de gráficos 431-432, N para que aparezcan ante el sistema como unidades independientes.
Tal como se describió con anterioridad, en la forma de 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 están siendo procesados por cada uno de los motores de procesamiento de gráficos 431-432, N. Las memorias de gráficos 433-434, M pueden ser memorias volátiles tales como DRAMs (incluyendo memorias DRAMs apiladas), memoria GDDR (p. ej., GDDR5, GDDR6), o HBM, y/o pueden ser memorias no volátiles tales como 3D XPoint o Nano-Ram.
En una forma de realización, para reducir el tráfico de datos a través del enlace 440, se utilizan técnicas de polarización para garantizar que los datos almacenados en las memorias de gráficos 433-434, M sean datos que se utilizarán con más frecuencia por los motores de procesamiento de gráficos 431-432, N y de manera preferible no utilizado por los núcleos 460A-460D (al menos no con frecuencia). De manera similar, el mecanismo de polarización intenta mantener los datos que necesitan los núcleos (y de manera preferible no los motores de procesamiento de gráficos 431-432, N) dentro de las memorias caché 462A-462D, 456 de los núcleos y de la memoria del sistema 411.
La Figura 4C ilustra otra forma de realización en donde el circuito de integración de acelerador 436 está integrado dentro del procesador 407. En esta forma de realización, los motores de procesamiento de gráficos 431-432, N se comunican directamente a través del enlace de alta velocidad 440 con el circuito de integración de acelerador 436 a través de la interfaz 437 y de interfaz 435 (que, de nuevo, puede utilizar cualquier forma de bus o de protocolo de interfaz). El circuito de integración de acelerador 436 puede realizar las mismas operaciones que las descritas con respecto a la Figura 4B, pero potencialmente a un mayor rendimiento dada su proximidad al bus de coherencia 462 y a las memorias caché 462A-462D, 426.
Una forma de realización admite diferentes modelos de programación que incluyen 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). Este último puede incluir modelos de programación que son controlados por el circuito de integración de acelerador 436 y modelos de programación que son controlados por el módulo de aceleración de gráficos 446.
En una forma de realización del modelo de proceso dedicado, los motores de procesamiento de gráficos 431-432, N están dedicados a una aplicación única o proceso bajo un sistema operativo único. La aplicación única puede canalizar otras demandas de aplicaciones a los motores de gráficos 431-432, N proporcionando virtualización dentro de una VM/partición.
En los modelos de programación de proceso dedicado, los motores de procesamiento de gráficos 431-432, N pueden ser compartidos por múltiples particiones de aplicación/VM. Los modelos compartidos requieren un hipervisor del sistema para virtualizar los motores de procesamiento de gráficos 431 -432, N para permitir el acceso de cada sistema operativo. Para sistemas de partición única sin hipervisor, los motores de procesamiento de gráficos 431-432, N son propiedad del sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 431-432, N para proporcionar acceso a cada proceso o aplicación.
Para el modelo de programación compartida, el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos individual 431-432, N selecciona un elemento de proceso utilizando un identificador de proceso. En una forma de realización, los elementos de proceso se almacenan en la memoria del sistema 411 y se pueden direccionar utilizando las técnicas de traslación de dirección efectiva a dirección real descritas en este documento. El identificador del proceso puede ser un valor específico de la puesta en práctica proporcionado al procesador concentrador al registrar su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, llamar al software del sistema para agregar el elemento del proceso a la lista vinculada del elemento del proceso). Los 16 bits inferiores del identificador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista enlazada de elementos de proceso.
La Figura 4D ilustra un segmento de integración de acelerador de ejemplo 490. Tal como se utiliza aquí, un "segmento" comprende una parte especificada de los recursos de procesamiento del circuito de integración de acelerador 436. El espacio de direcciones efectivo de la aplicación 482 dentro de la memoria del sistema 411 almacena elementos de proceso 483. En una forma de realización, los elementos de proceso 483 se almacenan en respuesta a las invocaciones de GPU 481 de las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado del proceso para la aplicación correspondiente 480. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un trabajo único solicitado por una aplicación o puede contener un puntero a una cola de espera de trabajos. En el último caso, el descriptor WD 484 es un puntero a la cola de espera de demandas de trabajo en el espacio de direcciones de la aplicación 482.
El módulo de aceleración de gráficos 446 y/o los motores de procesamiento de gráficos individuales 431 -432, N pueden ser compartidos por todos o un subconjunto de los procesos en el sistema. Las formas de realización incluyen una infraestructura para configurar el estado del proceso y enviar un descriptor WD 484 a un módulo de aceleración de gráficos 446 para iniciar un trabajo en un entorno virtualizado.
En una puesta en práctica, el modelo de programación de procesos dedicados es específico de la puesta en práctica. 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 propiedad de un único proceso, el hipervisor inicializa el circuito de integración de acelerador 436 para la partición propietaria y el sistema operativo inicializa el circuito de integración de acelerador 436 para el proceso propietario en el momento en que se asigna el módulo de aceleración de gráficos 446.
En funcionamiento, una unidad de búsqueda de WD 491 en el segmento de integración del acelerador 490 busca el siguiente WD 484 que incluye una indicación del trabajo que debe realizar uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Los datos desde el descriptor WD 484 puede almacenarse en registros 445 y utilizarse por la unidad MMU 439, el circuito de gestión de interrupciones 447 y/o el circuito de gestión de contexto 446 tal como se ilustra. Por ejemplo, una forma de realización de la unidad MMU 439 incluye un circuito de recorrido de segmento/página para acceder a las tablas de segmento/página 486 dentro del espacio de dirección virtual 485 del sistema operativo. El circuito de gestión de interrupción 447 puede procesar eventos de interrupción 492 recibidos desde el módulo de aceleración de gráficos 446. Cuando se realizan operaciones de gráficos, una dirección efectiva 493 generada por un motor de procesamiento de gráficos 431 -432, N es trasladada a una dirección real por la unidad MMU 439.
En una forma de realización, el mismo conjunto de registros 445 se duplica para cada motor de procesamiento de gráficos 431-432, N y/o módulo de aceleración de gráficos 446 y puede ser inicializado por el hipervisor o por el sistema operativo. Cada uno de estos registros duplicados puede incluirse en un segmento de integración de acelerador 490. En la Tabla 1 se ilustran ejemplos de registros que pueden ser inicializados por el hipervisor.
Tabla 1 - Registros inicializados del hipervisor
Figure imgf000014_0001
Figure imgf000015_0001
En la Tabla 2 se ilustran ejemplos de registros que pueden ser inicializados por el sistema operativo.
Tabla 2 - Registros inicializados por el sistema operativo
Figure imgf000015_0002
En una forma de realización, cada descriptor WD 484 es específico para un módulo de aceleración de gráficos particular 446 y/o un motor de procesamiento de gráficos 431-432, N. Contiene toda la información que un motor de procesamiento de gráficos 431-432, N requiere para realizar su trabajo o puede ser un puntero a una posición de memoria en donde la aplicación ha configurado una cola de comandos de trabajo para completar.
La Figura 4E ilustra datos adicionales para una forma de realización de un modelo compartido. Esta forma de realización incluye un espacio de direcciones reales de hipervisor 498 en donde se almacena una lista de elementos de proceso 499. Se puede acceder al espacio de direcciones reales del hipervisor 498 a través de un hipervisor 496 que virtualiza los motores del 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 la totalidad o de un subconjunto de particiones en el sistema utilicen un módulo de aceleración de gráficos 446. Existen dos modelos de programación en donde el módulo de aceleración de gráficos 446 es compartido por múltiples procesos y particiones: compartidas en intervalos de tiempo y compartidas dirigidas por gráficos.
En este modelo, el hipervisor del sistema 496 posee el módulo de aceleración de gráficos 446 y hace que su función esté disponible para todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 admita la virtualización por parte del hipervisor del 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 debe ser autónoma (es decir, no es necesario mantener el estado entre trabajos), o el módulo de aceleración de gráficos 446 debe proporcionar un mecanismo de almacenamiento y de restauración de contexto. 2) El módulo de aceleración de gráficos 446 garantiza que la solicitud de trabajo de una aplicación se complete en un período de tiempo especificado, incluyendo los errores de traslación, o el módulo de aceleración de gráficos 446 proporciona la capacidad de adelantarse al procesamiento del trabajo. 3) El módulo de aceleración de gráficos 446 debe garantizar la equidad entre procesos cuando opera en el modelo de programación compartida dirigida.
En una forma de realización, para el modelo compartido, se requiere que la aplicación 480 realice una llamada de sistema al sistema operativo 495 con un tipo de módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de zona de guardar/restaurar contextos (CSRP). El tipo de módulo de aceleración de gráficos 446 describe la función de aceleración dirigida para la llamada del sistema. El tipo de módulo de aceleración de gráficos 446 puede ser un valor específico del sistema. El descriptor WD está formateado concretamente para el módulo de aceleración de gráficos 446 y puede tener la forma de un comando del módulo de aceleración de gráficos 446, un puntero de dirección efectiva a una estructura definida por el usuario, un puntero de dirección efectiva a una cola de espera de comandos o cualquier otra estructura de datos para describir el trabajo a realizar por el módulo de aceleración de gráficos 446. En una forma de realización, el valor de AMR es el estado de AMR a utilizar para el proceso actual. El valor pasado al sistema operativo es similar a una aplicación que configura el AMR. Si las puestas en práctica del circuito de integración de acelerador 436 y el módulo de aceleración de gráficos 446 no admiten un registro de anulación de máscara de autoridad de usuario (UAMOR), el sistema operativo puede aplicar el valor UAMOR actual al valor AMR antes de pasar el AMR en la llamada del hipervisor. El hipervisor 496 puede aplicar, de manera opcional, el valor actual del registro de anulación de máscara de autoridad (AMOR) antes de colocar el AMR en el elemento de proceso 483. En una forma de realización, el CSRP es uno de los registros 445 que contiene la dirección efectiva de una zona en el espacio de direcciones de la aplicación 482 para que el módulo de aceleración de gráficos 446 guarde y restaure el estado de contexto. Este puntero es opcional si no es necesario guardar ningún estado entre trabajos o cuando se sustituye un trabajo. La zona de guardar/restaurar contexto puede estar fijada en la memoria del sistema.
Al recibir la llamada del sistema, el sistema operativo 495 puede verificar que la aplicación 480 se haya registrado y se le haya otorgado la autoridad para utilizar el módulo de aceleración de gráficos 446. El sistema operativo 495 a continuación realiza la llamada al hipervisor 496 con la información que se ilustra en la Tabla 3.
Tabla 3: Parámetros de llamada del sistema operativo al hipervisor
Figure imgf000016_0001
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 utilizar el módulo de aceleración de gráficos 446. El hipervisor 496, a continuación, coloca el elemento de proceso 483 en la lista vinculada de elementos de proceso para el tipo de módulo de aceleración de gráficos correspondiente 446. El elemento de proceso puede incluir la información que se ilustra en la Tabla 4.
Tabla 4 - Información de elementos de proceso
Figure imgf000016_0002
En una forma de realización, el hipervisor inicializa una pluralidad de registros 445 del segmento de integración del acelerador 490.
Tal como se ilustra en la Figura 4F, una forma de realización emplea una memoria unificada direccionable a través de un espacio de direcciones de memoria virtual común utilizado para acceder a las memorias 401-402 del procesador físico y a las memorias 420-423 de la GPU. En esta puesta en práctica, las operaciones ejecutadas en las unidades GPUs 410-413 utilizan el mismo espacio de direcciones de memoria virtual/efectiva para acceder a las memorias de los procesadores 401 -402 y viceversa, simplificando así la programabilidad. En una forma de realización, una primera parte del espacio de direcciones virtual/efectivo se asigna a la memoria del procesador 401, una segunda parte a la segunda memoria del procesador 402, una tercera parte a la memoria GPU 420, y así sucesivamente. Todo el espacio de memoria virtual/efectivo (a veces denominado espacio de direcciones efectivas) se distribuye, por lo tanto, en cada una de las memorias del procesador 401-402 y en las memorias de la GPU 420-423, lo que permite que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual asignada a dicha memoria.
En una forma de realización, los circuitos de gestión de polarización/coherencia 494A-494E, dentro de una o más de las unidades MMUs 439A-439E, garantiza la coherencia de memoria caché entre las memorias caché de los procesadores concentradores (por ejemplo, 405) y las unidades GPUs 410-413 y pone en práctica técnicas de polarización indicando las memorias físicas en las que deben almacenarse determinados tipos de datos. Aunque en la Figura 4F se ilustran múltiples instancias de circuitos de gestión de polarización/coherencia 494A-494E, los circuitos de polarización/coherencia pueden ponerse en práctica dentro de la unidad MMU de uno o más procesadores concentradores 405 y/o dentro del circuito de integración de acelerador 436.
Una forma de realización permite que la memoria 420-423 adjunta a la GPU sea asignada como parte de la memoria del sistema y acceder a ella utilizando la tecnología de memoria virtual compartida (SVM), pero sin sufrir los inconvenientes de rendimiento típicos asociados con la coherencia de la memoria caché del sistema completo. La capacidad de acceder a la memoria adjunta a la GPU 420-423 como memoria del sistema sin sobrecarga de coherencia de memoria caché onerosa proporciona un entorno operativo beneficioso para la descarga de GPU. Esta disposición permite que el software del procesador concentrador 405 configure operandos y acceda a los resultados de los cálculos, sin la sobrecarga de las copias de datos 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 ineficientes en relación con los accesos a memorias simples. Al mismo tiempo, la capacidad de acceder a la memoria adjunta de GPU 420-423 sin sobrecargas de coherencia de memoria 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 sustancial, por ejemplo, la sobrecarga de coherencia de memoria caché puede reducir, en gran medida, el ancho de banda de escritura efectivo visualizado por una unidad GPU 410-413. La eficiencia de la configuración del operando, la eficiencia del acceso a los resultados y la eficiencia del cálculo de la unidad GPU juegan un papel en la determinación de la efectividad de la descarga de la GPU.
En una puesta en práctica, la selección entre la polarización de la GPU y la polarización del procesador concentrador está impulsada por una estructura de datos de seguimiento de polarización. Se puede utilizar una tabla de polarización, por ejemplo, que puede ser una estructura granular de página (es decir, controlada en la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria adjunta a la GPU. La tabla de polarización puede ponerse en práctica en un margen de memoria extraído de una o más memorias 420-423 conectadas a GPU, con o sin una memoria caché de polarización en la GPU 410-413 (p. ej., para almacenar en memoria caché las entradas de la tabla de polarización utilizadas con frecuencia/recientemente). De manera alternativa, toda la tabla de polarización puede mantenerse dentro de la GPU.
En una puesta en práctica, se accede a la entrada de la tabla de polarización asociada con cada acceso a la memoria 420-423 adjunta a la GPU antes del acceso real a la memoria de la GPU, lo que causa las siguientes operaciones. En primer lugar, las demandas locales desde la GPU 410-413 que encuentran su página en polarización de GPU se reenvían directamente a una memoria de GPU 420-423 correspondiente. Las demandas locales de la GPU que encuentran su página en la polarización del concentrador se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad tal como se describió con anterioridad). En una forma de realización, las demandas del procesador 405 que encuentran la página solicitada en la polarización del procesador concentrador completan la demanda como una lectura de memoria normal. De manera alternativa, las demandas dirigidas a una página con polarización de GPU pueden reenviarse a la GPU 410-413. A continuación, la GPU puede realizar la transición de la página a una polarización del procesador concentrador si no está utilizando la página actualmente.
El estado de polarización de una página se puede cambiar mediante un mecanismo basado en software, un mecanismo basado en software asistido por hardware o, para un conjunto limitado de casos, un mecanismo basado puramente en hardware.
Un mecanismo para cambiar el estado de polarización emplea una llamada de API (por ejemplo, OpenCL), que, a su vez, llama al controlador de dispositivo de la GPU que, a su vez, envía un mensaje (o pone en cola de espera un descriptor de comando) a la GPU solicitándole que cambie el estado de polarización y, para algunas transiciones, realice una operación de vaciado de memoria caché en el concentrador. La operación de vaciado de memoria caché es necesaria para una transición desde la polarización del procesador concentrador 405 a la polarización de la GPU, pero no se requiere para la transición opuesta.
En una forma de realización, la coherencia de la memoria caché se mantiene al hacer que las páginas polarizadas por GPU no puedan ser almacenadas en memoria caché de manera temporal por el procesador concentrador 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso a la GPU 410 que puede, o no, conceder acceso de inmediato, dependiendo de la puesta en práctica. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410 es beneficioso asegurarse de que las páginas polarizadas a la GPU sean aquellas que requieren por la GPU, pero no por el procesador concentrador 405 y viceversa.
Canalización de procesamiento de gráficos
La Figura 5 ilustra una canalización de procesamiento de gráficos 500, según una forma de realización. En una forma de realización, un procesador de gráficos puede poner en práctica la canalización de procesamiento de gráficos 500 ilustrada. El procesador de gráficos puede incluirse dentro de los subsistemas de procesamiento en paralelo según aquí se describe, tal como el procesador en paralelo 200 de la Figura 2, que, en una forma de realización, es una variante del(de los) procesador(es) en paralelo(s) 112 de la Figura 1. Los diversos sistemas de procesamiento en paralelo pueden poner en práctica la canalización de procesamiento de gráficos 500 a través de una o más instancias de la unidad de procesamiento en paralelo (por ejemplo, la unidad de procesamiento en paralelo 202 de la Figura 2) tal como se describe en este documento. Por ejemplo, una unidad de sombreador (por ejemplo, el multiprocesador de gráficos 234 de la Figura 3) puede configurarse para realizar las funciones de una o más de entre una unidad de procesamiento de vértices 504, una unidad de procesamiento de control de teselado 508, una unidad de procesamiento de evaluación de teselado 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, ensambladores primitivos 506, 514, 518, unidad de teselado 510, rasterizador 522 y unidad de operaciones de rasterizado 526 también pueden ser realizadas por otros motores de procesamiento dentro de un grupo de procesamiento (p. ej., el grupo de procesamiento 214 de la Figura 3) y una unidad de partición correspondiente (p. ej., la unidad de partición 220A-220N de la Figura 2). La canalización de procesamiento de gráficos 500 también puede ponerse en práctica utilizando unidades de procesamiento dedicadas para una o más funciones. En una forma de realización, una o más partes de la canalización de procesamiento de gráficos 500 pueden realizarse mediante lógica de procesamiento en paralelo dentro de un procesador de uso general (por ejemplo, una CPU). En una forma de realización, una o más partes de la canalización de procesamiento de gráficos 500 pueden acceder a la memoria en circuito integrado (por ejemplo, la memoria del procesador en paralelo 222 como se ilustra en la Figura 2) a través de una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de La Figura 2.
En una forma de realización, el ensamblador de datos 502 es una unidad de procesamiento que recoge datos de vértice para superficies y dispositivos primitivos. El ensamblador de datos 502 a continuación envía los datos de vértice, incluyendo los atributos de vértice, a la unidad de procesamiento de vértice 504. La unidad de procesamiento de vértice 504 es una unidad de ejecución programable que ejecuta programas de sombreador de vértice, iluminando y transformando datos de vértice según lo especificado por los programas de sombreador de vértice. La unidad de procesamiento de vértices 504 realiza la lectura de los datos que se almacenan en la memoria caché, local o del sistema para utilizar en el procesamiento de los datos de vértices y puede programarse para transformar los datos de vértices desde una renderizado de coordenadas basada en objetos a un espacio de coordenadas del espacio global o un espacio de coordenadas del dispositivo normalizado.
Una primera instancia de un ensamblador primitivo 506 recibe atributos de vértice desde la unidad de procesamiento de vértice 50. El ensamblador primitivo 506 realiza la lectura los atributos de vértice almacenados según sea necesario y construye primitivos de gráficos para procesarlos mediante la unidad de procesamiento de control de teselado 508. Los primitivos de gráficos incluyen triángulos, segmentos de línea, puntos, parches, etc., compatibles con diversas interfaces de programación de aplicaciones (API) de procesamiento de gráficos.
La unidad de procesamiento de control de teselado 508 trata los vértices de entrada como puntos de control para un parche geométrico. Los puntos de control se transforman desde una renderizado de entrada del parche (por ejemplo, las bases del parche) a una renderizado que es adecuada para su uso en la evaluación de superficies por parte de la unidad de procesamiento de evaluación de teselado 512. La unidad de procesamiento de control de teselado 508 también puede calcular factores de teselado para bordes de parches geométricos. Un factor de teselado se aplica a un único borde y cuantifica un nivel de detalle dependiente de la vista asociado con el borde. Una unidad de teselado 510 está configurada para recibir los factores de teselado para los bordes de un parche y para teselar el parche en múltiples primitivos geométricos tales como primitivos de línea, triángulo o cuadrilátero, que se transmiten a una unidad de procesamiento de evaluación de teselado 512. La unidad de procesamiento de evaluación de teselado 512 opera sobre coordenadas parametrizadas del parche subdividido para generar una renderizado de superficie y de atributos de vértice para cada vértice asociado con los primitivos geométricos.
Una segunda instancia de un ensamblador primitivo 514 recibe atributos de vértice desde la unidad de procesamiento de evaluación de teselado 512, realiza la lectura de los atributos de vértice almacenados según sea necesario, y construye primitivos de gráficos para procesar 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 los primitivos de gráficos recibidos desde el ensamblador de primitivos 514 según lo especificado por los programas de sombreador de geometría. En una forma de realización, la unidad de procesamiento de geometría 516 está programada para subdividir los primitivos de gráficos en uno o más nuevos primitivos de gráficos y calcular parámetros utilizados para rasterizar los nuevos primitivos de gráficos.
En algunas formas de realización, la unidad de procesamiento de geometría 516 puede agregar o eliminar 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 nuevos primitivos de gráficos al ensamblador de primitivos 518. El ensamblador de primitivos 518 recibe los parámetros y vértices desde la unidad de procesamiento de geometría 516 y construye primitivos de gráficos para su procesamiento por una unidad de recorte, selección y escala de ventana de gráficos 520. La unidad de procesamiento de geometría 516 realiza la lectura de los datos que se almacenan en la memoria del procesador en paralelo o en la memoria del sistema para su uso en el procesamiento de los datos de geometría. La unidad de recorte, selección y escala de ventana de gráficos 520 realiza el recorte, la selección y el escalado de la ventana gráfica y envía los primitivos de gráficos procesados a un rasterizador 522.
El rasterizador 522 puede realizar la selección de profundidad y otras optimizaciones basadas en profundidad. El rasterizador 522 también realiza la conversión de exploración en los nuevos primitivos de gráficos para generar fragmentos y enviar dichos fragmentos y los 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. La unidad de procesamiento de fragmentos/píxeles 524 que transforma fragmentos o píxeles recibidos desde el rasterizador 522, según lo especificado por los programas de sombreador de fragmentos o píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede programarse para realizar operaciones incluyendo, entre otras, asignación de texturas, sombreador, combinación, corrección de texturas y corrección de perspectiva para obtener fragmentos de sombreado o de píxeles que se envían a una unidad de operaciones de rasterizado 526. La unidad de procesamiento de fragmentos/píxeles 524 puede realizar la lectura de los datos que están almacenados en la memoria del procesador en paralelo o en la memoria del sistema para utilizar cuando se procesan los datos de fragmentos. Los programas de sombreador de fragmentos o píxeles se pueden configurar para sombrear en muestra, píxel, mosaico u otras granularidades según la tasa de muestreo configurada para las unidades de procesamiento.
La unidad de operaciones de rasterizado 526 es una unidad de procesamiento que realiza operaciones de rasterizado que incluyen, entre otras, plantillas, prueba z, combinación y similares, y genera datos de píxeles tales como datos de gráficos procesados para almacenarlos en la memoria de gráficos (por ejemplo, la memoria del procesador en paralelo 222 tal como en la Figura 2, y/o memoria del sistema 104 tal como en la Figura 1, para mostrarse en uno o más dispositivo(s) de visualización 110 o para su posterior procesamiento por los uno o más procesador(es) 102 o procesador(es) en paralelo(s) 112. En algunas formas de realización, la unidad de operaciones de rasterizado 526 está configurada para comprimir datos de color o z que se escriben en la memoria y descomprimir los datos de color o z que son objeto de lectura desde la memoria.
La descripción y los dibujos anteriores deben considerarse en un sentido ilustrativo y no restrictivo. Los expertos en esta técnica comprenderán que se pueden realizar diversas modificaciones y cambios en las formas de realización aquí descritas sin desviarse del alcance de la invención tal como se establece en las reivindicaciones adjuntas.
En algunos bloques de ejecución de sistemas de gráficos, que ponen en práctica el hardware para ejecutar conjuntos de instrucciones para aplicaciones GPU/GPGPU, envían ciclos de lectura y de escritura a ficheros de registro locales con frecuencia para recuperar y almacenar instrucciones y operandos. El tema descrito en este documento aborda estos y otros problemas para proporcionar mejoras en la eficiencia energética de la ejecución de un subproceso en diversas unidades de ejecución (EU) encapsuladas en una jerarquía denominada subsegmento o subsegmento dual mediante la reducción de la latencia.
A modo de descripción general, en algunos ejemplos se puede proporcionar un entorno de diseño con uno o más ficheros de registro lento y uno o más ficheros de registro rápido. El(os) fichero(s) de registro lento son comunes a diversas unidades de ejecución (EU) y se pueden colocar entre la memoria caché L3 y el conjunto de unidades EUs, mientras que el(los) respectivo(s) fichero(s) de registro rápido están asociados únicamente con unidades de ejecución individuales. Se puede acceder de manera local a los datos que se comparten entre las unidades de ejecución a través de los ficheros de registro lento en lugar de recuperar los datos del banco L3/SLM, lo que reduce el número de alternancias en la canalización mucho más profunda de L3/SLM a la UE. Con este enfoque, los datos compartidos no necesitan almacenarse en la memoria caché L3 para todos los usos mediante la creación de otro nivel de jerarquía de memoria. Un atributo de diseño es determinar la profundidad del fichero de registro lento para no renunciar demasiado al ahorro de energía.
En referencia a la Figura 6A, en algunos ejemplos, todas las unidades GPUs, que son un grupo altamente paralelo, en su cálculo mediante grupos de ejecución. Estos grupos de ejecución contienen unidades de ejecución 620 con diversas operaciones matemáticas, así como ficheros de registro general rápidos 630 para operar en datos con una velocidad muy superior a menor potencia. Sin embargo, es posible que estos bloques de ejecución 620 tengan contenido compartido donde una estructura de datos común será de utilidad para contener el tráfico de memoria que se escapa desde el grupo de ejecución.
En algunos ejemplos, un fichero de registro general (GRF) lento, pero más grande 620 acoplado a las unidades de ejecución 620 a nivel de grupo de ejecución reduce el consumo de energía al reducir la recuperación de datos desde el banco L3 ubicado distante 640, pero mejora la recuperación de datos compartidos de múltiples unidades EU desde un fichero de registro local lento, pero energéticamente eficiente 620. Cuando una unidad de ejecución 620 requiere datos para una operación que no reside en el GRF rápido 630 acoplado a la unidad de ejecución 620, la unidad de ejecución puede recuperar los datos desde el GRF lento 610. En el caso de una conmutación de contexto entre unidades de ejecución, se activa una lectura de datos L3 para actualizar los datos en el GRF lento 610.
El GRF lento 620 puede diseñarse para tener una latencia más alta pero una zona de huella más pequeña. Un GRF común 620 proporcionará una mejor utilización de la zona, reducirá el consumo de energía y permitirá que las estructuras de datos se compartan entre las unidades de ejecución 620. Cada unidad de ejecución 620 puede acoplarse directamente a un GRF rápido 630.
La mayoría de los sistemas de gráficos existentes utilizan una memoria compartida separada, por ejemplo, un fichero de registro general (GRF) y una memoria local compartida que es común a un grupo de unidades de ejecución.
Tal como se ilustra en la Figura 6B, en algunos ejemplos, un sistema de procesamiento de datos puede poner en práctica un fichero de registro compartido 650 que se comparte entre múltiples subprocesos de hardware 660, reduciendo así la necesidad de obtener datos desde una posición de memoria distante.
En algunos ejemplos, los datos compartidos a través de los diversos subprocesos 660 pueden lograrse mediante designación de alguna parte de la memoria local/privada como compartidos y proporcionando hardware que permita el acceso a los datos a través de canales (es decir, múltiples EUs).
En un ejemplo, el espacio de direcciones de registro puede virtualizarse de manera que la dirección de registro local en el software sea diferente de la dirección de registro físico en el hardware.
La traslación entre la dirección de registro virtual y la dirección de registro físico se puede realizar bloque por bloque (por ejemplo, 16 registros) utilizando una tabla de traslación. Cada entrada de la tabla de traslación tiene un bit válido, una dirección física de inicio, un bit de estado para indicar si el bloque es privado o compartido y una ID de grupo para indicar a qué bloque de grupo compartido pertenece.
Algunos de los bloques lógicos iniciales pueden preasignarse (es decir, asignarse estáticamente) dejando que otros bloques se asignen de manera dinámica. Para cada grupo compartido identificado por un ID de grupo, se especifica un recuento de referencia para indicar cuántos subprocesos comparten un bloque o registro en particular.
En algunos ejemplos, se pueden definir dos nuevas instrucciones para poner en práctica la asignación dinámica de bloques de registro y la liberación de un bloque lógico de registro que da como resultado una actualización de la tabla de traslación.
Durante la asignación de un bloque de registro compartido, se puede especificar un recuento de referencia (por ejemplo, un tamaño de grupo de subprocesos) junto con el ID de grupo para indicar cuántos subprocesos están compartiendo el bloque de registro.
Un acceso de asignación/liberación/lectura/escritura a un bloque de registro compartido puede sincronizarse utilizando un mecanismo de barrera dentro de una unidad de ejecución utilizando el ID de grupo. Después de cada acceso de asignación/liberación/lectura/escritura, se puede insertar una instrucción de espera para sincronizar todos los subprocesos que comparten el bloque de registro. El hardware en la unidad de ejecución puede contar el número de conteo de referencia de accesos para completar antes de desbloquear la instrucción de espera para un ID de grupo en particular.
Se puede lograr compartir un bloque particular de direcciones de registro entre un grupo haciendo que la entrada de la tabla de traslación particular apunte al mismo bloque de registro físico. Puesto que los datos que se comparten entre subprocesos están físicamente en el mismo elemento de almacenamiento, se puede compartir fácilmente marcándolos como compartidos, en lugar de desplazar los datos a una zona de almacenamiento compartido diferente. Esta técnica se puede utilizar siempre que el grupo de subprocesos se pueda alojar dentro de una unidad de ejecución.
En otro ejemplo, el consumo de energía se puede reducir utilizando una memoria caché de baja potencia del fichero de registro compartido para reducir la energía consumida al acceder al fichero de registro de mayor potencia. Haciendo referencia a la Figura 7A, en un ejemplo, una memoria caché 710 de alta potencia y una memoria caché 715 de baja potencia se pueden acoplar a los subprocesos 720 respectivos. Una demanda de acceso a la memoria caché desde un subproceso 720 se puede dirigir en primer lugar a la memoria caché 715 de baja potencia. Si la demanda de acceso a la memoria caché no tiene éxito, entonces la demanda de acceso a la memoria caché se puede reenviar al fichero de registro compartido de alta potencia 710.
En una forma de realización de la invención, de conformidad con las reivindicaciones, el consumo de energía puede reducirse dividiendo un fichero de registro compartido en una memoria caché de bajo consumo de energía y en una memoria caché de alto consumo de energía. Con referencia a la Figura 7B, en un ejemplo, un fichero de registro compartido puede dividirse en una partición de alta potencia 750 y en una partición de baja potencia 755, pudiendo acoplarse ambas a los subprocesos respectivos 760. Una demanda de acceso a la memoria caché de un subproceso 760 puede dirigirse en primer lugar a la partición de bajo consumo 755. Si la demanda de acceso a la memoria caché no tiene éxito, entonces la demanda de acceso a la memoria caché puede reenviarse a la partición de alta potencia 750.
Componentes de potencia
La Figura 8 ilustra un diagrama de bloques de un regulador de conmutación. Uno o más reguladores de conmutación que se ilustran en la Figura 8 pueden incorporarse en diversos sistemas aquí descritos para proporcionar energía a uno o más circuitos integrados (IC). Mientras que una sola fase del regulador de conmutación de estacionamiento actual con un solamente inductor puede darse a conocer con referencia a la Figura 8, una o más de las múltiples fases del regulador de conmutación de estacionamiento actual pueden ponerse en práctica con un inductor dividido. Además, se puede utilizar una combinación de uno o más reguladores de conmutación de estacionamiento actual (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, circuitos lógicos 814).
Más en particular, la Figura 8 ilustra un sistema 800 que incluye un regulador de conmutación (a veces denominado regulador de conmutación de estacionamiento actual). El regulador de conmutación de estacionamiento actual puede ser un regulador de conmutación multifase en diversas formas de realización. La unidad de control multifase 802 está acoplada a múltiples fases, en donde cada fase puede incluir una o más fases de flujo ascendente 804 y una o más fases de flujo descendente 806. Tal como se ilustra, una fuente de energía eléctrica 808 está acoplada a la lógica de control de flujo ascendente 810 (que proporciona un mecanismo de control actual en cada fase de flujo ascendente). Se puede utilizar más de una lógica de control de flujo ascendente en diversas puestas en práctica. Cada fase de flujo ascendente puede incluir un inductor (no mostrado) que está acoplado a una fase de flujo descendente respectiva. En una forma de realización, las fases de flujo ascendente pueden incluir, cada una, uno o más inductores. La unidad de control multifase 802 puede configurar cualquier lógica de control de flujo ascendente activa 810, por ejemplo, para generar una corriente a través de un inductor acoplado entre las fases de flujo ascendente y las fases de flujo descendente. La lógica de control de flujo descendente 812 puede estar configurada por la unidad de control multifase 802 para estar ON, OFF o conmutada para regular el nivel de tensión en la carga (por ejemplo, los circuitos lógicos 814). A su vez, la lógica de control de flujo descendente 812 puede estar configurada por la unidad de control multifase 802 para mantener el nivel de tensión en la carga dentro de un margen basado al menos en parte en los valores Vmin (tensión mínima) y Vmax (tensión máxima).
Un inductor (acoplado entre una fase de flujo descendente y una fase de flujo ascendente respectiva) puede colocarse fuera de un paquete de semiconductores 816 que incluye la carga 814. Otro inductor (no mostrado) puede colocarse dentro del paquete 816, por ejemplo, para reducir la capacitancia parásita. En una forma de realización, el inductor dentro del paquete 816 puede ser un inductor de núcleo de aire plano que está acoplado a los circuitos lógicos 814 a través de una o más lógicas de conmutación que incluyen transistores de efecto de campo de semiconductores de óxido de metal (MOSFETs) planos. Además, uno o más de los componentes descritos en este documento (por ejemplo, con referencia a las Figuras 8, 9 y/o 10, que incluyen, por ejemplo, memoria caché L3, lógica de control ascendente y/o lógica de control descendente) se pueden proporcionar en la(s) capa(s) de 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 formas de realización.
La Figura 9 es un diagrama de bloques de un sistema 900 que incluye un multiprocesador de transmisión 902, de conformidad con una o más formas de realización. El multiprocesador de transmisión puede incluir 32 carriles 904 de subprocesos múltiples de instrucción única (SIMT) que son capaces de emitir de manera colectiva hasta 32 instrucciones por ciclo de reloj, por ejemplo, uno de cada uno de los 32 subprocesos. Pueden estar presentes más o menos carriles dependiendo de la puesta en práctica, tales como 64, 128, 256, etc. Los carriles SIMT 904 pueden incluir, a su vez, una o más unidades de entre: Unidades de Lógica Aritméticas (ALUs) 906, Unidades de Funciones Especiales (SFUs) 908, Unidades de Memoria (MEM) 910, y/o Unidades de Textura (TEX) 912.
En algunas formas de realización, una o más ALU(s) 906 y/o unidad(es) TEX 912 pueden ser de baja energía o alta capacidad, por ejemplo, tal como se describe con referencia a los elementos 920 y 922. Por ejemplo, el sistema puede asignar el 100 % de las direcciones de registro para los subprocesos 0-30 a la parte de baja energía y el 100 % de las direcciones de registro para los subprocesos 31 -127 a la parte de alta capacidad. Como otro ejemplo, el sistema puede asignar el 20 % de los registros de cada subproceso a la parte de baja energía y asignar el 80 % de los registros de cada subproceso a la parte de alta capacidad. Además, el sistema puede determinar el número de entradas asignadas por subproceso en función de la información de tiempo de ejecución.
Tal como se ilustra en la Figura 9, el multiprocesador de transmisión 902 también incluye un fichero de registro 914, una lógica de programador 916 (p. ej., para programar subprocesos o grupos de subprocesos, o ambos) y una memoria compartida 918, p. ej., almacenamiento temporal local. Tal 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 fichero de registro se refiere a una matriz de registros a los que acceden los componentes de un procesador (incluyendo un procesador de gráficos) tales como los que se analizan en este documento. El fichero de registro 914 incluye una parte o estructura de baja energía 920 y una parte o estructura de alta capacidad 922. El multiprocesador de transmisión 902 puede configurarse para direccionar el fichero de registro 914 utilizando un único espacio de nombres lógico para la parte de baja energía y para la parte de alta capacidad.
En algunas formas de realización, el sistema puede incluir varios registros físicos que pueden ser compartidos por los subprocesos que se ejecutan de manera simultánea en el sistema. Lo que antecede permite que el sistema utilice un único espacio de nombres para poner en práctica un sistema de asignación de registro flexible. A continuación, un compilador puede asignar márgenes activos de registros a direcciones de registros, y el compilador puede utilizar un mecanismo de asignación de registros para minimizar o reducir la cantidad de registros utilizados por subproceso. Se pueden asignar múltiples márgenes en directo a la misma dirección de registro siempre que los márgenes en directo no se superpongan en una forma de realización. Lo que antecede 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 parte de baja energía frente a la parte de alta capacidad. Por ejemplo, el sistema puede asignar el 100 % de las direcciones de registro para los subprocesos 0-30 a la parte de baja energía y el 100 % de las direcciones de registro para los subprocesos 31-127 a la parte de alta capacidad. Como otro ejemplo, el sistema puede asignar el 20 % de los registros de cada subproceso a la parte de baja energía y asignar el 80 % de los registros de cada subproceso a la parte de alta capacidad. El sistema puede determinar la cantidad de entradas asignadas por subproceso en función de 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 un número menor de grupos de subprocesos con más espacio en la parte de baja energía.
La Figura 10 ilustra un diagrama de bloques de un sistema de procesamiento en paralelo 1000, según una forma de realización. El Sistema 1000 incluye un subsistema de procesamiento en paralelo 1002 (Previamente Presentado) que a su vez incluye una o más Unidades de Procesamiento en Paralelo (PPUs) PPU-0 a PPU-P. Cada PPU está acoplada a una memoria de procesamiento en paralelo (PP) local (por ejemplo, Mem-0 a MEM-P, respectivamente). En algunas formas de realización, el sistema de subsistema PP 1002 puede incluir un número P de PPUs. La PPU-0 1004 y las memorias de procesamiento en paralelo 1006 pueden ponerse en práctica utilizando uno o más dispositivos de circuito integrado, tales como procesadores programables, Circuitos Integrados Específicos de la Aplicación (ASIC) o dispositivos de memoria.
Con referencia a la Figura 10, se ilustran varios conmutadores o conexiones opcionales 1007 que pueden utilizarse en el sistema 1000 para gestionar la energía. Si bien se ilustran varios conmutadores 1007, las formas de realización no se limitan a los conmutadores mostrados concretamente y se pueden utilizar más o menos conmutadores dependiendo de la puesta en práctica. 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 entre un transistor de potencia, un conmutador en matriz, conexiones del plano de potencia o similares. En una forma de realización, antes de cortar la alimentación a una parte del sistema 1000 a través de los conmutadores/conexiones 1007, la lógica (p. ej., un microcontrolador, un procesador de señales digitales, firmware, etc.) puede garantizar que los resultados de la operación se confirmen (p. ej., en la memoria) o finalicen para mantener la corrección.
Además, en algunas formas de realización, una o más de las unidades PPUs en el subsistema de procesamiento en paralelo 1002 son procesadores de gráficos con canalizaciones de renderizado que pueden configurarse para realizar diversas tareas tales como las que se describen aquí con respecto a otras figuras. Los datos/información de gráficos pueden comunicarse a través del puente de memoria 1008 con otros componentes de un sistema informático (incluyendo 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 unidad PPU-0 1004 puede acceder a su memoria de procesamiento en paralelo local 1014 (que puede utilizarse como memoria de gráficos que incluye, p. ej., una memoria intermedia de tramas) para almacenar y actualizar datos de pixeles, suministrando datos de pixeles a un dispositivo de visualización (tal como los descritos en este documento), etc. En algunas formas de realización, el subsistema de procesamiento en paralelo 1002 puede incluir una o más unidades PPUs que funcionan como procesadores de gráficos y una o más otras unidades PPUs que funcionan para realizar cálculos de uso general. Las unidades PPUs pueden ser idénticas o diferentes, y cada unidad PPU puede tener acceso a su(s) propio(s) dispositivo(s) de memoria de procesamiento en paralelo dedicado(s), ningún dispositivo(s) de memoria de procesamiento en paralelo dedicado(s), o un dispositivo de memoria compartida o memoria caché.
En una forma de realización, las operaciones realizadas por las unidades PPUs pueden ser controladas por otro procesador (o una de las unidades PPUs) por lo general denominado procesador maestro o núcleo del procesador. En una forma de realización, el procesador/núcleo maestro puede realizar la escritura de un flujo de comandos para cada PPU en una memoria intermedia de inserción en diversas ubicaciones, tales como una memoria del sistema principal, una memoria caché u otra memoria como las que se describen aquí con referencia a otras figuras. A continuación, cada unidad PPU puede realizar la lectura de los comandos escritos y ejecutarlos de forma asíncrona en relación con la operación del procesador/núcleo maestro.
Además, tal como se ilustra en la Figura 10, la unidad PPU-0 incluye una lógica de extremo frontal 1020 que puede incluir una unidad de entrada/salida (E/S o IO) (por ejemplo, para comunicarse con otros componentes del sistema 1000 a través del puente de memoria 1008) y/o una interfaz de concentrador (por ejemplo, que recibe comandos relacionados con tareas de procesamiento). El extremo frontal 1020 puede recibir comandos objeto de lectura por la interfaz del concentrador (por ejemplo, desde la memoria intermedia de inserción)). El extremo frontal 1020, a su vez, proporciona los comandos a una unidad de programación de trabajo 1022 que programa y asigna operaciones/tareas asociadas con los comandos a una matriz de grupos de procesamiento o subsistema aritmético 1024 para su ejecución.
Tal como se ilustra en la Figura 10, la matriz de grupos de procesamiento 1024 puede incluir una o más unidades de grupos 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, en donde cada subproceso es una instancia de un programa. En diversas aplicaciones, se pueden asignar diferentes GPCs 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 GPCs (p. ej., que incluya una o más unidades de GPC) para realizar operaciones de teselado y obtener topologías primitivas para parches, y un segundo conjunto de GPCs (p. ej., que incluya una o más más unidades GPC) para realizar un sombreador de teselado 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 GPCs puede variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo.
Además, las tareas de procesamiento que son asignadas por la unidad de programación de trabajo 1022 pueden incluir índices de datos a procesar, tales como datos de superficie/parche, datos primitivos, datos de vértice, datos de píxel y/o parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa a de ejecutarse). La unidad de programación de trabajo 1022 puede configurarse para obtener los índices correspondientes a las tareas, o puede recibir los índices desde el extremo frontal 1020. El extremo frontal 1020 también puede garantizar que los GPCs estén configurados en un estado válido antes de que se inicie el procesamiento especificado por las memorias intermedias de inserción.
En una forma de realización, la ruta de comunicación 1012 es un enlace express (o PCI-e) de interfaz de componentes periféricos (PCI), en donde se pueden asignar carriles dedicados a cada PPU. También se pueden utilizar otras rutas de comunicación. Por ejemplo, los comandos relacionados con las tareas de procesamiento pueden dirigirse a la interfaz de concentrador 1018, mientras que los comandos relacionados con las operaciones de memoria (p. ej., lectura o escritura en la memoria de procesamiento en paralelo 1014) pueden dirigirse a una unidad de barra transversal de memoria 1032.
En algunas formas de realización, el subsistema de procesamiento en paralelo 1002 puede ponerse en práctica como una tarjeta adicional que se inserta en una ranura de expansión del sistema informático o del servidor (tal como un servidor blade). En otras formas de realización, una unidad PPU puede integrarse en un circuito integrado único con un puente de bus, tal como un puente de memoria 1008, un puente de E/S, etc. Aún en otras formas de realización, algunos o todos los componentes de la unidad PPU pueden integrarse en un único circuito integrado. con uno o más núcleos de procesador, dispositivos de memoria, memorias cachés, etc.
Haciendo referencia a la Figura 10, la interfaz de memoria 1014 incluye N unidades de partición (por ejemplo, Unidad-0 1034, Unidad-1 1036, Unidad-N 10-38) que están directamente acopladas cada una a una parte correspondiente de la memoria de procesamiento en paralelo 1006 (tal como Mem-01040, Mem-1 1042, hasta Mem-N 1044). La cantidad de unidades de partición, por lo general, puede ser igual a la cantidad de memoria presentada previamente (o N tal como se ilustra). La memoria presentada con anterioridad puede ponerse en práctica con una memoria volátil tal como la memoria dinámica de acceso aleatorio (DRAM) u otros tipos de memoria volátil tal como las que se analizan en este documento. En otras formas de realización, el número de unidades de partición puede no ser igual al número de dispositivos de memoria. Los datos de gráficos (tales como objetivos de renderizado, memorias intermedias de tramas o mapas de texturas) pueden almacenarse en dispositivos de memoria presentados con anterioridad, lo que permite que las unidades de partición escriban partes de datos de gráficos en paralelo para utilizar de manera eficiente el ancho de banda disponible de la memoria de procesamiento en paralelo 1006.
Además, cualquiera de los GPCs puede procesar datos para ser objeto de escritura en cualquiera de las unidades de partición dentro de la memoria de procesamiento en paralelo. La unidad de barra transversal 1032 puede ponerse en práctica como una interconexión que está configurada para enrutar la salida de cada GPC a la entrada de cualquier unidad de partición u a otro GPC para su posterior procesamiento. Por lo tanto, los grupos GPCs 1026 a 1030 pueden comunicarse con la interfaz de memoria 1014 a través de la unidad de barra transversal 1032 para ser objeto de lectura o escritura en varios otros dispositivos de memoria (o externos). Tal como se ilustra, 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 los diferentes GPCs se comuniquen con la memoria del sistema y/u otra memoria que no sea local para PPU. Además, la unidad de barra transversal 1032 puede utilizar canales virtuales para organizar flujos de tráfico entre los GPCs y las unidades de partición.
Descripción general del sistema
La Figura 11 es un diagrama de bloques de un sistema de procesamiento 1100, según una forma de realización. En diversas formas de realización, el sistema 1100 incluye uno o más procesador 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 multiprocesador o un sistema de servidor que tenga una gran cantidad de procesadores 1102 o núcleos de procesadores 1107. En una forma de realización, el sistema 1100 es una plataforma de procesamiento incorporada dentro de un circuito de sistema en un circuito (SoC) para uso en dispositivos móviles, portátiles o integrados.
Una forma de realización del sistema 1100 puede incluir, o incorporarse dentro de una plataforma de juegos basada en servidor, una consola de juegos, que incluya una consola de juegos y medios, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos online. En algunas formas de realización, el sistema 1100 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tableta electrónica o un dispositivo móvil de Internet. El sistema de procesamiento de datos 1100 también puede incluir, acoplarse o integrarse dentro de un dispositivo portátil, tal como un dispositivo portátil de reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas formas de realización, el sistema de procesamiento de datos 1100 es un televisor o dispositivo decodificador 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 formas de realización, los uno o más procesadores 1102 incluyen cada uno o más núcleos de procesador 1107 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para el sistema y el software del usuario. En algunas formas de realización, cada uno de los uno o más núcleos de procesador 1107 está configurado para procesar un conjunto de instrucciones específico 1109. En otras formas de realización, el conjunto de instrucciones 1109 puede facilitar el cálculo del conjunto de instrucciones complejo (CISC), cálculo de conjunto de instrucciones reducido (RISC) o cálculo mediante una palabra de instrucción muy larga (VLIW). Múltiples núcleos de procesador 1107 pueden procesar cada uno un conjunto de instrucciones diferente 1109, 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 formas de realización, el procesador 1102 incluye una memoria caché 1104. Dependiendo de la arquitectura, el procesador 1102 puede tener una memoria caché interna única o múltiples niveles de memoria caché interna. En algunas formas de realización, la memoria caché se comparte entre varios componentes del procesador 1102. En otras formas de realización, el procesador 1102 también utiliza una memoria caché externa (por ejemplo, una memoria caché de nivel 3 (L3) o memoria caché de último nivel (LLC)) (no mostrada), que puede compartirse entre los núcleos de procesador 1107 utilizando técnicas conocidas de coherencia de memoria caché. Un fichero de registro 1106 se incluye de manera adicional, en el procesador 1102 que puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de números enteros, registros de coma flotante, registros de estado y un registro de puntero de instrucción). Algunos registros pueden ser registros de uso general, mientras que otros registros pueden ser específicos del diseño del procesador 1102.
En algunas formas de realización, el procesador 1102 está acoplado con un bus de procesador 1110 para transmitir señales de comunicación tales como direcciones, datos o señales de control entre el procesador 1102 y otros componentes en el sistema 1100. En una forma de realización, el sistema 1100 utiliza una arquitectura de sistema "concentrador" a modo de ejemplo, incluyendo un concentrador de controlador de memoria 1116 y un concentrador de controlador de entrada/salida (E/S) 1130. Un concentrador de controlador de memoria 1116 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1100, mientras que un concentrador de controlador de E/S (ICH 1130 proporciona conexiones a dispositivos de E/S a través de un bus de E/S local. En una forma de 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 dinámica de acceso aleatorio (DRAM), un dispositivo de memoria de acceso aleatorio estático (SRAM), un dispositivo de memoria instantánea, un dispositivo de memoria de conmutación de fase o algún otro dispositivo de memoria que tenga un rendimiento adecuado para servir como memoria del proceso. En una forma de realización, el dispositivo de memoria 1120 puede funcionar como memoria de sistema para el sistema 1100, para almacenar datos 1122 e instrucciones 1121 para utilizar cuando los uno o más procesadores 1102 ejecuten una aplicación o un 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 formas de realización, el ICH 1130 permite que los periféricos se conecten al dispositivo de memoria 1120 y al procesador 1102 a través de 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 (p. ej., Wi-Fi, Bluetooth), un dispositivo de almacenamiento de datos 1124 (p. ej., una unidad de disco duro, memoria instantánea, etc.), y un controlador de E/S heredado 1140 para acoplar dispositivos heredados (por ejemplo, Sistema Personal 2 (PS/2)) al sistema. Uno o más controladores de bus serie universal (USB) 1142 conectan dispositivos de entrada, tales como combinaciones de teclado y ratón 1144. Un controlador de red 1134 también puede acoplarse con el ICH 1130. En algunas formas de realización, 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 un ejemplo y no limitativo, ya que también se pueden utilizar 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 estar integrado 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 estar integrados en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 1112.
La Figura 12 es un diagrama de bloques de una forma de 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. Los elementos de la Figura 12 que tienen la misma referencia numérica (o nombres) tal como los elementos de cualquier otra figura de este documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte del presente documento, pero no se limitan a la misma. El procesador 1200 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 1202N representado por las casillas de líneas discontinuas. Cada uno de los núcleos de procesador 1202A-1202N incluye una o más unidades de memoria caché interna 1204A-1204N.
En algunas formas de realización, cada núcleo de procesador también tiene acceso a una o más unidades 1206 en memoria caché compartidas.
Las unidades de memoria caché internas 1204A-1204N y las unidades de memoria 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 instrucción y memoria caché de datos dentro de cada núcleo del procesador y uno o más niveles de memoria caché compartida de nivel medio, tal como Nivel 2 (L2), Nivel 3 (L3), Nivel 4 (L4) u otros niveles de memoria caché, en donde el nivel más alto de memoria caché, antes de la memoria externa, se clasifica como LLC. En algunas formas de realización, la lógica de coherencia de memoria caché mantiene la coherencia entre las diversas unidades de memoria caché 1206 y 1204A-1204N.
En algunas formas de realización, 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 del sistema 1210. La una o más unidades de controlador de bus 1216 gestionan un conjunto de buses periféricos, tal como uno o más buses de interconexión de componentes periféricos (p. ej., PCI, PCI Express). El núcleo de agente del sistema 1210 proporciona la funcionalidad de gestión para los diversos componentes del procesador. En algunas formas de realización, el núcleo del 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 ilustrados).
En algunas formas de realización, uno o más de los núcleos de procesador 1202A-1202N incluyen soporte para subprocesos múltiples simultáneos. En dicha forma de realización, el núcleo del agente del sistema 1210 incluye componentes para coordinar y operar los núcleos 1202A-1202N durante el procesamiento de subprocesos múltiples. El núcleo del agente del sistema 1210 puede incluir, además, 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 del procesador 1202A-1202N y del procesador de gráficos 1208.
En algunas formas de realización, el procesador 1200 incluye, además, un procesador de gráficos 1208 para ejecutar operaciones de procesamiento de gráficos. En otras formas de realización, el procesador de gráficos 1208 se acopla con el conjunto de unidades de memoria caché compartidas 1206 y el núcleo del agente del sistema 1210, incluyendo uno o más controladores de memoria integrados 1214. En algunas formas de realización, un controlador de pantalla 1211 está acoplado con el procesador de gráficos 1208 para impulsar la salida del procesador de gráficos a una o más pantallas acopladas. En algunas formas de realización, el controlador de pantalla 1211 puede ser un módulo separado acoplado con el procesador de gráficos a través de al menos una interconexión, o puede estar integrado dentro del procesador de gráficos 1208 o del núcleo del agente del sistema 1210.
En otras formas de realización, se utiliza 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, incluyendo técnicas bien conocidas. En otras formas de realización, el procesador de gráficos 1208 se acopla con la interconexión de anillo 1212 a través de un enlace de E/S 1213.
El enlace de E/S, a modo de ejemplo 1213, representa al menos una de las múltiples variedades de interconexiones de E/S, incluyendo una interconexión de E/S en el paquete que facilita la comunicación entre varios componentes del procesador y un módulo de memoria integrado de alto rendimiento 1218, tal como un módulo eDRAM. En algunas formas de realización, cada uno de los núcleos de procesador 1202A-1202N y el procesador de gráficos 1208 utilizan módulos de memoria incorporados 1218 tal como una memoria caché de último nivel compartida.
En otras formas de realización, los núcleos de procesador 1202A-1202N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra forma de realización, los núcleos de procesador 1202A-1202N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), en 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 forma de realización, los núcleos de procesador 1202A-1202N son heterogéneos en términos de microarquitectura, en donde uno o más núcleos que tienen un consumo de energía relativamente mayor se acoplan con uno o más núcleos de energía que tienen un consumo de energía más bajo. Además, el procesador 1200 se puede poner en práctica en uno o más circuitos integrados o como un circuito SoC que tenga los componentes ilustrados, además, de otros componentes.
La Figura 13 es un diagrama de bloques de un procesador de gráficos 1300, que puede ser una unidad de procesamiento de gráficos discreta o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento. En algunas formas de realización, el procesador de gráficos se comunica a través de una interfaz de E/S asignada en memoria con registros en el procesador de gráficos y con comandos colocados en la memoria del procesador. En algunas formas de realización, 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 para la memoria local, una o más memorias cachés internas, una o más memorias cachés externas compartidas y/o para la memoria del sistema.
En otras formas de realización, el procesador de gráficos 1300 también incluye un controlador de pantalla 1302 para conducir datos de salida de visualización a un dispositivo de pantalla 1320. El controlador de pantalla 1302 incluye hardware para uno o más planos superpuestos para la visualización y composición de múltiples capas de vídeo o elementos de interfaz de usuario. En algunas formas de realización, el procesador de gráficos 1300 incluye un motor de códec de vídeo 1306 para codificar, decodificar o transcodificar medios hacia, desde o entre uno o más formatos de codificación de medios, incluyendo, pero sin limitación, formatos de grupos de expertos en imágenes en movimiento (MPEG) tales como MPeG-2, formatos de codificación avanzada de vídeo (AVC) tales como H.264/MPEG-4 AVC, así como la Sociedad de Ingenieros de Cine y Televisión (SMPTE) 421M/VC-1 y formatos del Grupo Conjunto de Expertos Fotográficos (JPEG) tales como JPEG y Motion JPEG (MJPEG).
En algunas formas de realización, el procesador gráfico 1300 incluye un motor de transferencia de imágenes en bloque (BLIT) 1304 para realizar operaciones de rasterizado bidimensional (2D) que incluyen, por ejemplo, transferencias de bloque de límites de bits. Sin embargo, en una forma de realización, las operaciones de gráficos en 2D se realizan utilizando uno o más componentes del motor de procesamiento de gráficos (GPE) 1310. En algunas formas de realización, 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 otras formas de realización, GPE 310 incluye una canalización en 3D 1312 para realizar operaciones en 3D, tal como renderizar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas primitivas en 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización en 3D 1312 incluye elementos programables y de función fija que realizan diversas tareas dentro del elemento y/o generan subprocesos de ejecución en un subsistema en 3D/Medios 1315. Mientras que la canalización en 3D 1312 se puede utilizar para realizar operaciones de medios, una forma de realización de GPE 1310 también incluye una canalización de medios 1316 que se utiliza concretamente para realizar operaciones de medios, tal como el postprocesamiento de vídeo y la mejora de imágenes.
En algunas formas de realización, la canalización de medios 1316 incluye funciones fijas o unidades lógicas programables para realizar una o más operaciones de medios especializadas, tal como aceleración de decodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar de, o en representación del motor de códec de vídeo 1306. En algunas formas de realización, la canalización de medios 1316 incluye, además, una unidad de generación de subprocesos para generar subprocesos para su ejecución en el subsistema de 3D/Medios 1315. Los subprocesos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema de 3D/Medios 1315.
En otras formas de realización, el subsistema de 3D/Medios 1315 incluye lógica para ejecutar subprocesos generados por la canalización en 3D 1312 y la canalización de medios 1316. En una forma de realización, las canalizaciones envían demandas de ejecución de subprocesos al subsistema 3D/Medios 1315, que incluye lógica de envío de subprocesos para arbitrar y enviar las diversas demandas a los recursos de ejecución de subprocesos disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los subprocesos de medios y en 3D. En algunas formas de realización, el subsistema de 3D/Medios 1315 incluye una o más memorias caché internas para instrucciones y datos de subprocesos. En algunas formas de realización, el subsistema también incluye memoria compartida, que comprende registros y memoria direccionable, para compartir datos entre subprocesos y almacenar datos de salida.
Motor de procesamiento de gráficos
La Figura 14 es un diagrama de bloques de un motor de procesamiento de gráficos 1410 de un procesador de gráficos de conformidad con algunas formas de realización. En una forma de realización, el motor de procesamiento de gráficos (GPE) 1410 es una versión del GPE 1310 que se ilustra en la Figura 13. Los elementos de la Figura 14 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura del presente documento pueden operar o funcionar de manera similar a la descrita en otra parte de este documento, pero no se limitan a la misma. Por ejemplo, se ilustran la canalización 3D 1312 y la canalización de medios 1316 de la Figura 13. La canalización de medios 1316 es opcional en algunas formas de realización del GPE 1410 y puede no estar explícitamente incluida dentro del motor GPE 1410. Por ejemplo, y en al menos una forma de realización, un procesador de imágenes y/o medio separado está acoplado al motor GPE 1410.
En otras formas de realización, el motor GPE 1410 se acopla o incluye un transmisor de comandos 1403, que proporciona un flujo de comandos a la canalización en 3D 1312 y/o a las canalizaciones de medios 1316. En algunas formas de realización, el transmisor de comandos 1403 está acoplado con la memoria, que puede ser memoria del sistema, o una o más de entre la memoria caché interna y la memoria caché compartida. En algunas formas de realización, el transmisor de comandos 1403 recibe comandos desde la memoria y los envía a la canalización en 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 la canalización en 3D 1312 y la canalización de medios 1316. En una forma de realización, la memoria intermedia de anillos puede incluir, de manera adicional, memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización en 3D 1312 también pueden incluir referencias a datos almacenados en la memoria, tales como, pero sin limitación, datos de vértice y de geometría para la canalización en 3D 1312 y/o datos de imagen y objetos de memoria para la canalización de medios 1316. La canalización en 3D 1312 y la canalización de medios 1316 procesa los comandos y los datos realizando operaciones a través de lógica dentro de las canalizaciones respectivas o enviando uno o más subprocesos de ejecución a una matriz de núcleo de gráficos 1414.
En diversas formas de realización, la canalización en 3D 1312 puede ejecutar uno o más programas de sombreador, 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 sombreador, al procesar las instrucciones y enviar 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 multiuso (por ejemplo, unidades de ejecución) dentro de la matriz de núcleo gráfico 1414 incluye soporte para varios lenguajes de sombreador de API 3D y puede ejecutar múltiples subprocesos de ejecución simultáneos asociados con múltiples sombreadores.
En algunas formas de realización, la matriz de núcleo de gráficos 1414 también incluye lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. En una forma de realización, las unidades de ejecución incluyen, además, lógica de uso general que es programable para realizar operaciones de cálculo paralelas de uso general, además, de operaciones de procesamiento de gráficos. La lógica de uso general puede realizar operaciones de procesamiento en paralelo o junto con la lógica de uso general dentro del (de los) núcleo(s) del procesador 107 de la Figura 1 o del núcleo 1202A-1202N tal como en la Figura 12.
Los datos de salida generados por subprocesos que se ejecutan en la matriz de núcleo de gráficos 1414 pueden enviar datos a la memoria en una memoria intermedia de retorno unificada (URB) 1418. La memoria URB 1418 puede almacenar datos para múltiples subprocesos. En algunas formas de realización, la memoria URB 1418 se puede utilizar para enviar datos entre diferentes subprocesos que se ejecutan en la matriz de núcleo de gráficos 1414. En otras formas de realización, la memoria URB 1418 se puede utilizar de manera adicional, para la sincronización entre subprocesos en la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de función compartida 1420.
En otras formas de realización, la matriz de núcleos de gráficos 1414 es escalable, de modo que la matriz incluye un número variable de núcleos de gráficos, cada uno de los cuales tiene un número variable de unidades de ejecución en función del nivel de potencia y del rendimiento objetivo de GPE 1410. En una forma de realización, los recursos de ejecución son, de manera dinámica, escalables, de modo que los recursos de ejecución se puedan habilitar o deshabilitar según sea necesario.
La matriz de núcleo de gráficos 1414 se acopla con la lógica de función compartida 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 función compartida 1420 son unidades lógicas de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleo de gráficos 1414. En diversas formas de realización, la lógica de función compartida 1420 incluye, pero sin limitación, el muestreador 1421, matemáticas 1422 y lógica de comunicación entre subprocesos (ITC) 1423. Además, algunas formas de realización ponen en práctica una o más memoria(s) caché(s) 1425 dentro de la lógica de función compartida 1420. Se pone en práctica una función compartida cuando la demanda de una función especializada determinada es insuficiente para incluirla dentro de la matriz de núcleo de gráficos 1414. En su lugar, una única instanciación de dicha función especializada se pone en práctica como una entidad independiente en la lógica de función compartida 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 formas de realización.
La Figura 15 es un diagrama de bloques de otra forma de realización de un procesador de gráficos 1500. Los elementos de la Figura 15 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura pueden operar o funcionar de cualquier manera similar a que se describen en otra parte del presente documento, pero no se limitan a las mismas.
En algunas formas de realización, el procesador de gráficos 1500 incluye una interconexión de anillos 1502, un extremo frontal de canalización 1504, un motor de medios 1537 y núcleos de gráficos 1580A-1580N. En algunas formas de realización, la interconexión de anillos 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 uso general. En algunas formas de realización, el procesador de gráficos es uno de los muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
En otras formas de realización, el procesador de gráficos 1500 recibe lotes de comandos a través de la interconexión de anillos 1502. Los comandos entrantes son interpretados por un transmisor de comandos 1503 en el extremo frontal de canalización 1504. En algunas formas de realización, el procesador de gráficos 1500 incluye una lógica de ejecución escalable para realizar procesamiento de geometría en 3D y procesamiento de medios a través del(los) núcleo(s) gráfico(s) 1580A-1580N. Para los comandos de procesamiento de geometría en 3D, el transmisor de comandos 1503 proporciona comandos a la canalización de geometría 1536. Para al menos algunos comandos de procesamiento de medios, el transmisor de comandos 1503 proporciona los comandos a un extremo frontal de vídeo 1534, que se acopla con un motor de medios 1537. En algunas formas de realización, el motor de medios 1537 incluye un motor de calidad de vídeo (VQE) 1530 para procesamiento posterior de imágenes y de vídeo y un motor de codificación/descodificación (MFX) multiformato 1533 para proporcionar codificación y decodificación de datos de medios acelerados por hardware. En algunas formas de realización, 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 otras formas de realización, el procesador de gráficos 1500 incluye recursos de ejecución de subprocesos escalables que presentan núcleos modulares 1580A-1580N (a veces denominados segmentos de núcleo), cada uno de los cuales tiene múltiples subnúcleos 1550A-550N, 1560A-1560N (a veces denominados sub-segmentos de núcleos). En algunas formas de realización, el procesador gráfico 1500 puede tener cualquier número de núcleos de gráficos 1580A a 1580N. En otras formas de realización, 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 formas de realización, el procesador de gráficos es un procesador de baja potencia con un único subnúcleo (por ejemplo, 1550A). En algunas formas de realización, el procesador de gráficos 1500 incluye múltiples núcleos de gráficos 1580A-1580N, cada uno de los cuales incluye 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 formas de realización, cada subnúcleo 1550A-1550N. Los subnúcleos 1560A-1560N comparte un conjunto de recursos compartidos 1570A-1570N. En algunas formas de realización, los recursos compartidos incluyen memoria caché compartida y lógica de operación de píxeles. También se pueden incluir otros recursos compartidos en las diversas formas de realización del procesador de gráficos.
Unidades de ejecución
La Figura 16 ilustra la lógica de ejecución de subprocesos 1600 que incluye una matriz de elementos de procesamiento utilizados en algunas formas de realización de un GPE. Los elementos de la Figura 16 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura del presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otro lugar del presente documento, pero no se limitan a la misma.
En algunas formas de realización, la lógica de ejecución de subprocesos 1600 incluye un procesador de sombreador 1602, un expedidor de subprocesos 1604, memoria caché de instrucciones 1606, una matriz de unidades de ejecución escalable que incluye una pluralidad de unidades de ejecución 1608A-1608N, un muestreador 1610, una memoria caché de datos 1612, y un puerto de datos 1614. En una forma de realización, la matriz de unidades de ejecución escalables puede escalar, de manera dinámica, habilitando o deshabilitando una o más unidades de ejecución (por ejemplo, cualquiera de las unidades de ejecución 1608A, 1608B, 1608C, 1608D, 1608N-1 y 1608N) en función de los requisitos de cálculo de una carga de trabajo. En una forma de realización, los componentes incluidos están interconectados a través de una estructura de interconexión que enlaza con cada uno de los componentes. En algunas formas de realización, la lógica de ejecución de subprocesos 1600 incluye una o más conexiones a la memoria, tal como la memoria del sistema o la memoria caché, a través de una o más de entre la memoria caché de instrucciones 1606, el puerto de datos 1614, el muestreador 1610 y las unidades de ejecución 1608A-1608N. En algunas formas de realización, cada unidad de ejecución (p. ej., 1608A) es una unidad de cálculo de uso general programable independiente que es capaz de ejecutar múltiples subprocesos de hardware de manera simultánea mientras procesa múltiples elementos de datos en paralelo para cada subproceso. En diversas formas de realización, la matriz de unidades de ejecución 1608A-1608N es escalable para incluir cualquier número de unidades de ejecución individuales.
En algunas formas de realización, las unidades de ejecución 1608A-1608N se utilizan principalmente para ejecutar programas de sombreador. Un procesador de sombreador 1602 puede procesar los diversos programas de sombreador y enviar subprocesos de ejecución asociados con los programas de sombreador a través de un expedidor de subprocesos 1604. En una forma de realización, el expedidor de subprocesos incluye lógica para arbitrar las demandas de inicio de subprocesos de las canalizaciones de gráficos y 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 la Figura 15) puede enviar sombreadores de vértices, de teselado o de geometría a la lógica de ejecución de subprocesos 1600 (Figura 16) para su procesamiento. En algunas formas de realización, el expedidor de subprocesos 1604 también puede procesar demandas de generación de subprocesos en tiempo de ejecución desde los programas de sombreador en ejecución.
En algunas formas de realización, las unidades de ejecución 1608A-1608N admiten un conjunto de instrucciones que incluye soporte nativo para muchas instrucciones de sombreador de gráficos en 3D estándar, de modo que los programas de sombreador de bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traslación mínima. Las unidades de ejecución admiten procesamiento de vértices y de geometría (p. ej., programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (p. ej., sombreadores de píxeles, sombreadores de fragmentos) y procesamiento de uso general (p. ej., sombreadores de cálculo y de medios). Cada una de las unidades de ejecución 1608A-1608N es capaz de ejecutar múltiples datos de instrucción única (SIMD) de múltiple emisión y la operación de subprocesos múltiples permite un entorno de ejecución eficiente frente a accesos de memoria de mayor latencia. Cada subproceso de hardware dentro de cada unidad de ejecución tiene un fichero de registro de alto ancho de banda dedicado y un estado de subproceso independiente asociado. La ejecución es de múltiple emisión por reloj para canalizaciones capaces de operaciones de coma flotante de precisión simple y doble, capacidad de bifurcación SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones diversas. Mientras espera datos de la memoria o una de las funciones compartidas, la lógica de dependencia dentro de las unidades de ejecución 1608A-1608N hace que un subproceso de espera entre en suspensión hasta que se devuelvan los datos solicitados. Mientras el subproceso en espera está inactivo, los recursos de hardware pueden dedicarse 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 sombreador, incluyendo un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 1608A-1608N opera en matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución" o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso, 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 de Lógica Aritmética (ALUs) físicas o Unidades de Coma Flotante (FPUs) para un procesador de gráficos en particular. En algunas formas de realización, las unidades de ejecución 1608A-1608N admiten tipos de datos enteros y de coma flotante.
El conjunto de instrucciones de la unidad de ejecución incluye instrucciones 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 en función del tamaño de los datos de los elementos. Por ejemplo, cuando se opera en un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera en el vector como cuatro elementos de datos empaquetados separados de 64 bits (datos de tamaño de palabra cuádruple (QW)). Ocho elementos de datos empaquetados separados de 32 bits (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados separados de 16 bits (elementos de datos de tamaño de palabra (W)), o treinta y dos elementos de datos separados de 8 bits (elementos de datos de tamaño byte (B)). Sin embargo, son posibles diferentes anchos de vector y tamaños de registro.
Una o más memorias cachés de instrucciones internas (por ejemplo, 1606) se incluyen en la lógica de ejecución de subprocesos 1600 para almacenar en memoria caché las instrucciones de subprocesos para las unidades de ejecución. En algunas formas de realización, se incluyen una o más memorias cachés de datos (por ejemplo, 1612) para almacenar en memoria caché los datos de los subprocesos durante la ejecución de los subprocesos. En algunas formas de realización, se incluye un muestreador 1610 para proporcionar muestreo de texturas para operaciones en 3D y muestreo de medios para operaciones de medios. En algunas formas de realización, el muestreador 1610 incluye una funcionalidad especializada de muestreo de texturas o medios para procesar datos de texturas o medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, las canalizaciones de gráficos y medios envían demandas de iniciación de subprocesos a la lógica de ejecución de subprocesos 1600 a través de la lógica de generación y envío de subprocesos. Una vez que un grupo de objetos geométricos ha sido procesado y rasterizado en datos de píxeles, se invoca la lógica del procesador de píxeles (por ejemplo, lógica de sombreador de píxeles, lógica de sombreador de fragmentos, etc.) dentro del procesador de sombreador 1602 para calcular más información de salida y hacer que sean objeto de escritura los resultados en las superficies de salida (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de plantilla, etc.). En algunas formas de realización, un sombreador de píxeles o un sombreador de fragmentos calcula los valores de los diversos atributos de vértice que han de interpolarse a través del objeto rasterizado. En algunas formas de realización, la lógica del procesador de píxeles dentro del procesador de sombreador 1602 ejecuta un programa de sombreador de fragmentos o píxeles proporcionado por la interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreador, el procesador de sombreador 1602 envía subprocesos a una unidad de ejecución (por ejemplo, 1608A) a través del expedidor de subprocesos 1604. En algunas formas de realización, el sombreador de píxeles 1602 utiliza la lógica de muestreo de texturas en el muestreador 1610 para acceder a los datos de texturas en los mapas de texturas almacenados en memoria. Las operaciones aritméticas sobre los datos de texturas y los datos de geometría de entrada calculan los datos de color de los píxeles para cada fragmento geométrico, o descartan uno o más píxeles del procesamiento posterior.
En otras formas de realización, el puerto de datos 1614 proporciona un mecanismo de acceso a la memoria para que la lógica de ejecución de subprocesos 1600 envíe datos procesados a la memoria para su procesamiento en una canalización de salida del procesador de gráficos. En algunas formas de realización, el puerto de datos 1614 incluye o se acopla a una o más memorias caché (por ejemplo, memoria caché de datos 1612) para almacenar datos en memoria caché para acceder a la memoria a través del puerto de datos.
La Figura 17 es un diagrama de bloques que ilustra los formatos de instrucciones del procesador de gráficos 1700 según algunas formas de realización. En una o más formas de realización, las unidades de ejecución del procesador de gráficos admiten un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Las casillas con líneas continuas ilustran los componentes que se suelen incluir en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solamente se incluyen en un subconjunto de las instrucciones. En algunas formas de realización, el formato de instrucción 1700 descrito e ilustrado son macroinstrucciones, ya que son instrucciones suministradas a la unidad de ejecución, a diferencia de las microoperaciones que resultan de la decodificación de instrucciones una vez que se procesa la instrucción.
En algunas formas de realización, las unidades de ejecución del procesador de gráficos admiten de forma 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 en función de la instrucción seleccionada, las opciones de instrucción y el número de operandos. 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 forma de realización. En algunas formas de realización, la instrucción se compacta en parte utilizando 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 basadas en los valores de índice y utiliza las salidas de la tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 1710.
Para cada formato, el código de operación (opcode) de instrucción 1712 define la operación que debe realizar la unidad de ejecución. Las unidades de ejecución ejecutan cada instrucción en paralelo a través 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. De forma predeterminada, la unidad de ejecución ejecuta cada instrucción en todos los canales de datos de los operandos. En algunas formas de realización, el campo de control de instrucciones 1714 permite el control sobre ciertas opciones de ejecución, tal como la selección de canales (p. ej., predicación) y el orden de los canales de datos (p. ej., swizzle). Para instrucciones en el formato de instrucción de 128 bits 1710, un campo de tamaño de ejecución 1716 limita el número de canales de datos que se ejecutarán en paralelo. En algunas formas de realización, el campo de tamaño de ejecución 1716 no está disponible para su uso en el formato de instrucción compacta de 64 bits 1730.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 1720, src1 1722 y un destino 1718. En algunas formas de realización, las unidades de ejecución admiten instrucciones de destino dual, en 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), en donde el código de operación (opcode) de instrucción 1712 determina el número de operandos de origen. El último operando fuente de una instrucción puede ser un valor inmediato (por ejemplo, codificado de forma rígida) que se pasa con la instrucción.
En algunas formas de realización, 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 se proporciona directamente mediante bits en la instrucción.
En algunas formas de realización, el formato de instrucción de 128 bits 1710 incluye un campo de modo de acceso/dirección 1726, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una forma de realización, el modo de acceso se utiliza para definir una alineación de acceso a datos para la instrucción. Algunas formas de realización admiten modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de 1 byte, en 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 direccionamiento alineado por bytes para los operandos de origen y de destino y cuando está en un segundo modo, la instrucción puede utilizar direccionamiento alineado por 16 bytes para todos los operandos de origen y de destino.
En una forma de realización, la parte del modo de dirección del campo de modo de acceso/dirección 1726 determina si la instrucción es para utilizar el direccionamiento directo o indirecto. Cuando se utiliza el modo de direccionamiento de registro directo, los bits en la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se utiliza el 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 formas de realización, las instrucciones se agrupan en función de los campos de bits del código de operación 1712 para simplificar la decodificación del código de operación (opcode) 1740. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación precisa de códigos de operación que se ilustra es simplemente un ejemplo. En algunas formas de realización, un grupo de código de operación (opcode) 1742 de movimiento y lógica incluye instrucciones lógicas y de movimiento de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas formas de realización, el grupo de movimiento y lógica 1742 comparte los cinco bits más significativos (MSB), en donde las instrucciones de movimiento (mov) tienen la forma de 0000xxxxb y las instrucciones lógicas tienen la forma de 0001 xxxxb. Un grupo de instrucciones de control de flujo 1744 (por ejemplo, denominada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones diversas 1746 incluye una combinación de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, esperar, enviar) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones matemáticas en paralelo 1748 incluye instrucciones aritméticas por componentes (por ejemplo, sumar, multiplicar (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo matemático en paralelo 1748 realiza las operaciones aritméticas en paralelo a través de los canales de datos. El grupo matemático vectorial 1750 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo de matemática vectorial realiza operaciones aritméticas, tales como cálculos de productos de punto en operandos vectoriales.
Canalización de gráficos
La Figura 18 es un diagrama de bloques de otra forma de realización de un procesador de gráficos 1800. Los elementos de la Figura 18 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura de este documento pueden operar o funcionar de cualquier manera similar a que se describen en otra parte del presente documento, pero no se limitan a la misma.
En algunas formas de realización, 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 renderizado 1870. En algunas formas de realización, 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 uso general. El procesador de gráficos se controla mediante escrituras de registro para uno o más registros de control (no ilustrados) o mediante comandos emitidos al procesador de gráficos 1800 a través de una interconexión de anillo 1802. En algunas formas de realización, la interconexión de anillo 1802 acopla el procesador de gráficos 1800 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de uso general. Los comandos de la interconexión de anillo 1802 son interpretados por un transmisor de comandos 1803, que proporciona instrucciones a los componentes individuales de la canalización de gráficos 1820 o la de canalización de medios 1830.
En algunas formas de realización, el transmisor de comandos 1803 dirige la operación de un captador de vértices 1805 que realiza la lectura de los datos de vértices de la memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor de comandos 1803. En algunas formas de realización, el captador de vértices 1805 proporciona datos de vértices a un sombreador de vértices 1807, que realiza operaciones de transformación e iluminación del espacio coordinado en cada vértice. En algunas formas de realización, el captador de vértices 1805 y el sombreador de vértices 1807 ejecutan instrucciones de procesamiento de vértices enviando subprocesos de ejecución a las unidades de ejecución 1852A-1852B a través de un expedidor de subprocesos 1831.
En otras formas de realización, las unidades de ejecución 1852A-1852B son una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunas formas de realización, las unidades de ejecución 1852A-1852B tienen una memoria caché L1 adjunta 1851 que es específica para cada matriz o compartida entre las matrices. La memoria caché se puede configurar como una memoria caché de datos, una memoria caché de instrucciones o una memoria caché única que está dividida para contener datos e instrucciones en diferentes particiones.
En algunas formas de realización, la canalización de gráficos 1820 incluye componentes de teselado para realizar un teselado acelerado por hardware de objetos en 3D. En algunas formas de realización, un sombreador de casco programable 811 configura las operaciones de teselado. Un sombreador de dominio programable 817 proporciona una evaluación de fondo de la salida del teselado. Un teselado 1813 opera en la dirección del sombreador de casco 1811 y contiene una lógica de uso especial para generar un conjunto de objetos geométricos detallados basados en un modelo geométrico aproximado que se proporciona como entrada a la canalización de gráficos 1820. En algunas formas de realización, si no se utiliza el teselado, los componentes de teselado (p. ej., el sombreador de casco 1811, el teselado 1813 y el sombreador de dominio 1817) se pueden omitir.
En otras formas de realización, un sombreador de geometría 1819 puede procesar objetos geométricos completos a través de uno o más subprocesos enviados a las unidades de ejecución 1852A-1852B, o puede proceder directamente al recortador 1829. En algunas formas de realización, el sombreador de geometría opera en la totalidad objetos geométricos, en lugar de vértices o parches de vértices tal como en etapas anteriores de la canalización de gráficos. Si el teselado está deshabilitado, el sombreador de geometría 1819 recibe una entrada del sombreador de vértices 1807. En algunas formas de realización, el sombreador de geometría 1819 puede programarse mediante un programa de sombreador de geometría para realizar el teselado de geometría si las unidades de teselado 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 tenga funciones de recorte y sombreador de geometría. En algunas formas de realización, un rasterizador y un componente de prueba de profundidad 1873 en la canalización 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 formas de realización, la lógica del sombreador de píxeles se incluye en la lógica de ejecución de subprocesos 1850. En algunas formas de realización, una aplicación puede omitir el rasterizador y el componente de prueba de profundidad 1873 y acceder a los datos de vértice sin rasterizar a través de una unidad de flujo de salida 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 que los datos y mensajes pasen entre los componentes principales del procesador. En algunas formas de realización, las unidades de ejecución 1852A-1852B y memoria(s) caché(s) asociada(s) 1851, muestreador de textura y medios 1854, y memoria caché de textura/muestreador 1858 se interconectan a través de un puerto de datos 1856 para realizar un acceso a la memoria y comunicarse con los componentes de canalización de salida de procesamiento del procesador. En algunas formas de realización, el muestreador 1854, las memorias caché 1851, 1858 y las unidades de ejecución 1852A-1852B tienen, cada una, rutas de acceso separadas a la memoria.
En algunas formas de realización, la canalización de salida de renderizado 1870 contiene un rasterizador y un componente de prueba de profundidad 1873 que convierte objetos basados en vértices en un renderizado asociado basado en píxeles. En algunas formas de realización, la lógica del rasterizador incluye una unidad de ventana/enmascarador para realizar una función fija de rasterización de líneas y triángulos. Una memoria caché renderizada 1878 y una memoria caché de profundidad 1879 también están disponibles en algunas formas de realización. Un componente de operaciones de píxeles 1877 realiza operaciones basadas en píxeles en los datos, aunque en algunos casos, las operaciones de píxeles asociadas con operaciones en 2D (por ejemplo, transferencias de imágenes de bloques de bits con combinación) son realizadas por el motor en 2D 1841, o sustituidas en el momento de la visualización por el controlador de pantalla 1843 utilizando planos de visualización superpuestos. En algunas formas de realización, una memoria caché L3 compartida 1875 está disponible para todos los componentes gráficos, lo que permite compartir datos sin el uso de la memoria principal del sistema.
En algunas formas de realización, la canalización de medios del procesador de gráficos 1830 incluye un motor de medios 1837 y una interfaz de vídeo 1834. En algunas formas de realización, la interfaz de vídeo 1834 recibe comandos de canalización del transmisor de comandos 1803. En algunas formas de realización, la canalización de medios 1830 incluye un transmisor de comando separado. En algunas formas de realización, el extremo frontal de vídeo 1834 procesa los comandos de medios antes de enviar el comando al motor de medios 1837. En algunas formas de realización, el motor de medios 1837 incluye la funcionalidad de generación de subprocesos para generar subprocesos para enviarlos a la lógica de ejecución de subprocesos 1850 a través del expedidor de subprocesos 1831.
En otras formas de realización, el procesador de gráficos 1800 incluye un motor de visualización 1840. En algunas formas de realización, 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 anillos 1802, o algún otro bus o estructura de interconexión. En algunas formas de realización, el motor de visualización 1840 incluye un motor en 2D 1841 y un controlador de pantalla 1843. En algunas formas de realización, el motor de visualización 1840 contiene una lógica de uso especial capaz de operar de manera independiente de la canalización en 3D. En otras formas de realización, el controlador de pantalla 1843 se acopla con un dispositivo de pantalla (no ilustrado), que puede ser un dispositivo de pantalla integrado en el sistema, tal como en un ordenador portátil, o un dispositivo de visualización externo conectado a través de un conector de dispositivo de pantalla.
En algunas formas de realización, la canalización de gráficos 1820 y la canalización de medios 1830 se pueden configurar para realizar operaciones basadas en múltiples interfaces de programación de gráficos y medios y no son específicas de ninguna interfaz de programación de aplicaciones (API). En otras formas de realización, el software del controlador para el procesador de gráficos traslada las llamadas de API que son específicas de una biblioteca multimedia o de gráficos particular en comandos que pueden ser procesados por el procesador de gráficos. En algunas formas de realización, se proporciona soporte para Open Graphics Library (OpenGL), Open Computing Language (OpenCL) y/o Vulkan Graphics and Compute API, todos del Grupo Khronos. En algunas formas de realización, también se puede proporcionar soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas formas de realización, se puede admitir una combinación de estas bibliotecas. También se puede proporcionar soporte para la Biblioteca de visión artificial de código abierto (OpenCV). También se admitiría una futura API con una canalización 3D compatible si se puede realizar una asignación desde la canalización de la futura API a la canalización del procesador de gráficos.
Programación de canalización de gráficos
La Figura 19A es un diagrama de bloques que ilustra un formato de comando de procesador de gráficos 1900 según algunas formas de realización. La Figura 19B es un diagrama de bloques que ilustra una secuencia de comandos del procesador de gráficos 1910 según una forma de realización. Las casillas con líneas continuas en la Figura 19A ilustran los componentes que por lo general se incluyen en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solamente se incluyen en un subconjunto de los comandos de gráficos. El formato de comando de procesador de gráficos de ejemplo 1900 de la Figura 19A incluye campos de datos para identificar un cliente objetivo 1902 del comando, un código de operación de comando (opcode) 1904 y los datos pertinentes 1906 para el comando. Un código de operación secundario 1905 y un tamaño de comando 1908 también se incluyen en algunos comandos.
En algunas formas de realización, el cliente 1902 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En otras formas de realización, un analizador de comandos del procesador de gráficos examina el campo de cliente de cada comando para condicionar el procesamiento posterior del comando y enrutar los datos del comando a la unidad de cliente apropiada. En algunas formas de realización, las unidades cliente del procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad de renderizado, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que la unidad de cliente recibe el comando, la unidad de cliente realiza la lectura del código de operación (opcode) 1904 y, si está presente, el subcódigo de operación (sub-opcode) 1905 para determinar la operación a realizar. La unidad cliente ejecuta el comando utilizando la información del 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 formas de realización, el analizador de comandos determina de manera automática el tamaño de al menos algunos de los comandos basándose en el código de operación (opcode) del comando. En algunas formas de realización, los comandos se alinean mediante múltiplos de una palabra doble.
El diagrama de flujo en la Figura 19B muestra una secuencia de comando de procesador de gráficos de ejemplo 1910. En algunas formas de realización, el software o firmware de un sistema de procesamiento de datos que presenta una forma de realización de un procesador de gráficos utiliza una versión de la secuencia de comando que se ilustra para configurar, ejecutar y finalizar un conjunto de operaciones de gráficos. Se muestra y describe una secuencia de comandos de muestra solamente con fines de ejemplo, ya que las formas de realización no se limitan a estos comandos específicos o a esta secuencia de comandos. Además, los comandos pueden emitirse como un lote de comandos en una secuencia de comandos, de modo que el procesador de gráficos procesará la secuencia de comandos al menos parcialmente de manera simultánea.
En algunas formas de realización, la secuencia de comandos del 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 formas de realización, la canalización 3D 1922 y la canalización de medios 1924 no funcionan de manera simultánea. El vaciado de canalización se realiza para que la canalización de gráficos activa complete los comandos pendientes. En respuesta a un vaciado de canalización, el analizador de comandos para el procesador de gráficos detendrá el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las memorias cachés de lectura pertinentes. De manera opcional, cualquier dato en la memoria caché de procesamiento que esté marcado como 'sucio' se puede vaciar en la memoria. En algunas formas de realización, el comando de vaciado de canalización 1912 se puede utilizar para la sincronización de canalización o antes de colocar el procesador de gráficos en un estado de bajo potencia.
En algunas formas de realización, se utiliza un comando de selección de canalización 1913 cuando una secuencia de comandos requiere que el procesador de gráficos conmute explícitamente entre canalizaciones. En algunas formas de realización, se requiere un comando de selección de canalización 1913 solamente una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea para emitir comandos para ambas canalizaciones. En algunas formas de realización, se requiere un comando de vaciado de canalización 1912 inmediatamente antes de una conmutación de canalización a través del comando de selección de canalización 1913.
En otras formas de realización, un comando de control de canalización 1914 configura una canalización de gráficos para su funcionamiento y se utiliza para programar la canalización 3D 1922 y la canalización de medios 1924. En algunas formas de realización, el comando de control de canalización 1914 configura el estado de canalización para la canalización activa. En una forma de realización, el comando de control de canalización 1914 se utiliza para la sincronización de canalización y para borrar datos de una o más memorias caché dentro de la canalización activa antes de procesar un lote de comandos.
En otras formas de realización, los comandos de estado de la memoria intermedia de retorno 1916 se utilizan para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones realicen la escritura de 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 los que las operaciones realizan la escritura de los datos intermedios durante el procesamiento. En algunas formas de realización, el procesador de gráficos también utiliza una o más memorias intermedias de retorno para almacenar datos de salida y realizar una comunicación entre subprocesos. En algunas formas de realización, el estado de la memoria intermedia de retorno 1916 incluye seleccionar el tamaño y el número de memorias intermedias de retorno para utilizar para un conjunto de operaciones de canalización.
Los comandos restantes en la secuencia de comandos difieren en función de 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 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 establecimiento 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 deben configurarse antes de que se procesen los comandos primitivos 3D. Los valores de estos comandos se determinan, al menos en parte, en función de la API 3D particular en uso. En algunas formas de realización, los comandos 1930 de estado de canalización 3D también pueden deshabilitar u omitir de manera selectiva algunos elementos de canalización si dichos elementos no se utilizarán.
En algunas formas de realización, el comando 1932 primitivo en 3D se utiliza para enviar primitivos 3D para que sean procesados por la canalización 3D. Los comandos y los parámetros asociados que se pasan al procesador de gráficos a través del comando 1932 primitivo en 3D se reenvían a la función de búsqueda de vértices en la canalización de gráficos. La función de búsqueda de vértice utiliza los datos de comando primitivos 3D 1932 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. En algunas formas de realización, el comando 1932 primitivo en 3D se utiliza para realizar operaciones de vértice en primitivos 3D a través de sombreadores de vértice. Para procesar los sombreadores de vértices, la canalización en 3D 1922 envía subprocesos de ejecución de sombreadores a las unidades de ejecución del procesador de gráficos.
En otras formas de realización, la canalización 3D 1922 se activa a través de un comando o evento de ejecución 1934. En algunas formas de realización, una escritura de registro inicia la ejecución de un comando. En otras formas de realización, la ejecución se inicia mediante un comando "go" o "kick" en la secuencia de comandos. En una forma de realización, la ejecución del comando se inicia utilizando un comando de sincronización de canalización para descargar la secuencia de comandos a través de la canalización de gráficos. La canalización 3D realizará el procesamiento de geometría para los primitivos 3D. Una vez que se completan las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles colorea los píxeles resultantes. También se pueden incluir comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo posterior de píxeles para dichas operaciones.
En algunas formas de realización, la secuencia de comandos del procesador de gráficos 1910 sigue la ruta de canalización de medios 1924 cuando se realizan operaciones de medios. En general, el uso específico y la forma de programación para la canalización de medios 1924 depende de las operaciones de medios o cálculo que han de realizarse. Las operaciones específicas de decodificación de medios pueden descargarse a la canalización de medios durante la decodificación de medios. En otras formas de realización, la canalización de medios también se puede omitir y la decodificación de medios se puede realizar en su totalidad o en parte utilizando los recursos proporcionados por uno o más núcleos de procesamiento de uso general. En una forma de realización, la canalización de medios también incluye elementos para operaciones de unidades de procesador de gráficos de uso general (GPGPU), en donde el procesador de gráficos se utiliza para realizar operaciones de vector SIMD utilizando programas de sombreador de cálculo que no están relacionados explícitamente con el renderizado de primitivos de gráficos.
En otras formas de realización, la canalización de medios 1924 se configura de manera similar a la canalización 3D 1922. Un conjunto de comandos para configurar el estado de la canalización de medios 1940 se envían o se colocan en una cola de espera comandos antes de los comandos de objeto de medios 1942. En algunas formas de realización, los comandos de estado de canalización de medios 1940 incluyen datos para configurar los elementos de canalización de medios que se utilizarán para procesar los objetos de medios. Lo que antecede incluye datos para configurar la decodificación de vídeo y la lógica de codificación de vídeo dentro de la canalización de medios, tal como el formato de codificación o decodificación. En algunas formas de realización, los comandos de estado de canalización de medios 1940 también admiten el uso de uno o más punteros a elementos de estado "indirectos" que contienen un lote de configuraciones de estado.
En otras formas de realización, los comandos de objetos de medios 1942 proporcionan punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias que contienen datos de vídeo para ser procesados. En otras formas de realización, todos los estados de la canalización de medios deben ser válidos antes de emitir un comando de objeto de medios 1942. Una vez que se configura el estado de la canalización y los comandos de objetos de medios 1942 están en cola de espera, la canalización de medios 1924 se activa a través de un comando de ejecución 1944 o un evento de ejecución equivalente (por ej., escritura de registro). La salida de la canalización de medios 1924 puede luego procesarse posteriormente mediante operaciones proporcionadas por la canalización 3D 1922 o la canalización de medios 1924. En algunas formas de realización, las operaciones GPGPU se configuran y ejecutan de manera similar a las operaciones de medios.
Arquitectura de software de gráficos
La Figura 20 ilustra una arquitectura de software de gráficos a modo de ejemplo para un sistema de procesamiento de datos 2000 según algunas formas de realización. En algunas formas de realización, 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 formas de realización, el procesador 2030 incluye un procesador de gráficos 2032 y uno o más núcleos de procesador de uso general 2034. La aplicación de gráficos 2010 y el sistema operativo 2020 se ejecutan cada uno en la memoria del sistema 2050 del sistema de procesamiento de datos.
En otras formas de realización, la aplicación de gráficos 3D 2010 contiene uno o más programas de sombreador que incluyen instrucciones de sombreador 2012. Las instrucciones del lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el lenguaje de sombreador de alto nivel (HLSL) o el lenguaje de sombreador OpenGL (GLSL). La aplicación también incluye instrucciones ejecutables 2014 en un lenguaje máquina adecuado para su ejecución por el núcleo del procesador de uso general 2034. La aplicación también incluye objetos gráficos 2016 definidos por datos de vértice.
En otras formas de realización, el sistema operativo 2020 es un sistema operativo de Microsoft® Windows® de Microsoft Corporation, un sistema operativo patentado similar a UNIX o un sistema operativo similar a UNIX de código abierto que utiliza una variante del kernel de Linux. El sistema operativo 2020 puede admitir una API de gráficos 2022 tal como la API de Direct3D, la API de OpenGL o la API de Vulkan. Cuando la API de Direct3D está en uso, el sistema operativo 2020 utiliza un compilador 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 precompilación de sombreador. En algunas formas de realización, 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 formas de realización, las instrucciones de sombreador 2012 se proporcionan en una forma intermedia, tal como una versión del Representación Intermedia Portátil Estándar (SPIR) utilizada por la API de Vulkan.
En algunas formas de realización, el controlador de gráficos de modo de usuario 2026 contiene un compilador de sombreador de extremo posterior 2027 para convertir las instrucciones de sombreador 2012 en una representación específica de hardware. Cuando la API de OpenGL está en uso, 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 formas de realización, el controlador de gráficos en modo de usuario 2026 utiliza las funciones de modo kernel del sistema operativo 2028 para comunicarse con un controlador de gráficos en modo kernel 2029. En algunas formas de realización, el controlador de gráficos en modo kernel 2029 se comunica con el procesador de gráficos 2032 para enviar comandos e instrucciones.
Puestas en práctica del núcleo IP
Uno o más aspectos de al menos una forma de realización pueden ponerse en práctica 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 diversas lógicas dentro del procesador. Cuando son objeto de lectura por una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en este documento. Dichas representaciones, conocidas como "núcleos de IP", son unidades de lógica reutilizables para un circuito que pueden almacenarse en un medio tangible legible por máquina tal como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware se puede suministrar a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que producen el circuito integrado. El circuito integrado se puede fabricar de manera que el circuito realice las operaciones descritas en asociación con cualquiera de las formas de realización descritas en el presente documento.
La Figura 21 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 2100 que puede utilizarse para fabricar un circuito integrado para realizar operaciones de conformidad con una forma de realización. El sistema de desarrollo de núcleo IP 2100 puede utilizarse para generar diseños modulares reutilizables que pueden incorporarse en un diseño más grande o utilizarse para construir un circuito integrado completo (por ejemplo, un circuito integrado 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 utilizar para diseñar, probar y verificar el comportamiento del núcleo de IP utilizando un modelo de simulación 2112. El modelo de simulación 2112 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. A continuación, se puede crear o sintetizar un diseño de nivel de transferencia de registro (RTL) 2115 a partir del modelo de simulación 2112. El diseño 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 utilizando las señales digitales modeladas. Además de un diseño RTL 2115, también se pueden crear, diseñar o sintetizar diseños de nivel inferior a nivel lógico o a nivel de transistor. Por lo tanto, los datos particulares del diseño inicial y de la simulación pueden variar.
El diseño RTL 2115 o equivalente puede sintetizarse aún más mediante la función de diseño en un modelo de hardware 2120, que puede estar en un lenguaje de descripción de hardware (HDL), o en alguna otra representación de datos de diseño físico. El HDL puede simularse o probarse más para verificar el diseño del núcleo de IP. El diseño del núcleo de IP se puede almacenar para entregarlo a una instalación de fabricación de terceros 2165 utilizando una memoria no volátil 2140 (por ejemplo, un disco duro, una memoria instantánea o cualquier medio de almacenamiento no volátil). De manera alternativa, el diseño del núcleo de IP puede transmitirse (p. ej., a través de Internet) a través de una conexión por cable 2150 o una conexión inalámbrica 2160. La instalación de fabricación 2165 puede entonces fabricar un circuito integrado que se basa al menos en parte en el diseño del núcleo de IP. El circuito integrado fabricado puede configurarse para realizar operaciones de conformidad con al menos una forma de realización descrita en este documento.
Sistema a modo de ejemplo en un circuito integrado
Las Figuras 22-24 ilustran ejemplos de circuitos integrados y de procesadores de gráficos asociados que pueden fabricarse utilizando uno o más núcleos de IP, de conformidad con diversas formas de realización descritas en este documento, además, de lo que se ilustra, se pueden incluir otras lógicas y otros circuitos, incluyendo procesadores/núcleos de gráficos adicionales, controladores de interfaz periféricos o núcleos de procesador de uso general.
La Figura 22 es un diagrama de bloques que ilustra un sistema, a modo de ejemplo, en un circuito integrado 2200 que puede fabricarse utilizando uno o más núcleos de IP, según una forma de realización. El circuito integrado a modo de ejemplo 2200 incluye uno o más procesador(es) de aplicaciones 2205 (por ejemplo, CPU), al menos un procesador de gráficos 2210, y puede incluir de manera adicional, un procesador de imágenes 2215 y/o un procesador de vídeo 2220, cualquiera de los cuales puede ser un núcleo IP modular procedente de las mismas o múltiples instalaciones de diseño diferentes. El circuito integrado 2200 incluye una lógica de bus o periférico que incluye un controlador USB 2225, un controlador UART 2230, un controlador SPI/SDIO 2235 y un controlador I2S/I2C 2240. Además, el circuito integrado puede incluir un dispositivo de visualización 2245 acoplado a uno o más de entre un controlador de interfaz multimedia de alta definición (HDMI) 2250 y una interfaz de pantalla de interfaz de procesador de industria móvil (MIPI) 2255. El almacenamiento puede ser proporcionado por un subsistema de memoria instantánea 2260 que incluye memoria instantánea y un controlador de memoria instantánea. La interfaz de memoria se puede proporcionar a través de un controlador de memoria 2265 para acceder a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen, además, un motor de seguridad integrado 2270.
La Figura 23 es un diagrama de bloques que ilustra un procesador gráfico 2310 a modo de ejemplo de un sistema en un circuito integrado que puede fabricarse utilizando uno o más núcleos IP, según una forma de realización. El procesador de gráficos 2310 puede ser una variante del procesador de gráficos 2210 de la Figura 22. El procesador de gráficos 2310 incluye un procesador de vértice 2305 y uno o más procesador(es) 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 de sombreador a través de una lógica separada, de modo que el procesador de vértices 2305 esté optimizado para ejecutar operaciones para programas de sombreador de vértices, mientras que uno o más procesador(es) de fragmentos 2315A-2315N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreador de fragmentos o píxeles. El procesador de vértices 2305 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera primitivos y datos de vértices. Los procesadores de fragmentos 2315A-2315N utilizan los datos primitivos y de vértice generados por el procesador de vértice 2305 para obtener una memoria intermedia de tramas que se ilustra en un dispositivo de visualización. En una forma de realización, los procesadores de fragmentos 2315A-2315N están optimizados para ejecutar programas de sombreador de fragmentos según lo dispuesto en la API de OpenGL, que se puede utilizar para realizar operaciones similares como un programa de sombreador de píxeles según lo dispuesto en la API Direct 3D.
El procesador de gráficos 2310 incluye, además, una o más unidades de gestión de memoria (MMUs) 2320A-2320B, memorias caché(s) 2325A-2325B e interconexión(es) de circuito 2330A-2330B. La(s) MMU(s) 2320A-2320B proporcionan una asignación de dirección virtual a física para el circuito integrado 2310, incluyendo el procesador de vértice 2305 y/o el(los) procesador(es) de fragmento 2315A-2315N, que pueden hacer referencia a datos de vértice o imagen/textura almacenados en la memoria, además, de los datos de vértice o de imagen/textura almacenados en las una o más memoria(s) caché(s) 2325A-2325B. En una forma de realización, las una o más MMUs 2325A-2325B pueden sincronizarse con otras unidades MMUs dentro del sistema, incluyendo una o más unidades MMUs asociadas con los uno o más procesador(es) de aplicaciones 2205, procesadores de imágenes 2215 y/o procesadores de vídeo 2220 de la Figura 22, de modo que cada procesador 2205-2220 pueda participar en un sistema de memoria virtual compartida o unificada. La(s) interconexión(es) de uno o más circuitos 2330A-2330B permiten que el procesador de gráficos 2310 interactúe con otros núcleos IP dentro del circuito SoC, ya sea a través de un bus interno del SoC o mediante una conexión directa, según las formas de realización.
La Figura 24 es un diagrama de bloques que ilustra un procesador de gráficos a modo de ejemplo adicional 2410 de un sistema en un circuito integrado que puede fabricarse utilizando uno o más núcleos de IP, según una forma de realización. El procesador de gráficos 2410 puede ser una variante del procesador de gráficos 2210 de la Figura 22. El procesador de gráficos 2410 incluye una o más unidades MMUs 2320A-2320B, memorias cachés 2325A-2325B e interconexiones de circuito 2330A-2330B del circuito integrado 2300 de la Figura 23.
El procesador de gráficos 2410 incluye uno o más núcleos de sombreador 2415A-2415N (por ejemplo, 2415A, 2415B, 2415C, 2415D, 2415E, 2415F, hasta 2415N-1 y 2415N), que proporciona una arquitectura de núcleo de sombreador unificada en donde un único núcleo o tipo o núcleo puede ejecutar todos los tipos de código de sombreador programable, incluyendo el código de programa de sombreador para poner en práctica 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 formas de realización y puestas en práctica. Además, el procesador de gráficos 2410 incluye un administrador de tareas entre núcleos 2405, que actúa como un expedidor de subprocesos para enviar 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 el renderizado basado en mosaicos, en donde las operaciones de renderizado de una escena se subdividen en el espacio de la imagen, por ejemplo, para utilizar la coherencia espacial local dentro de una escena o para optimizar el uso de memoria cachés internas.

Claims (4)

REIVINDICACIONES
1. Un aparato que comprende:
un procesador que tiene una pluralidad de unidades de ejecución, en donde cada una de la pluralidad de unidades de ejecución comprende un fichero de registro local rápido, RF (762); comprendiendo, además, el procesador:
un primer fichero de registro general lento, GRF (755), acoplado, de manera comunicativa, a la pluralidad de unidades de ejecución, en donde el primer GRF (755) es compartido por la pluralidad de unidades de ejecución, y un segundo fichero GRF (750) acoplado, de manera comunicativa, a la pluralidad de unidades de ejecución (620), caracterizado por cuanto que:
el primer GRF (755) y el segundo GRF (750) están integrados en una sola estructura de memoria y configurados de modo que una demanda de acceso a la memoria caché se dirija, en primer lugar, hacia el primer GRF (755) y si la demanda de acceso a la memoria caché no tiene éxito, entonces la demanda de acceso a la memoria caché se envía al segundo GRF (750), en donde el primer GRF (755) tiene un consumo de energía más bajo que el segundo GRF (750).
2. El aparato según la reivindicación 1, que comprende, además, lógica, incluyendo al menos parcialmente lógica de hardware, para:
detectar una conmutación de contexto de datos entre dos o más de entre la pluralidad de unidades de ejecución y, en respuesta a la conmutación de contexto de datos, activar una lectura de un dispositivo de memoria distante.
3. El aparato según la reivindicación 2, en donde el dispositivo de memoria distante comprende una memoria caché L3.
4. El aparato según la reivindicación 1, en donde la pluralidad de unidades de ejecución, el primer GRF (755) y el segundo GRF (750) están en un circuito único.
ES18160823T 2017-04-01 2018-03-08 Fichero de registro jerárquico para una unidad GPGPU Active ES2929978T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/477,033 US10423415B2 (en) 2017-04-01 2017-04-01 Hierarchical general register file (GRF) for execution block

Publications (1)

Publication Number Publication Date
ES2929978T3 true ES2929978T3 (es) 2022-12-05

Family

ID=61616874

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18160823T Active ES2929978T3 (es) 2017-04-01 2018-03-08 Fichero de registro jerárquico para una unidad GPGPU

Country Status (5)

Country Link
US (3) US10423415B2 (es)
EP (1) EP3382533B1 (es)
CN (1) CN108694698A (es)
ES (1) ES2929978T3 (es)
PL (1) PL3382533T3 (es)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
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
US10423415B2 (en) 2017-04-01 2019-09-24 Intel Corporation Hierarchical general register file (GRF) for execution block
US10241921B2 (en) * 2017-04-17 2019-03-26 Intel Corporation Avoid cache lookup for cold cache
US10880163B2 (en) * 2019-01-31 2020-12-29 Dell Products, L.P. System and method for hardware management and configuration in a datacenter using augmented reality and available sensor data
WO2020190776A1 (en) * 2019-03-15 2020-09-24 Intel Corporation Synchronizing encrypted workloads across multiple graphics processing units
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
CN113383310A (zh) 2019-03-15 2021-09-10 英特尔公司 矩阵加速器架构内的脉动分解
CN113396401A (zh) 2019-03-15 2021-09-14 英特尔公司 多贴片存储器管理
US11782713B1 (en) * 2019-08-27 2023-10-10 Amazon Technologies, Inc. Security vulnerability mitigation using address space co-execution
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11630667B2 (en) * 2019-11-27 2023-04-18 Advanced Micro Devices, Inc. Dedicated vector sub-processor system
US11204765B1 (en) * 2020-08-26 2021-12-21 Qualcomm Incorporated Deferred GPR allocation for texture/load instruction block
CN112181493B (zh) * 2020-09-24 2022-09-13 成都海光集成电路设计有限公司 寄存器网络架构和寄存器访问方法
US11314508B1 (en) * 2021-02-01 2022-04-26 National Technology & Engineering Solutions Of Sandia, Llc FPGA-based computing system for processing data in size, weight, and power constrained environments
US20220413899A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Barrier state save and restore for preemption in a graphics environment
US20220413916A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Multiple register allocation sizes for threads
US11775310B2 (en) * 2021-11-16 2023-10-03 Nxp B.V. Data processing system having distrubuted registers
US11977496B1 (en) 2022-09-29 2024-05-07 Amazon Technologies, Inc. Security vulnerability mitigation using hardware-supported context-dependent address space hiding

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5165038A (en) * 1989-12-29 1992-11-17 Supercomputer Systems Limited Partnership Global registers for a multiprocessor system
US6345354B1 (en) * 1999-04-29 2002-02-05 Mips Technologies, Inc. Register file access
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US20050204118A1 (en) * 2004-02-27 2005-09-15 National Chiao Tung University Method for inter-cluster communication that employs register permutation
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7284092B2 (en) * 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US8044100B2 (en) * 2004-12-22 2011-10-25 Bellus Health Inc. Methods and compositions for treating amyloid-related diseases
US20060230257A1 (en) * 2005-04-11 2006-10-12 Muhammad Ahmed System and method of using a predicate value to access a register file
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US8296550B2 (en) 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US8261046B2 (en) * 2006-10-27 2012-09-04 Intel Corporation Access of register files of other threads using synchronization
US8108625B1 (en) * 2006-10-30 2012-01-31 Nvidia Corporation Shared memory with parallel access and access conflict resolution mechanism
US8533681B2 (en) * 2007-03-07 2013-09-10 The Board Of Trustees Of The University Of Illinois Atomicity violation detection using access interleaving invariants
US8200949B1 (en) 2008-12-09 2012-06-12 Nvidia Corporation Policy based allocation of register file cache to threads in multi-threaded processor
US20110016158A1 (en) * 2009-07-16 2011-01-20 Gilles Robert Vergnory-Mion Generation of dimensional metadata based on rdbms data
US8533435B2 (en) 2009-09-24 2013-09-10 Nvidia Corporation Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict
US8458446B2 (en) * 2009-09-30 2013-06-04 Oracle America, Inc. Accessing a multibank register file using a thread identifier
KR101636377B1 (ko) * 2009-10-23 2016-07-06 삼성전자주식회사 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법
US9367462B2 (en) * 2009-12-29 2016-06-14 Empire Technology Development Llc Shared memories for energy efficient multi-core processors
US8732711B2 (en) * 2010-09-24 2014-05-20 Nvidia Corporation Two-level scheduler for multi-threaded processing
US8539462B2 (en) * 2010-12-21 2013-09-17 National Tsing Hua University Method for allocating registers for a processor based on cycle information
CN103186502B (zh) * 2011-12-30 2016-08-10 世意法(北京)半导体研发有限责任公司 用于共享处理器过程上下文的寄存器堆组织
US10169091B2 (en) * 2012-10-25 2019-01-01 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US9229717B2 (en) 2012-12-11 2016-01-05 Nvidia Corporation Register allocation for clustered multi-level register files
GB2501791B (en) * 2013-01-24 2014-06-11 Imagination Tech Ltd Register file having a plurality of sub-register files
CN103412828B (zh) * 2013-08-13 2016-12-28 华为技术有限公司 一种数据处理的方法和设备
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US20170060593A1 (en) * 2015-09-02 2017-03-02 Qualcomm Incorporated Hierarchical register file system
US10853904B2 (en) 2016-03-24 2020-12-01 Advanced Micro Devices, Inc. Hierarchical register file at a graphics processing unit
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10423415B2 (en) 2017-04-01 2019-09-24 Intel Corporation Hierarchical general register file (GRF) for execution block

Also Published As

Publication number Publication date
EP3382533B1 (en) 2022-09-14
US20200026514A1 (en) 2020-01-23
PL3382533T3 (pl) 2023-01-16
US20180285106A1 (en) 2018-10-04
US10423415B2 (en) 2019-09-24
US11010163B2 (en) 2021-05-18
US20210349715A1 (en) 2021-11-11
EP3382533A1 (en) 2018-10-03
US11507375B2 (en) 2022-11-22
CN108694698A (zh) 2018-10-23

Similar Documents

Publication Publication Date Title
ES2929978T3 (es) Fichero de registro jerárquico para una unidad GPGPU
US11587273B2 (en) Low power foveated rendering to save power on GPU and/or display
US11263152B2 (en) Replacement policies for a hybrid hierarchical cache
US11263141B2 (en) Sector cache for compression
US11762696B2 (en) Hybrid low power homogenous grapics processing units
ES2969061T3 (es) Motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesador
US11494187B2 (en) Message based general register file assembly
US11263720B2 (en) Frequent data value compression for graphics processing units
US11636831B2 (en) Adaptive multibit bus for energy optimization
US10319070B2 (en) Dynamic page sizing of page table entries
ES2953885T3 (es) Omisión de procesamiento de código de corrección de errores (ECC) basándose en indicación de software
US10580104B2 (en) Read/write modes for reducing power consumption in graphics processing units
US20180300840A1 (en) Display link compression by render engine
US20200387399A1 (en) High bandwidth connection between processor dies
US20180300045A1 (en) Active window rendering optimization and display