ES2905758T3 - Gestión de energía de procesador - Google Patents

Gestión de energía de procesador Download PDF

Info

Publication number
ES2905758T3
ES2905758T3 ES18158485T ES18158485T ES2905758T3 ES 2905758 T3 ES2905758 T3 ES 2905758T3 ES 18158485 T ES18158485 T ES 18158485T ES 18158485 T ES18158485 T ES 18158485T ES 2905758 T3 ES2905758 T3 ES 2905758T3
Authority
ES
Spain
Prior art keywords
graphics
processor
memory
user
processing
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
ES18158485T
Other languages
English (en)
Inventor
Altug Koker
Abhishek R Appu
Kiran C Veernapu
Joydeep Ray
Balaji Vembu
Prasoonkumar Surti
Kamal Sinha
Eric J Hoekstra
Wenyin Fu
Nikos Kaburlasos
Bhushan M Borole
Travis T Schluessler
Ankur N Shah
Jonathan Kennedy
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 ES2905758T3 publication Critical patent/ES2905758T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3209Monitoring remote activity, e.g. over telephone lines or network connections
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3243Power saving in microcontroller unit
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3212Monitoring battery levels, e.g. power saving mode being initiated when battery voltage goes below a certain level
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3218Monitoring of peripheral devices of display devices
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3231Monitoring the presence, absence or movement of users
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/329Power saving characterised by the action undertaken by task scheduling
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0781Error filtering or prioritizing based on a policy defined by the user or on a policy defined by a hardware/software module, e.g. according to a severity level
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3058Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations
    • G06F11/3062Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations where the monitored property is the power consumption
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W52/00Power management, e.g. Transmission Power Control [TPC] or power classes
    • H04W52/02Power saving arrangements
    • H04W52/0209Power saving arrangements in terminal devices
    • H04W52/0251Power saving arrangements in terminal devices using monitoring of local events, e.g. events related to user activity
    • H04W52/0258Power saving arrangements in terminal devices using monitoring of local events, e.g. events related to user activity controlling an operation mode according to history or models of usage information, e.g. activity schedule or time of day
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72448User interfaces specially adapted for cordless or mobile telephones with means for adapting the functionality of the device according to specific conditions
    • 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
    • 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
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

Un método que comprende: la recogida (610) de información de usuario para un usuario de un dispositivo de procesamiento de datos, incluyendo la recogida de estadísticas basadas en máquinas asociadas con el usuario e información personal asociada con el usuario, incluyendo la recogida de una o más métricas de rendimiento para varias etapas de una canalización de procesamiento de gráficos de un procesador gráfico del dispositivo de procesamiento de datos, en donde, dependiendo de las características de la carga de trabajo, algunas partes de la canalización de procesamiento de gráficos son más activas que otras partes; la generación (615) de un perfil de usuario para el usuario del dispositivo de procesamiento de datos a partir de la información del usuario; la categorización (620) del usuario en una de entre una pluralidad de categorías de consumo de energía en base al perfil del usuario; la determinación (625) de un perfil de energía del procesador gráfico en el dispositivo de procesamiento de datos utilizando el perfil de usuario y la categorización del usuario en combinación con la retroalimentación de un algoritmo de aprendizaje automático, incluyendo el ajuste individual de la frecuencia de las etapas de la canalización de procesamiento de gráficos del procesador gráfico basado, al menos en parte, en el perfil de usuario y en una o más métricas de rendimiento recogidas.

Description

DESCRIPCIÓN
Gestión de energía de procesador
CAMPO TÉCNICO
La presente invención se suele relacionar con el campo de la electrónica. Más en particular, algunas formas de realización se refieren a técnicas para poner en práctica la gestión de energía del procesador.
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 único circuito integrado (IC). Los componentes adicionales añaden conmutación de señal adicional y, a su vez, generan más calor y/o consumen más energía. El calor adicional puede dañar los componentes del 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 sobre la eficiencia, la longevidad y los modelos de uso de los 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, mapeado de texturas, pruebas de profundidad, etc. Tradicionalmente, los procesadores gráficos utilizaban unidades informáticas de función fija para procesar datos gráficos; sin embargo, más recientemente, partes de los procesadores 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 fragmentos.
Para aumentar aún más el rendimiento, los procesadores 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 gráficos en las diferentes partes de la canalización de gráficos. Los procesadores gráficos en paralelo con arquitecturas de una sola instrucción y múltiples subprocesos (SIMT) están diseñados para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura SIMT, los grupos de subprocesos en paralelo intentan ejecutar las instrucciones del programa de forma sincronizada con la mayor frecuencia posible para aumentar la eficiencia del procesamiento. Se puede 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-51 (2013) y/o 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 EP 2915021 A2 da a conocer un método para supervisar y controlar el uso de recursos para mejorar la seguridad de un dispositivo móvil. Cualquier información recogida se utiliza para construir un modelo de uso para un usuario del dispositivo móvil que describe un conjunto de contextos en los que se utiliza el dispositivo móvil. Se supervisa la actividad del usuario en el dispositivo y se consulta el modelo para determinar una primera vez después de la cual será aceptable que la batería de un dispositivo móvil caiga por debajo de un nivel de carga umbral. Además, se realiza una predicción de una segunda vez cuando la batería caerá por debajo del nivel de carga umbral. Si la segunda vez precede a la primera, se reduce el uso de la batería.
El documento US 2015/100801 A1 se refiere a un sistema de gestión de energía predictivo que ajusta una frecuencia de reloj por parte de un usuario de ordenador para conservar energía en función de una categoría de usuario. Se utiliza un módulo creador de perfiles de usuarios de ordenadores para crear perfiles de uso de ordenadores. Un módulo de gestión de energía se utiliza para establecer y ajustar la frecuencia del reloj de la CPU de un ordenador, la tensión de la CPU y los estados del dispositivo según la categoría del usuario y el perfil de uso del ordenador. El documento US 2018/182359 A1 da a conocer un dispositivo informático que ajusta de manera dinámica una densidad de píxeles en función, al menos en parte, de la distancia de visualización entre un usuario y una pantalla del dispositivo informático.
El documento US 2011/004575 A1 da a conocer un método para controlar el consumo de energía en un sistema informático. El sistema informático está preparado para determinar la información de relación entre la satisfacción del usuario y las frecuencias discretas a las que se ejecuta un procesador del sistema informático.
El documento US 7903116 se refiere a la gestión adaptativa del nivel de rendimiento de un sistema de gráficos. La invención se define por un método, un aparato y un medio legible por ordenador según las reivindicaciones independientes. Las formas de realización preferidas se definen en las reivindicaciones dependientes.
Las formas de realización descritas en esta descripción que no caen dentro del alcance de las reivindicaciones describen ejemplos o formas de llevar a cabo la invención, que son de utilidad para comprender la invención. En particular, los ejemplos y formas de realización de las Figuras 8 a 24 y los pasos correspondientes en la descripción no están de conformidad con la invención y se presentan únicamente con fines ilustrativos.
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. Conviene observar, sin embargo, 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.
Las Figuras 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 gráficos, según formas de realización.
Las Figuras 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.
La Figura 6A es un diagrama de flujo que ilustra las operaciones en un método para la gestión de energía del procesador, según formas de realización.
La Figura 6B es un diagrama de bloques esquemático de una arquitectura para poner en práctica un método para la gestión de energía del procesador, según formas de realización.
La Figura 6C es un diagrama de flujo que ilustra las operaciones en un método para la gestión de energía del procesador, según las formas de realización.
La Figura 6D es un diagrama de bloques esquemático de una arquitectura para poner en práctica un método para la gestión de energía del procesador, según formas de realización.
La Figura 7A es un diagrama de bloques esquemático de una arquitectura para poner en práctica un método para la gestión de energía del procesador, según formas de realización.
Las Figuras 7B-7C son diagramas de flujo que ilustran operaciones en un método para la gestión de energía del procesador, 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, 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 gráfico, 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 gráfico de conformidad con algunas formas de realización.
La Figura 15 es un diagrama de bloques de un procesador gráfico 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 gráfico según algunas formas de realización.
La Figura 18 es un diagrama de bloques de un procesador gráfico según otra forma de realización.
Las Figuras 19A-19B ilustran un formato de comando de procesador gráfico 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 gráfico, a modo de ejemplo adicional.
La Figura 24 es un diagrama de bloques que ilustra un procesador gráfico, a modo de ejemplo adicional, 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 con el fin de proporcionar una comprensión completa de varias formas de realización. Sin embargo, se pueden practicar varias 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, varios aspectos de las formas de realización se pueden efectuar utilizando varios medios, tales como circuitos de semiconductores integrados ("hardware"), instrucciones legibles por ordenador organizadas en uno o más programas ("software") o alguna combinación de hardware y software. A los efectos de esta 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 (tales 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 procesadores (por ejemplo, con uno o más núcleos de procesador), tales 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 unos prismáticos inteligentes), etc.
En algunas formas de realización, una unidad de procesamiento de gráficos (GPU) se acopla de forma comunicativa a los procesadores host/núcleos 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 GPU se puede acoplar de manera comunicativa a los procesadores host/núcleos 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 a través de un bus de procesador interno/interconexión (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 forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza lógica/circuitos 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 practicarse 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 el 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 circuito integrado o puede integrarse dentro del 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 una entrada procedente del 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 el uno o más procesador(es) 102, para proporcionar salidas al uno o más dispositivo(s) de visualización 110A. En una forma de realización, el uno o más dispositivo(s) de visualización 110A acoplado con el concentrador de E/S 107 puede incluir un dispositivo de visualización local, interno o incorporado.
En una forma de realización, el subsistema de procesamiento 101 incluye uno o más procesadores 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 uno de entre cualquier número de tecnologías de enlace de comunicación basadas en normas o protocolos, tales como, entre otros, PCI Express, o puede ser una interfaz de comunicaciones o un tejido de comunicaciones específico del proveedor. En una forma de realización, el uno o más procesador(es) en paralelo 112 forman un sistema de procesamiento vectorial o paralelo enfocado informáticamente que incluye una gran cantidad de núcleos de procesamiento y/o agrupamientos de procesamiento, tales como un procesador de muchos núcleos integrados (MIC). En una forma de realización, el 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 dispositivos de visualización 110A acoplados a través del concentrador de E/S 107. El 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 dispositivos de visualización 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 pueden añadirse a través del uno o más dispositivo(s) adicional 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 Wi-Fi, Bluetooth, comunicación de campo cercano (NFC) u otro dispositivo de red que incluya uno o más equipos de radio inalámbricos.
El sistema informático 100 puede incluir otros componentes que no se muestran 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 diferentes componentes en la Figura 1 puede 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 punto a punto o bus, tales como los protocolos de interconexión de alta velocidad NV-Link o protocolos de interconexión conocidos en esta técnica.
En una forma de realización, el uno o más procesador(es) en paralelo 112 incorpora 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, el uno o más procesador(es) en paralelo 112 incorpora 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 más, los componentes del sistema informático 100 pueden integrarse con uno o más elementos del sistema en un único circuito integrado. Por ejemplo, el 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 circuito integrado de sistema (SoC). De manera alternativa, los componentes del sistema informático 100 pueden integrarse en un único paquete para formar una configuración de sistema en paquete (SIP). En una forma de realización, al menos una parte de los componentes del sistema informático 100 se puede 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 que se aquí muestra es ilustrativo y que son posibles variantes y modificaciones. La topología de conexión, que incluye el número y la disposición de 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 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 a través del concentrador de memoria 105 y del procesador(es) 102. En otras topologías alternativas, el procesador(es) en paralelo 112 está conectado al concentrador de E/S 107 o directamente al uno o más procesador(es) 102, en lugar del concentrador de memoria 105. En otras formas de realización, el concentrador de E/S 107 y el concentrador de memoria 105 pueden estar incorporados en un único circuito integrado. Algunas formas de realización pueden incluir dos o más conjuntos de procesador(es) 102 conectado a través de múltiples zócalos, que pueden acoplarse con dos o más instancias del procesador(es) en paralelo 112.
Algunos de los componentes particulares que aquí se muestran 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 en otras.
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 integrado, tales como procesadores programables, circuitos integrados específicos de la aplicación (ASICs) o conjuntos de puertas programables de campo (FPGA). El procesador en paralelo ilustrado 200 es una variante del uno o más procesador(es) en paralelo 112 mostrado 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 un concentrador o de una interfaz 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 host 206 y una barra transversal de memoria 216, en donde la interfaz de host 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 host 206 recibe una memoria intermedia de comandos a través de la unidad de E/S 204, la interfaz de host 206 puede dirigir las operaciones de trabajo para realizar dichos comandos hacia un extremo frontal 208. En una forma de realización, el extremo frontal 208 se acopla con un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupamientos de procesamiento 212. En una forma de realización, el planificador 210 garantiza que la matriz de agrupamientos de procesamiento 212 esté configurada correctamente y en un estado válido antes de que las tareas se distribuyan a los agrupamientos de procesamiento de la matriz de agrupamientos de procesamiento 212.
La matriz de agrupamientos de procesamiento 212 puede incluir hasta "N" agrupamientos de procesamiento (p. ej., agrupamiento 214a , agrupamiento 214B, agrupamiento 214N). Cada agrupamiento 214A-214N de la matriz de agrupamientos de procesamiento 212 puede ejecutar un gran número de subprocesos simultáneos. El planificador 210 puede asignar trabajo a los agrupamientos 214A-214N de la matriz de agrupamientos de procesamiento 212 utilizando diversos algoritmos de planificación y/o de distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo informático. La planificación puede ser gestionada de manera dinámica por el planificador 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 agrupamientos de procesamiento 212. En una forma de realización, diferentes agrupamientos 214A-214N de la matriz de agrupamientos de procesamiento 212 se pueden asignar para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
La matriz de agrupamientos 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 agrupamientos de procesamiento 212 está configurada para realizar operaciones informáticas paralelas de uso general. Por ejemplo, la matriz de agrupamientos de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, incluyendo el filtrado de datos de vídeo y/o audio, realizar operaciones de modelado, incluyendo operaciones físicas, y realizar transformaciones de datos.
En una forma de realización, la matriz de agrupamientos de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos en paralelo. En las 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 agrupamientos de procesamiento 212 puede incluir lógica adicional para admitir la ejecución de dichas operaciones de procesamiento de gráficos, incluyendo, entre otras, la lógica de muestreo de textura para realizar operaciones de textura, tal como la lógica de teselado y otra lógica de procesamiento de vértices. Además, la matriz de agrupamientos de procesamiento 212 puede configurarse para ejecutar programas de sombreado relacionados con el procesamiento de gráficos tales como, entre otros, 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 escribirse 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 planificador 210 puede configurarse para dividir la carga de trabajo de procesamiento en tareas de tamaño aproximadamente iguales, para permitir una mejor distribución de las operaciones de procesamiento de gráficos a múltiples agrupamientos 214A-214N de la matriz de agrupamientos de procesamiento 212. En algunas formas de realización, partes de la matriz de agrupamientos de procesamiento 212 se pueden configurar para realizar diferentes tipos de procesamiento. Por ejemplo, una primera parte puede configurarse para realizar sombreador de vértices y la generación de topología, una segunda parte puede configurarse para realizar teselado y sombreador de geometría, y una tercera parte puede configurarse para realizar sombreador de píxeles u otras operaciones de espacio de pantalla, para obtener una imagen renderizada para la pantalla. Los datos intermedios obtenidos por uno o más de los agrupamientos 214A-214N pueden almacenarse en memorias intermedias para permitir que los datos intermedios se transmitan entre los agrupamientos 214A-214N para un procesamiento posterior.
Durante el funcionamiento, la matriz de agrupamientos de procesamiento 212 puede recibir tareas de procesamiento para ser ejecutadas a través del planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos para ser procesados, por ejemplo, datos de superficie (ruta), datos primitivos, datos de vértices y/o datos de píxeles, así como parámetros de estado y comandos que definen cómo se procesarán los datos (por ejemplo, qué programa se ejecutará). El planificador 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 agrupamientos 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 solicitudes de memoria desde la matriz de agrupamientos 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 (p. ej., unidad de partición 220A, unidad de partición 220B, a la unidad de partición 220N, inclusive) que pueden acoplarse cada una a una parte (por ejemplo, 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 tiene una primera unidad de memoria 224A correspondiente, una segunda unidad de partición 220B tiene una unidad de memoria correspondiente 224B, y una N-ésima unidad de partición 220N tiene 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 varias formas de realización, las unidades de memoria 224A-224N pueden incluir varios tipos de dispositivos de memoria, incluyendo la memoria de acceso aleatorio dinámica (DRAM) o la memoria de acceso aleatorio de gráficos, tal como la memoria de acceso aleatorio de gráficos sincrónicos (SGRAM), que incluye una memoria de tasa doble de datos 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, entre otras, 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 procesamiento, tales como las memorias intermedias de tramas o los mapas de textura, pueden almacenarse en las unidades de memoria 224A-224N, lo que permite que las unidades de partición 220A-220N escriban partes de cada objetivo de procesamiento 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 unificada que utiliza la memoria del sistema junto con la memoria caché local.
En una forma de realización, cualquiera de los agrupamientos 214A-214N de la matriz de agrupamientos de procesamiento 212 puede procesar datos que se escribirán 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 agrupamiento 214A-214N a cualquier unidad de partición 220A-220N o a otro agrupamiento 214A-214N, que puede realizar operaciones de procesamiento adicionales en la salida. Cada agrupamiento 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para la lectura o la 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 agrupamientos de procesamiento 214A-214N para comunicarse 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 flujos de tráfico entre los agrupamientos 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 sola tarjeta complementaria, o se pueden interconectar múltiples tarjetas complementarias. 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 cantidades 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, incluyendo, sin limitación, ordenadores de escritorio, portátiles u ordenadores personales portátiles, 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é L2221, una interfaz de memoria intermedia de tramas 225 y una ROP 226 (unidad de operaciones de rasterización). La memoria caché L2 221 es una memoria caché de lectura/escritura que está configurada para realizar operaciones de carga y almacenamiento recibidas de la barra transversal de memoria 216 y ROP 226. Los errores de lectura y las solicitudes urgentes de reescritura son enviadas por la memoria caché L2221 a la interfaz de memoria intermedia de tramas 225 para su procesamiento. Las actualizaciones incorrectas también pueden enviarse a la memoria intermedia de tramas a través de la interfaz de memoria intermedia de tramas 225 para un procesamiento oportunista. 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 rasterización 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 se escriben 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 agrupamiento de procesamiento (p. ej., el agrupamiento 214A-214N de la Figura 2) en lugar de dentro de la unidad de partición 220. En dicha forma de realización, las solicitudes de lectura y escritura de datos de píxeles se transmiten a través de la barra transversal de memoria 216 en lugar de datos de fragmentos de píxeles. Los datos gráficos procesados pueden mostrarse en un dispositivo de visualización, tal como el uno o más dispositivo(s) de visualización 110 de la Figura 1, enrutado para su posterior procesamiento por el 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 agrupamiento 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 agrupamiento de procesamiento es una instancia de uno de los agrupamientos de procesamiento 214A-214N de la Figura 2. El agrupamiento de procesamiento 214 se puede configurar para ejecutar numerosos subprocesos en paralelo, donde el término "subproceso" se refiere a una instancia de un programa particular que se ejecuta en un conjunto particular de datos de entrada. En algunas formas de realización, se utilizan técnicas de emisión de instrucciones de instrucción única, o de datos múltiples (SIMD) para soportar la ejecución paralela de un gran número de subprocesos sin proporcionar múltiples unidades de instrucción independientes. En otras 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 agrupamientos de procesamiento. A diferencia de un régimen de ejecución SIMD, en donde todos los motores de procesamiento suelen ejecutar 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 dado. Los expertos en esta técnica entenderán que un régimen de procesamiento SIMD representa un subconjunto funcional de un régimen de procesamiento SIMT.
El funcionamiento del agrupamiento de procesamiento 214 se puede controlar a través de 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 planificador 210 de la Figura 2 y gestiona la ejecución de dichas instrucciones mediante un multiprocesador gráfico 234 y/o una unidad de textura 236. El multiprocesador gráfico 234 ilustrado 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 agrupamiento de procesamiento 214. Una o más instancias del multiprocesador gráfico 234 se pueden incluir dentro de un agrupamiento de procesamiento 214. El multiprocesador gráfico 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 gráfico 234 dentro del agrupamiento 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 variedad 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 ag o l pamiento de procesamiento 214 constituyen un subproceso. Un conjunto de subprocesos que se ejecutan en el conjunto de motores de procesamiento paralelo es un grupo de subprocesos. Un grupo de subprocesos ejecuta el mismo programa en diferentes datos de entrada. Cada subproceso dentro de un grupo de subprocesos se puede asignar a un motor de procesamiento diferente dentro de un multiprocesador gráfico 234. Un grupo de subprocesos puede incluir menos subprocesos que el número de motores de procesamiento dentro del multiprocesador gráfico 234. Cuando un grupo de subprocesos incluye menos subprocesos que el número de motores de procesamiento, los 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 gráfico 234. Cuando el grupo de subprocesos incluye más subprocesos que el número de motores de procesamiento dentro del multiprocesador gráfico 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 gráfico 234.
En una forma de realización, el multiprocesador gráfico 234 incluye una memoria caché interna para realizar operaciones de carga y de almacenamiento. En una forma de realización, el multiprocesador gráfico 234 puede prescindir de una memoria caché interna y utilizar una memoria caché (por ejemplo, caché L1 308) dentro del agrupamiento de procesamiento 214. Cada multiprocesador gráfico 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 agrupamientos de procesamiento 214 y se pueden utilizar para transferir datos entre subprocesos. El multiprocesador gráfico 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 agrupamiento de procesamiento 214 incluye múltiples instancias del multiprocesador gráfico 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la memoria caché L1308.
Cada agrupamiento de procesamiento 214 puede incluir una unidad MMU 245 (unidad de gestión de memoria) que está configurada para mapear 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 (PTE) 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 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 gráfico 234 o la memoria caché L1 o el agrupamiento de procesamiento 214. La dirección física se procesa para distribuir la localidad de acceso a datos de superficie para permitir un intercalado eficiente de solicitudes entre unidades de partición. El índice de línea caché se puede utilizar para determinar si una solicitud de una línea caché es un acierto o un error.
En las aplicaciones informáticas y de gráficos, un agrupamiento de procesamiento 214 puede configurarse de manera que cada multiprocesador gráfico 234 esté acoplado a una unidad de textura 236 para realizar operaciones de mapeado de textura, por ejemplo, determinar posiciones de muestra de textura, realizar lecturas de datos de textura y filtrar los datos de textura. Los datos de textura 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 gráfico 234 y se extraen de una memoria caché L2, de una memoria de procesador en paralelo local o de una memoria del sistema, según sea necesario. Cada multiprocesador gráfico 234 envía tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otro agrupamiento de procesamiento 214 para su posterior procesamiento o para almacenar la tarea procesada en una memoria caché L2, en una memoria de procesador en paralelo local o en la memoria del sistema a través de la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones previa a la rasterización) está configurada para recibir datos del multiprocesador gráfico 234, dirigir datos 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 preROP 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 variantes y modificaciones. Cualquier número de unidades de procesamiento, por ejemplo, multiprocesador gráfico 234, unidades de textura 236, unidades preROP 242, etc., puede incluirse dentro de un agrupamiento de procesamiento 214. Además, aunque solamente se muestra un agrupamiento de procesamiento 214, una unidad de procesamiento en paralelo tal como se describe en este documento puede incluir cualquier número de instancias del agrupamiento de procesamiento 214. En una forma de realización, cada agrupamiento de procesamiento 214 se puede configurar para funcionar de manera independiente de otros agrupamientos de procesamiento 214 utilizando unidades de procesamiento separadas y distintas, memorias caché L1, etc.
La Figura 2D muestra un multiprocesador gráfico 234, según una forma de realización. En dicha forma de realización, el multiprocesador gráfico 234 se acopla con el gestor de canalización 232 del agrupamiento de procesamiento 214. El multiprocesador gráfico 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 mapeado de direcciones 256, un fichero de registro 258, los 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 GPGPU 262 y las unidades de carga/almacenamiento están acoplados con la memoria caché 272 y la memoria compartida 270 mediante una interconexión de memoria compartida 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 tales como grupos de subprocesos (p. ej., 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 mapeado de direcciones 256 puede utilizarse para trasladar direcciones en el espacio de direcciones unificado en una dirección de memoria distinta a la que pueden acceder las unidades de carga/almacenamiento 266.
El fichero de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador gráfico 324. El fichero de registro 258 proporciona almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (p. ej., núcleos GPGPU 262, unidades de carga/almacenamiento 266) del multiprocesador gráfico 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 gráfico 324.
Cada uno de los núcleos GPGPU 262 puede incluir unidades de coma flotante (FPU) y/o unidades aritméticas lógicas de enteros (ALU) que se utilizan para ejecutar instrucciones del multiprocesador gráfico 324. Los núcleos GPGPU 262 pueden tener una arquitectura similar o pueden diferir en arquitectura, según formas de realización. Por ejemplo, y en una forma de realización, una primera parte de los núcleos 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 GPGPU incluye una unidad FPU de doble precisión. En una forma de realización, las unidades FPU 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 gráfico 324 puede incluir, de manera adicional, una o más unidades de funciones especiales o de funciones fijas para realizar funciones específicas tales como operaciones de copia de rectángulos o combinación de píxeles. En una forma de realización, los 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 caché y de memoria compartida 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador gráfico 324 al fichero de registro 258 y a la memoria compartida 270. En una forma de realización, la interconexión de memoria caché y de memoria compartida 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 funcionar 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 gráfico 234. La memoria caché 272 se puede utilizar como memoria caché de datos, por ejemplo, para almacenar en memoria caché datos de textura comunicados entre las unidades funcionales y la unidad de textura 236. La memoria compartida 270 también puede utilizarse como un programa gestionado en memoria caché. Los subprocesos que se ejecutan en los núcleos GPGPU 262 pueden almacenar datos de forma programática 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 gráficos adicionales, según formas de realización. Los multiprocesadores gráficos 325, 350 ilustrados son variantes del multiprocesador gráfico 234 de la Figura 2C. Los multiprocesadores 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 gráfico 325 según una forma de realización adicional. El multiprocesador gráfico 325 incluye múltiples instancias adicionales de unidades de recursos de ejecución en relación con el multiprocesador gráfico 234 de la Figura 2D. Por ejemplo, el multiprocesador gráfico 325 puede incluir múltiples instancias de la unidad de instrucción 332A-332B, el fichero de registro 334A-334B y la unidad(es) de textura 344A-344B. El multiprocesador gráfico 325 también incluye múltiples conjuntos de gráficos o unidades de ejecución de cálculo informático (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 común 330, una memoria caché de textura y/o datos 342 y una memoria compartida 346. Los diversos componentes pueden comunicarse a través de un tejido funcional de interconexión 327. En una forma de realización, el tejido funcional de interconexión 327 incluye uno o más conmutadores de barra transversal para permitir la comunicación entre los diversos componentes del multiprocesador gráfico 325.
La Figura 3B muestra un multiprocesador gráfico 350 según una forma de realización adicional. El procesador gráfico 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 unidad(es) de textura 360A-360D para operaciones de textura, mientras comparten una memoria caché de instrucciones 354 y una memoria compartida 362. En una 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 de una memoria caché de datos 358A-358B. Los diversos componentes pueden comunicarse a través de un tejido funcional de interconexión 352 similar al tejido funcional 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, el uno o más procesador(es) de aplicaciones móviles, las una o más unidades de procesamiento central (CPU) de servidor o de escritorio, incluyendo las CPUs de múltiples 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 el uno o más procesador(es) gráficos o unidades de procesamiento de uso especial, sin apartarse 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 del host/procesador para acelerar las operaciones gráficas, las operaciones de aprendizaje automático, las operaciones de análisis de patrones y diversas funciones de GPU de uso general (GPGPU). La GPU se puede acoplar de manera comunicativa al procesador host/núcleos 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 forma comunicativa a los núcleos a través de un bus de procesador interno/interconexión (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 forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza lógica/circuitos dedicados para procesar, de manera eficiente, estos comandos/instrucciones.
Técnicas para la interconexión de la unidad GPU con el procesador host
La Figura 4A ilustra una arquitectura, a modo de ejemplo, en donde una pluralidad de GPU 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 diversos protocolos de interconexión, incluyendo, entre otros, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes de la invención 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 GPU 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 superior. De manera alternativa, la totalidad de la comunicación entre los diversos componentes del sistema que se muestran en la Figura 4A puede lograrse utilizando los mismos protocolos/enlaces (por ejemplo, a través de un tejido funcional de interconexión común). Tal como se mencionó, sin embargo, los principios subyacentes de la invención 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 GPU 410-413 está acoplada, de manera comunicativa, a la memoria GPU 420-423 a través de interconexiones de memoria GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar las mismas 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 GPU 420-423 pueden ser memorias volátiles tales como memorias dinámicas de acceso aleatorio (DRAM) (incluyendo las memorias DRAMs apiladas), memoria DDR SDRAM (GDDR) de gráficos (p. ej., GDDR5, GDDR6) o Memoria de Alto Ancho de Banda (HBM) y/o pueden ser memorias no volátiles tales como 3D XPoint o Nano-Ram. En una 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 GPU 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 direcciones del 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 impresos 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 integrado 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é 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 de la invención (por ejemplo, unidades de obtención de instrucciones, unidades de predicción de bifurcación, decodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las memorias caché 462A-462D pueden comprender memorias caché de nivel 1 (L1) y de nivel 2 (L2). Además, las 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é L2 compartidas y doce memorias caché 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 almacenadas 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é asociadas a la misma 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é sobre el 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 la técnica y no se describirán aquí en detalle para evitar oscurecer los principios subyacentes de la invención.
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 una pareja 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 dependiendo 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 integrados. 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 GPUs individuales integradas en un paquete común, tarjeta de línea o circuito integrado.
En una forma de realización, el circuito de integración del 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 MMU 439 también puede incluir una memoria intermedia de búsqueda de traslación (TLB) (no mostrada) 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 las memorias gráficas 433-434, N, se mantienen coherentes con las memorias caché centrales. 462A-462D, 456 y la memoria del sistema 411. Tal como se mencionó, lo que antecede puede lograrse a través del circuito proxy 425 que participa en el mecanismo de coherencia de la memoria caché en nombre de la memoria caché 438 y las memorias 433-434, N, (p. ej., enviando actualizaciones a la memoria caché 438 relacionada 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 subproceso. 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 los cambios 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 un cambio 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 los dispositivos del sistema.
En una puesta en práctica, las direcciones virtuales/efectivas desde un motor de procesamiento de gráficos 431 se trasladan a direcciones reales/físicas en la memoria del sistema 411 por la MMU 439. Una forma de realización del circuito de integración del acelerador 436 admite múltiples (por ejemplo, 4, 8, 16) módulos de acelerador de gráficos 446 y/u otros dispositivos aceleradores. El módulo acelerador de gráficos 446 puede estar dedicado a una sola aplicación 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 del 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 del acelerador 436 puede proporcionar medios de virtualización para que el procesador principal 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 reales según se constata por el procesador principal 407, cualquier procesador principal puede direccionar estos recursos directamente utilizando un valor de dirección efectivo. Una función del circuito de integración del 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 mencionó, 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 memoria DRAM (incluyendo memoria DRAM apiladas), memoria GDDR (p. ej., GDDR5, GDDR6), o memoria 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 serán utilizados con mayor frecuencia por los motores de procesamiento de gráficos 431-432, N, y preferiblemente 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 preferiblemente no los motores de procesamiento de gráficos 431-432, N) dentro de las memorias caché 462A-462D, 456 de los núcleos y la memoria del sistema 411.
La Figura 4C ilustra otra forma de realización en donde el circuito de integración del 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 del acelerador 436 a través de la interfaz 437 y de la interfaz 435 (que, de nuevo, puede utilizar cualquier forma de bus o de protocolo de interfaz). El circuito de integración del 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 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 del 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 sola aplicación o proceso bajo un único sistema operativo. La aplicación individual puede canalizar otras solicitudes de aplicaciones a los motores de gráficos 431-432, N, proporcionando virtualización dentro de una máquina virtual 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 máquina virtual VM/aplicación. 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 proceso anfitrión 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 aquí se utiliza, 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 único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En el último caso, el WD 484 es un puntero a la cola de solicitudes de trabajo en el espacio de direcciones 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 de la invención incluyen una infraestructura para configurar el estado del proceso y enviar un 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 del acelerador 436 para la partición propietaria y el sistema operativo inicializa el circuito de integración del acelerador 436 para el proceso de propiedad 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 del WD 484 pueden almacenarse en los 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, se traslada 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 el módulo de aceleración de gráficos 446 y puede ser inicializado por el hipervisor o 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 muestran ejemplos de registros que pueden ser inicializados por el hipervisor.
Tabla 1 - Registros inicializados del hipervisor
Figure imgf000015_0001
En la Tabla 2 se muestran 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 WD 484 es específico para un módulo de aceleración de gráficos 446 y/o motor de procesamiento de gráficos 431-432, N, en particular. 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 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 desde todos o un subconjunto de particiones en el sistema utilicen un módulo de aceleración de gráficos 446. Existen dos modelos de programación donde el módulo de aceleración de gráficos 446 es compartido por múltiples procesos y particiones: segmentos temporales compartidos y gráficos dirigidos compartidos.
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 específico, incluyendo los errores de traslación, o el módulo de aceleración de gráficos 446 proporciona la capacidad de prever el procesamiento del trabajo. 3) El módulo de aceleración de gráficos 446 debe garantizar la equidad entre procesos cuando funciona 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 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 contexto (CSRP). El tipo de módulo de aceleración de gráficos 446 describe la función de aceleración dirigida para la llamada del sistema. El tipo de módulo de aceleración de gráficos 446 puede ser un valor específico del sistema. El WD está formateado específicamente para el módulo de aceleración de gráficos 446 y puede tener la forma de un comando de módulo de aceleración de gráficos 446, un puntero de dirección efectiva a una estructura definida por el usuario, un puntero de dirección efectiva a una cola de comandos o cualquier otra estructura de datos para describir el trabajo 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 transmitido al sistema operativo es similar a una aplicación que configura el AMR. Si las puestas en práctica del circuito de integración del 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 transmitir 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 entonces llama al hipervisor 496 con la información que se muestra 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 correspondiente del módulo de aceleración de gráficos 446. El elemento de proceso puede incluir la información que se muestra 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 de la invención emplea una memoria unificada direccionable mediante 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 GPU 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/efectiva 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/efectiva (a veces denominado espacio de direcciones efectiva) se distribuye por lo tanto en cada una de las memorias del procesador 401-402 y de las memorias de GPU 420-423, lo que permite que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual asignada a esa 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 MMU 439A-439E garantiza la coherencia de memoria caché entre las memorias caché de los procesadores host (por ejemplo, 405) y de las unidades GPU 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 host 405 y/o dentro del circuito de integración del acelerador 436.
Una forma de realización permite mapear la memoria 420-423 adjunta a la GPU 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 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 central 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 mapeados en memoria (MMIO) que son todos ineficientes en relación con los accesos a memoria 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 de manera significativa el ancho de banda de escritura efectivo visto por una 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 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 principal está impulsada por una estructura de datos del seguidor 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 robada de una o más memorias 420-423 conectadas a la GPU, con o sin memoria caché de polarización en la GPU 410-413 (p. ej., para almacenar en memoria caché las entradas utilizadas con frecuencia/recientemente de la tabla de polarización). 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 da lugar a las siguientes operaciones. En primer lugar, las solicitudes locales de 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 solicitudes locales de la GPU que encuentran su página en la polarización host 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 solicitudes del procesador 405 que encuentran la página solicitada en la polarización del procesador host completan la solicitud como una lectura de memoria normal. De manera alternativa, las solicitudes dirigidas a una página con preferencia por GPU pueden reenviarse a la GPU 410-413. A continuación, la GPU puede hacer la transición de la página a una polarización del procesador host 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 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 lo pone en cola de espera de un descriptor de comando) a la GPU dirigiéndola para cambiar el estado de polarización y, para algunas transiciones, realice una operación de vaciado de memoria caché en el host. La operación de vaciado de memoria caché es necesaria para una transición desde la polarización del procesador host 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 host 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso a la GPU 410 que puede, o no, otorgar 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 conveniente asegurarse de que las páginas orientadas a la GPU sean aquellas que requieran la GPU, pero no el procesador host 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 gráfico puede poner en práctica la canalización de procesamiento de gráficos 500 ilustrada. El procesador gráfico 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 procesador(es) en paralelo 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 gráfico 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, de los ensambladores primitivos 506, 514, 518, de la unidad de teselado 510, del rasterizador 522 y de la unidad de operaciones de rasterización 526 también pueden ser realizadas por otros motores de procesamiento dentro de un agrupamiento de procesamiento (por ejemplo, el agrupamiento de procesamiento 214 de la Figura 3) y una unidad de partición correspondiente (por ejemplo, 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 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 recopila datos de vértice para superficies y 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 sombreado de vértice, iluminando y transformando datos de vértice según lo especificado por los programas de sombreado 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 representación de coordenadas basada en objetos a un espacio de coordenadas ámbito mundial o un espacio de coordenadas de dispositivos normalizados.
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 de 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, segmentos, etc., compatibles con varias interfaces de planificació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 segmento geométrico. Los puntos de control se transforman desde una representación de entrada del segmento (por ejemplo, las bases del segmento) a una representación 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 segmentos geométricos. Un factor de teselado se aplica a un único borde y cuantifica un nivel de detalle dependiente de la visión asociada con el borde. Una unidad de teselado 510 está configurada para recibir los factores de teselado para los bordes de un segmento y para teselar el segmento 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 funciona sobre coordenadas parametrizadas del segmento subdividido para generar una representación de superficie y de atributos de vértice para cada vértice asociado con los primitivos geométricos.
Una segunda instancia de un ensamblador de primitivos 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 el procesamiento por la unidad de procesamiento de geometría 516. La unidad de procesamiento de geometría 516 es una unidad de ejecución programable que ejecuta programas de sombreado 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 sombreado 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 para 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 que sean procesados por una unidad de recorte, selección y escala de ventana gráfica 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 520 de escalado, selección y recorte de la ventana gráfica 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 sombreado de fragmentos o programas de sombreado 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 sombreado de fragmentos o píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede programarse para realizar operaciones incluida, pero no limitadas, de mapeado de texturas, sombreado, combinación, corrección de texturas y corrección de perspectiva para obtener fragmentos o píxeles sombreados que se envían a una unidad de operaciones de rasterización 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer 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 sombreado de fragmentos o píxeles se pueden configurar para sombrear en muestra, píxel, mosaico u otras granularidades según la frecuencia de muestreo configurada para las unidades de procesamiento.
La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de rasterización que incluyen, entre otras, plantilla, 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 en la 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 el uno o más procesador(es) 102 o procesador(es) en paralelo 112. En algunas formas de realización, la unidad de operaciones de rasterización 526 está configurada para comprimir datos de color o z que se escriben en la memoria y descomprimir datos de color o z que son objeto de lectura desde la memoria.
Tal como se describió con anterioridad, muchos procesadores modernos, por ejemplo, unidades de procesamiento de gráficos (GPU), se adaptan a cargas de trabajo muy variables según diversos factores, tales como el número y la naturaleza de las aplicaciones que se ejecutan en el procesador(es), procesos en segundo plano, características del usuario, y similares.
El tema descrito en este documento aborda estos y otros problemas al proporcionar varias técnicas para la gestión de energía del procesador para buses de comunicación. En una primera técnica a modo de ejemplo, descrita con referencia a las Figuras 6A-6B, la lógica que opera en un controlador permite la gestión de energía del procesador en función de los atributos de un usuario, los hábitos de carga de trabajo de un usuario y/o el perfil de consumo de energía. Se puede establecer un nivel de consumo de energía de un procesador utilizando información en el perfil de usuario.
Haciendo referencia a las Figuras 6A-6B, en la operación 610, la lógica que opera en un controlador recopila información del usuario. En algunos ejemplos, la lógica recopila estadísticas basadas en la máquina asociada con el usuario, tales como los niveles de carga de trabajo consumidos por el usuario, el consumo de energía del procesador consumido por el usuario, o similares. Además, la lógica recopila información personal asociada con el usuario, tales como la edad aproximada del usuario, el nivel de visión y similares. Como alternativa, o, además, la lógica puede recopilar las preferencias del usuario, tales como las aplicaciones que se utiliza habitualmente, los niveles de brillo de la pantalla y similares.
En la operación 615, la información del usuario puede utilizarse para construir un perfil de usuario. Haciendo referencia a la Figura 6B, los uno o más perfiles de usuario 630, 632, 636 pueden generarse y almacenarse en una memoria. En algunos ejemplos, el perfil de usuario puede basarse en uno o más patrones de prueba de diagnóstico con entrada de usuario para seleccionar una preferencia. Cuando un usuario inicia sesión en un sistema de procesamiento de datos, el perfil del usuario puede recuperarse de la memoria y actualizarse durante la sesión del usuario.
De manera opcional, en la operación 620 la lógica categoriza a un usuario basándose al menos en parte en el contenido de un perfil de usuario. Por ejemplo, un usuario que habitualmente no ejecuta aplicaciones con uso intensivo de gráficos, tales como juegos tridimensionales (3D) de escenarios operativos complejos de uso de medios, puede clasificarse como un usuario ligero. Un usuario que ocasionalmente utiliza juegos 3d u otros medios con uso intensivo de gráficos puede clasificarse como un usuario medio. Un usuario que es un creador de juegos o de contenidos o que hace uso regular de juegos en 3D u otros medios con uso intensivo de gráficos puede ser categorizado como usuario intensivo.
En la operación 625, la lógica establece un perfil de energía de un procesador, por ejemplo, un procesador gráfico, basado al menos en parte en el contenido del perfil y la categorización del usuario, en combinación con la retroalimentación de un algoritmo de aprendizaje en máquina. Tal como se ilustra en la Figura 13, el contenido del perfil de usuario puede introducirse en la lógica que se ejecuta en un procesador, por ejemplo, una unidad de procesamiento de gráficos (GPU) 640, que puede ejecutar la lógica para establecer niveles de energía para la GPU(s) 640. De manera alternativa, la lógica puede residir en un microcontrolador acoplado a la GPU(s) 640.
Por ejemplo, la lógica puede designar un perfil de ahorro de energía para usuarios ligeros al limitar el impulso de frecuencia o habilitar agrupamientos de ordenadores o agrupamientos de cálculo informático de ciclos en la vida útil de la GPU(s) para proporcionar un uso de por vida prolongado. Para un usuario medio, la lógica puede habilitar más capacidades y puede responder mejor a los escenarios operativos justo a tiempo (JIT). Para usuarios intensivos, la lógica puede conducir a la GPU(s) directamente a un modo de alto rendimiento y reducir o eliminar los esfuerzos para prolongar la vida útil de la batería.
Tal como se ilustra en la Figura 6B, en algunos ejemplos, las estadísticas del usuario pueden pasarse a un controlador de modo kernel 642.
Con referencia a las Figuras 6C-6D, la lógica que opera en un controlador recopila métricas de rendimiento para varias etapas de una canalización de procesamiento de gráficos y ajusta, al menos, una tensión o una frecuencia de las etapas de la canalización de procesamiento de gráficos utilizando las métricas de rendimiento.
Haciendo referencia a la Figura 6C, en la operación 650, la lógica recopila métricas de rendimiento de canalización. Con referencia a la Figura 6D, dependiendo de las características de la carga de trabajo, algunas partes de una canalización de gráficos pueden estar más activas que otras partes. Por ejemplo, una carga de trabajo ligada al cálculo informático puede mantener ocupada la unidad(es) de ejecución 664 en donde se ejecutan las operaciones matemáticas mientras que los puertos de datos 666 y las unidades de memoria caché 666, 668 pueden estar menos ocupadas. Por el contrario, una carga de trabajo que pone en práctica una gran cantidad de instrucciones de memoria (p. ej., presionar la memoria caché L2668) mantendrá activos el puerto de datos 666 y la memoria caché L2 668, pero la unidad(es) de ejecución 662 estará menos activa puesto que está a la espera de los datos de memoria.
De manera similar, una carga de trabajo en donde las operaciones de memoria están sobrecargadas pero los accesos a la memoria pierden las memorias caché de gráficos y van a la memoria del sistema, dará como resultado un bloque de gráficos que está en su mayoría inactivo y esperando memoria, ya que la memoria del sistema por lo general tiene una latencia prolongada. En este caso, solamente el controlador de memoria del sistema 670 estará ocupado.
En la operación 655, el controlador puede ajustar la tensión y/o la frecuencia de las etapas de la canalización utilizando las métricas de rendimiento recopiladas en la operación 650. Por ejemplo, la lógica puede aumentar la tensión y/o la frecuencia de operación en las etapas de la canalización que están ocupadas, o reducir una tensión y/o frecuencia de operación en etapas de canalización que no están ocupadas.
Los videojuegos se basan en una versión de un controlador de gráficos, ya sea que operen en un entorno independiente o en un entorno en red. Una versión dada de un controlador de gráficos puede poner en práctica algunas heurísticas basadas, por ejemplo, en llamadas API y/o en estados de canalización. En base a lo que antecede, existe una configuración de bucle abierto para compilar sombreadores y programar registros específicos del hardware para ofrecer un rendimiento optimizado. Algunos proveedores de hardware independientes (IHV) ponen en práctica ajustes locales de circuito cerrado basados en perfiles de hardware mediante heurística. Estos algoritmos no tienen en cuenta diversos factores relacionados con los contadores de rendimiento y la correlación de otros registros de hardware programables y opciones de compilador. Por lo tanto, el espacio de estado tampoco se explora en la máquina local, no siendo posible disponer de una capacidad de cálculo informático suficiente en una máquina de juego típica para explorar este espacio de estado con el fin de proporcionar una experiencia óptima. En un ejemplo descrito con referencia a la Figura 7A, los usuarios finales 710 pueden ofrecer de manera voluntaria información relacionada con una aplicación, por ejemplo, un juego, que se ejecuta en un dispositivo de procesamiento. En algunos ejemplos, el conjunto de información puede incluir información relacionada con la unidad de procesamiento de gráficos ((GPU), por ejemplo, las etapas de silicio, la memoria, la capacidad de refrigeración y otros parámetros relacionados con el OEM), la versión del controlador, el compilador y el hash de configuración del registro de hardware (que describió un punto: las opciones de compilación del sombreador de espacio de estado y los valores de registro de hardware), la temperatura de la GPU, la frecuencia operativa, la tensión, la CPU principal, la velocidad y el tamaño de la memoria y la carga en la máquina. Aparte de esta información básica, los contadores de rendimiento específicos del hardware están expuestos para la recogida estadística sobre la utilización y los cuellos de botella de diversos bloques.
Algún hardware tiene contadores de rendimiento que pueden ser interrogados de manera periódica por un servidor 715. Los conjuntos de formación pueden crearse en función de los puntos de datos y del perfil por GPU y configuración del sistema por juego. Los conjuntos de formación se pueden utilizar para capacitar una red neuronal artificial (ANN) y/o una red neuronal celular (CNN) para obtener una velocidad de tramas máxima o una frecuencia de tramas sostenida a una determinada temperatura o energía. En algunos ejemplos, la optimización explora el espacio de estado y selecciona un punto de estado que defina la programación de hardware de registros y compiladores de sombreadores para controlar el rendimiento.
Cada combinación de planificación de estado y opciones del compilador define un hash. Se pueden utilizar algoritmos de descenso de gradiente o de clasificación para seleccionar el hash. Por lo tanto, el ajuste del proveedor de hardware independiente (IHV) por juego y por sistema puede convertirse en una experiencia personalizada. La descripción y los dibujos anteriores deben considerarse en un sentido ilustrativo más que 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 otro ejemplo, se puede poner en práctica una red neuronal para configurar una canalización de procesamiento. Las Figuras 7B-7C son diagramas de flujo que ilustran operaciones en un método para la gestión de energía del procesador, según formas de realización. En referencia a la Figura 7B, en un ejemplo, una aplicación puede ejecutarse de manera repetida durante una sesión de formación para la canalización de procesamiento bajo parámetros operativos variables y configuraciones de hardware variables (operación 730). Por ejemplo, con referencia a la Figura 6D, durante la sesión de formación, la aplicación puede ejecutarse a tasas de tramas variables y configuraciones variables para la memoria caché L1666 y/o para la memoria caché L2668, o una memoria caché de nivel superior, por ejemplo, la memoria caché L3. Además, durante la sesión de formación, la aplicación puede ejecutarse a tensiones y/o frecuencias variables para las unidades de ejecución 664.
En la operación 735, los datos de rendimiento de la aplicación recopilados en la operación 730 se utilizan para construir un perfil de rendimiento para la aplicación en la canalización de procesamiento. En la operación 740, los datos del perfil de rendimiento se utilizan para capacitar una red neuronal.
En el tiempo de ejecución, la red neuronal configurada en la operación 740 puede utilizarse para configurar la canalización de procesamiento para ejecutar la aplicación. Haciendo referencia a la Figura 7C, en la operación 760 se puede iniciar una nueva instancia de la aplicación en tiempo de ejecución. En la operación 765, la red neuronal capacitada en la operación 730 puede utilizarse para configurar la canalización de procesamiento para ejecutar la aplicación.
Componentes de energía
La Figura 8 ilustra un diagrama de bloques de un regulador de conmutación según una forma de realización. Uno o más reguladores de conmutación que se muestran en la Figura 8 pueden incorporarse en varios 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 de corriente con un único inductor puede analizarse con referencia a la Figura 8, las una o más de las múltiples fases del regulador de conmutación de estacionamiento de corriente 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 de corriente (con o sin un inductor dividido) con uno o más dispositivos convencionales de conversión de energía eléctrica para proporcionar energía a la carga (por ejemplo, el circuito lógico 814).
Más en particular, la Figura 8 ilustra un sistema 800 que incluye un regulador de conmutación (algunas veces denominado regulador de conmutación de estacionamiento de corriente). El regulador de conmutación de estacionamiento de corriente puede ser un regulador de conmutación multifase en varias 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 muestra, 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 de corriente en cada fase de flujo ascendente). Se puede utilizar más de una lógica de control de flujo ascendente en varias 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 descendente 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 ser configurada por la unidad de control multifase 802 para estar en estando ON, OFF o conmutada para regular el nivel de tensión en la carga (por ejemplo, el circuito lógico 814). A su vez, la lógica de control de flujo descendente 812 puede ser 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).
En una forma de realización, 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 al circuito lógico 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 (MOSFET) planos. Además, los uno o más de los componentes aquí descritos (p. ej., con referencia a las Figuras 8m, 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 una capa(s) de sustrato (p. ej., entre paquetes de semiconductores), en una matriz de circuito integrado, o fuera de un paquete de semiconductores (p. ej., en una placa de circuito impreso (PCB)) en varias 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, a su vez, pueden incluir uno o más: Unidades lógicas aritméticas (ALU) 906, unidades de función especial (SFU) 908, unidades de memoria (MEM) 910, y/o unidades de textura (TEX) 912.
En algunas formas de realización, la 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 planificador 916 (p. ej., para planificar subprocesos o grupos de subprocesos, o ambos a la vez) 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 gráfico) tal 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 mapeado 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 activos a la misma dirección de registro siempre que los márgenes activos 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 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 paralelo 1002 (previamente presentado) que a su vez incluye una o más Unidades de Procesamiento Paralelo (PPU) PPU-0 a PPU-P, inclusive. Cada PPU está acoplada a una memoria de procesamiento 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 PPU. 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 muestran varios conmutadores o conexiones opcionales 1007 que pueden utilizarse en el sistema 1000 para gestionar la energía. Si bien se muestran 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 energía 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ñal digital, firmware, etc.) puede garantizar que los resultados de la operación se confirmen (p. ej., en la memoria) o finalizado para mantener la corrección.
Además, en algunas formas de realización, una o más de las PPUs en el subsistema de procesamiento en paralelo 1002 son procesadores gráficos con canalizaciones de representación que pueden configurarse para realizar varias tareas tales como las que aquí se describen con respecto a otras figuras. Los datos/información gráfica pueden comunicarse a través del puente de memoria 1008 con otros componentes de un sistema informático (incluyendo los componentes del sistema 1000). Los datos pueden comunicarse a través de un bus compartido y/o la una o más interconexión(es) 1010 (incluyendo, por ejemplo, los uno o más enlaces directos o punto a punto). PPU-0 1004 puede acceder a su memoria de procesamiento paralelo local 1014 (que puede utilizarse como memoria de gráficos que incluye, por ejemplo, una memoria intermedia de tramas) para almacenar y actualizar datos de píxeles, entregando datos de píxeles a un dispositivo de visualización (tal como los aquí descritos), etc. En algunas formas de realización, el subsistema de procesamiento en paralelo 1002 puede incluir una o más PPUs que funcionan como procesadores gráficos y una o más PPUs que funcionan para realizar cálculos de uso general. Las PPUs pueden ser idénticas o diferentes, y cada PPU puede tener acceso a su propio dispositivo(s) de memoria de procesamiento en paralelo dedicado, ningún dispositivo(s) de memoria de procesamiento en paralelo no dedicado, o un dispositivo de memoria compartida o de memoria caché.
En una forma de realización, las operaciones realizadas por las PPUs pueden ser controladas por otro procesador (o una de las PPUs) por lo general denominado procesador maestro o núcleo del procesador. En una forma de realización, el procesador/núcleo maestro puede escribir un flujo de comandos para cada PPU en una memoria intermedia de inserción en varias ubicaciones, tales como una memoria del sistema principal, una memoria caché u otra memoria como las que aquí se describen con referencia a otras figuras. A continuación, cada 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 muestra en la Figura 10, PPU-0 incluye una lógica de extremo frontal 1020 que puede incluir una unidad de entrada/salida (E/S o IO) (p. ej., para comunicarse con otros componentes del sistema 1000 a través del puente de memoria 1008) y/o una interfaz de host (por ejemplo, que recibe comandos relacionados con tareas de procesamiento). El extremo frontal 1020 puede recibir comandos leídos por la interfaz del servidor (por ejemplo, desde la memoria intermedia de inserción)). El extremo frontal 1020, a su vez, proporciona los comandos a una unidad de planificación de trabajo 1022 que planifica y asigna una operación(es)/tarea(s) asociada con los comandos a una matriz de agrupamientos de procesamiento o subsistema aritmético 1024 para su ejecución.
Tal como se muestra en la Figura 10, la matriz de agrupamientos de procesamiento 1024 puede incluir una o más unidades de agrupamientos de procesamiento general (GPC) (por ejemplo, GPC-0 1026, GPC-1 1028, hasta GPC-M 1030, inclusive). 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 varias 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 GPC (p. ej., que incluya una o más unidades de GPC) para realizar operaciones de teselado y para obtener topologías de primitivos para segmentos, y un segundo conjunto de GPC (p. ej., que incluya una o más más unidades GPC) pueden asignarse para realizar un sombreado de teselado para evaluar los parámetros de segmento para las topologías de primitivos 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 de cálculo informático.
Además, las tareas de procesamiento que son asignadas por la unidad de planificación de trabajo 1022 pueden incluir índices de datos a procesar, tales como datos de superficie/segmento, datos de primitivos, datos de vértice, datos de píxel y/o parámetros y comandos de estado que definen cómo han de procesarse los datos (por ejemplo, qué programa se va a ejecutar). La unidad de planificació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 las unidades GPCs estén configuradas en un estado válido antes de que se realice 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 host 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 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 servidor (tal como un servidor blade). En otras formas de realización, una PPU puede integrarse en un único circuito integrado 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 la totalidad de los componentes de la PPU pueden integrarse en un único circuito integrado con uno o más otros núcleos de procesador, dispositivos de memoria, memorias caché, etc.
Además, uno de los principales problemas con los procesadores modernos actuales es que han alcanzado un límite de frecuencia de reloj de alrededor de 4 GHz. En este punto, simplemente generan demasiado calor para la tecnología actual y requieren soluciones de enfriamiento especiales y costosas. Lo que antecede se debe a que a medida que aumentamos la frecuencia del reloj, aumenta el consumo de energía. De hecho, el consumo de energía de una CPU, si se fija en la tensión, es aproximadamente el cubo de su frecuencia de reloj. Para empeorar lo que antecede, a medida que aumenta el calor generado por la CPU, para la misma frecuencia de reloj, el consumo de energía también aumenta debido a las propiedades del silicio. Esta conversión de energía en calor es una completa pérdida de energía. Este uso cada vez más ineficiente de la energía eventualmente significa que no puede alimentar o enfriar el procesador lo suficiente y alcanza los límites térmicos del dispositivo o su carcasa, el así denominado muro energético.
Enfrentados a no poder aumentar la frecuencia del reloj, haciendo procesadores cada vez más rápidos, los fabricantes de procesadores tuvieron que idear otro plan de juego. Se han visto obligados a seguir el camino de agregar más núcleos a los procesadores, en lugar de intentar continuamente aumentar las velocidades de reloj de la CPU y/o extraer más instrucciones por reloj a través del paralelismo de nivel de instrucción.
Además, el uso de energía es una gran consideración cuando se diseñan máquinas que funcionan constantemente. A menudo, los costes operativos de hacer funcionar un superordenador durante unos pocos años pueden equivaler al coste de instalarlo en primer lugar. Ciertamente, el coste de hacer funcionar una máquina de este tipo durante su vida útil superará fácilmente los costes de instalación originales. El uso de energía proviene de los componentes mismos, pero también del enfriamiento necesario para permitir que funcionen dichos ordenadores. Incluso una estación de trabajo de gama alta con cuatro GPU requiere cierta planificación sobre cómo mantenerla refrigerada. A menos que el usuario viva en un clima frío y pueda desterrar el ordenador a un lugar frío, hará un buen trabajo al calentar la oficina para su uso. Es preciso colocar varias de estas máquinas en una sola sala y, muy rápidamente, la temperatura del aire en esa sala comenzará a elevarse a niveles bastante inaceptables.
[Por lo tanto, se gasta una cantidad significativa de energía en la instalación de sistemas de aire acondicionado para garantizar que los ordenadores permanezcan fríos y puedan funcionar sin producir errores. Lo que antecede es especialmente así en donde las temperaturas de verano pueden alcanzar los 85°F/30°C o superior. El aire acondicionado es caro de mantener. Se debe pensar mucho en la mejor manera de enfriar un sistema de este tipo y si la energía térmica se puede reutilizar de alguna manera. Los sistemas enfriados por líquido son muy eficientes de esta manera, ya que el líquido puede circular a través de un intercambiador de calor y hacia un sistema de calefacción convencional sin ninguna posibilidad de que los dos líquidos se mezclen. Con los costes cada vez mayores de los recursos naturales y las crecientes presiones sobre las empresas para que se las considere ecológicas, simplemente sacar el calor por la ventana ya no es económica o socialmente aceptable.
Los sistemas refrigerados por líquido proporcionan una opción interesante en términos de reciclaje de la energía térmica residual. Si bien un sistema enfriado por aire solamente se puede utilizar para calentar la zona inmediata en donde se encuentra, el calor de los refrigerantes líquidos se puede bombear a otro lugar. Mediante el uso de un intercambiador de calor, el refrigerante se puede enfriar con agua convencional. A continuación, lo que antecede puede bombearse a un sistema de calefacción o incluso utilizarse para calentar una piscina al aire libre u otra gran masa de agua. Cuando se instalan varios de estos sistemas, tal como en una empresa o centro informático universitario, puede tener mucho sentido utilizar esta energía térmica residual para reducir la factura de calefacción en otras partes de la organización.
Muchas instalaciones de superordenadores se sitúan junto a un río importante precisamente porque necesitan un suministro de agua fría disponible. Otros utilizan grandes torres de refrigeración para disipar la energía térmica residual. Ninguna solución es particularmente ecológica. Habiendo pagado ya por la energía, tiene poco sentido simplemente tirarla cuando podría utilizarse tan fácilmente para calefacción. Al considerar el uso de energía, también debemos recordar que el diseño del programa en realidad juega un papel muy importante en el consumo de energía. La operación más costosa, desde el punto de visión de la energía, es desplazar datos dentro y fuera del circuito integrado. Por lo tanto, simplemente hacer un uso eficiente de los registros y de la memoria compartida dentro del dispositivo reduce en gran medida el uso de la energía. Si también se considera que el tiempo total de ejecución de los programas bien escritos es mucho menor que el de los mal escritos, se puede constatar que la escritura de los programas antiguos para hacer uso de nuevas funciones, tales como una mayor memoria compartida, puede incluso reducir los costes operativos en un centro de datos de grandes dimensiones.
Haciendo referencia a la Figura 10, la interfaz de memoria 1014 incluye N unidades de partición (p. ej., Unidad-0 1034, Unidad-1 1036, Unidad-N 10-38, inclusive) que están directamente acopladas a una parte correspondiente de la memoria de procesamiento paralelo 1006 (como Mem-0 1040, 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 muestra). La memoria presentada con anterioridad puede ponerse en práctica con una memoria volátil como la memoria dinámica de acceso aleatorio (DRAM) u otros tipos de memoria volátil 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 representación, memorias intermedias de tramas o mapas de texturas) pueden almacenarse en dispositivos de memoria presentadas 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, cualesquiera de los GPCs pueden procesar datos para escribirlos 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 o a otra GPC para su posterior procesamiento. Por lo tanto, las GPCs 1026 a 1030 pueden comunicarse con la interfaz de memoria 1014 a través de la unidad de barra transversal 1032 para realizar la lectura o escritura en varios otros dispositivos de memoria (o externos). Tal como se muestra, la unidad de barra transversal 1032 puede comunicarse directamente con el extremo frontal 1020, además, de tener un acoplamiento (directo o indirecto) a la memoria local 1006, para permitir que los núcleos de procesamiento dentro de las diferentes 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 las GPCs y las unidades de partición.
Resumen del sistema
La Figura 11 es un diagrama de bloques de un sistema de procesamiento 1100, según una forma de realización. En varias formas de realización, el sistema 1100 incluye uno o más procesadores 1102 y uno o más procesadores gráficos 1108, y puede ser un sistema de escritorio de un único procesador, un sistema de estación de trabajo multiprocesador o un sistema de servidor que tiene una gran cantidad de procesadores 1102 o núcleos de procesador 1107. En una forma de realización, el sistema 1100 es una plataforma de procesamiento incorporada dentro de un sistema en un circuito integrado (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 gráficos 1108.
En algunas formas de realización, el uno o más procesador(es) 1102 incluyen, cada uno, 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 algunas formas de realización, el conjunto de instrucciones 1109 puede facilitar el cálculo informático del conjunto de instrucciones complejas (CISC), el cálculo informático del conjunto de instrucciones reducido (RISC) o el cálculo informático a través de una palabra de instrucción muy larga (VLIW). Múltiples núcleos de procesador 1107 pueden procesar, cada uno de ellos, 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 algunas 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 "hub" o 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 de acceso aleatorio dinámico (DRAM), un dispositivo de memoria de acceso aleatorio estático (SRAM), un dispositivo de memoria instantánea, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tenga un rendimiento adecuado para servir como memoria de 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 uno o más procesadores 1102 ejecutan una aplicación o proceso. El concentrador de controlador de memoria 1116 también se acopla con un procesador gráfico externo opcional 1112, que puede comunicarse con uno o más procesadores gráficos 1108 en los procesadores 1102 para realizar operaciones de gráficos y 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, entre otros, 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, dispositivos de Sistema Personal 2 (PS/2)) al sistema. Uno o más controladores de bus serie universal (USB) 1142 conectan dispositivos de entrada, tales como 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 pueden utilizarse también 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 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 gráfico externo discreto, tal como el procesador gráfico 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 gráfico integrado 1208. Los elementos de la Figura 12 que tienen los mismos números (o nombres) de referencia tales como los elementos de cualquier otra figura en este documento pueden operar o funcionar de cualquier manera similar a la descrita en lugar del mismo, pero no limitarse a ellos. El procesador 1200 puede incluir núcleos adicionales hasta un núcleo adicional 1202N representado por los recuadros con 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 en memoria de caché compartida 1206.
Las unidades de memoria de caché internas 1204A-1204N y las unidades de memoria de caché compartidas 1206 representan una jerarquía de memoria caché dentro del procesador 1200. La jerarquía de la 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, tales como de Nivel 2 (L2), de Nivel 3 (L3), de 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, tales 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 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 mostrados).
En algunas formas de realización, los 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 el procesador gráfico 1208.
En otras formas de realización, el procesador 1200 incluye, además, un procesador gráfico 1208 para ejecutar operaciones de procesamiento de gráficos. En algunas formas de realización, el procesador gráfico 1208 se acopla con el conjunto de unidades de memoria caché compartidas 1206 y el núcleo del agente del sistema 1210, incluyendo los 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 gráfico 1208 para impulsar la salida del procesador gráfico 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 gráfico a través de al menos una interconexión, o puede estar integrado dentro del procesador gráfico 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 esta materia. En algunas formas de realización, el procesador gráfico 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 1213, a modo de ejemplo, 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 gráfico 1208 utilizan módulos de memoria incorporados 1218 como una memoria caché de último nivel compartida.
En algunas 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 integrado SoC que tenga los componentes ilustrados, además, de otros componentes.
La Figura 13 es un diagrama de bloques de un procesador gráfico 1300, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador gráfico integrado con una pluralidad de núcleos de procesamiento. En algunas formas de realización, el procesador gráfico se comunica a través de una interfaz de E/S mapeada en memoria con registros en el procesador gráfico y con comandos colocados en la memoria del procesador. En algunas formas de realización, el procesador gráfico 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é internas, una o más memorias caché externas compartidas y/o para la memoria del sistema.
En algunas formas de realización, el procesador gráfico 1300 también incluye un controlador de visualización 1302 para conducir datos de salida de visualización hacia un dispositivo de visualización 1320. El controlador de visualización 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 gráfico 1300 incluye un motor de códec de vídeo 1306 para codificar, decodificar o transcodificar medios hacía, desde o entre uno o más formatos de codificación de medios, incluyendo, entre otros, formatos de grupos de expertos en imágenes en movimiento (MPEG) tal 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 Televisión e Imágenes en Movimiento (SMPTE) 421M/VC-1 y formatos del Grupo de Expertos Fotográficos Conjuntos (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 rasterización 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 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 algunas formas de realización, GPE 310 incluye una canalización 3D 1312 para realizar operaciones 3D, tales como renderizar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas de primitivos 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 1312 incluye elementos programables y de función fija que realizan varias tareas dentro del elemento y/o generan subprocesos de ejecución en un subsistema 3D/Media 1315. Mientras que la canalización 3D 1312 puede utilizarse 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 específicamente para realizar operaciones de medios, tales como el post-procesamiento 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, tales como aceleración de decodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar de, o en lugar de o dependiendo del motor 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 el subsistema de 3D/Media 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/Media 1315.
En algunas formas de realización, el subsistema 3D/Media 1315 incluye lógica para ejecutar subprocesos generados por la canalización 3D 1312 y la canalización multimedia 1316. En una forma de realización, las canalizaciones envían solicitudes de ejecución de subprocesos al subsistema 3D/Media 1315, que incluye lógica de envío de subprocesos para arbitrar y enviar las diversas solicitudes 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 3D. En algunas formas de realización, el subsistema 3D/Media 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, incluyendo 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 gráfico 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 muestra en la Figura 13. Los elementos de la Figura 14 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura pueden operar o funcionar de manera similar a la descrita en otro lugar de este documento, pero no se limitan a dicha circunstancia. Por ejemplo, se ilustra 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 incluidas dentro del 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 GPE 1410.
En algunas formas de realización, GPE 1410 se acopla o incluye un transmisor de comandos 1403, que proporciona un flujo de comandos a la canalización 3D 1312 y/o canalizaciones de medios 1316. En algunas formas de realización, el transmisor de comandos 1403 está acoplado con memoria, que puede ser la memoria del sistema, o una o más de entre una memoria caché interna y la memoria caché compartida. En algunas formas de realización, el transmisor de comandos 1403 recibe comandos de la memoria y envía los comandos a la canalización 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 3D 1312 y para la canalización de medios 1316. En una forma de realización, la memoria intermedia de anillo puede incluir, de manera adicional, memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización 3D 1312 también pueden incluir referencias a datos almacenados en la memoria, tales como, entre otros, datos de vértice y de geometría para la canalización 3D 1312 y/o datos de imagen y objetos de memoria para la canalización de medios 1316. La canalización 3D 1312 y la canalización de medios 1316 procesa los comandos y los datos realizando operaciones a través de la 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 varias formas de realización, la canalización 3D 1312 puede ejecutar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cálculo informático u otros programas de sombreado, 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úcleos de gráficos 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 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 núcleo(s) del procesador 107 de la Figura 1 o del núcleo 1202A-1202N 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 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 algunas 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 algunas 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 de la energía objetivo y del nivel de rendimiento 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 pueden 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 varias formas de realización, la lógica de función compartida 1420 incluye, sin limitación, el muestreador 1421, matemáticas 1422 y lógica de comunicación entre subprocesos (TIC) 1423. Además, algunas formas de realización ponen en práctica en una o más memoria(s) caché 1425 dentro de la lógica de función compartida 1420. Se pone en práctica una función compartida en donde la demanda de una función especializada dada es insuficiente para incluirla dentro de la matriz de núcleo de gráficos 1414. En lugar de eso, una sola instanciación de esa 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 gráfico 1500. Los elementos de la Figura 15, que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en 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 dicha circunstancia.
En algunas formas de realización, el procesador gráfico 1500 incluye una interconexión de anillo 1502, un extremo frontal de canalización 1504, un motor de medios 1537 y núcleos de gráficos 1580A-1580N. En otras formas de realización, la interconexión en anillo 1502 acopla el procesador gráfico a otras unidades de procesamiento, incluyendo otros procesadores gráficos o uno o más núcleos de procesador de uso general. En algunas formas de realización, el procesador gráfico es uno de los muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
En algunas formas de realización, el procesador gráfico 1500 recibe lotes de comandos a través de la interconexión en anillo 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 gráfico 1500 incluye una lógica de ejecución escalable para realizar procesamiento de geometría 3D y procesamiento de medios a través del núcleo(s) gráfico 1580A-1580N. Para los comandos de procesamiento de geometría 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 otras 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 vídeo y un motor 1533 de codificación/descodificación (MFX) multiformato para proporcionar codificación y decodificación de datos multimedia 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 subproceso proporcionados por al menos un núcleo de gráficos 1580A.
En algunas formas de realización, el procesador gráfico 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 gráficos 1580A a 1580N inclusive. En algunas formas de realización, el procesador gráfico 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 gráfico es un procesador de baja potencia con un único subnúcleo (por ejemplo, 1550A). En algunas formas de realización, el procesador gráfico 1500 incluye múltiples núcleos 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, 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 gráfico.
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 empleados en algunas formas de realización de un GPE. Los elementos de la Figura 16 que tienen los mismos números (o nombres) de referencia 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 dicha circunstancia.
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, una 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 escalable puede escalar, de manera dinámica, habilitando o deshabilitando una o más unidades de ejecución (p. ej., cualquiera de las unidades de ejecución 1608A, 1608B, 1608C, 1608D, 1608N-1 y 1608N) en función de los requisitos de cálculo informático de una carga de trabajo. En una forma de realización, los componentes incluidos están interconectados a través de un tejido funcional de interconexión que enlaza con cada uno de los componentes. En otras formas de realización, la lógica de ejecución de subprocesos 1600 incluye una o más conexiones a la memoria, tales 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 informática 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 varias 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 sombreado. Un procesador de sombreador 1602 puede procesar los diversos programas de sombreado y enviar subprocesos de ejecución asociados con los programas de sombreado 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 solicitudes de inicio de subprocesos desde las canalizaciones de gráficos y de medios e instanciar los subprocesos solicitados en una o más unidades de ejecución en las unidades de ejecución 1608A-1608N. Por ejemplo, la canalización de geometría (p. ej., 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 solicitudes de generación de subprocesos en tiempo de ejecución a partir de los programas de sombreado 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 3D estándar, de modo que los programas de sombreado 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 informático y medios). Cada una de las unidades de ejecución 1608A-1608N es capaz de la ejecución de múltiples datos de instrucción única de múltiple emisión (SIMD) 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 varias. 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 latencia hasta que se devuelvan los datos solicitados. Mientras el subproceso en espera está en latencia, los recursos de hardware pueden dedicarse a procesar otros subprocesos. Por ejemplo, durante un retraso 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 Lógicas Aritméticas (ALUs) físicas o Unidades de Coma flotante (FPU) para un procesador gráfico 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 anchura, los 256 bits del vector se almacenan en un registro y la unidad de ejecución funciona 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 palabras (W)), o treinta y dos elementos de datos separados de 8 bits separados (elementos de datos de tamaño de byte (B)). Sin embargo, son posibles diferentes anchos de vector y tamaños de registro.
Una o más memoria caché 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 memoria caché de datos (por ejemplo, 1612) para almacenar en memoria caché los datos del subproceso durante la ejecución del mismo. En algunas formas de realización, se incluye un muestreador 1610 para proporcionar muestreo de textura para operaciones 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 solicitudes 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 (p. ej., lógica de sombreador de píxeles, lógica de sombreador de fragmentos, etc.) dentro del procesador de sombreador 1602 para calcular aún más la información de salida y hacer que se escriban los resultados en las superficies de salida (p. ej., 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 se van a interpolar 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 planificación de aplicaciones (API). Para ejecutar el programa de sombreador, el procesador de sombreador 1602 envía subprocesos a una unidad de ejecución (p. ej., 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 textura en el muestreador 1610 para acceder a los datos de textura en los mapas de textura almacenados en memoria. Las operaciones aritméticas sobre los datos de textura 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 algunas 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 gráfico. 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 1700 del procesador gráfico según algunas formas de realización. En una o más formas de realización, las unidades de ejecución del procesador gráfico admiten un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Las tramas con líneas continuas ilustran los componentes que por lo general se incluyen 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 gráfico 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 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 un 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 compacto de 64 bits 1730.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 1720, src1 1722 y un destino 1718. En algunas 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 de instrucción 1712 determina el número de operandos de origen. El último operando origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado por hardware) transmitido 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 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 destino. En una forma de realización, la parte de modo de dirección del campo de modo de acceso/dirección 1726 determina si la instrucción es para utilizar 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 de 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 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 muestra es simplemente un ejemplo. En algunas formas de realización, un grupo de código de operación 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 0001xxxxb. 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 paralelas 1748 incluye instrucciones aritméticas por componentes (por ejemplo, sumar, multiplicar (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo matemático 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 aritmética, tales como cálculos de productos escalares 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 gráfico 1800. Los elementos de la Figura 18 que tienen los mismos números (o nombres) de referencia 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 dicha circunstancia.
En algunas formas de realización, el procesador gráfico 1800 incluye una canalización de gráficos 1820, una canalización de medios 1830, un motor de visualización 1840, una lógica de ejecución de subprocesos 1850 y una canalización de salida de representación 1870. En algunas formas de realización, el procesador gráfico 1800 es un procesador gráfico 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 gráfico se controla mediante escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador gráfico 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 gráfico 1800 a otros componentes de procesamiento, tales como otros procesadores 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 de la canalización de medios 1830.
En algunas formas de realización, el transmisor de comandos 1803 dirige la operación de un buscador de vértices 1805 que realiza la lectura de 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 buscador 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 algunas 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 gráficas 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 sola memoria caché 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 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., sombreador de casco 1811, teselador 1813 y sombreador de dominio 1817) se pueden omitir.
En algunas 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 de objetos geométricos, en lugar de vértices o de segmentos de vértices 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 de 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 representación 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 eludir al rasterizador y al componente de prueba de profundidad 1873 y acceder a los datos de vértice no rasterizados a través de una unidad de flujo de salida 1823.
El procesador gráfico 1800 tiene un bus de interconexión, un tejido funcional de interconexión o algún otro mecanismo de interconexión que permite la etapa de datos y mensajes entre los componentes principales del procesador. En algunas formas de realización, las unidades de ejecución 1852A-1852B y la memoria(s) caché asociada 1851, el muestreador de textura y medios 1854, y la memoria caché de textura/muestreador 1858 se interconectan a través de un puerto de datos 1856 para acceder a la memoria y comunicarse con los componentes de canalización de salida de presentación 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 rutas de acceso a la memoria separada.
En algunas formas de realización, la canalización de salida de representación 1870 contiene un rasterizador y un componente de prueba de profundidad 1873 que convierte objetos basados en vértices en una representación asociada basada 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é de procesamiento 1878 asociada 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 2D (por ejemplo, transferencias de imágenes de bloques de bits con combinación) son realizadas por el motor 2D 1841, o son 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 gráfico 1830 incluye un motor de medios 1837 y un extremo frontal de vídeo 1834. En algunas formas de realización, el extremo frontal 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 comandos 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 algunas formas de realización, el procesador gráfico 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 gráfico a través de la interconexión en anillo 1802, o algún otro bus o tejido funcional de interconexión. En algunas formas de realización, el motor de visualización 1840 incluye un motor 2D 1841 y un controlador de visualización 1843. En otras 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 3D. En algunas formas de realización, el controlador de pantalla 1843 se acopla con un dispositivo de pantalla (no mostrado), que puede ser un dispositivo de pantalla integrado en el sistema, tal como en un ordenador portátil, o en un dispositivo de pantalla 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 planificación de gráficos y medios y no son específicas de ninguna interfaz de planificación de aplicaciones (API). En algunas formas de realización, el software del controlador para el procesador gráfico 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 gráfico. En algunas formas de realización, se proporciona soporte para la Biblioteca de Gráficos Abierta (OpenGL), Lenguaje Informático Abierto (OpenCL) y/o Gráficos Vulkan y API de Cálculo, todos ellos a partir 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 gráfico.
Programación de canalización de gráficos
La Figura 19A es un diagrama de bloques que ilustra un formato de comando de procesador gráfico 1900 según algunas formas de realización. La Figura 19B es un diagrama de bloques que ilustra una secuencia de comandos del procesador gráfico 1910 según una forma de realización. Las cajas 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 gráfico a modo 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 cliente del dispositivo gráfico que procesa los datos de comando. En algunas formas de realización, un analizador de comandos del procesador gráfico 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 gráfico incluyen una unidad de interfaz de memoria, una unidad de representación, 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 1904 y, si está presente, el subcódigo de operación 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, la magnitud de al menos algunos de los comandos basándose en el código de operación 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 gráfico a modo 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 gráfico utiliza una versión de la secuencia de comando que se muestra para configurar, ejecutar y finalizar un conjunto de operaciones gráficas. 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 gráfico procesará la secuencia de comandos al menos parcialmente de forma recurrente.
En algunas formas de realización, la secuencia de comandos del procesador gráfico 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 la 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 gráfico detendrá el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las memorias caché 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 1912 de vaciado de canalización se puede utilizar para la sincronización de canalización o antes de colocar el procesador gráfico en un estado de bajo consumo.
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 gráfico cambie 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 otras formas de realización, se requiere un comando de vaciado de canalización 1912 inmediatamente antes de un cambio de canalización a través del comando de selección de canalización 1913.
En algunas 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 algunas formas de realización, los comandos de estado de 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 escriben datos intermedios durante el procesamiento. En algunas formas de realización, el procesador gráfico 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 la 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, ciertos elementos de canalización si esos elementos no se utilizarán.
En algunas formas de realización, el comando primitivo 3D 1932 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 gráfico a través del comando primitivo 3D 1932 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 primitivo 3D 1932 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 3D 1922 envía subprocesos de ejecución de sombreadores a las unidades de ejecución del procesador gráfico.
En algunas 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 desencadena la ejecución de un comando. En algunas 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 activa 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 son objeto de rasterización 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 esas operaciones.
En algunas formas de realización, la secuencia de comandos del procesador gráfico 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 programar para la canalización de medios 1924 depende de las operaciones de medios o de cálculo a realizar. Las operaciones específicas de decodificación de medios pueden descargarse a la canalización de medios durante la decodificación de medios. En algunas 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 unidad de procesador gráfico de uso general (GPGPU), en donde el procesador gráfico se utiliza para realizar operaciones de vector SIMD utilizando programas de sombreado informático que no están relacionados explícitamente con la representación de primitivos de gráficos.
En algunas 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 configura el estado de la canalización de medios 1940 se envían o se colocan en una cola de 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 de 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 algunas 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 algunas 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 que 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 (p. ej., escritura de registro). La salida de la canalización de medios 1924 puede a continuación 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 gráfico 2032 y uno o más núcleo(s) 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 algunas formas de realización, la aplicación de gráficos 3D 2010 contiene uno o más programas de sombreado 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 de 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 algunas formas de realización, el sistema operativo 2020 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo similar a UNIX patentado o un sistema operativo similar a UNIX de código abierto que 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 de sombreador 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 de la 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 gráfico 2032 para enviar comandos e instrucciones.
Puestas en práctica de 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 varias 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 IP", son unidades de lógica reutilizables para un circuito integrado que pueden almacenarse en un medio legible por máquina tangible como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware se puede suministrar a varios 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 superior 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 ser sintetizado, de manera adicional, por la instalación de diseño en un modelo de hardware 2120, que puede estar en un lenguaje de descripción de hardware (HDL), o alguna otra representación de datos de diseño físico. El HDL puede simularse o 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 (por ejemplo, a través de Internet) a través de una conexión por cable 2150 o de 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, de un circuito integrado
Las Figuras 22 a 24 ilustran ejemplos de circuitos integrados y procesadores gráficos asociados que pueden fabricarse utilizando uno o más núcleos de IP, de conformidad con varias formas de realización descritas en este documento, además, de lo que se ilustra, se pueden incluir otras lógicas y 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 el uno o más procesador(es) de aplicaciones 2205 (por ejemplo, CPUs), al menos un procesador gráfico 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 de la misma o varias 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 incorporado 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 de IP, según una forma de realización. El procesador gráfico 2310 puede ser una variante del procesador gráfico 2210 de la Figura 22. El procesador gráfico 2310 incluye un procesador de vértice 2305 y el uno o más procesador(es) de fragmento 2315A-2315N (por ejemplo, 2315A, 2315B, 2315C, 2315D, hasta 2315N -1 y 2315N). El procesador gráfico 2310 puede ejecutar diferentes programas de sombreado 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 sombreado de vértices, mientras que el uno o más procesador(es) de fragmento 2315A-2315N ejecuta operaciones de sombreador de fragmentos (por ejemplo, píxeles) para programas de sombreado de fragmentos o de 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. El procesador(es) de fragmento 2315A-2315N utiliza los datos primitivos y de vértice generados por el procesador de vértice 2305 para obtener una memoria intermedia de tramas que se muestra en un dispositivo de visualización. En una forma de realización, el procesador(es) de fragmento 2315A-2315N están optimizados para ejecutar programas de sombreado de fragmentos según lo dispuesto en la API de OpenGL, que se puede utilizar para realizar operaciones similares tal como un programa de sombreador de píxeles según lo dispuesto en la API Direct 3D.
El procesador gráfico 2310 incluye, además, una o más unidades de gestión de memoria (MMUs) 2320A-2320B, memoria(s) caché 2325A-2325B y una interconexión(es) de circuito 2330A-2330B. La una o más MMUs 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 procesador(es) de fragmento 2315A-2315N, que pueden hacer referencia a datos de vértice o de imagen/textura almacenados en la memoria, además, de los datos de vértice o de imagen/textura almacenados en una o más memoria(s) caché 2325A-2325B. En una forma de realización, la una o más MMUs 2325A-2325B puede sincronizarse con otra MMUs dentro del sistema, incluyendo una o más MMUs asociada con el uno o más procesador(es) de aplicaciones 2205, procesador de imágenes 2215 y/o procesador 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 una o más interconexión(es) de circuitos 2330A-2330B permite que el procesador gráfico 2310 interactúe con otros núcleos IP dentro del 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 gráfico 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 gráfico 2410 puede ser una variante del procesador gráfico 2210 de la Figura 22. El procesador gráfico 2410 incluye la una o más MMU(s) 2320A-2320B, memorias caché 2325A-2325B e interconexiones de circuito 2330A-2330B del circuito integrado 2300 de Figura 23.
El procesador gráfico 2410 incluye uno o más núcleo(s) 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 informático. 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 gráfico 2410 incluye un gestor 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 la representación basada en mosaicos, en donde las operaciones de representación de una escena operativa 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 memorias caché internas.
En varias formas de realización, las operaciones aquí descritas, por ejemplo, con referencia a las figuras en este documento, pueden ponerse en práctica como hardware (por ejemplo, circuitos lógicos), software, firmware o combinaciones de los mismos, que pueden proporcionarse como un producto de programa informático, por ejemplo, incluyendo uno o más medios tangibles (por ejemplo, no transitorios) legibles por máquina o por ordenador que tienen almacenadas instrucciones (o procedimientos de software) utilizados para programar un ordenador para realizar un proceso aquí descrito. El medio legible por máquina puede incluir un dispositivo de almacenamiento tal como los descritos con respecto a las figuras de este documento.
Además, dichos medios legibles por ordenador pueden descargarse como un producto de programa informático, en donde el programa puede transferirse desde un ordenador remoto (p. ej., un servidor) a un ordenador solicitante (p. ej., un cliente) por medio de señales de datos. proporcionadas en una onda portadora u otro medio de propagación a través de un enlace de comunicación (por ejemplo, un bus, un módem o una conexión de red).
La referencia en la especificación a "una sola forma de realización" o "una forma de realización" significa que una característica, estructura y/o característica particular descrita en relación con la forma de realización puede incluirse en al menos una puesta en práctica. Las apariciones de la frase "en una sola forma de realización" en diversos lugares de la memoria descriptiva pueden referirse, o no, a la misma forma de realización.
Además, en la descripción y reivindicaciones, se pueden utilizar los términos "acoplado" y "conectado", junto con sus derivados. En algunas formas de realización, "conectado" puede utilizarse para indicar que dos o más elementos están en contacto físico o eléctrico entre sí. "Acoplado" puede significar que dos o más elementos están en contacto físico o eléctrico directo. Sin embargo, "acoplado" también puede significar que dos o más elementos pueden no estar en contacto directo entre sí, pero aun así pueden cooperar o interactuar entre sí.
Por lo tanto, aunque las formas de realización se han descrito en un lenguaje específico para características estructurales y/o actos metodológicos, debe entenderse que el objeto reivindicado puede no estar limitado a las características o actos específicos descritos. Más bien, las características y actos específicos se dan a conocer como formas de muestra para poner en práctica el objeto reivindicado.
Además, 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 por ello del alcance de la invención tal como se establece en las reivindicaciones adjuntas.

Claims (8)

REIVINDICACIONES
1. Un método que comprende:
la recogida (610) de información de usuario para un usuario de un dispositivo de procesamiento de datos, incluyendo la recogida de estadísticas basadas en máquinas asociadas con el usuario e información personal asociada con el usuario, incluyendo la recogida de una o más métricas de rendimiento para varias etapas de una canalización de procesamiento de gráficos de un procesador gráfico del dispositivo de procesamiento de datos, en donde, dependiendo de las características de la carga de trabajo, algunas partes de la canalización de procesamiento de gráficos son más activas que otras partes;
la generación (615) de un perfil de usuario para el usuario del dispositivo de procesamiento de datos a partir de la información del usuario;
la categorización (620) del usuario en una de entre una pluralidad de categorías de consumo de energía en base al perfil del usuario;
la determinación (625) de un perfil de energía del procesador gráfico en el dispositivo de procesamiento de datos utilizando el perfil de usuario y la categorización del usuario en combinación con la retroalimentación de un algoritmo de aprendizaje automático, incluyendo el ajuste individual de la frecuencia de las etapas de la canalización de procesamiento de gráficos del procesador gráfico basado, al menos en parte, en el perfil de usuario y en una o más métricas de rendimiento recogidas.
2. El método según la reivindicación 1, en donde la recogida de estadísticas basadas en máquinas incluye la recogida de al menos un nivel de carga de trabajo consumido por aplicaciones del usuario que se ejecutan en el dispositivo de procesamiento de datos o un consumo de energía del procesador.
3. El método según la reivindicación 1, en donde la recogida de información personal asociada con el usuario incluye la recogida de al menos uno de entre la edad aproximada del usuario, el nivel de visión, una lista de aplicaciones utilizadas habitualmente por el usuario o un nivel de brillo de la pantalla.
4. El método según la reivindicación 1, que comprende, además:
recuperar un perfil de usuario de la memoria cuando un usuario inicia sesión en el sistema de procesamiento de datos; y
actualización del perfil de usuario actualizado durante la sesión del usuario.
5. El método según la reivindicación 1, que comprende, además:
conducir el procesador gráfico directamente a un modo de alto rendimiento basado, al menos en parte, en el perfil del usuario.
6. Un aparato, que comprende:
un procesador gráfico y
una lógica, que comprende al menos parcialmente una lógica de hardware, para realizar un método según cualquiera de las reivindicaciones anteriores.
7. El aparato según la reivindicación 6, que comprende, además, un procesador que tiene uno o más núcleos de procesador.
8. Uno o más medios legibles por ordenador que tienen almacenadas instrucciones que, cuando se ejecutan en un aparato según la reivindicación 6 o 7, configuran el aparato para realizar un método según cualquiera de las reivindicaciones 1 a 5.
ES18158485T 2017-04-01 2018-02-23 Gestión de energía de procesador Active ES2905758T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/477,029 US10579121B2 (en) 2017-04-01 2017-04-01 Processor power management

Publications (1)

Publication Number Publication Date
ES2905758T3 true ES2905758T3 (es) 2022-04-12

Family

ID=61283019

Family Applications (2)

Application Number Title Priority Date Filing Date
ES18158485T Active ES2905758T3 (es) 2017-04-01 2018-02-23 Gestión de energía de procesador
ES21203463T Active ES2985696T3 (es) 2017-04-01 2018-02-23 Gestión de energía de procesador

Family Applications After (1)

Application Number Title Priority Date Filing Date
ES21203463T Active ES2985696T3 (es) 2017-04-01 2018-02-23 Gestión de energía de procesador

Country Status (5)

Country Link
US (5) US10579121B2 (es)
EP (3) EP3382504B1 (es)
CN (1) CN108693950B (es)
ES (2) ES2905758T3 (es)
PL (2) PL3382504T4 (es)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10579121B2 (en) 2017-04-01 2020-03-03 Intel Corporation Processor power management
WO2020225853A1 (ja) * 2019-05-07 2020-11-12 三菱電機株式会社 鉄道車両用の空調制御システム
US10996960B1 (en) * 2019-11-22 2021-05-04 Blaize, Inc. Iterating single instruction, multiple-data (SIMD) instructions
US11307860B1 (en) 2019-11-22 2022-04-19 Blaize, Inc. Iterating group sum of multiple accumulate operations
US11934286B2 (en) * 2021-04-29 2024-03-19 Dell Products L.P. Subsystem power range configuration based on workload profile
JP2023009676A (ja) * 2021-07-07 2023-01-20 キヤノン株式会社 演算処理装置およびその制御方法
US12430283B2 (en) * 2021-12-21 2025-09-30 Intel Corporation Methods, systems, and apparatus to reconfigure a computer
US12461582B1 (en) * 2022-09-21 2025-11-04 Apple Inc. Power state prediction using machine learning circuitry
CN116029890B (zh) * 2022-12-28 2025-08-19 苏州速显微电子科技有限公司 一种神经网络增强的图形处理器流水线架构
CN117669668B (zh) * 2023-05-04 2024-11-26 北京辉羲智能信息技术有限公司 一种反馈式神经网络模型计算流流水线排布方法及ai编译器

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7903116B1 (en) 2003-10-27 2011-03-08 Nvidia Corporation Method, apparatus, and system for adaptive performance level management of a graphics system
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7389432B2 (en) * 2004-11-10 2008-06-17 Microsoft Corporation Advanced power management for computer displays
WO2007031696A1 (en) * 2005-09-13 2007-03-22 Arm Limited Cache miss detection in a data processing apparatus
US9275430B2 (en) * 2006-12-31 2016-03-01 Lucidlogix Technologies, Ltd. Computing system employing a multi-GPU graphics processing and display subsystem supporting single-GPU non-parallel (multi-threading) and multi-GPU application-division parallel modes of graphics processing operation
US8179402B2 (en) * 2007-10-31 2012-05-15 Canon Kabushiki Kaisha Generating colorimetric profiles from spectral data and user input
US8706652B2 (en) 2009-06-09 2014-04-22 Northwestern University System and method for controlling power consumption in a computer system based on user satisfaction
US8743130B2 (en) * 2009-08-28 2014-06-03 Zynga Inc. Apparatuses, methods and systems for a distributed object renderer
US9081973B2 (en) * 2010-04-23 2015-07-14 Psion Inc. Restricting user access on shared computer
US20110285660A1 (en) * 2010-05-18 2011-11-24 Prabhu Krishnanand Touch screen power generation
KR101292093B1 (ko) * 2010-07-02 2013-08-08 (주)휴맥스 화면내 예측 부호화를 위한 영상 부호화/복호화 장치 및 방법
US20130076788A1 (en) * 2011-09-26 2013-03-28 Eyeducation A. Y. Ltd Apparatus, method and software products for dynamic content management
US8750852B2 (en) * 2011-10-27 2014-06-10 Qualcomm Incorporated Controlling access to a mobile device
US9853458B1 (en) * 2014-05-07 2017-12-26 Energous Corporation Systems and methods for device and power receiver pairing
US10148097B1 (en) * 2013-11-08 2018-12-04 Energous Corporation Systems and methods for using a predetermined number of communication channels of a wireless power transmitter to communicate with different wireless power receivers
US10291055B1 (en) * 2014-12-29 2019-05-14 Energous Corporation Systems and methods for controlling far-field wireless power transmission based on battery power levels of a receiving device
US8984313B2 (en) * 2012-08-31 2015-03-17 Intel Corporation Configuring power management functionality in a processor including a plurality of cores by utilizing a register to store a power domain indicator
EP2895970B1 (en) * 2012-09-14 2018-11-07 InteraXon Inc. Systems and methods for collecting, analyzing, and sharing bio-signal and non-bio-signal data
US8634152B1 (en) * 2012-10-15 2014-01-21 Lsi Corporation Systems and methods for throughput enhanced data detection in a data processing circuit
US8655307B1 (en) 2012-10-26 2014-02-18 Lookout, Inc. System and method for developing, updating, and using user device behavioral context models to modify user, device, and application state, settings and behavior for enhanced user security
US9269120B2 (en) * 2012-11-06 2016-02-23 Intel Corporation Dynamically rebalancing graphics processor resources
US9286647B2 (en) * 2013-03-12 2016-03-15 Nvidia Corporation Pixel shader bypass for low power graphics rendering
US9378065B2 (en) * 2013-03-15 2016-06-28 Advanced Elemental Technologies, Inc. Purposeful computing
US9256271B2 (en) 2013-10-04 2016-02-09 American Megatrends, Inc. Predictive power management based on user category
WO2015164639A1 (en) * 2014-04-23 2015-10-29 Ip Reservoir, Llc Method and apparatus for accelerated data translation
US9524092B2 (en) * 2014-05-30 2016-12-20 Snaptrack, Inc. Display mode selection according to a user profile or a hierarchy of criteria
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
EP3035254A1 (en) * 2014-12-18 2016-06-22 Stichting IMEC Nederland Method of managing the operation of an electronic system with a guaranteed lifetime
US9940905B2 (en) * 2015-02-03 2018-04-10 Qualcomm Incorporated Clock rate adjustment for processing unit
US10095878B2 (en) * 2015-06-02 2018-10-09 ALTR Solutions, Inc. Internal controls engine and reporting of events generated by a network or associated applications
CN106293047B (zh) 2015-06-26 2020-01-10 微软技术许可有限责任公司 通过动态分辨率缩放来减少移动设备的功耗
WO2017059014A1 (en) * 2015-09-29 2017-04-06 Skytree, Inc. Interoperability of transforms under a unified platform and extensible transformation library of those interoperable transforms
US10209767B2 (en) * 2016-02-02 2019-02-19 Apple Inc. Power management architecture
US10795684B2 (en) * 2016-07-01 2020-10-06 Intel Corporation Method and logic for maintaining performance counters with dynamic frequencies
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
CN119251375A (zh) * 2016-08-19 2025-01-03 莫维迪厄斯有限公司 矩阵操作的动态剔除
US10649518B2 (en) * 2017-01-26 2020-05-12 Ati Technologies Ulc Adaptive power control loop
US10579121B2 (en) 2017-04-01 2020-03-03 Intel Corporation Processor power management

Also Published As

Publication number Publication date
US20200272215A1 (en) 2020-08-27
EP3964927B1 (en) 2024-02-21
PL3382504T3 (pl) 2022-02-21
EP4351233A2 (en) 2024-04-10
EP3964927A1 (en) 2022-03-09
PL3382504T4 (pl) 2022-02-21
US20230418355A1 (en) 2023-12-28
US20220113783A1 (en) 2022-04-14
ES2985696T3 (es) 2024-11-07
CN108693950B (zh) 2025-01-21
CN108693950A (zh) 2018-10-23
US20180284868A1 (en) 2018-10-04
EP4351233A3 (en) 2024-07-03
EP3382504A1 (en) 2018-10-03
US12124310B2 (en) 2024-10-22
US20250117060A1 (en) 2025-04-10
US10579121B2 (en) 2020-03-03
US11733758B2 (en) 2023-08-22
US11106264B2 (en) 2021-08-31
EP3382504B1 (en) 2021-10-20
PL3964927T3 (pl) 2024-06-10

Similar Documents

Publication Publication Date Title
US12579072B2 (en) Graphics processor register file including a low energy portion and a high capacity portion
US11587273B2 (en) Low power foveated rendering to save power on GPU and/or display
ES2929978T3 (es) Fichero de registro jerárquico para una unidad GPGPU
US12124310B2 (en) Processor power management
US11762696B2 (en) Hybrid low power homogenous grapics processing units
US20210109589A1 (en) Shutting down gpu components in response to unchanged scene detection
ES2969061T3 (es) Motor para permitir cambio de contexto a alta velocidad mediante almacenamiento en microprocesador
ES2974516T3 (es) Tamaño de cálculo adaptable por carga de trabajo
US10289179B2 (en) Dynamic control of liquid cooling pumps to provide thermal cooling uniformity
US20200160819A1 (en) Adaptive multibit bus for energy optimization
US10372196B2 (en) Dynamic pixel density adjustment
US20180300951A1 (en) Adaptive tessellation for foveated rendering
US20180300045A1 (en) Active window rendering optimization and display