ES3054895T3 - Coordination and increased utilization of graphics processors during inference - Google Patents

Coordination and increased utilization of graphics processors during inference

Info

Publication number
ES3054895T3
ES3054895T3 ES23220686T ES23220686T ES3054895T3 ES 3054895 T3 ES3054895 T3 ES 3054895T3 ES 23220686 T ES23220686 T ES 23220686T ES 23220686 T ES23220686 T ES 23220686T ES 3054895 T3 ES3054895 T3 ES 3054895T3
Authority
ES
Spain
Prior art keywords
graphics
memory
processing
processor
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES23220686T
Other languages
English (en)
Inventor
Abhishek R Appu
Altug Koker
John C Weast
Mike B Macpherson
Linda L Hurd
Sara S Baghsorkhi
Justin E Gottschlich
Prasoonkumar Surti
Chandrasekaran Sakthivel
Liwei Ma
Elmoustapha Ould-Ahmed-Vall
Kamal Sinha
Joydeep Ray
Balaji Vembu
Sanjeev Jahagirdar
Vasanth Ranganathan
Dukhwan Kim
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 ES3054895T3 publication Critical patent/ES3054895T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/09Supervised learning
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/098Distributed learning, e.g. federated learning
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • G06N5/041Abduction
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)
  • Multi Processors (AREA)

Abstract

Un método de realizaciones, como se describe en este documento, incluye la programación de recursos en un sistema para una pluralidad de contextos, incluyendo los recursos del sistema múltiples procesadores de streaming; la especificación de una porción de subprocesos disponibles como limitación de uso de los múltiples procesadores de streaming; y, tras determinar que la limitación de uso de los múltiples procesadores de streaming está establecida, la limitación de uso de los múltiples procesadores de streaming a uno o más contextos de la pluralidad de contextos. Limitar el uso de los múltiples procesadores de streaming incluye limitar los subprocesos para uno o más contextos a la porción especificada de subprocesos disponibles de los múltiples procesadores de streaming, siendo dicha porción especificada menor que todos los subprocesos disponibles de los múltiples procesadores de streaming. Limitar los subprocesos para uno o más contextos a la porción especificada de subprocesos disponibles incluye limitar uno o más contextos a un subconjunto de los múltiples procesadores de streaming, siendo dicho subconjunto menor que todos los procesadores de streaming disponibles. (Traducción automática con Google Translate, sin valor legal)

Description

[0001] DESCRIPCIÓN
[0002] Coordinación y utilización aumentada de procesadores gráficos durante inferencias
[0003] CAMPO
[0004] Las realizaciones descritas en el presente documento se refieren en general al procesamiento de datos y, más concretamente, a facilitar una herramienta para facilitar la coordinación y aumentar la utilización de los procesadores gráficos durante la inferencia.
[0005] ANTECEDENTES
[0006] El procesamiento paralelo actual de datos gráficos incluye sistemas y métodos desarrollados para realizar operaciones específicas en datos gráficos, como, por ejemplo, interpolación lineal, teselación, rasterización, mapeo de texturas, pruebas de profundidad, etc. Tradicionalmente, los procesadores gráficos utilizaban unidades computacionales de función fija para procesar datos gráficos; sin embargo, más recientemente, algunas partes de los procesadores gráficos se han hecho programables, lo que permite a dichos procesadores admitir una mayor variedad de operaciones para procesar datos de vértices y fragmentos.
[0007] Para aumentar aún más el rendimiento, los procesadores gráficos suelen implementar técnicas de procesamiento como la canalización, que intentan procesar, en paralelo, la mayor cantidad posible de datos gráficos a lo largo de las diferentes partes del canal gráfico. Los procesadores gráficos paralelos con arquitecturas de instrucción única y múltiples hilos (SIMT) están diseñados para maximizar la cantidad de procesamiento paralelo en el canal gráfico. En una arquitectura SIMT, grupos de hilos paralelos intentan ejecutar instrucciones de programa de forma sincrónica juntos tan a menudo como sea posible para aumentar la eficiencia del procesamiento. Una visión general de software and hardware para arquitecturas SIMT se ha encontrado en Shane Cook, CUDA Programming, Capítulo 3, páginas 37-51 (2013) y/o Nicholas Wilt, CUDA Handbook, A Comprehensive Guide to GPU Programming, Secciones 2.6.2 a 3.1.2 (Junio de 2013).
[0008] El aprendizaje automático ha tenido éxito en la resolución de muchos tipos de tareas. Los cálculos que surgen durante el entrenamiento y uso de algoritmos de aprendizaje automático (por ejemplo, redes neuronales) se prestan naturalmente a implementaciones paralelas eficientes. En consecuencia, los procesadores paralelos, tales como las unidades de procesamiento de gráficos de uso general (GPGPU), han desempeñado un papel importante en la implementación práctica de redes neuronales profundas. Los procesadores gráficos paralelos con arquitecturas de múltiples hilos y única instrucción (SIMT) se diseñan para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura de SIMT, grupos de hilos paralelos intentan ejecutar instrucciones de programa de manera sincronizada conjuntamente tan a menudo como sea posible para aumentar la eficiencia de procesamiento. La eficiencia que brindan las implementaciones de algoritmos de aprendizaje automático paralelo permite el uso de redes de alta capacidad y permite que esas redes se entrenen en conjuntos de datos más grandes. Las técnicas convencionales no permiten la coordinación entre los resultados de la inferencia y los sensores responsables de proporcionar las entradas; sin embargo, dichas técnicas convencionales no garantizan la precisión de los resultados de la inferencia. Además, el uso de la inferencia a través de un procesador gráfico es bastante ligero, mientras que el resto del procesador gráfico permanece sin utilizar.
[0009] Libro blanco: "GPU-Based Deep Learning Inference: A Performance and Power Analysis" se centra en la investigación del rendimiento y la eficiencia energética de las GPU para la inferencia de aprendizaje profundo y compara dos marcos de aprendizaje profundo estándar, Caffe e Intel's Deep Learning Framework (IDLF), que se ejecutan en cuatro plataformas de hardware disponibles.
[0010] SUMARIO
[0011] La presente invención se define en las reivindicaciones independientes. Las reivindicaciones dependientes definen realizaciones de las mismas.
[0012] BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0013] Las realizaciones se ilustran a modo de ejemplo, y no a modo de limitación, en las figuras de los dibujos adjuntos, en los que los números de referencia similares se refieren a elementos similares. Para que puedan entenderse en detalle las características antes citadas, se proporciona una descripción más particular, resumida anteriormente de manera breve, haciendo referencia a las realizaciones, algunas de las cuales se ilustran en los dibujos adjuntos.
[0014] LaFigura 1es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o varios aspectos descritos en el presente documento.
[0015] LasFiguras 2A-2Dilustran los componentes de un procesador paralelo.
[0016] LasFiguras 3A-3Bson diagramas de bloques de multiprocesadores gráficos.
[0017] LasFiguras 4A-4Filustran una arquitectura ejemplar en la que una pluralidad de unidades de procesamiento gráfico están acopladas comunicativamente a una pluralidad de procesadores multinúcleo.
[0018] LaFigura 5ilustra un proceso de procesamiento gráfico.
[0019] LaFigura 6ilustra un dispositivo informático que aloja un mecanismo de coordinación de inferencias y utilización de procesamiento.
[0020] LaFigura 7ilustra un mecanismo de coordinación de inferencias y utilización de procesamiento.
[0021] LaFigura 8Ailustra un marco de transacciones en procesadores de aplicaciones y/o gráficos para facilitar el entrenamiento analizado previamente.
[0022] LaFigura 8Bilustra un procesador gráfico para mejorar la utilización del procesamiento.
[0023] LaFigura 8Cilustra una secuencia de transacciones para mejorar la coordinación entre los resultados de la inferencia y los sensores.
[0024] LaFigura 8Dilustra una secuencia de transacciones para mejorar la coordinación entre los resultados de la inferencia y los sensores.
[0025] LasFiguras 9A y 9Bilustran secuencias de transacciones que muestran modelos de uso según una realización.
[0026] LaFigura 9Cmuestra un gráfico con las opciones de priorización.
[0027] LaFigura 10ilustra una pila de software de aprendizaje automático.
[0028] LaFigura 11ilustra una unidad de procesamiento gráfico de uso general altamente paralela.
[0029] LaFigura 12ilustra un sistema informático con múltiples GPU.
[0030] LasFiguras 13A-13Bilustran capas de redes neuronales profundas ejemplares.
[0031] LaFigura 14ilustra el entrenamiento y la implementación de una red neuronal profunda.
[0032] LaFigura 15ilustra el entrenamiento y la implementación de una red neuronal profunda.
[0033] LaFigura 16es un diagrama de bloques que ilustra el aprendizaje distribuido.
[0034] LaFigura 17ilustra un sistema en un chip (SOC) de inferencia ejemplar adecuado para realizar inferencias utilizando un modelo entrenado.
[0035] LaFigura 18es un diagrama de bloques de un sistema informático con un procesador que tiene uno o más núcleos de procesador y procesadores gráficos.
[0036] LaFigura 19es un diagrama de bloques de un procesador que tiene uno o más núcleos de procesador, un controlador de memoria integrado y un procesador gráfico integrado.
[0037] LaFigura 20es un diagrama de bloques de un procesador gráfico que puede ser una unidad de procesamiento gráfico discreta o un procesador gráfico integrado con una pluralidad de núcleos de procesamiento.
[0038] LaFigura 21es un diagrama de bloques de un motor de procesamiento gráfico para un procesador gráfico. LaFigura 22es un diagrama de bloques de otro procesador gráfico.
[0039] LaFigura 23es un diagrama de bloques de la lógica de ejecución de hilos que incluye una matriz de elementos de procesamiento.
[0040] LaFigura 24ilustra un formato de instrucción de la unidad de ejecución del procesador gráfico.
[0041] LaFigura 25es un diagrama de bloques de otro procesador gráfico que incluye un canal gráfico, un canal multimedia, un motor de visualización, una lógica de ejecución de hilos y un canal de salida de renderizado. LaFigura 26Aes un diagrama de bloques que ilustra un formato de comando de procesador gráfico.
[0042] LaFigura 26Bes un diagrama de bloques que ilustra una secuencia de comandos del procesador gráfico. LaFigura 27ilustra una arquitectura de software gráfico ejemplar para un sistema de procesamiento de datos. LaFigura 28es un diagrama de bloques que ilustra un sistema de desarrollo de núcleos IP que puede utilizarse para fabricar un circuito integrado que realice operaciones.
[0043] LaFigura 29es un diagrama de bloques que ilustra un sistema ejemplar en un circuito integrado en chip que puede fabricarse utilizando uno o más núcleos IP.
[0044] LaFigura 30es un diagrama de bloques que ilustra un procesador gráfico ejemplar de un circuito integrado de sistema en un chip.
[0045] LaFigura 31es un diagrama de bloques que ilustra un procesador gráfico ejemplar adicional de un circuito integrado de sistema en un chip.
[0047] DESCRIPCIÓN DETALLADA
[0049] Las realizaciones proporcionan una técnica novedosa para facilitar la detección de valores de datos utilizados con frecuencia y, a continuación, acelerar las operaciones mediante el uso de una o más técnicas, como tablas de consulta, matemáticas reducidas, etc. Las realizaciones proporcionan además una técnica novedosa para introducir una máquina de estados finitos, en la que, en una realización, esta máquina de estados finitos proporciona un puntero a una dirección base a A, B, mientras que la salida es una secuencia de C+.
[0051] Cabe señalar que términos o acrónimos como "red neuronal convolucional", "CNN", "red neuronal", "NN", "red neuronal profunda", "DNN", "red neuronal recurrente", "RNN" y/o similares pueden aparecer indistintamente a lo largo de este documento. Además, expresiones como "máquina autónoma" o simplemente "máquina", "vehículo autónomo" o simplemente "vehículo", "agente autónomo" o simplemente "agente", "dispositivo autónomo" o "dispositivo informático", "robot", y/o similares, se pueden hacer referencia de manera intercambiable a lo largo de todo este documento.
[0052] En algunos ejemplos, una unidad de procesamiento gráfico (GPU) está conectada de forma comunicativa a los núcleos del anfitrión/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 propósito general (GPGPU). La GPU puede estar conectada de forma comunicativa al procesador/núcleos del anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad como PCIe o NVLink). En otros ejemplos, la GPU se puede integrar en el mismo paquete o chip que los núcleos y se puede acoplar de manera comunicativa a los núcleos a través de un bus/interconexión interna del procesador (es decir, interna al paquete o chip). 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 circuitos/lógica dedicados para procesar de manera eficiente estos comandos/instrucciones.
[0054] En la siguiente descripción se exponen numerosos detalles específicos. Sin embargo, los ejemplos, como se describen en el presente documento, pueden practicarse sin estos detalles específicos. En otros casos, no se han mostrado en detalle circuitos, estructuras y técnicas bien conocidos para no complicar la comprensión de esta descripción.
[0056] Visión general del sistema I
[0058] LaFigura 1es un diagrama de bloques que ilustra un sistema informático 100 configurado para implementar uno o varios aspectos descritos en el presente documento. El sistema informático 100 incluye un subsistema de procesamiento 101 con uno o varios procesadores 102 y una memoria del sistema 104 que se comunican a través de una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente independiente dentro de un componente del chipset o puede estar integrado en uno o varios procesadores 102. El concentrador de memoria 105 se conecta 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 permite al sistema informático 100 recibir entradas de uno o varios dispositivos de entrada 108. Además, el concentrador de E/S 107 puede habilitar un controlador de pantalla, que puede estar incluido en uno o varios procesadores 102, para proporcionar salidas a uno o varios dispositivos de pantalla 110A. En un ejemplo, el uno o más dispositivo o dispositivos de visualización 110A acoplados al concentrador de E/S 107 pueden incluir un dispositivo de visualización local, interno o integrado.
[0059] En un ejemplo, el subsistema de procesamiento 101 incluye uno o más procesadores paralelos 112 conectados 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 cualquiera de las numerosas tecnologías o protocolos de enlace de comunicación basados en estándares, tal como, entre otros, PCI Express, o puede ser una interfaz de comunicación o una estructura de comunicación específica de un proveedor. En un ejemplo, el uno o más procesador o procesadores paralelos 112 forman un sistema de procesamiento paralelo o vectorial computacionalmente enfocado que incluye un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tales como un procesador de muchos núcleos integrados (MIC). En un ejemplo, el uno o más procesador o procesadores paralelos 112 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno del uno o más dispositivo o dispositivos de visualización 110A acoplados mediante el concentrador de E/S 107. El uno o más procesadores paralelos 112 también pueden incluir un controlador de pantalla y una interfaz de pantalla (no mostrados) para permitir una conexión directa con uno o más dispositivos de pantalla 110B.
[0061] Dentro del subsistema de E/S 111, una unidad de almacenamiento del sistema 114 puede conectarse 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 que permita las conexiones entre el concentrador de E/S 107 y otros componentes, como un adaptador de red 118 y/o un adaptador de red inalámbrica 119 que pueden estar integrados en la plataforma, y otros dispositivos diversos que se pueden añadir a través de uno o varios dispositivos adicionales 120. El adaptador de red 118 puede ser un adaptador Ethernet u otro adaptador de red cableado. El adaptador de red inalámbrica 119 puede incluir uno o más dispositivos Wi-Fi, Bluetooth, comunicación de campo cercano (NFC) u otros dispositivos de red que incluyan una o más radios inalámbricas.
[0063] El sistema informático 100 puede incluir otros componentes que no se muestran explícitamente, como conexiones USB u otros puertos, unidades de almacenamiento óptico, dispositivos de captura de vídeo y similares, que también pueden conectarse al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes de laFigura 1se pueden implementar utilizando cualquier protocolo adecuado, tales como protocolos basados en PCI (Interconexión de componentes periféricos) (por ejemplo, PCI-Express), o cualquier otra interfaz y/o protocolo(s) de comunicación de bus o punto a punto, tal como la interconexión de alta velocidad NV-Link o protocolos de interconexión conocidos en la técnica.
[0065] En un ejemplo, uno o varios procesadores paralelos 112 incorporan circuitos optimizados para el procesamiento de gráficos y vídeo, incluyendo, por ejemplo, circuitos de salida de vídeo, y constituyen una unidad de procesamiento gráfico (GPU). En otro ejemplo, el uno o más procesador o procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de propósito general, mientras conservan la arquitectura computacional subyacente, descrita en mayor detalle en el presente documento. En otro ejemplo más, los componentes del sistema informático 100 pueden estar integrados con uno o más de otros elementos de sistema en un único circuito integrado. Por ejemplo, el uno o más procesadores paralelos 112, el concentrador de memoria 105, el o los procesadores 102 y el concentrador de E/S 107 se pueden integrar en un circuito integrado de sistema en chip (SoC). Alternativamente, los componentes del sistema informático 100 pueden integrarse en un único paquete para formar una configuración de sistema en paquete (SIP). En una realización, al menos una porción de los componentes del sistema informático 100 puede integrarse en un módulo de múltiples microprocesadores (MCM), que puede interconectarse con otros módulos de múltiples microprocesadores para dar un sistema informático modular.
[0066] Cabe señalar que el sistema informático 100 que se muestra en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, incluyendo el número y la disposición de los puentes, el número de procesadores 102 y el número de procesadores paralelos 112, puede modificarse según se desee. Por ejemplo, en algunos ejemplos, la memoria de sistema 104 está conectada al procesador o procesadores 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 104 mediante el concentrador de memoria 105 y el procesador o procesadores 102. En otras topologías alternativas, los procesadores paralelos 112 están conectados al concentrador de E/S 107 o directamente a uno o varios de los procesadores 102, en lugar de al concentrador de memoria 105. En otros ejemplos, el concentrador de E/S 107 y el concentrador de memoria 105 se pueden integrar en un único chip. Algunos ejemplos pueden incluir dos o más conjuntos de procesador o procesadores 102 anexados mediante múltiples zócalos, que pueden acoplarse con dos o más instancias del procesador o procesadores paralelos 112.
[0067] Algunos de los componentes específicos que se muestran aquí son opcionales y pueden no estar incluidos en todas las implementaciones del sistema informático 100. Por ejemplo, se puede admitir cualquier número de tarjetas adicionales o 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 laFigura 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.
[0068] LaFigura 2Ailustra un procesador paralelo 200. Los diversos componentes del procesador paralelo 200 pueden implementarse utilizando uno o más dispositivos de circuitos integrados, tales como procesadores programables, circuitos integrados específicos para aplicaciones (ASIC) o matrices de puertas programables en campo (FPGA). El procesador paralelo ilustrado 200 es una variante del procesador o procesadores paralelos 112 mostrados en laFigura 1.
[0069] En un ejemplo, el procesador paralelo 200 incluye una unidad de procesamiento paralelo 202. La unidad de procesamiento paralelo incluye una unidad de E/S 204 que permite la comunicación con otros dispositivos, incluidas otras instancias de la unidad de procesamiento paralelo 202. La unidad de E/S 204 puede conectarse directamente a otros dispositivos. En un ejemplo, la unidad de E/S 204 se conecta con otros dispositivos mediante el uso de una interfaz de concentrador o de conmutador, tal como un concentrador de memoria 105. Las conexiones entre el concentrador de memoria 105 y la unidad de E/S 204 forman un enlace de comunicaciones 113. Dentro de la unidad de procesamiento paralelo 202, la unidad de E/S 204 se conecta con una interfaz de anfitrión 206 y una barra cruzada de memoria 216, donde la interfaz de anfitrión 206 recibe comandos dirigidos a realizar operaciones de procesamiento y la barra cruzada de memoria 216 recibe comandos dirigidos a realizar operaciones de memoria.
[0070] Cuando la interfaz anfitrión 206 recibe una memoria intermedia de comandos a través de la unidad de E/S 204, la interfaz anfitrión 206 puede dirigir las operaciones de trabajo para ejecutar esos comandos a un extremo frontal 208. En un ejemplo, 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 agrupaciones de procesamiento 212. En un ejemplo, el planificador 210 garantiza que la matriz de agrupaciones de procesamiento 212 está configurada apropiadamente y en un estado válido antes de que se distribuyan las tareas a las agrupaciones de procesamiento de la matriz de agrupaciones de procesamiento 212.
[0071] La matriz de agrupaciones de procesamiento 212 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, la agrupación 214A, la agrupación 214B, hasta la agrupación 214N). Cada agrupación 214A-214N de la matriz de agrupaciones de procesamiento 212 puede ejecutar un gran número de hilos simultáneos. El programador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 utilizando diversos algoritmos de programación y/o distribución del trabajo, que pueden variar en función de la carga de trabajo que se genere para cada tipo de programa o cálculo. La programación puede ser gestionada dinámicamente por el programador 210, o puede ser asistida en parte por la lógica del compilador durante la compilación de la lógica del programa configurada para su ejecución por la matriz de la agrupación de procesamiento 212.
[0072] En un ejemplo, se pueden asignar diferentes agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
[0073] La matriz de agrupaciones de procesamiento 212 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. En un ejemplo, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de cálculo paralelo de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, incluyendo el filtrado de datos de vídeo y/o audio, la realización de operaciones de modelado, incluyendo operaciones físicas, y la realización de transformaciones de datos.
[0075] En un ejemplo, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento gráfico en paralelo. En ejemplos en los que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 212 puede incluir lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, que incluyen, pero sin limitación, lógica de muestreo de textura para realizar operaciones de textura, así como lógica de teselación y otra lógica de procesamiento de vértices. Además, la matriz de agrupaciones 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 teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento 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 integrada en el chip (por ejemplo, la memoria del procesador paralelo 222) y, a continuación, volver a escribirse en la memoria del sistema.
[0077] En un ejemplo, cuando se utiliza la unidad de procesamiento paralelo 202 para realizar el procesamiento de gráficos, el programador 210 puede configurarse para dividir la carga de trabajo de procesamiento en tareas de tamaño aproximadamente igual, con el fin de permitir una mejor distribución de las operaciones de procesamiento de gráficos entre múltiples agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212. En algunos ejemplos, porciones de la matriz de agrupaciones de procesamiento 212 se pueden configurar para realizar diferentes tipos de procesamiento. Por ejemplo, una primera parte puede estar configurada para realizar sombreado de vértices y generación de topología, una segunda parte puede estar configurada para realizar teselación y sombreado geométrico, y una tercera parte puede estar configurada para realizar sombreado de píxeles u otras operaciones en el espacio de la pantalla, con el fin de producir una imagen renderizada para su visualización. Los datos intermedios producidos por una o más de las agrupaciones 214A-214N pueden almacenarse en memorias intermedias para permitir que los datos intermedios se transmitan entre las agrupaciones 214A-214N para su posterior procesamiento.
[0079] Durante el funcionamiento, la matriz de agrupaciones de procesamiento 212 puede recibir tareas de procesamiento que deben ejecutarse a través del programador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. En el caso de las operaciones de procesamiento gráfico, las tareas de procesamiento pueden incluir índices de datos que se van a procesar, por ejemplo, datos de superficie (parche), datos primitivos, datos de vértices y/o datos de píxeles, así como parámetros de estado y comandos que definen cómo se deben procesar los datos (por ejemplo, qué programa se debe ejecutar). El programador 210 puede configurarse para obtener los índices correspondientes a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede configurarse para garantizar que la matriz de la agrupación de procesamiento 212 se configure 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 envío, etc.).
[0081] Cada una de las instancias de la unidad de procesamiento paralelo 202 puede acoplarse con la memoria del procesador paralelo 222. Se puede acceder a la memoria del procesador paralelo 222 a través de la barra cruzada de memoria 216, que puede recibir solicitudes de memoria tanto de la matriz de agrupaciones de procesamiento 212 como de la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria del procesador paralelo 222 a través de una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de partición (por ejemplo, la unidad de partición 220A, la unidad de partición 220B, hasta la unidad de partición 220N), cada una de las cuales puede acoplarse a una parte (por ejemplo, una unidad de memoria) de la memoria del procesador paralelo 222. En una implementación, el número de unidades de partición 220A-220N se configura para que sea igual al número de unidades de memoria, de modo que una primera unidad de partición 220A tenga una primera unidad de memoria correspondiente 224A, una segunda unidad de partición 220B tenga una unidad de memoria correspondiente 224B y una enésima unidad de partición 220N tenga una enésima unidad de memoria correspondiente 224N. En otros ejemplos, el número de unidades de subdivisión 220A-220N puede no ser igual al número de dispositivos de memoria.
[0083] En varios ejemplos, las unidades de memoria 224A-224N pueden incluir varios tipos de dispositivos de memoria, incluyendo memoria dinámica de acceso aleatorio (DRAM) o memoria gráfica de acceso aleatorio, como memoria gráfica síncrona de acceso aleatorio (SGRAM), incluyendo memoria gráfica de doble velocidad de datos (GDDR). En un ejemplo, las unidades de memoria 224A-224N también pueden incluir memoria 3D apilada, que incluye, pero sin limitación, memoria de ancho de banda alto (HBM). Los expertos en la materia apreciarán que la implementación específica de las unidades de memoria 224A-224N puede variar, y puede seleccionarse de uno de diversos diseños convencionales. Los objetivos de representación, tales como las memorias intermedias de tramas o los mapas de textura pueden almacenarse a través de las unidades de memoria 224A-224N, permitiendo que las unidades de división 220A-220N escriban porciones de cada objetivo de representación en paralelo para usar de manera efectiva el ancho de banda disponible de la memoria de procesador paralelo 222. En algunos ejemplos, se puede excluir una instancia local de la memoria de procesador paralelo 222 en favor de un diseño de memoria unificado que utiliza memoria de sistema junto con memoria caché local.
[0084] En un ejemplo, cualquiera de las agrupaciones 214A-214N de la matriz de agrupaciones 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 paralelo 222. La barra transversal de memoria 216 puede configurarse para transferir la salida de cada agrupación 214A-214N a cualquier unidad de partición 220A-220N o a otra agrupación 214A-214N, que puede realizar operaciones de procesamiento adicionales sobre la salida. Cada agrupación 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra cruzada de memoria 216 para leer o escribir en diversos dispositivos de memoria externos. En un ejemplo, la barra transversal de memoria 216 tiene una conexión a la interfaz de memoria 218 para comunicarse con la unidad de E/S 204, así como una conexión a una instancia local de la memoria de procesador paralelo 222, lo que posibilita que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 214A-214N se comuniquen con la memoria de sistema u otra memoria que no sea local a la unidad de procesamiento paralelo 202. En un ejemplo, la barra transversal de memoria 216 puede usar canales virtuales para separar flujos de tráfico entre las agrupaciones 214A-214N y las unidades de subdivisión 220A-220N.
[0086] Aunque en el procesador paralelo 200 se ilustra una única instancia de la unidad de procesamiento paralelo 202, se puede incluir cualquier número de instancias de la unidad de procesamiento paralelo 202. Por ejemplo, se pueden proporcionar múltiples instancias de la unidad de procesamiento paralelo 202 en una sola tarjeta adicional, o se pueden interconectar múltiples tarjetas adicionales. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden configurarse para interoperar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria local del procesador paralelo y/u otras diferencias de configuración. Por ejemplo, y en un ejemplo, algunas instancias de la unidad de procesamiento paralelo 202 pueden incluir unidades de coma flotante de precisión más alta con relación a otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento paralelo 202 o del procesador paralelo 200 pueden implementarse en una variedad de configuraciones y factores de forma, incluyendo, entre otros, ordenadores personales de sobremesa, portátiles o de mano, servidores, estaciones de trabajo, consolas de videojuegos y/o sistemas integrados.
[0088] LaFigura 2Bes un diagrama de bloques de una unidad de partición 220. En un ejemplo, la unidad de partición 220 es una instancia de una de las unidades de partición 220A-220N de laFigura 2A. Como se ilustra, la unidad de partición 220 incluye una caché L2221, una interfaz de memoria intermedia de trama 225 y una ROP 226 (unidad de operaciones de trama). La caché L2221 es una caché de lectura/escritura configurada para realizar operaciones de carga y almacenamiento recibidas desde la barra cruzada de memoria 216 y el ROP 226. Las lecturas fallidas y las solicitudes urgentes de reescritura son enviadas por la caché L2221 a la interfaz de la memoria intermedia de trama 225 para su procesamiento. Las actualizaciones sucias también pueden enviarse a la memoria intermedia de trama a través de la interfaz de la memoria intermedia de trama 225 para su procesamiento oportunista. En un ejemplo, la interfaz de memoria intermedia de trama 225 se conecta con una de las unidades de memoria de la memoria del procesador paralelo, como las unidades de memoria 224A-224N de laFigura 2A(por ejemplo, dentro de la memoria del procesador paralelo 222).
[0090] En aplicaciones gráficas, el ROP 226 es una unidad de procesamiento que realiza operaciones de trama, como plantillas, pruebas Z, mezclas y similares. Luego, la ROP 226 emite datos gráficos procesados que se almacenan en la memoria gráfica. En algunos ejemplos, la ROP 226 incluye lógica de compresión para comprimir datos de profundidad o de color que se escriben en memoria y descomprimir datos de profundidad o de color que se leen desde la memoria. En algunos ejemplos, el ROP 226 se incluye dentro de cada agrupación de procesamiento (por ejemplo, las agrupaciones 214A-214N de laFigura 2A) en lugar de dentro de la unidad de partición 220. En tal ejemplo, 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.
[0092] Los datos gráficos procesados pueden mostrarse en un dispositivo de visualización, como uno de los dispositivos de visualización 110 de laFigura 1, enviarse para su posterior procesamiento por el procesador o procesadores 102, o enviarse para su posterior procesamiento por una de las entidades de procesamiento dentro del procesador paralelo 200 de laFigura 2A.
[0094] LaFigura 2Ces un diagrama de bloques de una agrupación de procesamiento 214 dentro de una unidad de procesamiento paralelo. En un ejemplo, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 214A-214N de la figura 2A. La agrupación de procesamiento 214 puede configurarse para ejecutar muchos hilos en paralelo, donde el término "hilo" se refiere a una instancia de un programa concreto que se ejecuta en un conjunto concreto de datos de entrada. En algunos ejemplos, se usan técnicas de emisión de instrucción de única instrucción de múltiples datos (SIMD) para soportar la ejecución en paralelo de un gran número de hilos sin proporcionar múltiples unidades de instrucción independientes. En otros ejemplos, se usan técnicas de única instrucción de múltiples hilos (SIMT) para soportar la ejecución paralela de un gran número de hilos generalmente sincronizados, usando una unidad de instrucciones común configurada para emitir instrucciones en un conjunto de motores de procesamiento dentro de cada una de las agrupaciones de procesamiento. A diferencia del régimen de ejecución de SIMD, donde todos los motores de procesamiento ejecutan típicamente instrucciones idénticas, la ejecución de SIMT permite que diferentes hilos sigan más fácilmente rutas de ejecución divergentes a través de un programa de hilos dado. Los expertos en la materia comprenderán que un régimen de procesamiento SIMD representa un subconjunto funcional de un régimen de procesamiento SIMT.
[0095] El funcionamiento de la agrupación 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 paralelos SIMT. El gestor de canalización 232 recibe instrucciones del planificador 210 de laFigura 2Ay gestiona la ejecución de esas instrucciones a través de un multiprocesador gráfico 234 y/o una unidad de textura 236. El multiprocesador gráfico 234 ilustrado es una instancia a modo de ejemplo de un procesador paralelo de SIMT. Sin embargo, se pueden incluir varios tipos de procesadores paralelos de SIMT de diferentes arquitecturas dentro de la agrupación de procesamiento 214. Se pueden incluir una o más instancias del multiprocesador gráfico 234 dentro de una agrupación de procesamiento 214. El multiprocesador gráfico 234 puede procesar datos y se puede utilizar una barra cruzada de datos 240 para distribuir los datos procesados a uno de los múltiples destinos posibles, incluidas otras unidades de sombreado. El gestor de canalización 232 puede facilitar la distribución de datos procesados especificando destinos para los datos procesados que se distribuirán a través de la barra cruzada de datos 240.
[0097] Cada multiprocesador gráfico 234 dentro de la agrupación de procesamiento 214 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades lógicas aritméticas, unidades de carga-almacenamiento, etc.). La lógica de ejecución funcional se puede configurar de forma secuencial, de modo que se puedan emitir nuevas instrucciones antes de que se completen las anteriores. Se puede proporcionar lógica de ejecución funcional. La lógica funcional soporta una variedad de operaciones, incluidas operaciones de comparación aritmética de números enteros y de punto flotante, operaciones booleanas de desplazamiento de bits y cálculo de diversas funciones algebraicas. En un ejemplo, se puede aprovechar el mismo hardware funcional-unitario para realizar diferentes operaciones y puede estar presente cualquier combinación de unidades funcionales.
[0099] Las instrucciones transmitidas a la agrupación de procesamiento 214 constituyen un hilo. Un conjunto de hilos que se ejecutan en el conjunto de motores de procesamiento paralelo es un grupo de hilos. Un grupo de hilos ejecuta el mismo programa con diferentes datos de entrada. Cada hilo dentro de un grupo de hilos se puede asignar a un motor de procesamiento diferente dentro de un multiprocesador gráfico 234. Un grupo de hilos puede incluir menos hilos que el número de motores de procesamiento dentro del multiprocesador gráfico 234. Cuando un grupo de hilos incluye menos hilos que el número de motores de procesamiento, uno o varios de los motores de procesamiento pueden permanecer inactivos durante los ciclos en los que se procesa ese grupo de hilos. Un grupo de hilos también puede incluir más hilos que el número de motores de procesamiento dentro del multiprocesador gráfico 234. Cuando el grupo de hilos incluye más hilos 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 un ejemplo, pueden ejecutarse múltiples grupos de hilos concurrentemente en un multiprocesador de gráficos 234.
[0101] En un ejemplo, el multiprocesador gráfico 234 incluye una memoria caché interna para realizar operaciones de carga y almacenamiento. En un ejemplo, el multiprocesador de gráficos 234 puede prescindir de una caché interna y usar una memoria caché (por ejemplo, la caché L1 308) dentro de la agrupación de procesamiento 214. Cada multiprocesador gráfico 234 también tiene acceso a cachés L2 dentro de las unidades de partición (por ejemplo, unidades de partición 220A-220N de laFigura 2A) que se comparten entre todos las agrupaciones de procesamiento 214 y pueden usarse para transferir datos entre hilos. El multiprocesador gráfico 234 también puede acceder a la memoria global fuera de chip, que puede incluir una o más memorias de procesador paralelo local y/o memoria de sistema. Cualquier memoria externa a la unidad de procesamiento paralelo 202 puede utilizarse como memoria global. Los ejemplos en los que la agrupación de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la caché L1308.
[0103] Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para asignar direcciones virtuales a direcciones físicas. En otros ejemplos, una o más instancias de la MMU 245 pueden residir dentro de la interfaz de memoria 218 de laFigura 2A. La 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 (más información sobre mosaicos) y, opcionalmente, un índice de línea de caché. La MMU 245 puede incluir agrupaciones de traducción de direcciones (TLB) o cachés que pueden residir dentro del multiprocesador gráfico 234 o la caché L1 o la agrupación de procesamiento 214. La dirección física se procesa para distribuir la localidad de acceso a los datos de superficie y permitir un intercalado eficiente de las solicitudes entre las unidades de partición. El índice de la línea de caché se puede utilizar para determinar si una solicitud de una línea de caché es un acierto o un fallo.
[0105] En aplicaciones gráficas e informáticas, una agrupación de procesamiento 214 puede configurarse de tal manera que cada multiprocesador gráfico 234 esté acoplado a una unidad de textura 236 para realizar operaciones de mapeo de texturas, por ejemplo, determinar posiciones de muestras de textura, leer datos de textura y filtrar los datos de textura. Los datos de textura se leen desde una caché L1 de textura interna (no mostrada) o, en algunos ejemplos, desde la caché L1 dentro del multiprocesador de gráficos 234 y se extraen desde una caché L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador gráfico 234 envía las tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su posterior procesamiento o para almacenar la tarea procesada en una caché L2, en la memoria del procesador paralelo local o en la memoria del sistema a través de la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones de prerrasterizado) está configurada para recibir datos del multiprocesador gráfico 234, dirigir datos a unidades ROP, que pueden estar ubicadas con unidades de partición como se describe en el presente documento (por ejemplo, unidades de partición 220A-220N de laFigura 2A). La unidad preROP 242 puede realizar optimizaciones para la combinación de colores, organizar datos de color de píxeles y realizar traducciones de direcciones.
[0107] Se apreciará que la arquitectura central descrita en este documento es ilustrativa y que son posibles variaciones y modificaciones. Cualquier número de unidades de procesamiento, por ejemplo, multiprocesador gráfico 234, unidades de textura 236, preROP 242, etc., se puede incluir dentro de una agrupación de procesamiento 214. Además, aunque solo se muestra una agrupación de procesamiento 214, una unidad de procesamiento paralelo como la descrita en el presente documento puede incluir cualquier número de instancias de la agrupación de procesamiento 214. En un ejemplo, cada agrupación de procesamiento 214 puede configurarse para operar independientemente de otras agrupaciones de procesamiento 214 usando unidades de procesamiento separadas y distintas, cachés L1, etc.
[0108] LaFigura 2Dmuestra un multiprocesador gráfico 234. En tal ejemplo, el multiprocesador de gráficos 234 está acoplado al gestor de canalización 232 de la agrupación de procesamiento 214. El multiprocesador de gráficos 234 tiene una canalización de ejecución que incluye, pero sin limitación, una caché de instrucciones 252, una unidad de instrucciones 254, una unidad de mapeo de direcciones 256, un archivo de registro 258, uno o más núcleos de unidad de procesamiento de gráficos de propósito general (GPGPU) 262 y una o más unidades de carga/almacenamiento 266. Los núcleos de GPGPU 262 y las unidades de carga/almacenamiento 266 están acoplados con la memoria caché 272 y a la memoria compartida 270 mediante una interconexión de memoria y caché 268.
[0110] En un ejemplo, la caché de instrucciones 252 recibe un flujo de instrucciones para ejecutar desde el gestor de canalización 232. Las instrucciones se almacenan en la caché de instrucciones 252 y se envían para su ejecución por parte de la unidad de instrucciones 254. La unidad de instrucción 254 puede enviar instrucciones como grupos de hilos (por ejemplo, encapsulados), asignando cada hilo del grupo de hilos 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 mapeo de direcciones 256 se puede utilizar para traducir direcciones en el espacio de direcciones unificado a una dirección de memoria distinta a la que pueden acceder las unidades de carga/almacenamiento 266.
[0112] El archivo de registros 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador gráfico 324. El archivo de registro 258 proporciona almacenamiento temporal para los operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, núcleos GPGPU 262, unidades de carga/almacenamiento 266) del multiprocesador gráfico 324. En un ejemplo, el archivo de registro 258 se divide entre cada una de las unidades funcionales de manera que cada unidad funcional está asignada a una porción especializada del archivo de registro 258. En un ejemplo, el archivo de registro 258 se divide entre las diferentes envolventes que se ejecutan por el multiprocesador de gráficos 324.
[0114] Los núcleos GPGPU 262 pueden incluir cada uno unidades de coma flotante (FPU) y/o unidades aritméticas lógicas (ALU) enteras que se utilizan para ejecutar instrucciones del multiprocesador gráfico 324. Los núcleos de GPGPU 262 pueden ser similares en arquitectura o pueden diferir en arquitectura, de acuerdo con ejemplos. Por ejemplo, una primera porción de los núcleos de GPGPU 262 incluye una FPU de precisión sencilla y una ALU de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. En un ejemplo, las FPU pueden implementar la norma IEEE 754-2008 para aritmética de coma flotante o posibilitar aritmética de coma flotante de precisión variable. El multiprocesador gráfico 324 puede incluir además una o más unidades de función fija o función especial para realizar funciones específicas, como operaciones de copia de rectángulos o mezcla de píxeles. En un ejemplo, uno o más de los núcleos de GPGPU puede incluir también lógica de función fija o especial.
[0116] La interconexión de memoria y caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador gráfico 324 al archivo de registros 258 y a la memoria compartida 270. En un ejemplo, la interconexión de memoria y caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacén 266 implemente operaciones de carga y almacén entre la memoria compartida 270 y el archivo de registro 258. El archivo de registro 258 puede operar a la misma frecuencia que los núcleos de GPGPU 262, por lo tanto, la transferencia de datos entre los núcleos de GPGPU 262 y el archivo de registro 258 es de latencia muy baja. La memoria compartida 270 puede usarse para posibilitar la comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234. La memoria caché 272 se puede utilizar como caché de datos, por ejemplo, para almacenar en caché los datos de textura comunicados entre las unidades funcionales y la unidad de textura 236. La memoria compartida 270 también se puede utilizar como caché gestionada por programa. Los hilos que se ejecutan en los núcleos GPGPU 262 pueden almacenar datos de forma programática en la memoria compartida, además de los datos almacenados automáticamente en la memoria caché 272.
[0118] LasFiguras 3A-3Bilustran otros multiprocesadores gráficos. Los multiprocesadores gráficos 325, 350 ilustrados son variantes del multiprocesador gráfico 234 de laFigura 2C. Los multiprocesadores gráficos 325, 350 ilustrados se pueden configurar como un multiprocesador de transmisión (SM) capaz de ejecutar simultáneamente una gran cantidad de hilos de ejecución.
[0119] LaFigura 3Amuestra un multiprocesador gráfico 325. 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 laFigura 2D. Por ejemplo, el multiprocesador gráfico 325 puede incluir múltiples instancias de la unidad de instrucción 332A-332B, el archivo de registro 334A-334B y la o las unidades de textura 344A-344B. El multiprocesador gráfico 325 también incluye múltiples conjuntos de unidades o de ejecución de cálculo de gráficos (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 un ejemplo, las unidades de recurso de ejecución tienen una caché de instrucciones común 330, memoria caché de textura y/o de datos 342 y una memoria compartida 346. Los distintos componentes pueden comunicarse a través de una estructura de interconexión 327. En una realización, la estructura de interconexión 327 incluye uno o más conmutadores de barra transversal para permitir la comunicación entre los diversos componentes del multiprocesador de gráficos 325.
[0121] LaFigura 3B muestra un multiprocesador gráfico 350. El procesador gráfico incluye múltiples conjuntos de recursos de ejecución 356A-356D, donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucción, archivos de registro, núcleos GPGPU y unidades de almacenamiento de carga, como se ilustra en laFigura 2Dy laFigura 3A. Los recursos de ejecución 356A-356D pueden trabajar en conjunto con las unidades de textura 360A-360D para operaciones de textura, mientras comparten una caché de instrucciones 354 y una memoria compartida 362. En un ejemplo, 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 memoria de textura y/o de caché de datos 358A-358B. Los diversos componentes pueden comunicarse a través de una estructura de interconexión 352 similar a la estructura de interconexión 327 de laFigura 3A.
[0123] Los expertos en la materia comprenderán que la arquitectura descrita en lasFiguras 1, 2A-2Dy3A-3Bes descriptiva y no limitativa en cuanto al alcance. Por lo tanto, las técnicas aquí descritas pueden implementarse en cualquier unidad de procesamiento debidamente configurada, incluyendo, sin limitación, uno o más procesadores de aplicaciones móviles, una o más unidades centrales de procesamiento (CPU) de escritorio o servidor, incluidas CPU multinúcleo, una o más unidades de procesamiento paralelo, como la unidad de procesamiento paralelo 202 de laFigura 2A, así como uno o más procesadores gráficos o unidades de procesamiento para fines especiales.
[0125] En algunos ejemplos, un procesador paralelo o GPGPU, tal y como se describe en el presente documento, está conectado de forma comunicativa a núcleos de anfitrión/procesador para acelerar operaciones gráficas, operaciones de aprendizaje automático, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede estar conectada de forma comunicativa al procesador/núcleos del anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad como PCIe o NVLink). En otros ejemplos, la GPU se puede integrar en el mismo paquete o chip que los núcleos y se puede acoplar de manera comunicativa a los núcleos a través de un bus/interconexión interna del procesador (es decir, interna al paquete o chip). 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 circuitos/lógica dedicados para procesar de manera eficiente estos comandos/instrucciones.
[0127] Técnicas para la interconexión entre la GPU y el procesador anfitrión
[0129] LaFigura 4Ailustra una arquitectura ejemplar en la que una pluralidad de GPU 410-413 están acopladas de forma 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 un ejemplo, los enlaces de alta velocidad 440-443 soportan un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o mayor, dependiendo de la implementación. Pueden usarse diversos protocolos de interconexión que incluyen, pero sin limitación, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes de la invención no están limitados a ningún protocolo de comunicación o caudal particular.
[0131] Además, en un ejemplo, dos o más de las GPU 410-413 están interconectadas a través de enlaces de alta velocidad 444-445, que pueden implementarse utilizando los mismos protocolos/enlaces o diferentes a los utilizados para los enlaces de alta velocidad 440-443. De manera similar, dos o más de los procesadores multinúcleo 405-406 pueden conectarse a través de un enlace de alta velocidad 433, que puede ser un bus multiprocesador simétrico (SMP) que funcione a 20 GB/s, 30 GB/s, 120 GB/s o más. Como alternativa, toda la comunicación entre los diversos componentes del sistema que se muestran en laFigura 4Apuede lograrse utilizando los mismos protocolos/enlaces (por ejemplo, a través de una estructura de interconexión común). Sin embargo, como se mencionó, los principios subyacentes de la invención no están limitados a un tipo particular de tecnología de interconexión.
[0133] En un ejemplo, cada procesador multinúcleo 405-406 está conectado de forma comunicativa a una memoria de procesador 401-402, a través de interconexiones de memoria 430-431, respectivamente, y cada GPU 410-413 está conectada de forma comunicativa a una memoria de GPU 420-423 a través de interconexiones de memoria de GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar tecnologías de acceso a la memoria iguales o diferentes. A modo de ejemplo, y sin carácter limitativo, las memorias del procesador 401-402 y las memorias de la GPU 420-423 pueden ser memorias volátiles, como memorias dinámicas de acceso aleatorio (DRAM) (incluidas las DRAM apiladas), DDR SDRAM gráfica (GDDR) (por ejemplo, GDDR5, GDDR6) o memoria de alto ancho de banda (HBM), y/o pueden ser memorias no volátiles, tal como 3D XPoint o Nano-Ram. En un ejemplo, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
[0135] Como se describe a continuación, aunque los distintos procesadores 405-406 y GPU 410-413 pueden estar acoplados físicamente a una memoria concreta 401-402, 420-423, respectivamente, se puede implementar una arquitectura de memoria unificada en la que el mismo espacio de direcciones del sistema virtual (también denominado espacio de "direcciones efectivas") se distribuye entre todas las distintas memorias físicas. Por ejemplo, las memorias del procesador 401-402 pueden comprender cada una 64 GB del espacio de direcciones de la memoria del sistema y las memorias de la 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).
[0137] LaFigura 4Bilustra detalles adicionales sobre una interconexión entre un procesador multinúcleo 407 y un módulo de aceleración gráfica 446. El módulo de aceleración gráfica 446 puede incluir uno o más chips GPU integrados en una tarjeta de línea que está acoplada al procesador 407 a través del enlace de alta velocidad 440. Alternativamente, el módulo de aceleración gráfica 446 puede integrarse en el mismo paquete o chip que el procesador 407.
[0139] El procesador ilustrado 407 incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de traducción 461A-461D y una o más cachés 462A-462D. Los núcleos pueden incluir otros componentes para ejecutar instrucciones y procesar datos que no se muestran para no oscurecer los principios fundamentales de la invención (por ejemplo, unidades de obtención de instrucciones, unidades de predicción de ramificación, decodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y nivel 2 (L2). Además, pueden incluirse una o más memorias caché compartidas 426 en la jerarquía de almacenamiento en memoria caché y compartirse por conjuntos de los núcleos 460A-460D. Por ejemplo, un ejemplo 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 este ejemplo, una de las memorias caché L2 y L3 están compartidas por dos núcleos adyacentes. El procesador 407 y el módulo de integración de acelerador de gráficos 446 se conectan con la memoria de sistema 441, que puede incluir las memorias de procesador 401-402.
[0141] Se mantiene la coherencia para datos e instrucciones almacenados en las diversas memorias caché 462A-462D, 456 y la memoria de sistema 441 mediante comunicación entre núcleos a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener una lógica/circuito de coherencia de caché asociado con la misma para comunicarse a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de vigilancia de caché a través del bus de coherencia 464 para vigilar los accesos a caché. Las técnicas monitorización/coherencia de memoria caché se comprenden bien por los expertos en la materia y no se describirán en detalle en este caso para evitar oscurecer los principios subyacentes de la invención.
[0143] En un ejemplo, un circuito proxy 425 conecta de forma comunicativa el módulo de aceleración gráfica 446 al bus de coherencia 464, lo que permite al módulo de aceleración gráfica 446 participar en el protocolo de coherencia de caché como un par de los núcleos. En concreto, una interfaz 435 proporciona conectividad al circuito proxy 425 a través de un enlace de alta velocidad 440 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 437 conecta el módulo de aceleración gráfica 446 al enlace 440.
[0145] En una implementación, un circuito de integración de acelerador 436 proporciona servicios de gestión de caché, acceso a memoria, gestión de contexto y gestión de interrupciones en nombre de una pluralidad de motores de procesamiento gráfico 431, 432, N del módulo de aceleración gráfica 446. Los motores de procesamiento gráfico 431, 432, N pueden comprender cada uno una unidad de procesamiento gráfico (GPU) independiente. Alternativamente, los motores de procesamiento gráfico 431, 432, N pueden comprender diferentes tipos de motores de procesamiento gráfico dentro de una GPU, tales como unidades de ejecución gráfica, motores de procesamiento multimedia (por ejemplo, codificadores/decodificadores de vídeo), muestreadores y motores de transferencia. En otras palabras, el módulo de aceleración gráfica puede ser una GPU con una pluralidad de motores de procesamiento gráfico 431-432, N, o los motores de procesamiento gráfico 431-432, N pueden ser GPU individuales integradas en un paquete, tarjeta de línea o chip comunes.
[0147] En un ejemplo, 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, como traducciones de memoria virtual a física (también denominadas traducciones 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 consulta de traducción (TLB) (no mostrado) para almacenar en caché las traducciones de direcciones virtuales/efectivas a direcciones físicas/reales. En una implementación, una caché 438 almacena comandos y datos para un acceso eficiente por los motores de procesamiento de gráficos 431-432, N. En un ejemplo, los datos almacenados en la caché 438 y en las memorias de gráficos 433-434, N se mantienen coherentes con las cachés de núcleo 462A-462D, 456 y la memoria de sistema 411. Como se ha mencionado, esto puede conseguirse mediante el circuito proxy 425 que toma parte en el mecanismo de coherencia de caché en nombre de la caché 438 y las memorias 433-434, N (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con modificaciones/accesos de líneas de caché en las cachés de procesador 462A-462D, 456 y recibiendo actualizaciones desde la caché 438).
[0148] Un conjunto de registros 445 almacena datos de contexto para hilos ejecutados por los motores de procesamiento gráfico 431-432, N, y un circuito de gestión de contexto 448 gestiona los contextos de los hilos. Por ejemplo, el circuito de gestión de contextos 448 puede realizar operaciones de guardado y restauración para guardar y restaurar los contextos de los distintos hilos durante los cambios de contexto (por ejemplo, cuando se guarda un primer hilo y se almacena un segundo hilo para que este último pueda ser ejecutado por un motor de procesamiento gráfico). Por ejemplo, en un cambio de contexto, el circuito de gestión de contexto 448 puede almacenar los valores actuales del registro en una región designada de la memoria (por ejemplo, identificada por un puntero de contexto). A continuación, puede restaurar los valores del registro al volver al contexto. En una realización, un circuito de gestión de interrupciones 447 recibe y procesa interrupciones recibidas desde los dispositivos de sistema.
[0149] En una implementación, las direcciones virtuales/efectivas de un motor de procesamiento gráfico 431 se traducen a direcciones reales/físicas en la memoria del sistema 411 mediante la MMU 439. Una realización del circuito de integración de acelerador 436 admite múltiples (por ejemplo, 4, 8, 16) módulos de aceleración de gráficos 446 y/u otros dispositivos de aceleración. El módulo acelerador gráfico 446 puede estar dedicado a una única aplicación ejecutada en el procesador 407 o puede compartirse entre varias aplicaciones. En un ejemplo, hay un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 431-432, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos pueden subdividirse en "porciones" que se asignan a diferentes máquinas virtuales y/o aplicaciones en función de los requisitos de procesamiento y las prioridades asociadas a las máquinas virtuales y/o aplicaciones.
[0150] Por lo tanto, el circuito de integración del acelerador actúa como puente hacia el sistema para el módulo de aceleración gráfica 446 y proporciona servicios de traducción de direcciones y caché de memoria del sistema. Además, el circuito de integración del acelerador 436 puede proporcionar funciones de virtualización para que el procesador anfitrión gestione la virtualización de los motores de procesamiento gráfico, las interrupciones y la gestión de la memoria. Dado que los recursos de hardware de los motores de procesamiento gráfico 431-432, N se asignan explícitamente al espacio de direcciones real que ve el procesador anfitrión 407, cualquier procesador anfitrión puede direccionar estos recursos directamente utilizando un valor de dirección efectivo. Una función del circuito de integración de acelerador 436, en un ejemplo, es la separación física de los motores de procesamiento de gráficos 431-432, N de modo que aparecen al sistema como unidades independientes.
[0151] Como se ha mencionado, en el ejemplo ilustrado, una o más memorias gráficas 433-434, M están acopladas a cada uno de los motores de procesamiento gráfico 431-432, N, respectivamente. Las memorias gráficas 433-434, M almacenan instrucciones y datos que están siendo procesados por cada uno de los motores de procesamiento gráfico 431-432, N. Las memorias gráficas 433-434, M pueden ser memorias volátiles, como DRAM (incluidas DRAM apiladas), memoria GDDR (por ejemplo, GDDR5, GDDR6) o HBM, y/o pueden ser memorias no volátiles, como 3D XPoint o Nano-Ram.
[0152] En un ejemplo, para reducir el tráfico de datos a través del enlace 440, se utilizan técnicas de sesgo para garantizar que los datos almacenados en las memorias gráficas 433-434, M sean los datos que utilizarán con mayor frecuencia los motores de procesamiento gráfico 431-432, N y que, preferiblemente, no utilicen 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 gráfico 431-432, N) dentro de las cachés 462A-462D, 456 de los núcleos y la memoria del sistema 411.
[0153] LaFigura 4Cilustra otro ejemplo en el que el circuito de integración del acelerador 436 está integrado en el procesador 407. En este ejemplo, los motores de procesamiento de gráficos 431-432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración de acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, pueden utilizar cualquier forma de bus o protocolo de interfaz). El circuito de integración de acelerador 436 puede realizar las mismas operaciones que las descritas con respecto a laFigura 4B, pero potencialmente con un mayor rendimiento dada su proximidad al bus de coherencia 462 y a las cachés 462A-462D, 426.
[0154] Un ejemplo admite diferentes modelos de programación, incluido un modelo de programación de proceso dedicado (sin virtualización del módulo de aceleración gráfica) y modelos de programación compartidos (con virtualización). Estos últimos pueden incluir modelos de programación controlados por el circuito de integración del acelerador 436 y modelos de programación controlados por el módulo de aceleración gráfica 446.
[0155] En un ejemplo del modelo de proceso dedicado, los motores de procesamiento gráfico 431-432, N están dedicados a una única aplicación o proceso bajo un único sistema operativo. La aplicación única puede canalizar otras solicitudes de aplicación a los motores gráficos 431-432, N, proporcionando virtualización dentro de una máquina virtual/partición. En los modelos de programación de procesos dedicados, los motores de procesamiento gráfico 431-432, N, pueden ser compartidos por múltiples particiones de VM/aplicaciones. Los modelos compartidos requieren un hipervisor del sistema para virtualizar los motores de procesamiento gráfico 431-432, N, a fin de permitir el acceso de cada sistema operativo. En los sistemas de una sola partición sin hipervisor, los motores de procesamiento gráfico 431-432, N son propiedad del sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento gráfico 431-432, N para proporcionar acceso a cada proceso o aplicación.
[0156] Para el modelo de programación compartida, el módulo de aceleración gráfica 446 o un motor de procesamiento gráfico individual 431-432, N selecciona un elemento de proceso utilizando un identificador de proceso. En un ejemplo, los elementos de proceso se almacenan en memoria de sistema 411 y son direccionables usando las técnicas de traducción de dirección efectivo a dirección real descritas en el presente documento. El manejador de proceso puede ser un valor específico de la implementación proporcionado al proceso de anfitrión cuando registra su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, solicitando que el software de sistema añada el elemento de proceso a la lista enlazada de elementos de 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.
[0157] LaFigura 4Dilustra un ejemplo de segmento de integración del acelerador 490. Tal como se utiliza en el presente documento, un "segmento" comprende una porción específica de los recursos de procesamiento del circuito de integración de acelerador 436. El espacio de dirección efectiva de aplicación 482 dentro de la memoria de sistema 411 almacena elementos de proceso 483. En un ejemplo, los elementos de proceso 483 se almacenan en respuesta a invocaciones de GPU 481 desde las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado de proceso para la correspondiente aplicación 480. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En este último caso, WD 484 es un puntero a la cola de solicitudes de trabajo en el espacio de direcciones de la aplicación 482.
[0158] El módulo de aceleración gráfica 446 y/o los motores de procesamiento gráfico individuales 431-432, N pueden ser compartidos por todos o por un subconjunto de los procesos del sistema. Los ejemplos invención incluyen una infraestructura para configurar el estado de proceso y enviar un WD 484 a un módulo de aceleración de gráficos 446 para empezar un trabajo en un entorno virtualizado.
[0159] En una implementación, el modelo de programación de procesos dedicados es específico de la implementación. En este modelo, un único proceso es propietario del módulo de aceleración gráfica 446 o de un motor de procesamiento gráfico individual 431. Dado que el módulo de aceleración gráfica 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 propietario en el momento en que se asigna el módulo de aceleración gráfica 446.
[0160] Durante el funcionamiento, una unidad de obtención de WD 491 en la sección de integración del acelerador 490 obtiene el siguiente WD 484, que incluye una indicación del trabajo que debe realizar uno de los motores de procesamiento gráfico del módulo de aceleración gráfica 446. Los datos del WD 484 pueden almacenarse en los registros 445 y ser utilizados por la MMU 439, el circuito de gestión de interrupciones 447 y/o el circuito de gestión de contexto 446, tal y como se ilustra. Por ejemplo, una realización de la MMU 439 incluye circuitería de recorrido de páginas/segmentos para acceder a las tablas de segmentos/páginas 486 dentro del espacio de direcciones virtual del SO 485. El circuito de gestión de interrupciones 447 puede procesar los eventos de interrupción 492 recibidos desde el módulo de aceleración de gráficos 446. Cuando se realizan operaciones de gráficos, se traduce una dirección efectiva 493 generada por un motor de procesamiento de gráficos 431-432, N a una dirección real por la MMU 439. En un ejemplo, el mismo conjunto de registros 445 se duplica para cada motor de procesamiento gráfico 431-432, N y/o módulo de aceleración gráfica 446 y puede ser inicializado por el hipervisor o el sistema operativo. Cada uno de estos registros duplicados puede incluirse en una sección de integración del acelerador 490. En laTabla 1se muestran registros ilustrativos que pueden ser inicializados por el hipervisor.
[0161] Tabla 1- Registros inicializados de hipervisor
[0164]
[0165] 9 Registro de descripción de almacenamiento
[0166] En laTabla 2se muestran registros ejemplares que pueden ser inicializados por el sistema operativo.
[0167] Tabla 2 -Registros inicializados por sistema operativo
[0170]
[0172] En un ejemplo, cada WD 484 es específico para un módulo de aceleración gráfica 446 y/o motores de procesamiento gráfico 431-432, N concretos. Contiene toda la información que un motor de procesamiento gráfico 431-432, N necesita para realizar su trabajo o puede ser un puntero a una ubicación de memoria donde la aplicación ha configurado una cola de comandos de trabajo que debe completarse.
[0173] LaFigura 4Eilustra detalles adicionales de un modelo compartido. Este ejemplo incluye un espacio de direcciones real de hipervisor 498 en el que se almacena una lista de elementos de proceso 499. Se puede acceder al espacio de direcciones real del hipervisor 498 a través de un hipervisor 496 que virtualiza los motores del módulo de aceleración gráfica para el sistema operativo 495.
[0174] Los modelos de programación compartidos permiten que todos o un subconjunto de procesos de todas o un subconjunto de particiones del sistema utilicen un módulo de aceleración gráfica 446. Existen dos modelos de programación en los que el módulo de aceleración gráfica 446 es compartido por múltiples procesos y particiones: compartido por intervalos de tiempo y compartido dirigido por gráficos.
[0175] En este modelo, el hipervisor del sistema 496 posee el módulo de aceleración de gráficos 446 y pone su función a disposición de todos los sistemas operativos 495. Para que un módulo de aceleración gráfica 446 sea compatible con la virtualización mediante el hipervisor del sistema 496, el módulo de aceleración gráfica 446 debe cumplir 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 bien el módulo de aceleración gráfica 446 debe proporcionar un mecanismo de guardado y restauración del contexto.2) El módulo de aceleración gráfica 446 garantiza que la solicitud de trabajo de una aplicación se complete en un tiempo determinado, incluyendo cualquier error de traducción, o bien el módulo de aceleración gráfica 446 ofrece la posibilidad de adelantarse al procesamiento del trabajo.3) El módulo de aceleración gráfica 446 debe garantizar la equidad entre los procesos cuando funciona en el modelo de programación compartida dirigida.
[0176] En un ejemplo, para el modelo compartido, la aplicación 480 debe realizar una llamada al sistema operativo 495 con un módulo de aceleración gráfica 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de área de guardado/restauración de contexto (CSRP). El tipo de módulo de aceleración gráfica 446 describe la función de aceleración prevista para la llamada al sistema. El tipo de módulo de aceleración gráfica 446 puede ser un valor específico del sistema. El WD está formateado específicamente para el módulo de aceleración gráfica 446 y puede adoptar la forma de un comando del módulo de aceleración gráfica 446, un puntero de dirección efectiva a una estructura definida por el usuario, un puntero de dirección efectiva a una cola de comandos o cualquier otra estructura de datos para describir el trabajo que debe realizar el módulo de aceleración gráfica 446. En un ejemplo, el valor de AMR es el estado de AMR que se debe usar para el proceso actual. El valor pasado al sistema operativo es similar a una aplicación que configura el AMR. Si las implementaciones del circuito de integración del acelerador 436 y del módulo de aceleración gráfica 446 no admiten un registro de anulación de la máscara de autoridad del usuario (UAMOR), el sistema operativo puede aplicar el valor UAMOR actual al valor AMR antes de pasar el AMR en la llamada al hipervisor. El hipervisor 496 puede aplicar opcionalmente el Registro de anulación de máscara de autoridad actual.
[0177] El valor (AMOR) antes de colocar el AMR en el elemento de proceso 483. En un ejemplo, el CSRP es uno de los registros 445 que contienen la dirección efectiva de un área en el espacio de direcciones de la aplicación 482 para que el módulo de aceleración de gráficos 446 grabe y restablezca el estado de contexto. Este puntero es opcional si no es necesario guardar ningún estado entre trabajos o cuando se interrumpe un trabajo. El área de guardado/restauración del contexto puede ser memoria del sistema fijada.
[0178] Al recibir la llamada del sistema, el sistema operativo 495 puede verificar que la aplicación 480 se haya registrado y se le haya concedido la autoridad para utilizar el módulo de aceleración gráfica 446. El sistema operativo 495 llama entonces al hipervisor 496 con la información mostrada en laTabla 3.
[0179] Tabla 3- Parámetros de llamada de SO a hipervisor
[0182]
[0184] Al recibir la llamada del hipervisor, el hipervisor 496 verifica que el sistema operativo 495 se haya registrado y se le haya concedido la autoridad para utilizar el módulo de aceleración gráfica 446. A continuación, el hipervisor 496 coloca el elemento de proceso 483 en la lista enlazada de elementos de proceso para el tipo de módulo de aceleración gráfica 446 correspondiente. El elemento de proceso puede incluir la información que se muestra en laTabla 4
[0185] Tabla 4- Información de elemento de proceso
[0188]
[0190] En un ejemplo, el hipervisor inicializa una pluralidad de registros 445 de la porción de integración del acelerador 490. Como se ilustra en laFigura 4F, un ejemplo emplea una memoria unificada direccionable a través de un espacio de direcciones de memoria virtual común que se utiliza para acceder a las memorias físicas del procesador 401-402 y a las memorias de la GPU 420-423. En esta implementación, las operaciones ejecutadas en las GPU 410-413 utilizan el mismo espacio de direcciones de memoria virtual/efectiva para acceder a las memorias de los procesadores 401-402 y viceversa, lo que simplifica la programabilidad. En un ejemplo, una primera porción del espacio de direcciones virtual/efectivo está asignada a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420, y así sucesivamente. De este modo, todo el espacio de memoria virtual/efectiva (a veces denominado espacio de direcciones efectivo) se distribuye entre cada una de las memorias del procesador 401-402 y las memorias de la GPU 420-423, lo que permite a cualquier procesador o GPU acceder a cualquier memoria física con una dirección virtual asignada a dicha memoria.
[0191] En un ejemplo, los circuitos de gestión de sesgo/coherencia 494A-494E dentro de una o más de las MMU 439A-439E garantizan la coherencia de la caché entre las cachés de los procesadores anfitrión (por ejemplo, 405) y las GPU 410-413, e implementan técnicas de sesgo que indican las memorias físicas en las que deben almacenarse determinados tipos de datos. Si bien en laFigura 4Fse ilustran múltiples instancias de circuitos de gestión de polarización/coherencia 494A-494E, los circuitos de polarización/coherencia se pueden implementar dentro de la MMU de uno o más procesadores anfitriones 405 y/o dentro del circuito de integración de acelerador 436.
[0192] Un ejemplo permite que la memoria conectada a la GPU 420-423 se asigne como parte de la memoria del sistema y se acceda a ella mediante la tecnología de memoria virtual compartida (SVM), pero sin sufrir los inconvenientes típicos de rendimiento asociados con la coherencia total de la caché del sistema. La capacidad de acceder a la memoria conectada a la GPU 420-423 como memoria del sistema sin una sobrecarga onerosa de coherencia de caché proporciona un entorno operativo beneficioso para la descarga de la GPU. Esta disposición permite al software del procesador anfitrión 405 configurar operandos y acceder a los resultados de los cálculos, sin la sobrecarga que suponen las copias de datos DMA de E/S tradicionales. Estas copias tradicionales implican llamadas al controlador, interrupciones y accesos de E/S mapeados en memoria (MMIO), todos ellos ineficientes en comparación con los accesos simples a la memoria. Al mismo tiempo, la capacidad de acceder a la memoria conectada a la GPU 420-423 sin sobrecargas de coherencia de caché puede ser fundamental para el tiempo de ejecución de un cálculo descargado. En casos con un tráfico de memoria de escritura en retransmisión sustancial, por ejemplo, la sobrecarga de coherencia de la caché puede reducir significativamente el ancho de banda de escritura efectivo que ve una GPU 410-413. La eficiencia de la configuración de los operandos, la eficiencia del acceso a los resultados y la eficiencia del cálculo de la GPU influyen en la eficacia de la descarga de la GPU.
[0194] En una implementación, la selección entre el sesgo de la GPU y el sesgo del procesador anfitrión se basa en una estructura de datos de seguimiento del sesgo. Se puede utilizar, por ejemplo, una tabla de sesgos, que puede ser una estructura granular por página (es decir, controlada con la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria conectada a la GPU. La tabla de sesgos puede implementarse en un rango de memoria robada de una o más memorias conectadas a la GPU 420-423, con o sin una caché de sesgos en la GPU 410-413 (por ejemplo, para almacenar en caché las entradas de la tabla de sesgos utilizadas con frecuencia o recientemente). Alternativamente, toda la tabla de sesgos puede mantenerse dentro de la GPU.
[0196] En una implementación, se accede a la entrada de la tabla de sesgos asociada con cada acceso a la memoria 420-423 conectada a la GPU antes del acceso real a la memoria de la GPU, lo que provoca las siguientes operaciones. En primer lugar, las solicitudes locales de la GPU 410-413 que encuentran su página en el sesgo de la GPU se reenvían directamente a la memoria de la GPU correspondiente 420-423. Las solicitudes locales de la GPU que encuentran su página en el sesgo del anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad, como se ha mencionado anteriormente). En un ejemplo, las solicitudes del procesador 405 que encuentran la página solicitada en el desvío de procesador de anfitrión completan la solicitud como una lectura de memoria normal. Alternativamente, las solicitudes dirigidas a una página sesgada hacia la GPU pueden reenviarse a la GPU 410-413. A continuación, la GPU puede transferir la página a un procesador anfitrión si no la está utilizando en ese momento.
[0198] El estado de sesgo de una página se puede cambiar mediante un mecanismo basado en software, un mecanismo basado en software asistido por hardware o, en un conjunto limitado de casos, un mecanismo basado exclusivamente en hardware.
[0200] Un mecanismo para cambiar el estado de polarización emplea una llamada API (por ejemplo, OpenCL), que, a su vez, llama al controlador del dispositivo de la GPU, el cual, a su vez, envía un mensaje (o pone en cola un descriptor de comando) a la GPU indicándole que cambie el estado de polarización y, para algunas transiciones, realice una operación de vaciado de la caché en el anfitrión. La operación de vaciado de la caché es necesaria para pasar del sesgo del procesador anfitrión 405 al sesgo de la GPU, pero no es necesaria para la transición inversa.
[0202] En un ejemplo, la coherencia de la caché se mantiene haciendo que las páginas sesgadas por la GPU sean temporalmente no almacenables en caché por el procesador anfitrión 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso a la GPU 410, que puede conceder o denegar el acceso de inmediato, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410, es conveniente asegurarse de que las páginas sesgadas hacia la GPU sean aquellas que necesita la GPU, pero no el procesador anfitrión 405, y viceversa.
[0204] Canalización de procesamiento gráfico
[0206] LaFigura 5ilustra un canal de procesamiento gráfico 500. En un ejemplo, un procesador de gráficos puede implementar la canalización de procesamiento de gráficos 500 ilustrada. El procesador gráfico puede incluirse dentro de los subsistemas de procesamiento paralelo descritos en el presente documento, como el procesador paralelo 200 de laFigura 2A, que es una variante del procesador o procesadores paralelos 112 de laFigura 1. Los diversos sistemas de procesamiento paralelo pueden implementar la canalización de procesamiento gráfico 500 a través de una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 202 de laFigura 2A) como se describe en el presente documento. Por ejemplo, una unidad de sombreador (por ejemplo, el multiprocesador gráfico 234 de laFigura 2D) puede configurarse para realizar las funciones de una o más de una unidad de procesamiento de vértices 504, una unidad de procesamiento de control de teselación 508, una unidad de procesamiento de evaluación de teselación 512, una unidad de procesamiento de geometría 516 y una unidad de procesamiento de fragmentos/píxeles 524. Las funciones del ensamblador de datos 502, los ensambladores de primitivas 506, 514, 518, la unidad de teselación 510, el rasterizador 522 y la unidad de operaciones de rasterizado 526 también pueden ser realizadas por otros motores de procesamiento dentro de un agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 214 de laFigura 3A) y una unidad de partición correspondiente (por ejemplo, la unidad de partición 220A-220N de laFigura 2C). La canalización de procesamiento gráfico 500 también puede implementarse utilizando unidades de procesamiento dedicadas para una o más funciones. En un ejemplo, pueden realizarse una o más porciones de la canalización de procesamiento de gráficos 500 mediante lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, la CPU). En un ejemplo, una o más partes del canal de procesamiento gráfico 500 pueden acceder a la memoria integrada en el chip (por ejemplo, la memoria del procesador paralelo 222, como en laFigura 2A) a través de una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de laFigura 2A.
[0208] En un ejemplo, el ensamblador de datos 502 es una unidad de procesamiento que recopila datos de vértices para superficies y primitivas. A continuación, el ensamblador de datos 502 envía los datos de vértices, incluidos los atributos de vértices, a la unidad de procesamiento de vértices 504. La unidad de procesamiento de vértices 504 es una unidad de ejecución programable que ejecuta programas de sombreado de vértices, iluminación y transformación de datos de vértices según lo especificado por los programas de sombreado de vértices. La unidad de procesamiento de vértices 504 lee los datos almacenados en la caché, la memoria local o la memoria del sistema para utilizarlos en el procesamiento de los datos de vértices y puede programarse para transformar los datos de vértices de una representación de coordenadas basada en objetos a un espacio de coordenadas del espacio mundial o a un espacio de coordenadas normalizadas del dispositivo.
[0210] Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértices desde la unidad de procesamiento de vértices 504. El ensamblador de primitivas 506 lee y almacena los atributos de los vértices según sea necesario y construye primitivas gráficas para su procesamiento por parte de la unidad de control de teselación 508. Las primitivas gráficas incluyen triángulos, segmentos de línea, puntos, parches, etc., tal y como admiten diversas interfaces de programación de aplicaciones (API) de procesamiento gráfico.
[0212] La unidad de procesamiento de control de teselación 508 trata los vértices de entrada como puntos de control para un parche geométrico. Los puntos de control se transforman desde una representación de entrada del parche (por ejemplo, las bases del parche) a una representación adecuada para su uso en la evaluación de la superficie por parte de la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también puede calcular factores de teselación para los bordes de los parches geométricos. Un factor de teselación se aplica a un solo borde y cuantifica un nivel de detalle dependiente de la vista asociado con el borde. Una unidad de teselación 510 está configurada para recibir los factores de teselación para los bordes de un parche y teselar el parche en múltiples primitivas geométricas, tales como primitivas de línea, triángulo o cuadrilátero, que se transmiten a una unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de evaluación de teselación 512 opera sobre coordenadas parametrizadas del parche subdividido para generar una representación de superficie y atributos de vértices para cada vértice asociado con las primitivas geométricas.
[0214] Una segunda instancia de un ensamblador de primitivas 514 recibe atributos de vértices de la unidad de procesamiento de evaluación de teselación 512, lee los atributos de vértices almacenados según sea necesario y construye primitivas gráficas para su procesamiento por parte de la unidad de procesamiento geométrico 516. La unidad de procesamiento geométrico 516 es una unidad de ejecución programable que ejecuta programas de sombreado geométrico para transformar primitivas gráficas recibidas del ensamblador de primitivas 514 según lo especificado por los programas de sombreado geométrico. En un ejemplo, la unidad de procesamiento de geometría 516 está programada para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
[0216] En algunos ejemplos, la unidad de procesamiento geométrico 516 puede añadir o eliminar elementos en el flujo geométrico. La unidad de procesamiento geométrico 516 envía los parámetros y vértices que especifican las nuevas primitivas gráficas al ensamblador de primitivas 518. El ensamblador de primitivas 518 recibe los parámetros y vértices de la unidad de procesamiento geométrico 516 y construye primitivas gráficas para su procesamiento por parte de una unidad de escala, selección y recorte de ventana gráfica 520. La unidad de procesamiento geométrico 516 lee los datos almacenados en la memoria del procesador paralelo o en la memoria del sistema para utilizarlos en el procesamiento de los datos geométricos. La unidad de escala, selección y recorte de la ventana gráfica 520 realiza el recorte, la selección y el escalado de la ventana gráfica y envía los primitivos gráficos procesados a un rasterizador 522.
[0218] El rasterizador 522 puede realizar el recorte de profundidad y otras optimizaciones basadas en la profundidad. El rasterizador 522 también realiza la conversión de escaneo en las nuevas primitivas gráficas para generar fragmentos y envía esos fragmentos y los datos de cobertura asociados a la unidad de procesamiento de fragmentos/píxeles 524.
[0219] 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 transforma los fragmentos o píxeles recibidos desde el rasterizador 522, según lo especificado por los programas de sombreador de fragmentos o píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede estar programada para realizar operaciones que incluyen, entre otras, mapeo de textura, sombreado, combinación, corrección de textura y corrección de perspectiva para producir fragmentos o píxeles sombreados que se envían a una unidad de operaciones de rasterizado 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer datos almacenados en la memoria de procesador paralelo o en la memoria de sistema para su uso al procesar los datos de fragmentos. Los programas de sombreador de fragmentos o píxeles se pueden configurar para sombrear en granularidades de muestra, píxel, mosaico u otras, dependiendo de la frecuencia de muestreo configurada para las unidades de procesamiento.
[0221] La unidad de operaciones rasterizadas 526 es una unidad de procesamiento que realiza operaciones rasterizadas, incluyendo, entre otras, plantillas, prueba z, mezcla y similares, y envía datos de píxeles como datos gráficos procesados para su almacenamiento en la memoria gráfica, por ejemplo, la memoria del procesador paralelo 222 como en laFigura 2A, y/o la memoria del sistema 104 como en laFigura 1, para su visualización en uno o varios dispositivos de visualización 110 o para su posterior procesamiento por uno de los procesadores 102 o procesadores paralelos 112. En algunos ejemplos, la unidad de operaciones de rasterización 526 está configurada para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde la memoria.
[0222] LaFigura 6ilustra un dispositivo informático 600 que aloja un mecanismo de coordinación de inferencias y utilización de procesamiento ("mecanismo de coordinación/utilización") 610. El dispositivo informático 600 representa un dispositivo de comunicación y procesamiento de datos que incluye (entre otros) dispositivos inteligentes portátiles, teléfonos inteligentes, dispositivos de realidad virtual (VR), visores montados en la cabeza (HMD), ordenadores portátiles, dispositivos del Internet de las cosas (IoT), ordenadores portátiles, ordenadores de sobremesa, ordenadores servidor, etc., y es similar o igual al dispositivo informático 100 de laFigura 1; por consiguiente, en aras de la brevedad, la claridad y la facilidad de comprensión, muchos de los detalles mencionados anteriormente con referencia a lasFiguras 1-5no se comentan ni se repiten en lo sucesivo.
[0224] El dispositivo informático 600 puede incluir además (sin limitaciones) una máquina autónoma o un agente con inteligencia artificial, como un agente o máquina mecánica, un agente o máquina electrónica, un agente o máquina virtual, un agente o máquina electromecánica, etc. Algunos ejemplos de máquinas autónomas o agentes con inteligencia artificial pueden incluir (sin limitación) robots, vehículos autónomos (por ejemplo, coches autónomos, aviones autónomos, barcos autónomos, etc.), equipos autónomos (vehículos de construcción autónomos, equipos médicos autónomos, etc.) y/o similares. A través de todo este documento, "dispositivo informático" puede denominarse de manera intercambiable "máquina autónoma" o "agente artificialmente inteligente" o simplemente "robot".
[0226] Se contempló que, aunque en este documento se hace referencia a "vehículo autónomo" y "conducción autónoma", los ejemplos no se limitan a ellos. Por ejemplo, "vehículo autónomo" no se limita a un automóvil, sino que puede incluir cualquier número y tipo de máquinas autónomas, tales como robots, equipos autónomos, dispositivos domésticos autónomos y/o similares, y una o más tareas u operaciones relacionadas con tales máquinas autónomas pueden denominarse de manera intercambiable con la conducción autónoma.
[0228] El dispositivo informático 600 puede incluir además (sin limitaciones) grandes sistemas informáticos, como servidores, ordenadores de sobremesa, etc., y puede incluir además decodificadores (por ejemplo, decodificadores de televisión por cable basados en Internet, etc.), dispositivos basados en el sistema de posicionamiento global (GPS), etc. El dispositivo informático 600 puede incluir dispositivos informáticos móviles que sirven como dispositivos de comunicación, tales como teléfonos celulares, incluidos teléfonos inteligentes, asistentes digitales personales (PDA), tabletas, ordenadores portátiles, lectores electrónicos, televisores inteligentes, plataformas de televisión, dispositivos portátiles (por ejemplo, gafas, relojes, pulseras, tarjetas inteligentes, joyas, prendas de vestir, etc.), reproductores multimedia, etc. Por ejemplo, en un caso, el dispositivo informático 600 puede incluir un dispositivo informático móvil que emplee una plataforma informática que aloje un circuito integrado ("IC"), como un sistema en un chip ("SoC" o "SOC"), que integre varios componentes de hardware y/o software del dispositivo informático 600 en un solo chip.
[0229] Como se ilustra, en un ejemplo, el dispositivo informático 600 puede incluir cualquier número y tipo de componentes de hardware y/o software, tales como (sin limitación) una unidad de procesamiento gráfico ("GPU" o simplemente "procesador gráfico") 614, controlador gráfico (también denominado "controlador de GPU", "lógica de controlador gráfico", "lógica de controlador", controlador de modo usuario (UMD), UMD, marco de controlador de modo usuario (UMDF), UMDF o simplemente "controlador") 616, unidad central de procesamiento ("CPU" o simplemente "procesador de aplicaciones") 612, memoria 608, dispositivos de red, controladores o similares, así como fuentes de entrada/salida (E/S) 604, tales como pantallas táctiles, paneles táctiles, paneles táctiles, teclados virtuales o normales, ratones virtuales o normales, puertos, conectores, etc. El dispositivo informático 600 puede incluir un sistema operativo (SO) 606 que sirve de interfaz entre el hardware y/o los recursos físicos del dispositivo informático 600 y un usuario. Se contempla que el procesador gráfico 614 y el procesador de aplicaciones 612 pueden ser uno o más de los procesadores 102 de laFigura 1.
[0231] Cabe señalar que, para determinadas aplicaciones, puede ser preferible un sistema con menos o más equipamiento que el descrito anteriormente. Por lo tanto, la configuración del dispositivo informático 600 puede variar de una implementación a otra dependiendo de numerosos factores, tales como limitaciones de precio, requisitos de rendimiento, mejoras tecnológicas u otras circunstancias.
[0232] Los ejemplos pueden implementarse como cualquiera de los siguientes elementos o una combinación de ellos: uno o varios microchips o circuitos integrados interconectados mediante una placa base, lógica cableada, software almacenado en un dispositivo de memoria y ejecutado por un microprocesador, firmware, un circuito integrado específico para una aplicación (ASIC) y/o una matriz de puertas programables en campo (FPGA). Los términos "lógica", "módulo", "componente", "motor" y "mecanismo" pueden incluir, a modo de ejemplo, software o hardware y/o combinaciones de software y hardware.
[0234] En un ejemplo, el mecanismo de coordinación/utilización 610 puede estar alojado o facilitado por el sistema operativo 606 del dispositivo informático 600. En otro ejemplo, el mecanismo de coordinación/utilización 610 puede estar alojado en o parte de la unidad de procesamiento de gráficos ("GPU" o simplemente "procesador de gráficos") 614 o firmware del procesador de gráficos 614. Por ejemplo, el mecanismo de coordinación/utilización 610 puede integrarse o implementarse como parte del hardware de procesamiento del procesador de gráficos 614. De manera similar, en otro ejemplo más, el mecanismo de coordinación/utilización 610 puede estar alojado en o ser parte de la unidad central de procesamiento ("CPU" o simplemente "procesador de aplicaciones") 612. Por ejemplo, el mecanismo de coordinación/utilización 610 puede integrarse o implementarse como parte del hardware de procesamiento del procesador de aplicaciones 612. En otro ejemplo más, el mecanismo de coordinación/utilización 610 puede estar alojado en o parte de cualquier número y tipo de componentes del dispositivo informático 600, tal como una porción del mecanismo de coordinación/utilización 610 puede estar alojado en o parte del sistema operativo 606, otra porción puede estar alojada en o parte del procesador de gráficos 614, otra porción puede estar alojada en o parte del procesador de aplicaciones 612, mientras que una o más porciones del mecanismo de coordinación/utilización 610 pueden estar alojadas en o parte del sistema operativo 606 y/o cualquier número y tipo de dispositivos del dispositivo informático 600. Se contempla que una o más porciones o componentes del mecanismo de coordinación/utilización 610 puedan emplearse como hardware, software y/o firmware.
[0236] Se contempla que los ejemplos no se limitan a ninguna implementación o alojamiento concretos del mecanismo de coordinación/utilización 610 y que el mecanismo de coordinación/utilización 610 y uno o varios de sus componentes pueden implementarse como hardware, software, firmware o cualquier combinación de los mismos.
[0238] El dispositivo informático 600 puede alojar una o varias interfaces de red para proporcionar acceso a una red, como una LAN, una red de área amplia (WAN), una red de área metropolitana (MAN), una red de área personal (PAN), Bluetooth, una red en la nube, una red móvil (por ejemplo, tercera generación (3G), cuarta generación (4G), etc.), una intranet, Internet, etc. Las interfaces de red pueden incluir, por ejemplo, una interfaz de red inalámbrica con antena, que puede representar una o más antenas. Las interfaces de red también pueden incluir, por ejemplo, una interfaz de red cableada para comunicarse con dispositivos remotos a través de un cable de red, que puede ser, por ejemplo, un cable Ethernet, un cable coaxial, un cable de fibra óptica, un cable serial o un cable paralelo.
[0240] Las realizaciones pueden proporcionarse, por ejemplo, como un producto de programa informático que puede incluir uno o más soportes legibles por máquina que tienen almacenadas instrucciones ejecutables por máquina que, cuando son ejecutadas por una o más máquinas, como un ordenador, una red de ordenadores u otros dispositivos electrónicos, pueden dar lugar a que una o más máquinas realicen operaciones de acuerdo con las realizaciones descritas en el presente documento. Un medio legible por máquina puede incluir, entre otros, disquetes, discos ópticos, CD-ROM (discos compactos de solo lectura) y discos magnetoópticos, ROM, RAM, EPROM (memorias programables borrables de solo lectura), EEPROM (memorias de solo lectura programables y borrables eléctricamente), tarjetas magnéticas u ópticas, memorias flash u otros tipos de soportes/soportes legibles por máquina adecuados para almacenar instrucciones ejecutables por máquina.
[0242] Además, las realizaciones pueden descargarse como un producto de programa informático, en el que el programa puede transferirse desde un ordenador remoto (por ejemplo, un servidor) a un ordenador solicitante (por ejemplo, un cliente) mediante una o varias señales de datos incorporadas y/o moduladas por una onda portadora u otro medio de propagación a través de un enlace de comunicación (por ejemplo, un módem y/o una conexión de red).
[0244] A lo largo del documento, el término "usuario" puede referirse indistintamente a "visitante", "observador", "persona", "individuo", "usuario final" y/o similares. Cabe señalar que, a lo largo de todo este documento, se puede hacer referencia a términos como "dominio de gráficos" de manera intercambiable con "unidad de procesamiento gráfico", "procesador gráfico" o simplemente "GPU" y, de manera similar, "dominio de CPU" o "dominio anfitrión" se pueden hacer referencia de manera intercambiable a "unidad de procesamiento de ordenador", "procesador de aplicaciones" o simplemente "CPU".
[0246] Cabe señalar que términos como "nodo", "nodo informático", "servidor", "dispositivo servidor", "ordenador en la nube", "servidor en la nube", "ordenador servidor en la nube", "máquina", "máquina anfitrión", "dispositivo", "dispositivo informático", "ordenador", "sistema informático" y similares pueden utilizarse indistintamente a lo largo de este documento. Cabe señalar además que, términos como "aplicación", "aplicación de software", "programa", "programa de software", "paquete", "paquete de software" y similares, pueden usarse de manera intercambiable a lo largo de todo este documento. Además, términos como "trabajo", "entrada", "solicitud", "mensaje" y similares se pueden usar de manera intercambiable en este documento.
[0247] LaFigura 7ilustra el mecanismo de coordinación/utilización 610 de laFigura 6. Para abreviar, muchos de los detalles ya analizados con referencia a lasFiguras 1-6no se repiten ni se analizan a continuación. En un ejemplo, el mecanismo de coordinación/utilización 610 puede incluir cualquier número y tipo de componentes, tales como (sin limitaciones): lógica de detección/monitorización 701; lógica de entrenamiento previamente analizada 703; lógica de coordinación de inferencia 705; y lógica de comunicación/compatibilidad 707; lógica de fusión temprana 709; lógica de planificación de redes neuronales 711; y lógica de utilización de procesamiento 713.
[0248] El hardware actual de procesamiento gráfico es más potente de lo que normalmente se necesita para la inferencia, por ejemplo, en términos de capacidad de precisión. Los ejemplos proporcionan una técnica novedosa para usar la lógica de detección/monitorización 701 para detectar y monitorizar conjuntos de datos de entrenamiento previamente analizados y, a continuación, activar la lógica de entrenamiento previamente analizada 703 para determinar un rango <X,Y> y configurar el hardware de gráficos para que sea colocado dentro de este rango de valores.
[0249] Los ejemplos proporcionan una técnica novedosa para añadir la capacidad de configurar el hardware de procesamiento, como el del procesador gráfico 614, el procesador de aplicaciones 612, etc., para adaptarse a un conjunto de datos con el fin de mejorar la eficiencia energética del cálculo de inferencia. Por ejemplo, la precisión de los datos de inferencia/predicción puede determinarse detectando y monitorizando en primer lugar conjuntos de datos de según se facilita por la lógica de detección/monitorización 701 y simultáneamente o posteriormente, analizando la precisión asociada con tales conjuntos de datos, que, cuando se usan y aplican, pueden permitir mantener la eficiencia energética mientras se adaptan al hardware creado para capacidades de superconjunto.
[0250] En algunos ejemplos, el hardware de inferencia (como el de los procesadores de aplicaciones y/o gráficos 612, 614) puede diseñarse a priori para obtener las máximas capacidades, como la precisión, etc. Por ejemplo, en tiempo de ejecución, puede ser necesario que la capacidad de precisión sea un subconjunto de lo que admite el hardware del procesador correspondiente. En un ejemplo, la información observada y obtenida de conjuntos de datos de entrenamiento puede usarse para configurar el hardware, tal como hardware de aplicación y/o los procesadores de gráficos 612, 614. En un ejemplo, usar el hardware de superconjunto da como resultado una eficiencia energética subóptima, ya que la aplicación de software descarta o ignora las capacidades adicionales.
[0251] Como se ilustra en laFigura 8A, el hardware de inferencia, como el hardware de los procesadores de aplicaciones y/o gráficos 612, 614, puede diseñarse para cubrir cualquier tamaño y precisión de datos previstos. Para mejorar la eficiencia en el momento de la inferencia, aquellas porciones o porciones del hardware que no son necesarias para los conjuntos de datos pueden desconectarse para ahorrar energía, etc., pero, en tales aplicaciones, sería de mayor interés maximizar el rendimiento del hardware. Además, para aumentar el número de operaciones realizadas por segundo, aquellos bloques de hardware necesarios para diversas operaciones, tales como sumar, multiplicar, acumular y/o similares, pueden reconfigurarse según se facilita por la lógica de entrenamiento previamente analizada 703, tal como información que se va a configurar que se puede generar en el momento del entrenamiento basándose en el conjunto de datos y, a continuación, se puede comunicar al controlador de configuración de hardware en el tiempo de ejecución según se facilitar por la lógica de entrenamiento previamente analizada 703.
[0252] Los ejemplos proporcionan una técnica novedosa para aumentar la utilización del procesador gráfico durante la inferencia mediante múltiples contextos. Por ejemplo, usando la lógica de utilización de procesamiento 713, se añade soporte para ejecutar múltiples contextos en el procesador de gráficos 614, donde cada contexto (tal como el proceso de aplicación) puede usarse para resolver la inferencia para una red neuronal. Estos contextos pueden tener espacios de direcciones separados, que pueden aplicarse por el hardware pertinente, tal como el procesador de gráficos 614. En un ejemplo, facilitado por la lógica de utilización del procesamiento 713, un microcontrolador basado en hardware (por ejemplo, un programador de contexto) puede ser facilitado por la lógica de detección/monitorización 701 para supervisar cuánto del dispositivo de procesamiento, como el procesador gráfico 614, es utilizado por el contexto actual, como determinar si hay más problemas de inferencia que necesiten resolución. Típicamente, los problemas de inferencia son más sencillos y pueden infrautilizar el procesador de gráficos 614 de modo que el procesador de gráficos 614 no esté infrautilizado en este caso y en otros casos similares. Esto se ilustra y describe con más detalle con referencia a laFigura 8B.
[0253] Los ejemplos proporcionan además una técnica novedosa para facilitar la coordinación de los resultados de la inferencia y los sensores (por ejemplo, cámaras, micrófonos, otros sensores, etc.). Por ejemplo, las técnicas convencionales no proporcionan coordinación entre la salida de inferencia y los sensores que proporcionan la entrada. Los ejemplos proporcionan una técnica novedosa que puede encontrar un sensor para realizar una tarea (por ejemplo, aplicar un filtro, activar un dispositivo, ajustar una cámara, etc.), lo que permite mejorar la precisión de la salida de inferencia. Por ejemplo, cuando la confianza de la inferencia cae por debajo de un umbral, se puede aplicar un filtro a una cámara para intentar mejorar la confianza de la inferencia capturando o enfocándose en ciertos objetos o escenas, mientras se ignoran otros objetos o escenas según se facilita por la lógica de coordinación de inferencia 705.
[0254] Esta novedosa técnica permite además una coordinación a nivel de sistema entre los sensores de las fuentes de E/S 604 de laFigura 6y los algoritmos y técnicas de aprendizaje profundo que pueden dar sentido a los sensores en el corazón de la carrera hacia un superordenador centralizado en un vehículo autónomo, como la máquina autónoma 600. A medida que los sistemas avanzan hacia el procesamiento centralizado de sensores (pero no el sensor en sí), la coordinación entre sensores y los diversos filtros que puede aplicar se basan en el conocimiento que existe dentro del cerebro central del ordenador, lo que resalta la diferencia entre detectar un objeto o no. Esto se ilustra con más detalle con referencia a laFigura 8C.
[0255] Los ejemplos proporcionan además una técnica novedosa para ofrecer detección de objetos basada en conjuntos. Por ejemplo, poder tomar decisiones reales en un modelo en lugar de esperar a que el siguiente resultado sea externo al modelo, tal como en la conducción automatizada cuando se trata de sensores de tipos variables con diferentes velocidades de datos de series temporales.
[0256] En un ejemplo, el uso de la lógica de fusión temprana 709 puede facilitar la comunicación temprana entre un modelo de cámara basado en imágenes capturadas por una o más cámaras y otro modelo, como un modelo de detección y medición de distancias por luz ("LiDAR", "LIDAR" o simplemente "lidar"). Esta comunicación temprana puede incluir el intercambio de aciertos tempranos que conducen a la planificación temprana de la ruta, la toma de decisiones, etc., a través del módulo de identificación (ID) de objetos fusionados combinado según se facilita por la lógica de fusión temprana 703. En un ejemplo, esta comunicación temprana permite la fusión temprana al compartir sugerencias entre modelos para reducir una fusión típicamente separada después de que cada modelo se haya completado por separado. Esta técnica novedosa puede combinarse o aplicarse en procesos de fusión tempranos y realizarse como reemplazo de la fusión de bajo nivel. Esto se ilustra y describe con más detalle con referencia a laFigura 8D.
[0257] Las realizaciones de la presente invención proporcionan una técnica novedosa para la programación de redes neuronales (NN), en la que dicha programación puede incluir una programación tolerante a fallos de las NN para la criticidad temporal y la eficiencia energética, facilitada por la lógica de programación de NN 710. Además, múltiples aplicaciones coexisten en el procesador de gráficos 614 para el empleo de inferencia en el despliegue, donde se define un porcentaje de prioridad para cada proceso, de modo que el procesador de gráficos 614 planifica un proceso de acuerdo con el porcentaje del total de hilos disponibles según se facilita por la lógica de planificación NN 710.
[0258] En una realización, el porcentaje mencionado anteriormente es ajustado dinámicamente por un usuario u otras primitivas de resultado de perfil para que el usuario actualice el porcentaje, donde el usuario define el límite inferior y el porcentaje esperado. Además, se puede usar un microcontrolador con un sistema operativo en tiempo real (RTOS) que gestiona las entradas de los sensores para reactivarse y realizar un entrenamiento periódico con prioridades de entrenamiento basadas en la criticidad del tiempo. Se contempla que puede ser necesaria la centralización de súper ordenadores con respecto a vehículos autónomos, tales como la máquina autónoma 600, para poder virtualizar y, a continuación, priorizar cargas de trabajo para propósitos de protección y seguridad en tiempo real.
[0259] Como se ilustrará y describirá con más detalle en referencia a lasFiguras 9Ay9B, en el procesador gráfico 614 coexisten múltiples aplicaciones en ejecución, en las que se define un porcentaje de prioridad para cada proceso. El procesador de gráficos 614 se ve facilitado por la lógica de planificación NN 711 para planificar procesos de acuerdo con el porcentaje del total de hilos disponibles y otros recursos. Este porcentaje se ajusta dinámicamente por el usuario, donde se proporcionan primitivas para que los usuarios actualicen el porcentaje. Por ejemplo, los usuarios pueden definir el límite inferior y el porcentaje esperado, donde los usuarios pueden necesitar esta característica para ajustar la utilización del procesador de gráficos de acuerdo con las aplicaciones y capacidades de hardware actuales. Las siguientes tablas muestran cómo se puede utilizar una GPU, como el procesador gráfico 614, para almacenar información relacionada en el hardware o la memoria. Por ejemplo, puede haber primitivas para que los usuarios seleccionen y escriban un porcentaje deseado y de límite inferior para un proceso identificado por la derivada integral proporcional (PID), mientras que puede haber primitivas para que los usuarios lean el porcentaje asignado actual del sistema y el porcentaje deseado por el usuario y el porcentaje de límite inferior. Cualquier porcentaje asignado por el sistema puede gestionarse mediante hardware GPU o a través de un proceso de gestión con privilegios.
[0261]
[0263] Con el rápido aumento del uso del aprendizaje profundo en aplicaciones críticas para la seguridad, también se puede tener en cuenta el aspecto "crítico para la seguridad" de estos casos de uso, con el fin de garantizar que el procesamiento de la inferencia se produzca en un tiempo determinista y garantizado, como el intervalo de tiempo tolerante a fallos (FTTI). Esto debe hacerse antes de que el fallo en el cálculo de los resultados de cualquier pasada de inferencia provoque que falle una aplicación de bucle de control crítico de seguridad en tiempo real y que a continuación pueda provocar daños o lesiones a los seres humanos.
[0264] Lo que hace que esta consideración sea algo problemática es que los elementos informáticos, como el procesador gráfico 614, que realizan las operaciones de inferencia, suelen encargarse también de otras tareas, como otras operaciones de inferencia que no son críticas para la seguridad. Por ejemplo, en un robot industrial, se puede usar un modelo entrenado para la detección de personas y evitar que el robot golpee a una persona, mientras que otro modelo entrenado, ejecutándose al mismo tiempo en el mismo elemento de cálculo, se puede usar para aplicar aspectos de personalización al comportamiento del robot.
[0266] Por lo tanto, es esencial que estas aplicaciones de "criticidad mixta" que el dispositivo informático 600 pueda tener conciencia de la "criticidad de seguridad" de un modelo de inferencia concreto (por ejemplo, ASIL-D frente a ASIL-B o SIL-4 frente a SIL-1) a la hora de programar y asignar recursos informáticos, incluida cualquier capacidad para interrumpir un modelo de menor criticidad con un modelo de mayor criticidad, tal y como facilita la lógica de programación NN 711. Esto se ilustra y describe con más detalle con referencia a laFigura 9C.
[0268] Además, la lógica de comunicación/compatibilidad 707 puede utilizarse para facilitar la comunicación y la compatibilidad necesarias entre cualquier número de dispositivos del dispositivo informático 600 y diversos componentes del mecanismo de coordinación/utilización 610.
[0270] La lógica de comunicación/compatibilidad 707 puede utilizarse para facilitar la comunicación dinámica y la compatibilidad entre el dispositivo informático 600 y cualquier número y tipo de otros dispositivos informáticos (como dispositivos informáticos móviles, ordenadores de sobremesa, dispositivos informáticos servidores, etc.); dispositivos o componentes de procesamiento (como CPU, GPU, etc.); dispositivos de captura/detección (como componentes de captura/detección que incluyen cámaras, cámaras con sensor de profundidad, sensores de cámara, sensores de rojo, verde y azul ("RGB" o "rgb"), micrófonos, etc.); dispositivos de visualización (como componentes de salida que incluyen pantallas, áreas de visualización, proyectores, etc.); componentes de reconocimiento del usuario/contexto y/o sensores/dispositivos de identificación/verificación (como sensores/detectores biométricos, escáneres, etc.); bases de datos 730, como dispositivos de memoria o almacenamiento, bases de datos y/o fuentes de datos (como dispositivos de almacenamiento de datos, discos duros, unidades de estado sólido, discos duros, tarjetas o dispositivos de memoria, circuitos de memoria, etc.); medio(s) de comunicación 725, como uno o más canales o redes de comunicación (por ejemplo, redes en la nube, Internet, intranets, redes celulares, redes de proximidad, como Bluetooth, Bluetooth de baja energía (BLE), Bluetooth Smart, proximidad Wi-Fi, identificación por radiofrecuencia (RFID), comunicación de campo cercano (NFC), red de área corporal (BAN), etc.); comunicaciones inalámbricas o por cable y protocolos relevantes (por ejemplo, Wi-Fi®, WiMAX, Ethernet, etc.); técnicas de conectividad y gestión de la ubicación; aplicaciones de software/sitios web (por ejemplo, sitios web de redes sociales y/o empresariales, etc., aplicaciones empresariales, juegos y otras aplicaciones de entretenimiento, etc.); y lenguajes de programación, etc., al tiempo que se garantiza la compatibilidad con las tecnologías, los parámetros, los protocolos, las normas, etc. cambiantes.
[0272] Además, cualquier uso de una marca, palabra, término, frase, nombre y/o acrónimo concretos, tales como "detectar", "observar", "decidir", "ruta normal", "desvío", "bloque de cálculo", "derivar", "valor de datos de uso frecuente", "FDV", "máquina de estados finitos", "conjunto de entrenamiento", "agente", "máquina", "vehículo", "robot", "conducción", "CNN", "DNN", "NN", "unidad de ejecución", "EU", "memoria local compartida", "SLM", "flujos gráficos", "caché", "caché gráfica", "GPU", "procesador gráfico", "dominio GPU", "GPGPU", "CPU", "procesador de aplicaciones", "dominio de CPU", "controlador gráfico", "carga de trabajo", "aplicación", "canal gráfico", "procesos de canal", "API", "API 3D", "OpenGL®", "DirectX®", "hardware", "software", "agente", "controlador gráfico", "controlador gráfico en modo núcleo", "controlador en modo usuario", "marco de controlador en modo usuario", "memoria intermedia", "memoria intermedia gráfica", "tarea", "proceso", "operación", "aplicación de software", "juego", etc., no deben interpretarse como una limitación de las realizaciones al software o los dispositivos que llevan esa etiqueta en productos o en documentación externa a este documento.
[0274] Se contempla que se pueda añadir y/o eliminar cualquier número y tipo de componentes del mecanismo de coordinación/utilización 610 para facilitar diversas realizaciones, incluyendo añadir, eliminar y/o mejorar ciertas características. Por brevedad, claridad y facilidad de comprensión del mecanismo de coordinación/utilización 610, muchos de los componentes convencionales y/o conocidos, tales como los de un dispositivo informático, no se muestran ni analizan en este punto. Se contempla que las realizaciones, como se describen en el presente documento, no se limiten a ninguna tecnología, topología, sistema, arquitectura y/o norma particular y sean lo suficientemente dinámicas para adoptar y adaptarse a cualquier cambio futuro.
[0276] LaFigura 8Ailustra un marco de transacciones 800 en procesadores de aplicaciones y/o gráficos 612, 614 para facilitar el entrenamiento analizado previamente. Por motivos de brevedad, es posible que muchos de los detalles anteriormente comentados en relación con las figuras 1 a 7 no se vuelvan a mencionar ni repetir en lo sucesivo. Cualquier proceso relacionado con el marco 800 puede realizarse mediante una lógica de procesamiento que puede comprender hardware (por ejemplo, circuitos, lógica dedicada, lógica programable, etc.), software (como instrucciones que se ejecutan en un dispositivo de procesamiento) o una combinación de ambos, tal y como facilita el mecanismo de coordinación/utilización 610 de la Figura 6. Los procesos asociados con la estructura 800 pueden ilustrarse o indicarse en secuencias lineales para mayor brevedad y claridad en la presentación; sin embargo, se contempla que cualquier número de ellos pueda realizarse en paralelo, de forma asincrónica o en diferentes órdenes. Además, los ejemplos no están limitados a ninguna ubicación, estructura, configuración o estructura arquitectónica particular de procesos y/o componentes, tal como la estructura 800.
[0278] Como se ilustra en un ejemplo, el hardware de inferencia, como el hardware de los procesadores de aplicaciones y/o gráficos 612, 614, puede desarrollarse de tal manera que sea capaz de cubrir todos los tamaños y precisiones de datos previstos. Por ejemplo, para mejorar la eficiencia en los tiempos de inferencia, ciertas partes del hardware que no son necesarias para los conjuntos de datos pueden desconectarse para preservar energía, etc. Sin embargo, en algunas aplicaciones, se considera más esencial maximizar el rendimiento del hardware.
[0280] En el ejemplo ilustrado, el marco 800 incluye datos de entrenamiento 801, bloque de aprendizaje 803, datos de inferencia 805 y modelos de hardware configurables 807, donde los datos de entrenamiento 801 se muestran como comunicados al bloque de aprendizaje 803 y a uno o más de los modelos de hardware configurables 807, como la comunicación de información de configuración 809 desde los datos de entrenamiento 801 a los modelos de hardware configurables 807. Además, por ejemplo, al recibir entradas de los datos de entrenamiento 801, el bloque de aprendizaje 803 y los datos de inferencia 805, uno o más modelos de hardware configurables 807 producen inferencia/predicción 811, como se ilustra.
[0282] Por ejemplo, para aumentar el número de operaciones realizadas por segundo, los bloques de hardware de procesamiento necesarios para la suma, la multiplicación, la acumulación, etc., pueden reconfigurarse utilizando como parte de los modelos de hardware configurables 807 la información de configuración 809 de los datos de entrenamiento 801. Esta información de configuración 809 puede generarse en el momento del entrenamiento basándose en uno o más conjuntos de datos y comunicarse a un controlador de configuración de hardware en los procesadores de aplicaciones y/o gráficos 612, 614, en tiempo de ejecución, tal y como facilita la lógica de entrenamiento preanalizada 703 de laFigura 7.
[0284] LaFigura 8Bilustra un procesador gráfico 614 para mejorar la utilización del procesamiento. Para mayor brevedad, muchos de los detalles discutidos previamente con referencia a lasFiguras 1-8Apueden no ser discutidos o repetidos en adelante. Cualquier proceso relacionado con el procesador gráfico 614 puede ser realizado por una lógica de procesamiento que puede comprender hardware (por ejemplo, circuitos, lógica dedicada, lógica programable, etc.), software (como instrucciones que se ejecutan en un dispositivo de procesamiento) o una combinación de ambos, tal y como lo facilita el mecanismo de coordinación/utilización 610 de laFigura 6. Los procesos asociados con el procesador de gráficos 614 pueden ilustrarse o indicarse en secuencias lineales para mayor brevedad y claridad en la presentación; sin embargo, se contempla que cualquier número de ellos pueda realizarse en paralelo, de forma asincrónica o en diferentes órdenes. Además, los ejemplos no están limitados a ninguna ubicación, estructura, configuración o estructura arquitectónica particular de procesos y/o componentes, tal como la colocación arquitectónica dentro del procesador de gráficos 614 ilustrada.
[0286] En un ejemplo, tal y como se ilustra, los bloques de unidades de ejecución (EU) 831A, 831B, 831C y 831D están ejecutando el contexto 0, mientras que los bloques EU 833A, 833B, 833C, 833D, 833E y 833F están ejecutando el contexto 1. Como se ilustra, el procesador de gráficos 614 se muestra alojando procesadores de envío por flujo continuo (SMM0) 821 y SMM1823, que incluyen además las barreras 835A, 835B, las cachés L1/L2837A, 837B, la memoria local compartida (SLM) 839A, 839B, respectivamente.
[0288] Como se ilustra, el programador de contexto 820 realiza la monitorización de la utilización del procesador, como la supervisión de la utilización del procesador gráfico 614, a través del bloque de monitorización de la utilización de la GPU 825, facilitado por la lógica de detección/monitorización 701 de laFigura 7. Como se ilustra adicionalmente, el contexto-0 y el contexto-1 representados por EU 831A-831D y EU833A-833F, respectivamente, tienen espacios de direcciones separados, donde, en un ejemplo, el planificador de contexto de microcontrolador 820 del procesador de gráficos 614 monitoriza cuánto del procesador de gráficos 614 se utiliza. Si la utilización se considera baja, el planificador de contexto 820 puede despachar más contextos, lo que permite resolver problemas de inferencia adicionales.
[0290] LaFigura 8Cilustra una secuencia de transacciones 850 para mejorar la coordinación de los resultados de inferencia y los sensores. Para mayor brevedad, muchos de los detalles discutidos previamente con referencia a lasFiguras 1-8Bpueden no ser discutidos o repetidos en adelante. Cualquier proceso relacionado con la secuencia de transacciones 850 puede ser realizado por una lógica de procesamiento que puede comprender hardware (por ejemplo, circuitos, lógica dedicada, lógica programable, etc.), software (como instrucciones que se ejecutan en un dispositivo de procesamiento) o una combinación de ambos, tal y como lo facilita el mecanismo de coordinación/utilización 610 de laFigura 6. Los procesos asociados con la secuencia de transacciones 850 pueden ilustrarse o indicarse en secuencias lineales para mayor brevedad y claridad en la presentación; sin embargo, se contempla que cualquier número de ellos pueda realizarse en paralelo, de forma asincrónica o en diferentes órdenes. Además, los ejemplos no están limitados a ninguna ubicación, estructura, configuración o estructura arquitectónica particular de procesos y/o componentes, tal como la colocación arquitectónica dentro de la secuencia de transacciones 850.
[0291] La secuencia de transacciones 850 comienza con el sensor 851 (por ejemplo, una cámara inteligente) de las fuentes de E/S 604 de la figura 6, donde el sensor 851 puede incluir cualquier número y tipo de sensores, como cámaras inteligentes con imagen integrada, procesador de señales, donde, por ejemplo, el proveedor de servicios de Internet (ISP) puede ser externo a la cámara. Como se ilustra, se captura una imagen por el sensor/cámara 851 y la imagen capturada original a continuación se transmite al modelo 853, que puede indicar (tal como en un 13%) que los resultados de inferencia de nodos tienen una probabilidad mucho menor de lo normal (o por debajo de algún umbral).
[0292] En 855, en un ejemplo, se solicita al sensor/cámara 851 y/o al ISP que apliquen un filtro a la imagen original antes de completar cualquier operación de inferencia, de modo que los resultados de la inferencia puedan mejorarse gracias a la lógica de coordinación de inferencia 705 de laFigura 7. Por ejemplo, se puede utilizar un filtro para reducir cualquier objeto no deseado de la escena, tal como árboles, personas, tiendas, animales, etc., lo que conduce a una mejor calidad de los resultados. En un ejemplo, la lógica de coordinación de inferencia 705 de laFigura 7facilita que el sensor/cámara 851 aplique un filtro a las imágenes y/o vídeos que captura, de modo que el filtro se utiliza para filtrar el tráfico no deseado en las imágenes y/o vídeos, lo que a su vez conduce a un modelo 857 mejorado u optimizado basado en resultados mejorados.
[0294] LaFigura 8Dilustra una secuencia de transacciones 870 para mejorar la coordinación de los resultados de inferencia y los sensores. Para mayor brevedad, muchos de los detalles discutidos previamente con referencia a lasFiguras 1-8Cpueden no ser discutidos o repetidos en adelante. Cualquier proceso relacionado con la secuencia de transacciones 850 puede ser realizado por una lógica de procesamiento que puede comprender hardware (por ejemplo, circuitos, lógica dedicada, lógica programable, etc.), software (como instrucciones que se ejecutan en un dispositivo de procesamiento) o una combinación de ambos, tal y como lo facilita el mecanismo de coordinación/utilización 610 de laFigura 6. Los procesos asociados con la secuencia de transacciones 870 pueden ilustrarse o indicarse en secuencias lineales para mayor brevedad y claridad en la presentación; sin embargo, se contempla que cualquier número de ellos pueda realizarse en paralelo, de forma asincrónica o en diferentes órdenes. Además, los ejemplos no están limitados a ninguna ubicación, estructura, configuración o estructura arquitectónica particular de procesos y/o componentes, tal como la colocación arquitectónica dentro de la secuencia de transacciones 870
[0296] La secuencia de transacciones 870 comienza con el sensor (por ejemplo, una cámara inteligente) 851 capturando imágenes y/o vídeos de escenas, donde estas imágenes/vídeos, etc., se utilizan para crear un modelo, como el modelo de cámara 871. Como se ilustra aquí, utilizando la lógica de fusión temprana 709 de laFigura 7, se facilita la comunicación temprana entre el modelo de cámara 871 y otro modelo 877, como el modelo Lidar, a través y utilizando el módulo combinado de identificación de objetos fusionados 873. En un ejemplo, el modelo 877 puede extraerse u obtenerse del almacenamiento 879, que puede formar parte de una o varias bases de datos 730 de laFigura 7. Como se ilustra con más detalle, en un ejemplo, esta comunicación puede incluir la correspondencia de indicios tempranos entre los dos modelos 871, 877, donde esta comunicación es recopilada, almacenada o comunicada por el módulo combinado de identificación de objetos fusionados 873, de modo que pueda utilizarse para la planificación de rutas, la toma de decisiones y otros planes y predicciones similares, tal y como facilita la lógica de fusión temprana 709 de laFigura 7.
[0298] LasFiguras 9A, 9Bilustran secuencias de transacciones, y la figura 930 ilustra modelos de uso según una realización de la presente invención. Para mayor brevedad, muchos de los detalles discutidos previamente con referencia a lasFiguras 1-8Dpueden no ser discutidos o repetidos en adelante. Como se ilustra en las secuencias de transacciones 900 y 930, existen dos modelos de uso básicos, uno de los cuales, como se muestra en laFigura 9A, es cómo el hardware de la GPU o un proceso de gestión privilegiado pueden actualizar el porcentaje asignado por el sistema y ajustar cada proceso para respetar la asignación.
[0300] Por ejemplo, como se muestra en la secuencia de transacciones 900, se emplea el controlador PID 909 para controlar y ajustar cada porcentaje de asignación del sistema de procesos 911 con el fin de lograr un alto nivel de utilización de la GPU. En una realización, este controlador de PID 909 está alojado o integrado en el procesador de gráficos 614. Como se ilustra con más detalle, los requisitos de la aplicación del usuario 901 sirven como límites superior e inferior para restringir la salida del controlador de modo que permanezca dentro del rango límite comunicando los límites superior e inferior al controlador de PID 909.
[0302] Además, tal y como se ilustra, los datos de la asignación actual del sistema 903, la demanda instantánea del programador 905 y el objetivo de control actual 907 también se comunican al controlador PID 909 para permitir un mejor control y gestión, facilitado por la lógica de programación NN 711. Se contempla que el controlador de PID 909 pueda ser de cualquier rango de complejidad que pueda usarse para la asignación de porcentajes, mientras que un controlador derivativo integral proporcional puede ser básico.
[0304] Ahora, en referencia a la secuencia de transacciones 930 de laFigura 9B, se muestra cómo las aplicaciones de usuario actualizan su porcentaje deseado y límite inferior de acuerdo con los requisitos actuales del sistema. Por ejemplo, tal y como se ilustra, de forma similar a la secuencia de transacciones 900 de laFigura 9A, se emplea un controlador PID 909 capaz de recibir información relevante, como los requisitos PID del proceso de la aplicación del usuario 931, la asignación actual del sistema 933, la demanda instantánea del programador 933 y el objetivo de control actual 937, para luego procesar esta información de forma individual y/o colectiva y proporcionar un mejor control y ajuste de los próximos requisitos de la aplicación del usuario 941.
[0305] LaFigura 9Cmuestra un gráfico 950 que ilustra las opciones de priorización. Para mayor brevedad, muchos de los detalles discutidos previamente con referencia a lasFiguras 1-9Bpueden no ser discutidos o repetidos en adelante. En el ejemplo ilustrado en el gráfico 950, tal y como facilita la lógica de programación NN 711 de laFigura 7, se puede utilizar la priorización para asignar más unidades de ejecución a una NN frente a otra, lo que aún puede permitir que la red no relacionada con la seguridad 953 funcione siempre que la red crítica para la seguridad 951, 953 disponga de los recursos que necesita. Estos recursos pueden incluir o hacer referencia a una cantidad de memoria, caché, memoria de borrador, un porcentaje de algún elemento de cálculo, etc. Esta novedosa técnica puede implementarse en software, hardware o cualquier combinación de los mismos.
[0306] Por ejemplo, el NN2953 no relacionado con la seguridad se muestra como interrumpido debido a que el NN3955 crítico para la seguridad se ha activado para ejecutarse debido a un determinado evento externo o activador de tiempo, donde, como se ilustra, el NN2953 puede reanudarse después de que el evento o el tiempo en el NN3955 haya finalizado.
[0307] Descripción general del aprendizaje automático
[0308] Un algoritmo de aprendizaje automático es un algoritmo que puede aprender a partir de un conjunto de datos. Ejemplos de algoritmos de aprendizaje automático pueden diseñarse para modelar abstracciones de alto nivel dentro de un conjunto de datos. Por ejemplo, pueden usarse algoritmos de reconocimiento de imágenes para determinar a cuál de varias categorías pertenece una entrada dada; los algoritmos de regresión pueden emitir un valor numérico dada una entrada; y pueden usarse los algoritmos de reconocimiento de patrones para generar texto traducido o para convertir texto en habla y/o reconocimiento de habla.
[0309] Un tipo ejemplar de algoritmo de aprendizaje automático es una red neuronal. Hay muchos tipos de redes neuronales; un tipo sencillo de red neuronal es la red de propagación hacia adelante. Una red de alimentación directa puede implementarse como un gráfico acíclico en el que los nodos están dispuestos en capas. Normalmente, una topología de red de propagación hacia adelante incluye una capa de entrada y una capa de salida separadas por al menos una capa oculta. La capa oculta transforma la entrada recibida por la capa de entrada en una representación que es útil para generar la salida en la capa de salida. Los nodos de red están completamente conectados mediante bordes a los nodos en capas adyacentes, pero no hay bordes entre nodos dentro de cada capa. Los datos recibidos en los nodos de una capa de entrada de una red de propagación hacia adelante se propagan (es decir, se "alimentan hacia adelante") a los nodos de la capa de salida a través de una función de activación que calcula los estados de los nodos de cada capa sucesiva de la red basándose en coeficientes ("ponderaciones") asociados respectivamente a cada uno de los bordes que conectan las capas. Dependiendo del modelo específico representado por el algoritmo que se está ejecutando, el resultado del algoritmo de la red neuronal puede adoptar diversas formas.
[0310] Antes de que un algoritmo de aprendizaje automático pueda utilizarse para modelar un problema concreto, el algoritmo se entrena utilizando un conjunto de datos de entrenamiento. El entrenamiento de una red neuronal implica seleccionar una topología de red, utilizar un conjunto de datos de entrenamiento que representen un problema modelado por la red y ajustar las ponderaciones hasta que el modelo de red funcione con un error mínimo para todas las instancias del conjunto de datos de entrenamiento. Por ejemplo, durante un proceso de entrenamiento de aprendizaje supervisado para una red neuronal, la salida producida por la red en respuesta a la entrada que representa una instancia en un conjunto de datos de entrenamiento se compara con la salida etiquetada como "correcta" para esa instancia, se calcula una señal de error que representa la diferencia entre la salida y la salida etiquetada, y se ajustan las ponderaciones asociadas a las conexiones para minimizar ese error a medida que la señal de error se propaga hacia atrás a través de las capas de la red. La red se considera "entrenada" cuando se minimizan los errores de cada una de las salidas generadas a partir de las instancias del conjunto de datos de entrenamiento.
[0311] La precisión de un algoritmo de aprendizaje automático puede verse afectada significativamente por la calidad del conjunto de datos utilizado para entrenar el algoritmo. El proceso de entrenamiento puede requerir un gran esfuerzo computacional y puede necesitar una cantidad significativa de tiempo en un procesador convencional de uso general. En consecuencia, el hardware de procesamiento paralelo se utiliza para entrenar muchos tipos de algoritmos de aprendizaje automático. Esto resulta especialmente útil para optimizar el entrenamiento de redes neuronales, ya que los cálculos realizados para ajustar los coeficientes en las redes neuronales se prestan naturalmente a implementaciones paralelas. En concreto, muchos algoritmos de aprendizaje automático y aplicaciones de software se han adaptado para aprovechar el hardware de procesamiento paralelo de los dispositivos de procesamiento gráfico de uso general.
[0312] LaFigura 10es un diagrama generalizado de una pila de software de aprendizaje automático 1000. Una aplicación de aprendizaje automático 1002 puede configurarse para entrenar una red neuronal utilizando un conjunto de datos de entrenamiento o para utilizar una red neuronal profunda entrenada con el fin de implementar inteligencia artificial. La aplicación de aprendizaje automático 1002 puede incluir funciones de entrenamiento e inferencia para una red neuronal y/o software especializado que se puede utilizar para entrenar una red neuronal antes de su implementación.
[0313] La aplicación de aprendizaje automático 1002 puede implementar cualquier tipo de inteligencia artificial, incluyendo, entre otros, reconocimiento de imágenes, mapeo y localización, navegación autónoma, síntesis de voz, imágenes médicas o traducción de idiomas.
[0314] La aceleración por hardware para la aplicación de aprendizaje automático 1002 se puede habilitar a través de un marco de aprendizaje automático 1004. El marco de aprendizaje automático 1004 puede proporcionar una biblioteca de primitivas de aprendizaje automático. Las primitivas de aprendizaje automático son operaciones básicas que suelen realizar los algoritmos de aprendizaje automático. Sin el marco de aprendizaje automático 1004, los desarrolladores de algoritmos de aprendizaje automático tendrían que crear y optimizar la lógica computacional principal asociada al algoritmo de aprendizaje automático y, a continuación, volver a optimizar la lógica computacional a medida que se desarrollaran nuevos procesadores paralelos. En su lugar, la aplicación de aprendizaje automático se puede configurar para realizar los cálculos necesarios utilizando las primitivas proporcionadas por el marco de aprendizaje automático 1004. Entre las primitivas ejemplares se incluyen las convoluciones tensoriales, las funciones de activación y el agrupamiento, que son operaciones computacionales que se realizan durante el entrenamiento de una red neuronal convolucional (CNN). El marco de aprendizaje automático 1004 también puede proporcionar primitivas para implementar subprogramas básicos de álgebra lineal ejecutados por muchos algoritmos de aprendizaje automático, como operaciones con matrices y vectores.
[0315] El marco de aprendizaje automático 1004 puede procesar los datos de entrada recibidos de la aplicación de aprendizaje automático 1002 y generar la entrada adecuada para un marco de cálculo 1006. El marco informático 1006 puede abstraer las instrucciones subyacentes proporcionadas al controlador GPGPU 1008 para permitir que el marco de aprendizaje automático 1004 aproveche la aceleración del hardware a través del hardware GPGPU 1010 sin necesidad de que el marco de aprendizaje automático 1004 tenga un conocimiento profundo de la arquitectura del hardware GPGPU 1010. Además, el marco informático 1006 puede habilitar la aceleración por hardware para el marco de aprendizaje automático 1004 en una variedad de tipos y generaciones del hardware GPGPU 1010.
[0316] Aceleración del aprendizaje automático con GPGPU
[0317] LaFigura 11ilustra una unidad de procesamiento gráfico 1100 de uso general altamente paralela. En un ejemplo, la unidad de procesamiento de propósito general (GPGPU) 1100 puede estar configurada para ser particularmente eficiente al procesar el tipo de cargas de trabajo computacionales asociadas con el entrenamiento de las redes neuronales profundas. Adicionalmente, la GPGPU 1100 puede vincularse directamente a otras instancias de la GPGPU para crear una agrupación de múltiples GPU para mejorar la velocidad de entrenamiento para redes neuronales particularmente profundas.
[0318] La GPGPU 1100 incluye una interfaz de anfitrión 1102 para permitir una conexión con un procesador anfitrión. En una realización, la interfaz de anfitrión 1102 es una interfaz PCI Express. Sin embargo, la interfaz de anfitrión puede ser también una interfaz de comunicaciones o estructura de comunicaciones específica de proveedor. La GPGPU 1100 recibe comandos del procesador anfitrión y utiliza un programador global 1104 para distribuir los hilos de ejecución asociados a esos comandos a un conjunto de agrupaciones de cálculo 1106A-H. Las agrupaciones de cálculo 1106A-H comparten una memoria caché 1108. La memoria caché 1108 puede servir como caché de nivel superior para las memorias caché dentro de las agrupaciones de cálculo 1106A-H.
[0319] La GPGPU 1100 incluye la memoria 1114A-B acoplada a las agrupaciones de cálculo 1106A-H a través de un conjunto de controladores de memoria 1112A-B. En varios ejemplos, la memoria 1114A-B puede incluir varios tipos de dispositivos de memoria, incluida la memoria dinámica de acceso aleatorio (DRAM) o la memoria gráfica de acceso aleatorio, como la memoria gráfica síncrona de acceso aleatorio (SGRAM), incluida la memoria gráfica de doble velocidad de datos (GDDR). En un ejemplo, las unidades de memoria 224A-N también pueden incluir memoria 3D apilada, que incluye, pero sin limitación, memoria de ancho de banda alto (HBM).
[0320] En un ejemplo, cada agrupación de cálculo GPLAB06A-H incluye un conjunto de multiprocesadores gráficos, como el multiprocesador gráfico 400 de la figura 4A. Los multiprocesadores gráficos de la agrupación de cálculo cuentan con múltiples tipos de unidades lógicas enteras y de punto flotante que pueden realizar operaciones computacionales con distintos grados de precisión, incluyendo aquellas adecuadas para cálculos de aprendizaje automático. Por ejemplo, y en un ejemplo, al menos un subconjunto de las unidades de coma flotante en cada una de las agrupaciones de cálculo 1106A-H puede estar configurado para realizar operaciones de coma flotante de 16 bits o de 32 bits, mientras que un subconjunto diferente de las unidades de coma flotante puede estar configurado para realizar operaciones de coma flotante de 64 bits.
[0321] Se pueden configurar varias instancias del GPGPU 1100 para que funcionen como una agrupación de cálculo. El mecanismo de comunicación usado por la agrupación de computación para la sincronización y el intercambio de datos varía a través de ejemplos. En un ejemplo, las múltiples instancias de la GPGPU 1100 se comunican a través de la interfaz de anfitrión 1102. En un ejemplo, la GPGPU 1100 incluye un concentrador de E/S 1108 que conecta la GPGPU 1100 con un enlace GPU 1110 que permite una conexión directa con otras instancias de la GPGPU. En un ejemplo, el enlace de la GPU 1110 está acoplado a un puente de GPU a GPU especializado que posibilita la comunicación y sincronización entre múltiples instancias de la GPGPU 1100. En un ejemplo, el enlace de la GPU 1110 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPU o procesadores paralelos. En un ejemplo, las múltiples instancias de la GPGPU 1100 están ubicadas en sistemas de procesamiento de datos separados y se comunican mediante un dispositivo de red que es accesible mediante la interfaz de anfitrión 1102. En un ejemplo, el enlace de GPU 1110 puede estar configurado para posibilitar una conexión a un procesador de anfitrión además de o como una alternativa a la interfaz de anfitrión 1102.
[0323] Si bien la configuración ilustrada de la GPGPU 1100 puede configurarse para entrenar redes neuronales, un ejemplo proporciona una configuración alternativa de la GPGPU 1100 que puede configurarse para su implementación dentro de una plataforma de inferencia de alto rendimiento o bajo consumo. En una configuración de inferencia, la GPGPU 1100 incluye menos agrupaciones de cálculo 1106A-H en comparación con la configuración de entrenamiento. Además, la tecnología de memoria asociada con la memoria 1114A-B puede diferir entre las configuraciones de inferencia y entrenamiento. En un ejemplo, la configuración de inferencia de la GPGPU 1100 puede soportar las instrucciones específicas de inferencia. Por ejemplo, una configuración de inferencia puede proporcionar soporte para una o más instrucciones de producto escalar de enteros de 8 bits, que se utilizan habitualmente durante las operaciones de inferencia para redes neuronales implementadas.
[0325] LaFigura 12ilustra un sistema informático con múltiples GPU 1200. El sistema informático de múltiples GPU 1200 puede incluir un procesador 1202 acoplado a múltiples GPGPU 1206A-D a través de un conmutador de interfaz anfitrión 1204. El conmutador de interfaz de anfitrión 1204, en un ejemplo, es un dispositivo de conmutador de PCI express que acopla el procesador 1202 a un bus de PCI express a través del que el procesador 1202 puede comunicarse con el conjunto de GPGPU 1206A-D. Cada una de las múltiples GPGPU 1206A-D puede ser una instancia de la GPGPU 1100 de la Figura 11. Las GPGPU 1206A-D pueden interconectarse a través de un conjunto de enlaces punto a punto de alta velocidad entre GPU 1216. Los enlaces de alta velocidad entre GPU y GPU pueden conectarse a cada una de las GPGPU 1206A-D a través de un enlace de GPU dedicado, como el enlace de GPU 1110 que se muestra en la Figura 11. Los enlaces P2P GPU 1216 permiten la comunicación directa entre cada uno de los GPGPU 1206A-D sin necesidad de comunicarse a través del bus de interfaz del anfitrión al que está conectado el procesador 1202. Con el tráfico de GPU a GPU dirigido a los enlaces P2P GPU, el bus de interfaz del anfitrión permanece disponible para el acceso a la memoria del sistema o para comunicarse con otras instancias del sistema informático de múltiples GPU 1200, por ejemplo, a través de uno o más dispositivos de red. Aunque en el ejemplo ilustrado las GPGPU 1206A-D se conectan al procesador 1202 mediante el conmutador de interfaz de anfitrión 1204, en un ejemplo, el procesador 1202 incluye el soporte directo para los enlaces de GPU de P2P 1216 y puede conectarse directamente a las GPGPU 1206A-D.
[0327] Implementaciones de red neuronal de aprendizaje automático
[0329] La arquitectura informática aquí descrita puede configurarse para realizar los tipos de procesamiento paralelo que resultan especialmente adecuados para el entrenamiento y la implementación de redes neuronales para el aprendizaje automático. Una red neuronal puede generalizarse como una red de funciones que tienen una relación de grafo. Como es bien sabido en el ámbito técnico, existen diversos tipos de implementaciones de redes neuronales que se utilizan en el aprendizaje automático. Un tipo ejemplar de red neuronal es la red de propagación hacia adelante, como se ha descrito anteriormente.
[0331] Un segundo tipo ejemplar de red neuronal es la red neuronal convolucional (CNN). Una CNN es una red neuronal especializada de alimentación directa para procesar datos con una topología conocida, similar a una cuadrícula, como los datos de imagen. Por consiguiente, las CNN se utilizan habitualmente para aplicaciones de visión artificial y reconocimiento de imágenes, pero también pueden emplearse para otros tipos de reconocimiento de patrones, como el procesamiento del habla y el lenguaje. Los nodos de la capa de entrada de la CNN se organizan en un conjunto de "filtros" (detectores de características inspirados en los campos receptivos que se encuentran en la retina), y la salida de cada conjunto de filtros se propaga a los nodos de las capas sucesivas de la red. Los cálculos para una CNN incluyen la aplicación de la operación matemática de convolución a cada filtro para producir la salida de ese filtro. La convolución es un tipo especializado de operación matemática realizada por dos funciones para producir una tercera función que es una versión modificada de una de las dos funciones originales. En la terminología de las redes convolucionales, la primera función de la convolución se puede denominar entrada, mientras que la segunda función se puede denominar núcleo de convolución. El resultado puede denominarse mapa de características. Por ejemplo, la entrada a una capa de convolución puede ser una matriz multidimensional de datos que define los distintos componentes de color de una imagen de entrada. El núcleo de convolución puede ser una matriz multidimensional de parámetros, en la que los parámetros se adaptan mediante el proceso de entrenamiento de la red neuronal.
[0333] Las redes neuronales recurrentes (RNN) son una familia de redes neuronales de propagación hacia adelante que incluyen conexiones de retroalimentación entre capas. Las RNN permiten modelar datos secuenciales compartiendo datos de parámetros entre diferentes partes de la red neuronal. La arquitectura para una RNN incluye ciclos. Los ciclos representan la influencia del valor actual de una variable sobre su propio valor en un momento futuro, ya que al menos una parte de los datos de salida de la RNN se utiliza como retroalimentación para procesar las entradas posteriores en una secuencia. Esta característica hace que las RNN sean especialmente útiles para el procesamiento del lenguaje debido a la naturaleza variable con la que se pueden componer los datos lingüísticos.
[0334] Las figuras que se describen a continuación presentan ejemplos de redes de propagación hacia adelante, CNN y RNN, y describen un proceso general para entrenar e implementar cada uno de estos tipos de redes. Se entenderá que estas descripciones son ilustrativas y no limitativas en cuanto a cualquier ejemplo específico descrito en el presente documento y los conceptos ilustrados pueden aplicarse en general a redes neuronales profundas y técnicas de aprendizaje automático en general.
[0336] Las redes neuronales ejemplares descritas anteriormente pueden utilizarse para realizar aprendizaje profundo. El aprendizaje profundo es el aprendizaje automático que utiliza redes neuronales profundas. Las redes neuronales profundas utilizadas en el aprendizaje profundo son redes neuronales artificiales compuestas por múltiples capas ocultas, a diferencia de las redes neuronales superficiales, que solo incluyen una única capa oculta. Las redes neuronales más profundas suelen requerir más recursos computacionales para su entrenamiento. Sin embargo, las capas ocultas adicionales de la red permiten un reconocimiento de patrones en varios pasos que da como resultado un error de salida reducido en comparación con las técnicas de aprendizaje automático superficiales.
[0338] Las redes neuronales profundas utilizadas en el aprendizaje profundo suelen incluir una red frontal para realizar el reconocimiento de características, junto con una red trasera que representa un modelo matemático capaz de realizar operaciones (por ejemplo, clasificación de objetos, reconocimiento de voz, etc.) basadas en la representación de características proporcionada al modelo. El aprendizaje profundo permite realizar el aprendizaje automático sin necesidad de llevar a cabo una ingeniería de características manual para el modelo. En cambio, las redes neuronales profundas pueden aprender características basadas en la estructura estadística o la correlación dentro de los datos de entrada. Las características aprendidas pueden proporcionarse a un modelo matemático que puede asignar las características detectadas a un resultado. El modelo matemático utilizado por la red suele estar especializado para la tarea específica que se va a realizar, y se utilizarán diferentes modelos para realizar diferentes tareas.
[0340] Una vez estructurada la red neuronal, se puede aplicar un modelo de aprendizaje a la red para entrenarla en la realización de tareas específicas. El modelo de aprendizaje describe cómo ajustar las ponderaciones dentro del modelo para reducir el error de salida de la red. La retropropagación de errores es un método común utilizado para entrenar redes neuronales. Se presenta un vector de entrada a la red para su procesamiento. La salida de la red se compara con la salida deseada utilizando una función de pérdida y se calcula un valor de error para cada una de las neuronas de la capa de salida. A continuación, los valores de error se propagan hacia atrás hasta que cada neurona tiene un valor de error asociado que representa aproximadamente su contribución a la salida original. A continuación, la red puede aprender de esos errores utilizando un algoritmo, como el algoritmo de descenso de gradiente estocástico, para actualizar las ponderaciones de la red neuronal.
[0342] LasFiguras 13A-Bilustran una red neuronal convolucional ejemplar. La Figura 13A ilustra diversas capas dentro de una CNN. Como se muestra en la Figura 13A, una CNN ejemplar utilizada para modelar el procesamiento de imágenes puede recibir una entrada 1302 que describe los componentes rojo, verde y azul (RGB) de una imagen de entrada. La entrada 1302 puede ser procesada por múltiples capas convolucionales (por ejemplo, la capa convolucional 1304, la capa convolucional 1306). La salida de las múltiples capas convolucionales puede procesarse opcionalmente mediante un conjunto de capas totalmente conectadas 1308. Las neuronas de una capa totalmente conectada tienen conexiones completas con todas las activaciones de la capa anterior, tal y como se ha descrito anteriormente para una red de propagación hacia adelante. La salida de las capas totalmente conectadas 1308 se puede utilizar para generar un resultado de salida de la red. Las activaciones dentro de las capas totalmente conectadas 1308 se pueden calcular utilizando la multiplicación de matrices en lugar de la convolución. No todas las implementaciones de CNN utilizan capas totalmente conectadas DPLA08. Por ejemplo, en algunas implementaciones, la capa convolucional 1306 puede generar una salida para la CNN.
[0344] Las capas convolucionales están conectadas de forma dispersa, lo que difiere de la configuración tradicional de las redes neuronales que se encuentra en las capas totalmente conectadas 1308. Las capas tradicionales de las redes neuronales están totalmente conectadas, de modo que cada unidad de salida interactúa con cada unidad de entrada. Sin embargo, las capas convolucionales están conectadas de forma dispersa porque la salida de la convolución de un campo se introduce (en lugar del valor de estado respectivo de cada uno de los nodos del campo) en los nodos de la capa posterior, tal y como se ilustra. Los núcleos asociados a las capas convolucionales realizan operaciones de convolución, cuya salida se envía a la siguiente capa. La reducción de dimensionalidad realizada dentro de las capas convolucionales es un aspecto que permite a la CNN escalarse para procesar imágenes de gran tamaño.
[0346] LaFigura 13Bilustra las etapas de cálculo ejemplares dentro de una capa convolucional de una CNN. La entrada a una capa convolucional 1312 de una RNC se puede procesar en tres etapas de una capa convolucional 1314. Las tres etapas pueden incluir una etapa de convolución 1316, una etapa de detección 1318 y una etapa de agrupación 1320. La capa de convolución 1314 puede entonces enviar datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de mapa de características de salida o proporcionar entrada a una capa totalmente conectada, por ejemplo, para generar un valor de clasificación para la entrada a la CNN.
[0348] En la etapa de convolución, 1316 realiza varias convoluciones en paralelo para producir un conjunto de activaciones lineales. La etapa de convolución 1316 puede incluir una transformación afín, que es cualquier transformación que se puede especificar como una transformación lineal más una traslación. Las transformaciones afines incluyen rotaciones, traslaciones, escalamientos y combinaciones de estas transformaciones. La etapa de convolución calcula la salida de las funciones (por ejemplo, neuronas) que están conectadas a regiones específicas de la entrada, que pueden determinarse como la región local asociada a la neurona. Las neuronas calculan un producto escalar entre las ponderaciones de las neuronas y la región de la entrada local a la que están conectadas las neuronas. La salida de la etapa de convolución 1316 define un conjunto de activaciones lineales que son procesadas por etapas sucesivas de la capa convolucional 1314.
[0350] Las activaciones lineales pueden ser procesadas por una etapa de detección 1318. En la etapa de detección 1318, cada activación lineal se procesa mediante una función de activación no lineal. La función de activación no lineal aumenta las propiedades no lineales de la red global sin afectar a los campos receptivos de la capa de convolución. Se pueden utilizar varios tipos de funciones de activación no lineales. Un tipo particular es la unidad lineal rectificada (ReLU), que utiliza una función de activación definida comof(x) = max (0, x), de modo que la activación tiene un umbral en cero.
[0352] La fase de agrupamiento 1320 utiliza una función de agrupamiento que reemplaza la salida de la capa convolucional 1306 con una estadística de resumen de las salidas cercanas. La función de agrupamiento se puede utilizar para introducir invariancia de traducción en la red neuronal, de modo que pequeñas traducciones a la entrada no cambien las salidas agrupadas. La invariancia a la traducción local puede ser útil en escenarios donde la presencia de una característica en los datos de entrada es más importante que la ubicación precisa de la característica. Durante la fase de agrupación 1320 se pueden utilizar varios tipos de funciones de agrupación, entre ellas la agrupación máxima, la agrupación media y la agrupación de norma 12. Además, algunas implementaciones de CNN no incluyen una etapa de agrupación. En su lugar, dichas implementaciones sustituyen y añaden una etapa de convolución adicional con un paso mayor en relación con las etapas de convolución anteriores.
[0354] A continuación, la salida de la capa convolucional 1314 puede ser procesada por la siguiente capa 1322. La siguiente capa 1322 puede ser una capa convolucional adicional o una de las capas completamente conectadas 1308. Por ejemplo, la primera capa convolucional 1304 de laFigura 13Apuede generar salida a la segunda capa convolucional 1306, mientras que la segunda capa convolucional puede generar salida a una primera capa de las capas completamente conectadas 1308.
[0356] LaFigura 14ilustra una red neuronal recurrente 1400 ejemplar. En una red neuronal recurrente (RNR), el estado anterior de la red influye en la salida del estado actual de la red. Las RNR se pueden construir de distintas maneras utilizando una variedad de funciones. El uso de RNR generalmente gira en torno al uso de modelos matemáticos para predecir el futuro basándose en una secuencia previa de entradas. Por ejemplo, una RNR puede usarse para realizar modelos estadísticos del lenguaje para predecir una próxima palabra dada una secuencia previa de palabras. La RNR 1400 ilustrada se puede describir como que tiene una capa de entrada 1402 que recibe un vector de entrada, capas ocultas 1404 para implementar una función recurrente, un mecanismo de retroalimentación 1405 para habilitar una "memoria" de estados anteriores y una capa de salida 1406 para generar un resultado. La RNR 1400 funciona en base a pasos de tiempo. El estado de la RNR en un paso de tiempo determinado se ve influenciado en función del paso de tiempo anterior a través del mecanismo de retroalimentación 1405. Para un paso de tiempo determinado, el estado de las capas ocultas 1404 está definido por el estado anterior y la entrada en el paso de tiempo actual. Una entrada inicial (x<1>) en un primer paso puede ser procesada por la capa oculta 1404. La capa oculta 1404 puede procesar una segunda entrada (x<2>) utilizando información de estado que se determina durante el procesamiento de la entrada inicial (x<1>). Un estado determinado se puede calcular comost = f(Uxt + Wst-1
),dondeUyWson matrices de parámetros. La función f es generalmente una función no lineal, como la función tangente hiperbólica (Tanh) o una variante de la función rectificadoraf(x) = max(0,x). Sin embargo, la función matemática específica utilizada en las capas ocultas 1404 puede variar en función de los detalles específicos de implementación de la RNN 1400.
[0358] Además de las redes CNN y RNN básicas descritas, se pueden habilitar variaciones en esas redes. Un ejemplo de variante de RNN es la RNN de memoria a corto y largo plazo (LSTM). Las redes neuronales recurrentes LSTM son capaces de aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias lingüísticas más largas. Una variante de la CNN es la red convolucional de creencias profundas, que tiene una estructura similar a la CNN y se entrena de manera similar a una red de creencias profundas. Una red de creencias profundas (DBN) es una red neuronal generativa compuesta por múltiples capas de variables estocásticas (aleatorias). Las DBN se pueden entrenar capa por capa utilizando el aprendizaje no supervisado codicioso. Las ponderaciones aprendidas de la DBN pueden utilizarse para proporcionar redes neuronales preentrenadas, determinando un conjunto inicial óptimo de ponderaciones para la red neuronal.
[0360] LaFigura 15ilustra el entrenamiento y la implementación de una red neuronal profunda. Una vez que se ha estructurado una red determinada para una tarea, la red neuronal se entrena utilizando un conjunto de datos de entrenamiento 1502. Se han desarrollado varios marcos de entrenamiento 1504 para permitir la aceleración por hardware del proceso de entrenamiento. Por ejemplo, el marco de aprendizaje automático 1004 de la Figura 10 puede configurarse como un marco de entrenamiento 1004. El marco de entrenamiento 1004 puede conectarse a una red neuronal no entrenada 1506 y permitir que la red neuronal no entrenada se entrene utilizando los recursos de procesamiento paralelo descritos en el presente documento para generar una red neuronal entrenada 1508.
[0361] Para iniciar el proceso de entrenamiento, las ponderaciones iniciales pueden elegirse aleatoriamente o mediante un entrenamiento previo utilizando una red de creencias profundas. El ciclo de entrenamiento se puede realizar de forma supervisada o no supervisada.
[0363] El aprendizaje supervisado es un método de aprendizaje en el que el entrenamiento se realiza como una operación mediada, como cuando el conjunto de datos de entrenamiento 1502 incluye entradas emparejadas con la salida deseada para la entrada, o cuando el conjunto de datos de entrenamiento incluye entradas con salida conocida y la salida de la red neuronal se califica manualmente. La red procesa las entradas y compara los resultados obtenidos con un conjunto de resultados esperados o deseados. Los errores se propagan entonces de nuevo a través del sistema. El marco de entrenamiento 1504 puede ajustarse para ajustar las ponderaciones que controlan la red neuronal no entrenada 1506. El marco de entrenamiento 1504 puede proporcionar herramientas para supervisar en qué medida la red neuronal sin entrenar 1506 está convergiendo hacia un modelo adecuado para generar respuestas correctas basadas en datos de entrada conocidos. El proceso de entrenamiento se repite varias veces a medida que se ajustan las ponderaciones de la red para refinar la salida generada por la red neuronal. El proceso de entrenamiento puede continuar hasta que la red neuronal alcance una precisión estadísticamente deseada asociada con una red neuronal entrenada 1508. La red neuronal entrenada 1508 puede entonces implementarse para llevar a cabo cualquier número de operaciones de aprendizaje automático.
[0365] El aprendizaje no supervisado es un método de aprendizaje en el que la red intenta entrenarse a sí misma utilizando datos sin etiquetar. Por lo tanto, para el aprendizaje no supervisado, el conjunto de datos de entrenamiento 1502 incluirá datos de entrada sin ningún dato de salida asociado. La red neuronal sin entrenar 1506 puede aprender agrupaciones dentro de la entrada sin etiquetar y puede determinar cómo se relacionan las entradas individuales con el conjunto de datos general. El entrenamiento no supervisado se puede utilizar para generar un mapa autoorganizado, que es un tipo de red neuronal entrenada 1507 capaz de realizar operaciones útiles para reducir la dimensionalidad de los datos. El entrenamiento no supervisado también se puede utilizar para detectar anomalías, lo que permite identificar puntos de datos en un conjunto de datos de entrada que se desvían de los patrones normales de los datos.
[0366] También se pueden emplear variaciones en el entrenamiento supervisado y no supervisado. El aprendizaje semisupervisado es una técnica en la que el conjunto de datos de entrenamiento 1502 incluye una mezcla de datos etiquetados y no etiquetados de la misma distribución. El aprendizaje incremental es una variante del aprendizaje supervisado en la que los datos de entrada se utilizan continuamente para seguir entrenando el modelo. El aprendizaje incremental permite que la red neuronal entrenada 1508 se adapte a los nuevos datos 1512 sin olvidar los conocimientos inculcados en la red durante el entrenamiento inicial.
[0368] Tanto si se supervisa como si no, el proceso de entrenamiento de redes neuronales especialmente profundas puede requerir demasiada potencia de cálculo para un solo nodo informático. En lugar de utilizar un único nodo de cálculo, se puede utilizar una red distribuida de nodos computacionales para acelerar el proceso de entrenamiento.
[0370] LaFigura 16es un diagrama de bloques que ilustra el aprendizaje distribuido. El aprendizaje distribuido es un modelo de entrenamiento que utiliza múltiples nodos informáticos distribuidos para realizar el entrenamiento supervisado o no supervisado de una red neuronal. Cada uno de los nodos computacionales distribuidos puede incluir uno o más procesadores anfitrión y uno o más nodos de procesamiento de uso general, como la unidad de procesamiento gráfico de uso general altamente paralela 1100, tal y como se muestra en laFigura 1100. Como se ilustra, el aprendizaje distribuido puede realizarse mediante paralelismo de modelos 1602, paralelismo de datos 1604 o una combinación de paralelismo de modelos y datos 1604.
[0372] En el paralelismo de modelos 1602, diferentes nodos computacionales en un sistema distribuido pueden realizar cálculos de entrenamiento para diferentes partes de una misma red. Por ejemplo, cada capa de una red neuronal puede ser entrenada por un nodo de procesamiento diferente del sistema distribuido. Las ventajas del paralelismo de modelos incluyen la capacidad de escalar a modelos especialmente grandes. La división de los cálculos asociados a las diferentes capas de la red neuronal permite entrenar redes neuronales muy grandes en las que las ponderaciones de todas las capas no cabrían en la memoria de un solo nodo computacional. En algunos casos, el paralelismo de modelos puede resultar especialmente útil para realizar el entrenamiento no supervisado de grandes redes neuronales.
[0373] En el paralelismo de datos 1604, los diferentes nodos de la red distribuida tienen una instancia completa del modelo y cada nodo recibe una parte diferente de los datos. A continuación, se combinan los resultados de los diferentes nodos. Aunque existen diferentes enfoques para el paralelismo de datos, todos los enfoques de entrenamiento paralelo de datos requieren una técnica para combinar los resultados y sincronizar los parámetros del modelo entre cada nodo. Entre los enfoques ejemplares para combinar datos se incluyen el promedio de parámetros y el paralelismo de datos basado en actualizaciones. El promedio de parámetros entrena cada nodo en un subconjunto de los datos de entrenamiento y establece los parámetros globales (por ejemplo, ponderaciones, sesgos) en el promedio de los parámetros de cada nodo. El promedio de parámetros utiliza un servidor central de parámetros que mantiene los datos de los parámetros. El paralelismo de datos basado en actualizaciones es similar al promedio de parámetros, salvo que, en lugar de transferir los parámetros desde los nodos al servidor de parámetros, se transfieren las actualizaciones del modelo. Además, el paralelismo de datos basado en actualizaciones se puede realizar de forma descentralizada, comprimiendo y transfiriendo las actualizaciones entre nodos.
[0374] El modelo combinado y el paralelismo de datos 1606 pueden implementarse, por ejemplo, en un sistema distribuido en el que cada nodo computacional incluye múltiples GPU. Cada nodo puede tener una instancia completa del modelo con GPU independientes dentro de cada nodo que se utilizan para entrenar diferentes partes del modelo.
[0375] La formación distribuida ha aumentado los gastos generales en comparación con la formación en una sola máquina. Sin embargo, los procesadores paralelos y las GPGPU descritos en el presente documento pueden implementar diversas técnicas para reducir la sobrecarga del entrenamiento distribuido, incluidas técnicas que permiten la transferencia de datos entre GPU con un ancho de banda elevado y la sincronización remota acelerada de datos. Aplicaciones ejemplares del aprendizaje automático
[0376] El aprendizaje automático se puede aplicar para resolver una gran variedad de problemas tecnológicos, entre los que se incluyen, entre otros, la visión artificial, la conducción y navegación autónomas, el reconocimiento de voz y el procesamiento del lenguaje. La visión artificial ha sido tradicionalmente una de las áreas de investigación más activas para las aplicaciones de aprendizaje automático. Las aplicaciones de la visión artificial abarcan desde reproducir las capacidades visuales humanas, como el reconocimiento facial, hasta crear nuevas categorías de capacidades visuales. Por ejemplo, las aplicaciones de visión artificial pueden configurarse para reconocer ondas sonoras a partir de las vibraciones inducidas en objetos visibles en un vídeo. El aprendizaje automático acelerado por procesadores paralelos permite entrenar aplicaciones de visión artificial utilizando conjuntos de datos de entrenamiento mucho más grandes de lo que era posible anteriormente y permite implementar sistemas de inferencia utilizando procesadores paralelos de bajo consumo.
[0377] El aprendizaje automático acelerado por procesadores paralelos tiene aplicaciones en la conducción autónoma, como el reconocimiento de carriles y señales de tráfico, la evitación de obstáculos, la navegación y el control de la conducción. Las técnicas de aprendizaje automático acelerado pueden utilizarse para entrenar modelos de conducción basados en conjuntos de datos que definen las respuestas adecuadas a entradas de entrenamiento específicas. Los procesadores paralelos descritos en el presente documento permiten un rápido entrenamiento de las redes neuronales cada vez más complejas que se utilizan para las soluciones de conducción autónoma y permiten el despliegue de procesadores de inferencia de baja potencia en una plataforma móvil adecuada para su integración en vehículos autónomos.
[0378] Las redes neuronales profundas aceleradas por procesadores paralelos han permitido aplicar enfoques de aprendizaje automático al reconocimiento automático del habla (ASR). El ASR incluye la creación de una función que calcula la secuencia lingüística más probable dada una secuencia acústica de entrada. El aprendizaje automático acelerado mediante redes neuronales profundas ha permitido sustituir los modelos ocultos de Markov (HMM) y los modelos de mezcla gaussiana (GMM) que se utilizaban anteriormente para el reconocimiento de voz automático (ASR).
[0379] El aprendizaje automático acelerado por procesadores paralelos también se puede utilizar para acelerar el procesamiento del lenguaje natural. Los procedimientos de aprendizaje automático pueden utilizar algoritmos de inferencia estadística para generar modelos que sean robustos ante entradas erróneas o desconocidas. Entre las aplicaciones ejemplares de los procesadores de lenguaje natural se incluye la traducción automática entre idiomas humanos.
[0380] Las plataformas de procesamiento paralelo utilizadas para el aprendizaje automático se pueden dividir en plataformas de entrenamiento y plataformas de implementación. Las plataformas de entrenamiento suelen ser muy paralelas e incluyen optimizaciones para acelerar el entrenamiento de un solo nodo con múltiples GPU y el entrenamiento de múltiples nodos con múltiples GPU. Entre los procesadores paralelos ejemplares adecuados para el entrenamiento se incluyen la unidad de procesamiento gráfico de uso general altamente paralela 1100 de laFigura 1100y el sistema informático multi-GPU 1200 de laFigura 1200. Por el contrario, las plataformas de aprendizaje automático implementadas suelen incluir procesadores paralelos de menor potencia adecuados para su uso en productos como cámaras, robots autónomos y vehículos autónomos.
[0381] LaFigura 17ilustra un sistema de inferencia en un chip (SOC) 1700 ejemplar adecuado para realizar inferencias utilizando un modelo entrenado. El SOC 1700 puede integrar componentes de procesamiento que incluyen un procesador de medios 1702, un procesador de visión 1704, una GPGPU 1706 y un procesador de múltiples núcleos 1708. El SOC 1700 puede incluir además una memoria integrada 1705 que permite crear un conjunto de datos compartidos en el chip al que pueden acceder todos los componentes de procesamiento. Los componentes de procesamiento pueden optimizarse para un funcionamiento con bajo consumo energético, lo que permite su implementación en diversas plataformas de aprendizaje automático, incluidos vehículos autónomos y robots autónomos. Por ejemplo, una implementación del SOC 1700 puede utilizarse como parte del sistema de control principal de un vehículo autónomo. Cuando el SOC 1700 se configura para su uso en vehículos autónomos, el SOC se diseña y configura para cumplir con las normas de seguridad funcional pertinentes de la jurisdicción de implementación.
[0382] Durante el funcionamiento, el procesador multimedia 1702 y el procesador de visión 1704 pueden trabajar conjuntamente para acelerar las operaciones de visión artificial. El procesador multimedia 1702 puede permitir la decodificación de baja latencia de múltiples flujos de vídeo de alta resolución (por ejemplo, 4K, 8K). Las secuencias de vídeo descodificadas pueden escribirse en una memoria intermedia de la memoria integrada 1705. A continuación, el procesador de visión 1704 puede analizar el vídeo descodificado y realizar operaciones de procesamiento preliminares en los fotogramas del vídeo descodificado como preparación para procesar los fotogramas utilizando un modelo de reconocimiento de imágenes entrenado. Por ejemplo, el procesador de visión 1704 puede acelerar las operaciones de convolución para una CNN que se utiliza para realizar el reconocimiento de imágenes en los datos de vídeo de alta resolución, mientras que los cálculos del modelo de extremo trasero los realiza la GPGPU 1706.
[0383] El procesador multinúcleo 1708 puede incluir lógica de control para ayudar con la secuenciación y sincronización de las transferencias de datos y las operaciones de memoria compartida realizadas por el procesador multimedia 1702 y el procesador de visión 1704. El procesador multinúcleo 1708 también puede funcionar como procesador de aplicaciones para ejecutar aplicaciones de software que pueden aprovechar la capacidad de cálculo inferencial de la GPGPU 1706. Por ejemplo, al menos una parte de la lógica de navegación y conducción puede implementarse en software que se ejecute en el procesador multinúcleo 1708. Dicho software puede enviar directamente las cargas de trabajo computacionales al GPGPU 1706 o las cargas de trabajo computacionales pueden enviarse al procesador multinúcleo 1708, que puede descargar al menos una parte de esas operaciones al GPGPU 1706.
[0384] La GPGPU 1706 puede incluir agrupaciones de cálculo, tales como una configuración de baja potencia de las agrupaciones de cálculo 1106A-1106H dentro de la unidad de procesamiento de gráficos de propósito general 1100. Las agrupaciones de cálculo dentro de GPGPU 1706 pueden soportar instrucciones específicamente optimizadas para realizar cálculos de inferencia en una red neuronal entrenada. Por ejemplo, la GPGPU 1706 puede soportar instrucciones para realizar cálculos de baja precisión, tales como operaciones con vectores enteros de 8 y 4 bits. Vista General del Sistema II
[0385] LaFigura 18es un diagrama de bloques de un sistema de procesamiento 1800. En diversas realizaciones, el sistema 1800 incluye uno o más procesadores 1802 y uno o más procesadores de gráficos 1808, y puede ser un sistema de sobremesa de procesador único, un sistema de estación de trabajo de multiprocesador o un sistema de servidor que tiene un gran número de procesadores 1802 o núcleos de procesador 1807. En un ejemplo, el sistema 1800 es una plataforma de procesamiento incorporada en un circuito integrado de sistema en chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
[0386] Un ejemplo del sistema 1800 puede incluir, o incorporarse en una plataforma de juegos basada en servidor, una consola de juegos, incluyendo una consola de juegos y multimedia, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos en línea. En algunos ejemplos, el sistema 1800 es un teléfono móvil, un teléfono inteligente, una tableta o un dispositivo móvil con conexión a Internet. El sistema de procesamiento de datos 1800 también puede incluir, acoplarse o integrarse en un dispositivo portátil, tal como un reloj inteligente, unas gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunos ejemplos, el sistema de procesamiento de datos 1800 es un televisor o dispositivo decodificador que tiene uno o más procesadores 1802 y una interfaz gráfica generada por uno o más procesadores de gráficos 1808.
[0387] En algunos ejemplos, uno o varios procesadores 1802 incluyen, cada uno, uno o varios núcleos de procesador 1807 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para el sistema y el software del usuario. En algunos ejemplos, cada uno del uno o más núcleos de procesador 1807 está configurado para procesar un conjunto de instrucciones 1809 específico. En algunos ejemplos, el conjunto de instrucciones 1809 puede facilitar el cálculo de conjunto de instrucciones complejo (CISC), el cálculo de conjunto de instrucciones reducido (RISC) o el cálculo mediante una palabra de instrucción muy larga (VLIW). Cada uno de múltiples núcleos de procesador 1807 puede procesar un conjunto de instrucciones diferente 1809, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo del procesador 1807 también puede incluir otros dispositivos de procesamiento, como un procesador de señal digital (DSP).
[0388] En algunos ejemplos, el procesador 1802 incluye una memoria caché 1804. Dependiendo de la arquitectura, el procesador 1802 puede tener una única caché interna o varios niveles de caché interna. En algunos ejemplos, la memoria caché se comparte entre diversos componentes del procesador 1802. En algunos ejemplos, el procesador 1802 también usa una memoria caché externa (por ejemplo, una memoria caché de nivel-3 (L3) o una memoria caché de último nivel (LLC)) (no mostrada), que puede estar compartida entre los núcleos de procesador 1807 usando técnicas de coherencia de caché conocidas. Un archivo de registro 1806 está incluido adicionalmente en el procesador 1802 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 pueden ser específicos del diseño del procesador 1802.
[0389] En algunos ejemplos, el procesador 1802 está acoplado a un bus de procesador 1810 para transmitir señales de comunicación, tales como señales de dirección, datos o control, entre el procesador 1802 y otros componentes del sistema 1800. En un ejemplo, el sistema 1800 utiliza una arquitectura de sistema de "concentrador" ejemplar, que incluye un concentrador controlador de memoria 1816 y un concentrador controlador de entrada/salida (E/S) 1830. Un concentrador de controlador de memoria 1816 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1800, mientras que un concentrador de controlador de E/S (ICH) 1830 proporciona conexiones a los dispositivos de E/S mediante un bus de E/S local. En un ejemplo, la lógica del concentrador de controlador de memoria 1816 está integrada dentro del procesador.
[0391] El dispositivo de memoria 1820 puede ser un dispositivo de memoria dinámica de acceso aleatorio (DRAM), un dispositivo de memoria estática de acceso aleatorio (SRAM), un dispositivo de memoria flash, un dispositivo de memoria de cambio de fase o cualquier otro dispositivo de memoria con un rendimiento adecuado para funcionar como memoria de proceso. En un ejemplo, el dispositivo de memoria 1820 puede operar como memoria de sistema para el sistema 1800, para almacenar datos 1822 e instrucciones 1821 para su uso cuando el uno o más procesadores 1802 ejecutan una aplicación o proceso. El concentrador controlador de memoria 1816 también se acopla con un procesador gráfico externo opcional 1812, que puede comunicarse con uno o varios procesadores gráficos 1808 en los procesadores 1802 para realizar operaciones gráficas y multimedia.
[0393] En algunos ejemplos, ICH 1830 permite que los periféricos se conecten al dispositivo de memoria 1820 y al procesador 1802 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 1846, una interfaz de firmware 1828, un transceptor inalámbrico 1826 (por ejemplo, Wi-Fi, Bluetooth), un dispositivo de almacenamiento de datos 1824 (por ejemplo, unidad de disco duro, memoria flash, etc.) y un controlador de E/S heredado 1840 para acoplar dispositivos heredados (por ejemplo, Personal System 2 (PS/2)) al sistema. Uno o más controladores de bus serie universal (USB) 1842 conectan dispositivos de entrada, como combinaciones de teclado y ratón 1844. Un controlador de red 1834 también puede conectarse al ICH 1830. En algunos ejemplos, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de procesador 1810. Cabe señalar que el sistema 1800 mostrado es un ejemplo y no es limitativo, ya que también se pueden utilizar otros tipos de sistemas de procesamiento de datos con configuraciones diferentes. Por ejemplo, el concentrador controlador de E/S 1830 puede estar integrado en uno o varios procesadores 1802, o el concentrador controlador de memoria 1816 y el concentrador controlador de E/S 1830 pueden estar integrados en un procesador gráfico externo discreto, como el procesador gráfico externo 1812.
[0394] LaFigura 19es un diagrama de bloques de un procesador 1900 que tiene uno o más núcleos de procesador 1902A-1902N, un controlador de memoria integrado 1914 y un procesador gráfico integrado 1908. Aquellos elementos de laFigura 19que tengan los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento, pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a ella. El procesador 1900 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 1902N representado por los recuadros con líneas discontinuas. Cada uno de los núcleos del procesador 1902A-1902N incluye una o más unidades de caché internas 1904A-1904N. En algunos ejemplos, cada núcleo de procesador también tiene acceso a una o más unidades de caché compartidas 1906.
[0396] Las unidades de caché internas 1904A-1904N y las unidades de caché compartidas 1906 representan una jerarquía de memoria caché dentro del procesador 1900. La jerarquía de memoria caché puede incluir al menos un nivel de caché de instrucciones y datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartido, tal como un Nivel 2 (L2), Nivel 3 (L3), Nivel 4 (L4) u otros niveles de caché, donde el nivel más alto de caché antes de la memoria externa se clasifica como LLC. En algunos ejemplos, la lógica de coherencia de caché mantiene la coherencia entre las diversas unidades de caché 1906 y 1904A-1904N.
[0398] En algunos ejemplos, el procesador 1900 también puede incluir un conjunto de una o más unidades controladoras de bus 1916 y un núcleo de agente del sistema 1910. Una o varias unidades controladoras de bus 1916 gestionan un conjunto de buses periféricos, como uno o varios buses de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express). El núcleo del agente del sistema 1910 proporciona funciones de gestión para los distintos componentes del procesador. En algunos ejemplos, el núcleo de agente de sistema 1910 incluye uno o más controladores de memoria integrados 1914 para gestionar el acceso a diversos dispositivos de memoria externos (no mostrados).
[0400] En algunos ejemplos, uno o más de los núcleos del procesador 1902A-1902N incluyen compatibilidad con múltiples hilos simultáneos. En un ejemplo de este tipo, el núcleo de agente de sistema 1910 incluye componentes para coordinar y operar los núcleos 1902A-1902N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 1910 puede incluir adicionalmente una unidad de control de potencia (PCU), que incluye una lógica y componentes para regular el estado de potencia de los núcleos de procesador 1902A-1902N y el procesador de gráficos 1908.
[0402] En algunos ejemplos, el procesador 1900 incluye además un procesador gráfico 1908 para ejecutar operaciones de procesamiento gráfico. En algunos ejemplos, el procesador de gráficos 1908 se acopla con el conjunto de unidades de caché compartida 1906 y el núcleo de agente de sistema 1910, incluyendo el uno o más controladores de memoria integrados 1914. En algunos ejemplos, un controlador de visualización 1911 está acoplado con el procesador de gráficos 1908 para controlar la salida de procesador de gráficos a una o más pantallas acopladas. En algunos ejemplos, el controlador de visualización 1911 puede ser un módulo separado acoplado con el procesador de gráficos mediante al menos una interconexión, o puede estar integrado dentro del procesador de gráficos 1908 o el núcleo de agente de sistema 1910.
[0403] En algunos ejemplos, se utiliza una unidad de interconexión basada en un anillo 1912 para acoplar los componentes internos del procesador 1900. Sin embargo, se puede utilizar una unidad de interconexión alternativa, como una interconexión punto a punto, una interconexión conmutada u otras técnicas, incluidas las técnicas bien conocidas en la técnica. En algunos ejemplos, el procesador de gráficos 1908 se acopla con el anillo de interconexión 1912 mediante un enlace de E/S 1913.
[0404] El enlace de E/S 1913 ejemplar representa al menos una de las múltiples variedades de interconexiones de E/S, incluida 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 1918, como un módulo eDRAM. En algunos ejemplos, cada uno de los núcleos de procesador 1902-1902N y del procesador de gráficos 1908 usan módulos de memoria integrados 1918 como una caché de último nivel compartida.
[0405] En algunos ejemplos, los núcleos de procesador 1902A-1902N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otro ejemplo, los núcleos de procesador 1902A-1902N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 1902A-N 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 un ejemplo, los núcleos de procesador 1902A-1902N son heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de potencia relativamente más alto se acoplan con uno o más núcleos de potencia que tienen un consumo de potencia más bajo. Adicionalmente, el procesador 1900 puede implementarse en uno o más chips o como un circuito de SoC integrado que tiene los componentes ilustrados, además de otros componentes.
[0406] LaFigura 20es un diagrama de bloques de un procesador gráfico 2000, que puede ser una unidad de procesamiento gráfico discreta o un procesador gráfico integrado con una pluralidad de núcleos de procesamiento. En algunos ejemplos, el procesador de gráficos se comunica a través de una interfaz de E/S de memoria mapeada a registros en el procesador gráfico y con comandos colocados en la memoria de procesador. En algunos ejemplos, el procesador de gráficos 2000 incluye una interfaz de memoria 2014 para acceder a memoria. La interfaz de memoria 2014 puede ser una interfaz a memoria local, a una o más cachés internas, a una o más cachés externas compartidas y/o a memoria de sistema.
[0407] En algunos ejemplos, el procesador gráfico 2000 también incluye un controlador de pantalla 2002 para enviar los datos de salida de la pantalla a un dispositivo de visualización 2020. El controlador de pantalla 2002 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 la interfaz de usuario. En algunos ejemplos, el procesador de gráficos 2000 incluye un motor de códec de vídeo 2006 para codificar, decodificar o transcodificar medios a, desde o entre uno o más formatos de codificación de medios, que incluyen, pero sin limitación formatos del Grupo de Expertos de Imágenes en Movimiento (MPEG) tales como MPEG-2, formatos de Codificación de Vídeo Avanzada (AVC) tales como H.264/MPEG-4 AVC, así como de la Sociedad de Ingenieros de Imágenes en Movimiento y Televisión (SMPTE) 421M/VC-1 y formatos del Grupo Mixto de Expertos en Fotografía (JPEG), tal como los formatos JPEG y Motion JPEG (MJPEG).
[0408] En algunos ejemplos, el procesador gráfico 2000 incluye un motor de transferencia de bloques de imagen (BLIT) 2004 para realizar operaciones de rasterizador bidimensional (2D), incluyendo, por ejemplo, transferencias de bloques con límites de bits. Sin embargo, en un ejemplo, las operaciones de gráficos 2D se realizan usando uno o más componentes del motor de procesamiento de gráficos (GPE) 2010. En algunos ejemplos, el motor de procesamiento de gráficos 2010 es un motor de cálculo para realizar operaciones de gráficos, que incluyen operaciones de gráficos tridimensionales (3D) y operaciones de medios.
[0409] En algunos ejemplos, GPE 2010 incluye un canal 3D 2012 para realizar operaciones 3D, como renderizar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas primitivas 3D (por ejemplo, rectángulos, triángulos, etc.). El canal 3D 2012 incluye elementos programables y de función fija que realizan diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema 3D/multimedia 2015. Aunque puede usarse la tubería 3D 2012 para realizar operaciones multimedia, un ejemplo del GPE 2010 también incluye una tubería multimedia 2016 que se usa específicamente para realizar operaciones multimedia, tales como post procesamiento de vídeo y mejora de imagen.
[0410] En algunos ejemplos, el canal multimedia 2016 incluye unidades lógicas programables o de función fija para realizar una o varias operaciones multimedia especializadas, como la aceleración de la decodificación de vídeo, el desentrelazado de vídeo y la aceleración de la codificación de vídeo en lugar del motor de códec de vídeo 2006 o en su nombre. En algunos ejemplos, la canalización de medios 2016 incluye adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 2015. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema 3D/de medios 2015.
[0411] En algunos ejemplos, el subsistema 3D/Media 2015 incluye lógica para ejecutar hilos generados por el canal 3D 2012 y el canal multimedia 2016. En un ejemplo, las canalizaciones envían solicitudes de ejecución de hilos al subsistema de 3D/de medios 2015, que incluye una lógica de despacho de hilos para arbitrar y despachar las diversas solicitudes a recursos de ejecución de hilos disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los hilos de medios y 3D. En algunos ejemplos, el subsistema 3D/de medios 2015 incluye una o más cachés internas para instrucciones y datos de hilo. En algunos ejemplos, el subsistema también incluye memoria compartida, que incluye registros y memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
[0412] Procesamiento 3D/de medios
[0413] LaFigura 21es un diagrama de bloques de un motor de procesamiento gráfico 2110 de un procesador gráfico. En un ejemplo, el motor de procesamiento gráfico (GPE) 2110 es una versión del GPE 2010 que se muestra en laFigura 20. Los elementos de laFigura 21que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a ella. Por ejemplo, se ilustran la canalización 3D 2012 y la canalización de medios 2016 de laFigura 20. La tubería multimedia 2016 es opcional en algunos ejemplos del GPE 2110 y puede no estar explícitamente incluida dentro del GPE 2110. Por ejemplo y, en al menos un ejemplo, un procesador de medios y/o de imágenes separado está acoplado al GPE 2110.
[0414] En algunos ejemplos, GPE 2110 se acopla con o incluye un transmisor de comandos 2103, que proporciona un flujo de comandos al canal 3D 2012 y/o a los canales multimedia 2016. En algunos ejemplos, el emisor por flujo continuo de comandos 2103 está acoplado con memoria, que puede ser memoria de sistema, o una o más de memoria de caché interna y memoria de caché compartida. En algunos ejemplos, el emisor por flujo continuo de comandos 2103 recibe comandos desde la memoria y envía los comandos a la canalización 3D 2012 y/o a la canalización de medios 2016. Las órdenes son directivas extraídas de una memoria intermedia en anillo, que almacena órdenes para la canalización de 3D 2012 y la canalización de medios 2016. En un ejemplo, la memoria intermedia en anillo puede incluir adicionalmente memorias intermedias de comandos en lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización de 3D 2012 pueden incluir también referencias a datos almacenados en memoria, tales como, pero sin limitación, datos de vértices y geometría para la canalización de 3D 2012 y/o datos de imagen y objetos de memoria para la canalización de medios 2016. La canalización 3D 2012 y la canalización de medios 2016 procesan los comandos y los datos realizando operaciones mediante la lógica dentro de las respectivas canalizaciones o despachando uno o más hilos de ejecución a una matriz de núcleos de gráficos 2114.
[0415] En varios ejemplos, el canal 3D 2012 puede ejecutar uno o más programas de sombreado, como sombreadores de vértices, sombreadores geométricos, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cálculo u otros programas de sombreado, procesando las instrucciones y enviando hilos de ejecución a la matriz del núcleo gráfico 2114. La matriz del núcleo gráfico 2114 proporciona un bloque unificado de recursos de ejecución. La lógica de ejecución multipropósito (por ejemplo, unidades de ejecución) dentro de la matriz del núcleo gráfico 2114 incluye compatibilidad con varios lenguajes de sombreado API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados con múltiples sombreadores.
[0416] En algunos ejemplos, la matriz del núcleo gráfico 2114 también incluye lógica de ejecución para realizar funciones multimedia, como el procesamiento de vídeo y/o imágenes. En un ejemplo, las unidades de ejecución incluyen adicionalmente lógica de fin general que es programable para realizar operaciones de cálculo de fin general paralelas, además de operaciones de procesamiento de gráficos. La lógica de propósito general puede realizar operaciones de procesamiento paralelo o en conjunto con la lógica de propósito general dentro de los núcleos de procesador 1807 de laFigura 18o los núcleos 1902A-1902N como en laFigura 19.
[0417] Los datos de salida generados por los hilos que se ejecutan en la matriz de núcleos de gráficos 2114 pueden generar datos en la memoria en una memoria intermedia de retorno unificada (URB) 2118. La URB 2118 puede almacenar datos para múltiples hilos. En algunos ejemplos, la URB 2118 puede usarse para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleo de gráficos 2114. En algunos ejemplos, la URB 2118 puede usarse adicionalmente para la sincronización entre hilos en la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de función compartida 2120.
[0418] En algunos ejemplos, la matriz de núcleos gráficos 2114 es escalable, de modo que la matriz incluye un número variable de núcleos gráficos, cada uno con un número variable de unidades de ejecución basado en el nivel de potencia y rendimiento objetivo del GPE 2110. En un ejemplo, los recursos de ejecución son dinámicamente escalables, de manera que pueden activarse o desactivarse los recursos de ejecución según sean necesarios.
[0419] La matriz de núcleos gráficos 2114 se acopla con la lógica de funciones compartidas 2120, que incluye múltiples recursos que se comparten entre los núcleos gráficos de la matriz de núcleos gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 2120 son unidades lógicas de hardware que proporcionan funcionalidad complementaria especializada a la matriz del núcleo gráfico 2114. En diversos ejemplos, lógica de función compartida 2120 incluye, pero sin limitación, el muestreador 2121, el cálculo matemático 2122 y la lógica de comunicación entre hilos (ITC) 2123. Adicionalmente, algunos ejemplos implementan una o más caché o cachés 2125 dentro de la lógica de función compartida 2120. Se implementa una función compartida donde la demanda para una función especializada dada es insuficiente para la inclusión dentro de la matriz de núcleos de gráficos 2114. En su lugar, se implementa una única instanciación de esa función especializada como una entidad autónoma en la lógica de función compartida 2120 y se comparte entre los recursos de ejecución dentro de la matriz de núcleos de gráficos 2114. El conjunto preciso de funciones que se comparten entre la matriz de núcleo de gráficos 2114 y están incluidas dentro de la matriz de núcleo de gráficos 2114 varía entre ejemplos.
[0421] LaFigura 22es un diagrama de bloques de otro procesador gráfico 2200. Los elementos de laFigura 22que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a ella.
[0423] En algunos ejemplos, el procesador gráfico 2200 incluye una interconexión en anillo 2202, una interfaz frontal de canalización 2204, un motor multimedia 2237 y núcleos gráficos 2280A-2280N. En algunos ejemplos, la interconexión en anillo 2202 acopla el procesador de gráficos a otras unidades de procesamiento, que incluyen otros procesadores de gráficos o uno o más núcleos de procesadores de propósito general. En algunos ejemplos, el procesador de gráficos es uno de muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
[0425] En algunos ejemplos, el procesador gráfico 2200 recibe lotes de comandos a través de la interconexión en anillo 2202. Los comandos entrantes son interpretados por un transmisor de comandos 2203 en la parte frontal del canal 2204. En algunos ejemplos, el procesador de gráficos 2200 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 o núcleos de gráficos 2280A-2280N. Para los comandos de procesamiento de geometría 3D, el transmisor de comandos 2203 suministra comandos al canal de geometría 2236. Para al menos algunos comandos de procesamiento de medios, el transmisor de comandos 2203 suministra los comandos a un frontal de vídeo 2234, que se acopla con un motor de medios 2237. En algunos ejemplos, el motor de medios 2237 incluye un motor de calidad de vídeo (VQE) 2230 para posprocesamiento de vídeo e imágenes y un motor de codificación/decodificación de múltiples formatos (MFX) 2233 para proporcionar codificación y decodificación de datos de medios acelerados por hardware. En algunos ejemplos, la canalización de geometría 2236 y el motor de medios 2237 generan, cada uno, hilos de ejecución para los recursos de ejecución de hilos proporcionados por al menos un núcleo de gráficos 2280A.
[0427] En algunos ejemplos, el procesador gráfico 2200 incluye recursos de ejecución de hilos escalables con núcleos modulares 2280A-2280N (a veces denominados "segmentos de núcleo"), cada uno de los cuales tiene múltiples subnúcleos 2250A-2250N, 2260A-2260N (a veces denominados "subsegmentos de núcleo"). En algunos ejemplos, el procesador de gráficos 2200 puede tener cualquier número de núcleos de gráficos de 2280A a 2280N. En algunos ejemplos, el procesador de gráficos 2200 incluye un núcleo de gráficos 2280A que tiene al menos un primer subnúcleo 2250A y un segundo subnúcleo de núcleo 2260A. En otros ejemplos, el procesador gráfico es un procesador de baja potencia con un único subnúcleo (por ejemplo, 2250A). En algunos ejemplos, el procesador de gráficos 2200 incluye múltiples núcleos de gráficos 2280A-2280N, incluyendo cada uno un conjunto de primeros subnúcleos 2250A-2250N y un conjunto de segundos subnúcleos 2260A-2260N. Cada subnúcleo en el conjunto de primeros subnúcleos 2250A-2250N incluye al menos un primer conjunto de unidades de ejecución 2252A-2252N y muestreadores de medios/texturas 2254A-2254N. Cada subnúcleo en el conjunto de segundos subnúcleos 2260A-2260N incluye al menos un segundo conjunto de unidades de ejecución 2262A-2262N y muestreadores 2264A-2264N. En algunos ejemplos, cada subnúcleo 2250A-2250N, 2260A-2260N comparte un conjunto de recursos compartidos 2270A-2270N. En algunos ejemplos, los recursos compartidos incluyen memoria de caché compartida y lógica de operación de píxel. Pueden incluirse también otros recursos compartidos en los diversos ejemplos del procesador de gráficos.
[0429] Lógica de ejecución
[0431] LaFigura 23ilustra la lógica de ejecución de hilos 2300, que incluye una matriz de elementos de procesamiento empleados en algunos ejemplos de un GPE. Los elementos de laFigura 23que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a ella.
[0432] En algunos ejemplos, la lógica de ejecución de hilos 2300 incluye un sombreador de píxeles 2302, un distribuidor de hilos 2304, una caché de instrucciones 2306, una matriz de unidades de ejecución escalable que incluye una pluralidad de unidades de ejecución 2308A-2308N, un muestreador 2310, una caché de datos 2312 y un puerto de datos 2314. En un ejemplo, los componentes incluidos están interconectados mediante una estructura de interconexión que se enlaza con cada uno de los componentes. En algunos ejemplos, la lógica de ejecución de hilos 2300 incluye una o más conexiones a memoria, tal como la memoria de sistema o memoria caché, a través de una o más de la caché de instrucciones 2306, el puerto de datos 2314, el muestreador 2310 y la matriz de unidades de ejecución 2308A-2308N. En algunos ejemplos, cada unidad de ejecución (por ejemplo, 2308A) es un procesador de vector individual que puede ejecutar múltiples hilos simultáneos y procesar múltiples elementos de datos en paralelo para cada hilo. En algunos ejemplos, la matriz de unidades de ejecución 2308A-2308N incluye cualquier número de unidades de ejecución individuales.
[0433] En algunos ejemplos, la matriz de unidades de ejecución 2308A-2308N se utiliza principalmente para ejecutar programas de "sombreado". En algunos ejemplos, las unidades de ejecución en la matriz 2308A-2308N ejecutan un conjunto de instrucciones que incluye el soporte nativo para muchas instrucciones de sombreador de gráficos 3D convencional, de manera que se ejecutan los programas de sombreador de las bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) con una traducción mínima. Las unidades de ejecución soportan procesamiento de vértices y de geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y procesamiento de propósito general (por ejemplo, sombreadores de cálculo y de medios).
[0435] Cada unidad de ejecución en la matriz de unidades de ejecución 2308A-2308N opera en matrices de elementos de datos. La cantidad de elementos de datos es el "tamaño de ejecución" o la cantidad de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso a elementos de datos, el enmascaramiento y el control de flujo dentro de las instrucciones. El número de canales puede ser independiente del número de unidades aritméticas y lógicas (ALU) o unidades de punto flotante (FPU) físicas de un procesador gráfico concreto. En algunos ejemplos, las unidades de ejecución 2308A-2308N soportan tipos de datos de números enteros y de coma flotante.
[0436] El conjunto de instrucciones de la unidad de ejecución incluye instrucciones SIMD (una sola instrucción, múltiples datos) o SIMT (una sola instrucción, múltiples hilos). Los diversos elementos de datos se pueden almacenar como un tipo de datos empaquetado en un registro y la unidad de ejecución procesará los diversos elementos en función del tamaño de datos de los elementos. Por ejemplo, cuando se opera con un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera sobre el vector como cuatro elementos de datos empaquetados separados de 64 bits (elementos de datos de tamaño Quad-Word (QW)), ocho elementos de datos empaquetados de 32 bits independientes (elementos de datos de tamaño doble palabra (DW)), dieciséis elementos de datos empaquetados de 16 bits independientes (elementos de datos de tamaño palabra (W)) o treinta y dos elementos de datos de 8 bits independientes (elementos de datos de tamaño byte (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
[0438] La lógica de ejecución de hilos 2300 incluye una o varias cachés de instrucciones internas (por ejemplo, 2306) para almacenar en caché las instrucciones de hilos para las unidades de ejecución. En algunos ejemplos, una o más memorias caché de datos (por ejemplo, 2312) están incluidas en datos de hilo de caché durante la ejecución de hilo. En algunos ejemplos, se incluye un muestreador 2310 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunos ejemplos, el muestreador 2310 incluye funcionalidad de textura especializada o muestreo de medios para procesar los datos de textura o de medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
[0440] Durante la ejecución, los canales gráficos y multimedia envían solicitudes de inicio de hilos a la lógica de ejecución de hilos 2300 a través de la lógica de generación y envío de hilos. En algunos ejemplos, la lógica de ejecución de hilos 2300 incluye un despachador de hilos local 2304 que arbitra las solicitudes de inicio de hilos de las canalizaciones de gráficos y medios y genera instancias a los hilos solicitados en una o más unidades de ejecución 2308A-2308N. Por ejemplo, la canalización de geometría (por ejemplo, 2236 de laFigura 22) despacha hilos de procesamiento de vértices, teselación o procesamiento de geometría a la lógica de ejecución de hilos 2300 (Figura 23). En algunos ejemplos, el despachador de hilos 2304 puede procesar también hilos en tiempo de ejecución que generan solicitudes desde los programas sombreadores de ejecución.
[0442] Una vez que se ha procesado un grupo de objetos geométricos y se ha rasterizado en datos de píxeles, se invoca el sombreador de píxeles 2302 para calcular más información de salida y hacer que los resultados se escriban en superficies de salida (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de plantilla, etc.). En algunos ejemplos, el sombreador de píxeles 2302 calcula los valores de los diversos atributos de vértice que han de interpolarse a través del objeto rasterizado. En algunos ejemplos, el sombreador de píxeles 2302 a continuación ejecuta un programa de sombreador de píxeles suministrado por la interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreador de píxeles, el sombreador de píxeles 2302 despacha hilos a una unidad de ejecución (por ejemplo, 2308A) mediante el despachador de hilos 2304. En algunos ejemplos, el sombreador de píxeles 2302 usa la lógica de muestreo de textura en el muestreador 2310 para acceder a datos de textura en mapas de textura almacenados en memoria. Las operaciones aritméticas sobre los datos de textura y los datos geométricos 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.
[0444] En algunos ejemplos, el puerto de datos 2314 proporciona un mecanismo de acceso a la memoria para que la lógica de ejecución de hilos 2300 envíe los datos procesados a la memoria para su procesamiento en una canalización de salida del procesador gráfico. En algunos ejemplos, el puerto de datos 2314 incluye o se acopla a una o más memorias caché (por ejemplo, la caché de datos 2312) para almacenar en caché datos para un acceso de memoria por medio del puerto de datos.
[0446] LaFigura 24es un diagrama de bloques que ilustra los formatos de instrucciones del procesador gráfico 2400. En uno o más ejemplos, las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros con línea continua ilustran los componentes que se incluyen en general en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que únicamente están incluidos en un subconjunto de las instrucciones. En algunos ejemplos, el formato de instrucción 2400 descrito e ilustrado son macro-instrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a micro-operaciones resultantes de la decodificación de instrucciones una vez que se ha procesado la instrucción.
[0448] En algunos ejemplos, las unidades de ejecución del procesador gráfico admiten de forma nativa instrucciones en un formato de instrucción de 128 bits 2410. Hay disponible un formato de instrucción compactado de 64 bits 2430 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 2410 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de instrucción de 64 bits 2430. Las instrucciones nativas disponibles en el formato de instrucción de 64 bits 2430 varían según ejemplo. En algunos ejemplos, la instrucción está compactada en parte usando un conjunto de valores de índice en un campo de índice 2413. El hardware de la unidad de ejecución hace referencia a un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 2410.
[0450] Para cada formato, el código de operación de instrucción 2412 define la operación que la unidad de ejecución debe realizar. 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 suma, la unidad de ejecución realiza una operación de suma 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 realiza cada instrucción en todos los canales de datos de los operandos. En algunos ejemplos, el campo de control de instrucciones 2414 permite el control sobre ciertas opciones de ejecución, tales como la selección de canales (por ejemplo, predicación) y el orden de los canales de datos (por ejemplo, mezcla). Para las instrucciones de 128 bits 2410, un campo de tamaño de ejecución 2416 limita el número de canales de datos que se ejecutarán en paralelo. En algunos ejemplos, el campo de tamaño de ejecución 2416 no está disponible para su uso en el formato de instrucción compacto de 64 bits 2430.
[0452] Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluidos dos operandos de origen, src0 2420, src12422, y un destino 2418. En algunos ejemplos, las unidades de ejecución soportan instrucciones de destino dual, donde está implicado uno de los destinos. Las instrucciones de manipulación de datos pueden tener un tercer operando fuente (por ejemplo, SRC22424), donde el código de operación de la instrucción 2412 determina el número de operandos fuente. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de manera fija) pasado con la instrucción.
[0454] En algunos ejemplos, el formato de instrucción de 128 bits 2410 incluye información sobre el modo de acceso/dirección 2426 que especifica, por ejemplo, si se utiliza el modo de direccionamiento directo de registros o el modo de direccionamiento indirecto de registros. Cuando se utiliza el modo de direccionamiento directo por registro, la dirección de registro de uno o más operandos se proporciona directamente mediante bits en la instrucción 2410.
[0456] En algunos ejemplos, el formato de instrucción de 128 bits 2410 incluye un campo de modo de acceso/dirección 2426, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En un ejemplo, el modo de acceso para definir una alineación de acceso de datos para la instrucción. Algunos ejemplos soportan modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de 1 byte, donde la alineación de bytes del modo de acceso determina la alineación de acceso de los operandos de instrucción. Por ejemplo, cuando está en un primer modo, la instrucción 2410 puede usar un direccionamiento alineado en bytes para operandos de origen y destino y, cuando está en un segundo modo, la instrucción 2410 puede usar direccionamiento alineado de 16 bytes para todos los operandos de origen y destino.
[0458] En un ejemplo, la parte del modo de dirección del campo de modo de acceso/dirección 2426 determina si la instrucción debe utilizar direccionamiento directo o indirecto. Cuando se utiliza el modo de direccionamiento directo por registro, los bits de la instrucción 2410 proporcionan directamente la dirección de registro de uno o más operandos. Cuando se utiliza el modo de direccionamiento indirecto de registros, la dirección de registro de uno o más operandos puede calcularse basándose en un valor de registro de dirección y un campo de dirección inmediata en la instrucción.
[0459] En algunos ejemplos, las instrucciones se agrupan en función de los campos de bits del código de operación 2412 para simplificar la decodificación del código de operación 2440. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten a la unidad de ejecución determinar el tipo de código de operación. La agrupación precisa de códigos de operación que se muestra es solo un ejemplo. En algunos ejemplos, un grupo de código de operación de movimiento y de lógica 2442 incluye instrucciones de movimiento y de lógica de datos (por ejemplo, mover (mov), comparar (cmp)). En algunos ejemplos, el grupo de movimiento y lógica 2442 comparte los cinco bits más significativos (MSB), donde las instrucciones mover (mov) están en forma de 0000xxxxb y las instrucciones de lógica están en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 2444 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones diversas 2446 incluye una combinación de instrucciones, entre las que se encuentran instrucciones de sincronización (por ejemplo, esperar, enviar) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones matemáticas paralelas 2448 incluye instrucciones aritméticas por componentes (por ejemplo, sumar, multiplicar (mul)) en la forma 0100xxxxb (por ejemplo, 0x40). El grupo matemático paralelo 2448 realiza las operaciones aritméticas en paralelo a través de los canales de datos. El grupo matemático vectorial 2450 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo de matemáticas vectoriales realiza operaciones aritméticas, como cálculos de producto escalar, en operandos vectoriales.
[0460] Canalización de gráficos
[0461] LaFigura 25es un diagrama de bloques de otro procesador gráfico 2500. Los elementos de laFigura 25que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a ella.
[0462] En algunos ejemplos, el procesador gráfico 2500 incluye un canal gráfico 2520, un canal multimedia 2530, un motor de visualización 2540, una lógica de ejecución de hilos 2550 y un canal de salida de renderizado 2570. En algunos ejemplos, el procesador de gráficos 2500 es un procesador de gráficos dentro de un sistema de procesamiento de múltiples núcleos que incluye uno o más núcleos de procesamiento de propósito general. El procesador de gráficos se controla por las escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 2500 mediante una interconexión en anillo 2502. En algunos ejemplos, la interconexión de anillo 2502 acopla el procesador de gráficos 2500 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de fin general. Los comandos procedentes de la interconexión en anillo 2502 son interpretados por un transmisor de comandos 2503, que envía instrucciones a los componentes individuales del canal gráfico 2520 o del canal multimedia 2530.
[0463] En algunos ejemplos, el generador de comandos 2503 dirige el funcionamiento de un recuperador de vértices 2505 que lee datos de vértices de la memoria y ejecuta comandos de procesamiento de vértices proporcionados por el generador de comandos 2503. En algunos ejemplos, el extractor de vértices 2505 proporciona datos de vértices a un sombreador de vértices 2507, que realiza operaciones de transformación espacial de coordenadas y de iluminación en cada vértice. En algunos ejemplos, el extractor de vértices 2505 y el sombreador de vértices 2507 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a unidades de ejecución 2552A, 2552B mediante un despachador de hilos 2531.
[0464] En algunos ejemplos, las unidades de ejecución 2552A, 2552B son una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones gráficas y multimedia. En algunos ejemplos, las unidades de ejecución 2552A, 2552B tienen una caché L1 adjunta 2551 que es específica para cada matriz o está compartida entre las matrices. La caché puede configurarse como una caché de datos, una caché de instrucciones o una única caché que se subdivide para contener datos e instrucciones en diferentes subdivisiones.
[0465] En algunos ejemplos, el canal gráfico 2520 incluye componentes de teselación para realizar la teselación acelerada por hardware de objetos 3D. En algunos ejemplos, un sombreador de casco programable 2511 configura las operaciones de teselación. Un sombreador de dominio programable 2517 proporciona una evaluación de extremo trasero de la salida de teselación. Un teselador 2513 funciona bajo la dirección del sombreador de casco 2511 y contiene lógica de propósito especial para generar un conjunto de objetos geométricos detallados basados en un modelo geométrico aproximado que se proporciona como entrada al canal gráfico 2520. En algunos ejemplos, si no se usa la teselación, pueden omitirse los componentes de teselación 2511, 2513, 2517.
[0466] En algunos ejemplos, los objetos geométricos completos pueden ser procesados por un sombreador geométrico 2519 a través de uno o más hilos enviados a las unidades de ejecución 2552A, 2552B, o pueden pasar directamente al recortador 2529. En algunos ejemplos, el sombreador de geometría opera en objetos geométricos enteros, en lugar de en vértices o parches de vértices como en etapas anteriores de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 2519 recibe una entrada desde el sombreador de vértices 2507. En algunos ejemplos, el sombreador de geometría 2519 es programable mediante un programa de sombreado de geometría para realizar una teselación de geometría si las unidades de teselación están deshabilitadas.
[0467] Antes de la rasterización, un recortador 2529 procesa los datos de los vértices. El recortador 2529 puede ser un recortador de función fija o un recortador programable con funciones de recorte y sombreado geométrico. En algunos ejemplos, un componente de prueba de rasterizador y profundidad 2573 en la canalización de salida del representador 2570 despacha sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxeles. En algunos ejemplos, la lógica de sombreador de píxeles está incluida en la lógica de ejecución de hilos 2550. En algunos ejemplos, una aplicación puede omitir la rasterización y acceder a datos de vértices no rasterizados a través de una unidad de salida de flujo 2523.
[0468] El procesador gráfico 2500 tiene un bus de interconexión, una estructura de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y mensajes entre los componentes principales del procesador. En algunos ejemplos, las unidades de ejecución 2552A, 2552B y la caché o cachés asociadas 2551, el muestreador de textura y de medios 2554 y la caché de textura/muestreador 2558 se interconectan mediante un puerto de datos 2556 para realizar el acceso a memoria y comunicarse con los componentes de canalización de salida de representación del procesador. En algunos ejemplos, cada uno del muestreador 2554, cachés 2551, 2558 y las unidades de ejecución 2552A, 2552B tienen rutas de acceso a memoria separadas.
[0470] En algunos ejemplos, el canal de salida de renderizado 2570 contiene un rasterizador y un componente de prueba de profundidad 2573 que convierte los objetos basados en vértices en una representación asociada basada en píxeles. En algunos ejemplos, la canalización de salida de representador 2570 incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de líneas y de triángulos de función fija. Una caché de representación 2578 y una caché de profundidad 2579 asociadas también están disponibles en algunos ejemplos. Un componente de operaciones de píxel 2577 lleva a cabo operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxel asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) se llevan a cabo por el motor 2D 2541, o son sustituidas en el momento de la visualización por el controlador de visualización 2543 utilizando planos de visualización de superposición. En algunos ejemplos, está disponible una caché L3 compartida 2575 para todos los componentes de gráficos, permitiendo compartir datos sin el uso de memoria de sistema principal.
[0472] En algunos ejemplos, el canal de medios del procesador gráfico 2530 incluye un motor de medios 2537 y un extremo frontal de vídeo 2534. En algunos ejemplos, el extremo frontal de vídeo 2534 recibe comandos de canalización desde el emisor por flujo continuo de comandos 2503. En algunos ejemplos, la canalización de medios 2530 incluye un emisor por flujo continuo de comandos separado. En algunos ejemplos, el extremo frontal de vídeo 2534 procesa comandos de medios antes de enviar el comando al motor de medios 2537. En algunos ejemplos, el motor de medios 2537 incluye funcionalidad de generación de hilos para generar hilos para su despacho a la lógica de ejecución de hilos 2550 a través del distribuidor de hilos 2531.
[0474] En algunos ejemplos, el procesador gráfico 2500 incluye un motor de visualización 2540. En algunos ejemplos, el motor de visualización 2540 es externo al procesador 2500 y se acopla con el procesador de gráficos mediante el anillo de interconexión 2502, o algún otro bus o estructura de interconexión. En algunos ejemplos, el motor de visualización 2540 incluye un motor 2D 2541 y un controlador de visualización 2543. En algunos ejemplos, el motor de visualización 2540 contiene una lógica de propósito especial que puede operar independientemente de la canalización 3D. En algunos ejemplos, el controlador de visualización 2543 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en sistema, como en un ordenador portátil, o un dispositivo de visualización externo adjunto mediante un conector de dispositivo de visualización.
[0476] En algunos ejemplos, el canal gráfico 2520 y el canal multimedia 2530 se pueden configurar para realizar operaciones basadas en múltiples interfaces de programación gráfica y multimedia, y no son específicos de ninguna interfaz de programación de aplicaciones (API) en concreto. En algunos ejemplos, el software de controlador para el procesador de gráficos traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. En algunos ejemplos, se proporciona soporte para la biblioteca Open Graphics (OpenGL) y Open Computing Language (OpenCL) de Khronos Group, la biblioteca Direct3D de Microsoft Corporation, o se puede proporcionar soporte tanto para OpenGL como para D3D. Puede proporcionarse también soporte para la Biblioteca de Visión Informática de Código Abierto (OpenCV). También se soportaría una API futura con una canalización 3D compatible si pudiera hacerse un mapeo de la canalización de la API futura a la canalización del procesador de gráficos.
[0478] Programación de canalización de gráficos
[0480] LaFigura 26Aes un diagrama de bloques que ilustra un formato de comando de procesador gráfico 2600. LaFigura 26Bes un diagrama de bloques que ilustra una secuencia de comandos del procesador gráfico 2610. Los recuadros con líneas continuas de la figura 26A ilustran los componentes que suelen incluirse en un comando gráfico, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de los comandos gráficos. El formato de comando del procesador gráfico ejemplar 2600 de laFigura 26Aincluye campos de datos para identificar un cliente de destino 2602 del comando, un código de operación de comando (código de operación) 2604 y los datos relevantes 2606 para el comando. En algunos comandos también se incluyen un subcódigo de operación 2605 y un tamaño de comando 2608.
[0482] En algunos ejemplos, el cliente 2602 especifica la unidad cliente del dispositivo gráfico que procesa los datos del comando. En algunos ejemplos, un analizador de comandos de procesador de gráficos examina el campo de cliente de cada comando para acondicionar el procesamiento adicional del comando y enrutar los datos de comando a la unidad cliente apropiada. En algunos ejemplos, las unidades cliente de procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad del representador, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que la unidad cliente recibe el comando, lee el código de operación 2604 y, si está presente, el subcódigo de operación 2605 para determinar la operación que debe realizar. La unidad cliente ejecuta el comando utilizando la información del campo de datos 2606. Para algunos comandos, se espera un tamaño de comando explícito de 2608 para especificar el tamaño del comando. En algunos ejemplos, el analizador de comandos determina automáticamente el tamaño de al menos alguno de los comandos basándose en el código de operación del comando. En algunos ejemplos, se alinean los comandos mediante múltiplos de una palabra doble.
[0483] El diagrama de flujo de laFigura 26Bmuestra una secuencia de comandos de procesador gráfico 2610 a modo de ejemplo. En algunos ejemplos, el software o firmware de un sistema de procesamiento de datos que presenta una realización de un procesador de gráficos que usa una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra una secuencia de comandos de muestra y se describe únicamente con propósitos ilustrativos, ya que los ejemplos no están limitados a estos comandos específicos o para esta secuencia de comandos. Además, pueden emitirse los comandos como un lote de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos en concurrencia al menos parcialmente.
[0484] En algunos ejemplos, la secuencia de comandos del procesador gráfico 2610 puede comenzar con un comando de vaciado de canalización 2612 para hacer que cualquier canalización gráfica activa complete los comandos actualmente pendientes para la canalización. En algunos ejemplos, la canalización 3D 2622 y la canalización de medios 2624 no operan concurrentemente. Se realiza la descarga de la canalización para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de la canalización, el analizador de comandos para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las memorias caché de lectura relevantes. Opcionalmente, cualquier dato en la memoria caché del renderizador que se marque como 'sucia' se puede vaciar en la memoria. En algunos ejemplos, puede usarse el comando de vaciado de canalización 2612 para la sincronización de canalización o antes de colocar el procesador de gráficos en un estado de baja potencia.
[0485] En algunos ejemplos, se utiliza un comando de selección de canalización 2613 cuando una secuencia de comandos requiere que el procesador gráfico cambie explícitamente entre canalizaciones. En algunos ejemplos, se requiere únicamente un comando de selección de canalización 2613 una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea emitir comandos para ambas canalizaciones. En algunos ejemplos, se requiere un comando de vaciado de canalización 2612 inmediatamente antes de un conmutador de canalización mediante el comando de selección de canalización 2613.
[0486] En algunos ejemplos, un comando de control de canalización 2614 configura una canalización gráfica para su funcionamiento y se utiliza para programar la canalización 3D 2622 y la canalización multimedia 2624. En algunos ejemplos, el comando de control de canalización 2614 configura el estado de canalización para la canalización activa. En un ejemplo, se usa el comando de control de canalización 2614 para sincronización de canalización y para limpiar datos de una o más memorias de caché dentro de la canalización activa antes de procesar un lote de comandos. En algunos ejemplos, los comandos para el estado de la memoria intermedia de retorno 2616 se utilizan para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de uno o varias memorias intermedias de retorno en los que las operaciones escriben datos intermedios durante el procesamiento. En algunos ejemplos, el procesador de gráficos también usa una o más memorias intermedias de retorno para almacenar datos de salida y realizar comunicación de hilos cruzada. En algunos ejemplos, configurar el estado de memoria intermedia de retorno 2616 incluye seleccionar el tamaño y número de memorias intermedias de retorno para su uso para un conjunto de operaciones de canalización.
[0487] Los comandos restantes de 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 2620, la secuencia de comandos se adapta a la canalización 3D 2622 comenzando por el estado de canalización 3D 2630, o a la canalización multimedia 2624 comenzando por el estado de canalización multimedia 2640.
[0488] Los comandos para el estado del canal 3D 2630 incluyen comandos de configuración del estado 3D para el estado de la memoria intermedia de vértices, el estado del elemento de vértices, el estado del color constante, el estado de la memoria intermedia de profundidad y otras variables de estado que deben configurarse antes de procesar los comandos de primitivas 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en utilización. En algunos ejemplos, los comandos de estado de canalización de 3D 2630 también pueden desactivar o desviar selectivamente ciertos elementos de canalización si esos elementos no se usarán.
[0489] En algunos ejemplos, se utiliza el comando de primitivas 3D 2632 para enviar primitivas 3D para que sean procesadas por el canal 3D. Los comandos y los parámetros asociados que se pasan al procesador gráfico a través del comando de primitivas 3D 2632 se envían a la función de obtención de vértices en el canal gráfico. La función de obtención de vértices utiliza los datos del comando de primitivas 3D 2632 para generar estructuras de datos de vértices. Las estructuras de datos de vértices se almacenan en una o varias memorias intermedias de retorno. En algunos ejemplos, se usa el comando de primitiva 3D 2632 para realizar operaciones de vértice en primitivas 3D mediante sombreadores de vértices. Para procesar sombreadores de vértices, la canalización 3D 2622 despacha hilos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
[0490] En algunos ejemplos, el canal 3D 2622 se activa mediante un comando o evento de ejecución 2634. En algunos ejemplos, una escritura de registro activa la ejecución de comando. En algunos ejemplos, se activa la ejecución mediante un comando 'ir' o 'disparar' en la secuencia de comandos. En un ejemplo se activa la ejecución de comando usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La canalización 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez completadas las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles colorea los píxeles resultantes. También se pueden incluir comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo trasero de píxeles para esas operaciones.
[0491] En algunos ejemplos, la secuencia de comandos del procesador gráfico 2610 sigue la ruta del canal multimedia 2624 al realizar operaciones multimedia. En general, el uso específico y la forma de programación del canal de medios 2624 dependen de los medios o de las operaciones de cálculo que se vayan a realizar. Las operaciones específicas de decodificación de medios pueden descargarse al canal de medios durante la decodificación de medios. En algunos ejemplos, puede desviarse también la canalización de medios y puede realizarse la decodificación de medios, en su totalidad o en parte, usando recursos proporcionados por uno o más núcleos de procesamiento de propósito general. En un ejemplo, la canalización de medios también incluye elementos para las operaciones de la unidad de procesador de gráficos de propósito general (GPGPU), donde se usa el procesador de gráficos para realizar operaciones vectoriales SIMD usando programas de sombreador computacionales que no están relacionados explícitamente con la representación de primitivas de gráficos.
[0492] En algunos ejemplos, el canal de medios 2624 está configurado de manera similar al canal 3D 2622. Un conjunto de comandos para configurar el estado del canal de medios 2640 se envía o se coloca en una cola de comandos antes que los comandos de objetos multimedia 2642. En algunos ejemplos, los comandos para el estado de canalización de medios 2640 incluyen datos para configurar los elementos de canalización de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de codificación y decodificación de vídeo dentro de la canalización de medios, tales como el formato de codificación o decodificación. En algunos ejemplos, los comandos para el estado de canalización de medios 2640 también soportan el uso de uno o más punteros a elementos de estado "indirectos" que contienen un lote de configuraciones de estado.
[0493] En algunos ejemplos, los comandos de objetos multimedia 2642 proporcionan punteros a objetos multimedia para su procesamiento por parte del canal multimedia. Los objetos multimedia incluyen memorias intermedias de memoria que contienen datos de vídeo que deben procesarse. En algunos ejemplos, todos los estados de canalización de medios deben ser válidos antes de emitir un comando de objeto de medios 2642. Una vez que se ha configurado el estado de la canalización y los comandos de objeto de medios 2642 se han puesto en cola, se activa la canalización de medios 2624 por medio de un comando de ejecución 2644 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida del canal de medios 2624 puede ser posteriormente procesada mediante operaciones proporcionadas por el canal 3D 2622 o el canal de medios 2624. En algunos ejemplos, las operaciones de GPGPU se configuran y ejecutan de una manera similar a las operaciones de medios.
[0494] Arquitectura de software de gráficos
[0495] LaFigura 27ilustra una arquitectura de software gráfico ejemplar para un sistema de procesamiento de datos 2700. En algunos ejemplos, la arquitectura de software incluye una aplicación de gráficos 3D 2710, un sistema operativo 2720 y al menos un procesador 2730. En algunos ejemplos, el procesador 2730 incluye un procesador de gráficos 2732 y uno o más núcleo o núcleos de procesador de propósito general 2734. Cada uno de la aplicación de gráficos 2710 y el sistema operativo 2720 se ejecutan en la memoria de sistema 2750 del sistema de procesamiento de datos. En algunos ejemplos, la aplicación de gráficos 3D 2710 contiene uno o más programas de sombreado que incluyen instrucciones de sombreado 2712. Las instrucciones del lenguaje de sombreado pueden estar en un lenguaje de sombreado de alto nivel, como el lenguaje de sombreado de alto nivel (HLSL) o el lenguaje de sombreado OpenGL (GLSL). La aplicación también incluye instrucciones ejecutables 2714 en un lenguaje máquina adecuado para su ejecución por parte del núcleo o núcleos de procesador de uso general 2734. La aplicación también incluye objetos gráficos 2716 definidos por datos de vértices.
[0496] En algunos ejemplos, el sistema operativo 2720 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo propietario similar a UNIX o un sistema operativo de código abierto similar a UNIX que utiliza una variante del núcleo Linux. El sistema operativo 2720 puede admitir una API de gráficos 2722 tal como la API Direct3D o la API OpenGL. Cuando se utiliza la API Direct3D, el sistema operativo 2720 utiliza un compilador de sombreado de extremo frontal 2724 para compilar cualquier instrucción de sombreado 2712 en HLSL en un lenguaje de sombreado de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede realizar una precompilación del sombreador. En algunos ejemplos, los sombreadores de alto nivel se compilan en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 2710.
[0497] En algunos ejemplos, el controlador gráfico en modo usuario 2726 contiene un compilador de sombreado de extremo trasero 2727 para convertir las instrucciones de sombreado 2712 en una representación específica del hardware. Cuando se utiliza la API OpenGL, las instrucciones de sombreado 2712 en el lenguaje de alto nivel GLSL se pasan a un controlador gráfico en modo usuario 2726 para su compilación. En algunos ejemplos, el controlador de gráficos de modo de usuario 2726 usa las funciones de modo de núcleo de sistema operativo 2728 para comunicarse con un controlador de gráficos de modo de núcleo 2729. En algunos ejemplos, el controlador de gráficos en modo de núcleo 2729 se comunica con el procesador de gráficos 2732 para despachar comandos e instrucciones.
[0498] Implementaciones de núcleo de IP
[0499] Uno o más aspectos pueden implementarse mediante código representativo almacenado en un medio legible por máquina que representa y/o define la lógica dentro de un circuito integrado, tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan diversas lógicas dentro del procesador. Cuando son leídas por una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas aquí descritas. Dichas representaciones, conocidas como "núcleos IP", son unidades lógicas reutilizables para un circuito integrado que pueden almacenarse en un medio tangible legible por máquina como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que producen el circuito integrado. El circuito integrado se puede fabricar de tal manera que el circuito realice las operaciones descritas en asociación con cualquiera de los ejemplos descritos en el presente documento.
[0500] LaFigura 28es un diagrama de bloques que ilustra un sistema de desarrollo de núcleos IP 2800 que puede utilizarse para fabricar un circuito integrado que realice operaciones. El sistema de desarrollo de núcleos IP 2800 puede utilizarse para generar diseños modulares y reutilizables que pueden incorporarse a un diseño más amplio o utilizarse para construir un circuito integrado completo (por ejemplo, un circuito integrado SOC). Una instalación de diseño 2830 puede generar una simulación de software 2810 de un diseño de núcleo IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). El software de simulación 2810 se puede utilizar para diseñar, probar y verificar el comportamiento del núcleo IP utilizando un modelo de simulación 2812. El modelo de simulación 2812 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 registros (RTL) 2815 a partir del modelo de simulación 2812. El diseño RTL 2815 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre los registros de hardware, incluida la lógica asociada que se ejecuta utilizando las señales digitales modeladas. Además de un diseño RTL 2815, también se pueden crear, diseñar o sintetizar diseños de nivel inferior a nivel lógico o de transistor. Por lo tanto, los detalles concretos del diseño inicial y la simulación pueden variar.
[0501] El diseño RTL 2815 o equivalente puede sintetizarse posteriormente mediante la herramienta de diseño en un modelo de hardware 2820, que puede estar en un lenguaje de descripción de hardware (HDL) o en alguna otra representación de datos de diseño físico. El HDL puede simularse o probarse adicionalmente para verificar el diseño del núcleo IP. El diseño del núcleo IP se puede almacenar para su entrega a una instalación de fabricación de terceros 2865 utilizando una memoria no volátil 2840 (por ejemplo, un disco duro, una memoria flash o cualquier medio de almacenamiento no volátil). Alternativamente, el diseño del núcleo IP puede transmitirse (por ejemplo, a través de Internet) mediante una conexión por cable 2850 o una conexión inalámbrica 2860. La planta de fabricación 2865 puede entonces fabricar un circuito integrado que se base, al menos en parte, en el diseño del núcleo IP. El circuito integrado fabricado puede estar configurado para realizar operaciones de acuerdo con al menos un ejemplo descrito en el presente documento. Circuito integrado de sistema en chip ilustrativo
[0502] LasFiguras 29-31ilustran circuitos integrados ejemplares y procesadores gráficos asociados que pueden fabricarse utilizando uno o más núcleos IP. Además de lo ilustrado, se pueden incluir otras lógicas y circuitos, incluyendo procesadores gráficos/núcleos adicionales, controladores de interfaz periférica o núcleos de procesador de uso general.
[0503] LaFigura 29es un diagrama de bloques que ilustra un sistema ejemplar en un circuito integrado en chip 2900 que puede fabricarse utilizando uno o más núcleos IP. El circuito integrado 2900 ejemplar incluye uno o más procesadores de aplicaciones 2905 (por ejemplo, CPU), al menos un procesador gráfico 2910 y puede incluir adicionalmente un procesador de imágenes 2915 y/o un procesador de vídeo 2920, cualquiera de los cuales puede ser un núcleo IP modular procedente de la misma instalación de diseño o de varias instalaciones diferentes. El circuito integrado 2900 incluye una lógica de bus o de periféricos que incluye un controlador de USB 2925, un controlador de UART 2930, un controlador de SPI/SDIO 2935 y un controlador de I<2>S/I<2>C 2940. Además, el circuito integrado puede incluir un dispositivo de visualización 2945 acoplado a uno o varios controladores de interfaz multimedia de alta definición (HDMI) 2950 y una interfaz de visualización de interfaz de procesador de la industria móvil (MIPI) 2955. El almacenamiento puede ser proporcionado por un subsistema de memoria flash 2960 que incluye memoria flash y un controlador de memoria flash. La interfaz de memoria puede proporcionarse a través de un controlador de memoria 2965 para acceder a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 2970.
[0504] LaFigura 30es un diagrama de bloques que ilustra un procesador gráfico 3010 ejemplar de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP. El procesador gráfico 3010 puede ser una variante del procesador gráfico 2910 de laFigura 29. El procesador gráfico 3010 incluye un procesador de vértices 3005 y uno o más procesadores de fragmentos 3015A-3015N (por ejemplo, 3015A, 3015B, 3015C, 3015D, hasta 3015N-1 y 3015N). El procesador gráfico 3010 puede ejecutar diferentes programas de sombreado a través de una lógica separada, de modo que el procesador de vértices 3005 está optimizado para ejecutar operaciones para programas de sombreado de vértices, mientras que el uno o más procesadores de fragmentos 3015A-3015N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreado de fragmentos o píxeles. El procesador de vértices 3005 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértices. Los procesadores de fragmentos 3015A-3015N utilizan los datos primitivos y de vértices generados por el procesador de vértices 3005 para producir una memoria intermedia de trama que se muestra en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 3015A-3015N están optimizados para ejecutar programas sombreadores de fragmento según se proporciona en la API de OpenGL, que pueden usarse para realizar operaciones similares como un programa sombreador de píxeles como se proporciona en la API de Direct 3D.
[0506] El procesador de gráficos 3010 incluye además una o más unidades de gestión de memoria (MMU) 3020A-3020B, memorias caché 3025A-3025B e interconexiones de circuitos 3030A-3030B. La una o más MMU 3020A-3020B proporcionan un mapeo de direcciones virtuales a físicas para el procesador gráfico 3010, incluyendo el procesador de vértices 3005 y/o los procesadores de fragmentos 3015A-3015N, que pueden hacer referencia a datos de vértices o de imagen/textura almacenados en memoria, además de los datos de vértices o de imagen/textura almacenados en la una o más cachés 3025A-3025B. En un ejemplo, una o varias MMU 3020A-3020B pueden sincronizarse con otras MMU dentro del sistema, incluidas una o varias MMU asociadas con uno o varios procesadores de aplicaciones 2905, el procesador de imágenes 2915 y/o el procesador de vídeo 2920 de laFigura 29, de modo que cada procesador 2905-2920 pueda participar en un sistema de memoria virtual compartida o unificada. La una o más interconexión o interconexiones de circuito 3030A-3030B posibilitan que el procesador de gráficos 3010 interconecte con otros núcleos de IP dentro del SoC, mediante un bus interno del SoC o mediante una conexión directa, de acuerdo con ejemplos.
[0507] LaFigura 31es un diagrama de bloques que ilustra un procesador gráfico 3110 ejemplar adicional de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP. El procesador gráfico 3110 puede ser una variante del procesador gráfico 2910 de laFigura 29. El procesador gráfico 3110 incluye una o más MMU 3020A-3020B, cachés 3025A-3025B e interconexiones de circuito 3030A-3030B del circuito integrado 3000 de laFigura 30.
[0509] El procesador de gráficos 3110 incluye uno o más núcleos de sombreado 3115A-3115N (por ejemplo, 3115A, 3115B, 3115C, 3115D, 3115E, 3115F, hasta 3015N-1 y 3015N), que proporcionan una arquitectura de núcleo de sombreado unificada en la que un solo núcleo o tipo de núcleo puede ejecutar todos los tipos de código de sombreado programable, incluido el código de programa de sombreado para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de computación. El número exacto de núcleos de sombreado presentes puede variar entre ejemplos e implementaciones. Además, el procesador gráfico 3110 incluye un gestor de tareas entre núcleos 3105, que actúa como un distribuidor de hilos para distribuir los hilos de ejecución a uno o varios núcleos de sombreado 3115A-3115N. El procesador gráfico 3110 incluye además una unidad de mosaico 3118 para acelerar las operaciones de mosaico para el renderizado basado en mosaicos, en el que las operaciones de renderizado de una escena se subdividen en el espacio de la imagen. El renderizado basado en mosaicos se puede utilizar para aprovechar la coherencia espacial local dentro de una escena o para optimizar el uso de las cachés internas.
[0511] En la siguiente descripción y reivindicaciones, se puede utilizar el término "acoplado" junto con sus derivados. "Acoplado" se usa para indicar que dos o más elementos cooperan o interactúan entre sí, pero pueden tener o no componentes físicos o eléctricos intermedios entre ellos.
[0513] Tal y como se utilizan en las reivindicaciones, salvo que se especifique lo contrario, el uso de los adjetivos ordinales "primero", "segundo", "tercero", etc., para describir un elemento común, solo indica que se hace referencia a diferentes instancias de elementos similares, y no pretende implicar que los elementos así descritos deban estar en una secuencia determinada, ya sea temporal, espacial, jerárquica o de cualquier otro tipo.
[0515] Los dibujos y la descripción anterior proporcionan ejemplos de realizaciones. Los expertos en la materia apreciarán que uno o más de los elementos descritos pueden combinarse en un único elemento funcional. Como alternativa, ciertos elementos pueden dividirse en múltiples elementos funcionales. Se pueden añadir elementos de una realización a otra realización. Son posibles numerosas variaciones, ya sea que se indiquen explícitamente en la memoria descriptiva o no, tal como diferencias en la estructura, dimensión y uso del material. El alcance de las realizaciones es tan amplio como se proporciona la siguiente reivindicación.

Claims (17)

1. REIVINDICACIONES
1. Un aparato (600) que comprende:
un sistema de procesamiento que incluye un procesador gráfico (614), incluyendo el procesador gráfico (614) una pluralidad de recursos de procesamiento para el empleo de inferencias en redes neuronales, estando la pluralidad de recursos de procesamiento configurada para dividirse en una pluralidad de segmentos de recursos físicos, en el que el sistema de procesamiento tiene la capacidad de limitar el uso de la pluralidad de recursos de procesamiento por parte de una pluralidad de procesos de aplicación; y
un circuito configurado para:
recibir una especificación de una limitación en el uso de la pluralidad de recursos de procesamiento por parte de los respectivos procesos de aplicación de la pluralidad de procesos de aplicación, donde se define un porcentaje de prioridad para cada proceso, de modo que el procesador gráfico (614) pueda programar un proceso de acuerdo con el porcentaje del total de hilos disponibles, tal y como lo facilita la lógica de programación (710);
programar cargas de trabajo asociadas con la pluralidad de procesos de aplicación a la pluralidad de segmentos de recursos físicos de acuerdo con la limitación de uso especificada para los respectivos procesos de aplicación de la pluralidad de procesos de aplicación; y
limitar la ejecución de cargas de trabajo para los respectivos procesos de aplicación de la pluralidad de procesos de aplicación a un subconjunto especificado de la pluralidad de recursos de procesamiento de acuerdo con las porciones de recursos físicos asociadas con los respectivos procesos de aplicación de la pluralidad de procesos de aplicación.
2. El aparato (600) de la reivindicación 1, en el que la pluralidad de segmentos de recursos físicos incluye una pluralidad de particiones de recursos informáticos.
3. El aparato (600) de la reivindicación 2, en el que el sistema de procesamiento está configurado para limitar la ejecución de un proceso de aplicación de la pluralidad de procesos de aplicación a una partición de recursos informáticos de la pluralidad de particiones de recursos informáticos.
4. El aparato (600) de la reivindicación 3, en el que el procesador gráfico (614) incluye una pluralidad de particiones de memoria.
5. El aparato (600) de la reivindicación 4, en el que la partición de recursos informáticos está asociada a una partición de memoria de la pluralidad de particiones de memoria.
6. El aparato (600) de la reivindicación 5, en el que la pluralidad de particiones de recursos informáticos está asociada a una pluralidad de rutas de acceso a la memoria.
7. El aparato (600) de la reivindicación 6, en el que la pluralidad de rutas de acceso a la memoria incluye una pluralidad de particiones de memoria caché.
8. El aparato (600) de cualquiera de las reivindicaciones 1 a 7, en el que la limitación del uso del procesador gráfico (614) consiste en limitar los respectivos procesos de aplicación de la pluralidad de procesos de aplicación a una parte específica de los hilos disponibles de la pluralidad de recursos de procesamiento.
9. El aparato (600) de cualquiera de las reivindicaciones 1 a 8, en el que el procesador gráfico (614) incluye una arquitectura de instrucción única y múltiples hilos, SIMT.
10. El aparato (600) de la reivindicación 9, en el que la arquitectura SIMT incluye múltiples hilos de hardware.
11. El aparato (600) de cualquiera de las reivindicaciones 1 a 10, el sistema de procesamiento incluye además un dispositivo de memoria para almacenar instrucciones, el procesador gráfico está acoplado al dispositivo de memoria y está configurado para ejecutar las instrucciones.
12. Un método (900) que comprende:
programar la ejecución de cargas de trabajo para una pluralidad de procesos de aplicación a una pluralidad de recursos de procesamiento en un sistema de procesamiento para el empleo de inferencia en redes neuronales, la pluralidad de recursos de procesamiento configurados para ser divididos en una pluralidad de segmentos de recursos físicos;
recibir una especificación de una limitación en el uso de la pluralidad de recursos de procesamiento por parte de los respectivos procesos de aplicación de la pluralidad de procesos de aplicación, donde se define un porcentaje de prioridad para cada proceso, de modo que el procesador gráfico (614) pueda programar un
proceso de acuerdo con el porcentaje del total de hilos disponibles, tal y como lo facilita la lógica de programación; y
tras determinar que la limitación del uso de la pluralidad de recursos de procesamiento se especifica para los respectivos procesos de aplicación de la pluralidad de procesos de aplicación, limitar la ejecución de las cargas de trabajo para los respectivos procesos de aplicación de la pluralidad de procesos de aplicación a un subconjunto especificado de la pluralidad de recursos de procesamiento de acuerdo con las porciones de recursos físicos asociadas con los respectivos procesos de aplicación de la pluralidad de procesos de aplicación.
13. El método (900) de la reivindicación 12, en el que el uso de la pluralidad de recursos de procesamiento por parte de la pluralidad de procesos de aplicación se limita en parte para aumentar la utilización de la pluralidad de recursos de procesamiento.
14. El método (900) de la reivindicación 13, que comprende además monitorizar la utilización de la pluralidad de recursos de procesamiento por parte de la pluralidad de procesos de aplicación.
15. El método (900) de cualquiera de las reivindicaciones 12 a 14, en el que la pluralidad de recursos de procesamiento incluye una arquitectura de instrucción única y múltiples hilos, SIMT.
16. El método (900) de la reivindicación 15, en el que la arquitectura SIMT incluye múltiples hilos por hardware.
17. Uno o más soportes de almacenamiento legibles por máquina que contienen instrucciones de programa informático ejecutables que, cuando son ejecutadas por una o más máquinas, hacen que dichas máquinas ejecuten el método (900) de cualquiera de las reivindicaciones 12 a 16.
ES23220686T 2017-04-24 2018-03-02 Coordination and increased utilization of graphics processors during inference Active ES3054895T3 (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/495,054 US10304154B2 (en) 2017-04-24 2017-04-24 Coordination and increased utilization of graphics processors during inference

Publications (1)

Publication Number Publication Date
ES3054895T3 true ES3054895T3 (en) 2026-02-06

Family

ID=61616766

Family Applications (2)

Application Number Title Priority Date Filing Date
ES23220686T Active ES3054895T3 (en) 2017-04-24 2018-03-02 Coordination and increased utilization of graphics processors during inference
ES21181091T Active ES2985693T3 (es) 2017-04-24 2018-03-02 Coordinación y mayor utilización de procesadores de gráficos durante una inferencia

Family Applications After (1)

Application Number Title Priority Date Filing Date
ES21181091T Active ES2985693T3 (es) 2017-04-24 2018-03-02 Coordinación y mayor utilización de procesadores de gráficos durante una inferencia

Country Status (7)

Country Link
US (5) US10304154B2 (es)
EP (4) EP4325424B1 (es)
CN (5) CN120852140A (es)
DK (2) DK4325424T3 (es)
ES (2) ES3054895T3 (es)
FI (2) FI3955203T3 (es)
PL (2) PL4325424T3 (es)

Families Citing this family (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8577671B1 (en) 2012-07-20 2013-11-05 Veveo, Inc. Method of and system for using conversation state information in a conversational interaction system
US9465833B2 (en) 2012-07-31 2016-10-11 Veveo, Inc. Disambiguating user intent in conversational interaction system for large corpus information retrieval
ES2751484T3 (es) 2013-05-07 2020-03-31 Veveo Inc Interfaz de entrada de voz incremental con retroalimentación en tiempo real
US9946757B2 (en) 2013-05-10 2018-04-17 Veveo, Inc. Method and system for capturing and exploiting user intent in a conversational interaction based information retrieval system
US9852136B2 (en) 2014-12-23 2017-12-26 Rovi Guides, Inc. Systems and methods for determining whether a negation statement applies to a current or past query
US9854049B2 (en) * 2015-01-30 2017-12-26 Rovi Guides, Inc. Systems and methods for resolving ambiguous terms in social chatter based on a user profile
KR102548687B1 (ko) * 2015-10-07 2023-06-28 삼성전자주식회사 전자 장치에서 실행된 어플리케이션을 제어하는 웨어러블 전자 장치 및 방법
WO2018183526A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking, full-mesh data center network having optical permutors
WO2018183553A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking any-to-any data center network having multiplexed packet spraying within access node groups
WO2018183542A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking any-to-any data center network with packet spraying over multiple alternate data paths
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
CN117971715A (zh) 2017-04-10 2024-05-03 微软技术许可有限责任公司 多处理器系统中的中继一致存储器管理
US10304154B2 (en) 2017-04-24 2019-05-28 Intel Corporation Coordination and increased utilization of graphics processors during inference
US11554690B2 (en) * 2017-05-25 2023-01-17 Ford Global Technologies, Llc Vehicle seat operation
US20190005377A1 (en) * 2017-06-30 2019-01-03 Advanced Micro Devices, Inc. Artificial neural network reduction to reduce inference computation time
CN117348976A (zh) 2017-07-10 2024-01-05 微软技术许可有限责任公司 用于流处理的数据处理单元
US10659254B2 (en) 2017-07-10 2020-05-19 Fungible, Inc. Access node integrated circuit for data centers which includes a networking unit, a plurality of host units, processing clusters, a data network fabric, and a control network fabric
US11178262B2 (en) 2017-09-29 2021-11-16 Fungible, Inc. Fabric control protocol for data center networks with packet spraying over multiple alternate data paths
US12212495B2 (en) 2017-09-29 2025-01-28 Microsoft Technology Licensing, Llc Reliable fabric control protocol extensions for data center networks with unsolicited packet spraying over multiple alternate data paths
US12278763B2 (en) 2017-09-29 2025-04-15 Microsoft Technology Licensing, Llc Fabric control protocol with congestion control for data center networks
US12231353B2 (en) 2017-09-29 2025-02-18 Microsoft Technology Licensing, Llc Fabric control protocol for data center networks with packet spraying over multiple alternate data paths
US12341687B2 (en) 2017-09-29 2025-06-24 Microsoft Technology Licensing, Llc Reliable fabric control protocol extensions for data center networks with failure resilience
US10965586B2 (en) 2017-09-29 2021-03-30 Fungible, Inc. Resilient network communication using selective multipath packet flow spraying
US12294470B2 (en) 2017-09-29 2025-05-06 Microsoft Technology Licensing, Llc Fabric control protocol for large-scale multi-stage data center networks
WO2019104090A1 (en) 2017-11-21 2019-05-31 Fungible, Inc. Work unit stack data structures in multiple core processor system for stream data processing
WO2019152063A1 (en) 2018-02-02 2019-08-08 Fungible, Inc. Efficient work unit processing in a multicore system
US12518146B1 (en) 2018-04-20 2026-01-06 Amazon Technologies, Inc. Address decoding by neural network inference circuit read controller
US12093696B1 (en) 2018-04-20 2024-09-17 Perceive Corporation Bus for transporting output values of a neural network layer to cores specified by configuration data
US11481612B1 (en) 2018-04-20 2022-10-25 Perceive Corporation Storage of input values across multiple cores of neural network inference circuit
US11361213B1 (en) 2018-04-20 2022-06-14 Perceive Corporation Using lookup table to represent neural network activation function
US10977338B1 (en) 2018-04-20 2021-04-13 Perceive Corporation Reduced-area circuit for dot product computation
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
US11294851B2 (en) * 2018-05-04 2022-04-05 Cornami, Inc. Reconfigurable reduced instruction set computer processor architecture with fractured cores
US11132893B2 (en) * 2018-05-11 2021-09-28 Seagate Technology, Llc Multi-sensor edge computing system
US20200153926A1 (en) * 2018-11-09 2020-05-14 Toyota Motor North America, Inc. Scalable vehicle data compression systems and methods
US10929175B2 (en) 2018-11-21 2021-02-23 Fungible, Inc. Service chaining hardware accelerators within a data stream processing integrated circuit
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
CN109840371B (zh) * 2019-01-23 2020-09-08 北京航空航天大学 一种基于时间序列的动态多层耦合网络构建方法
US11074666B2 (en) * 2019-01-30 2021-07-27 Sony Interactive Entertainment LLC Scalable game console CPU/GPU design for home console and cloud gaming
US11961007B2 (en) * 2019-02-06 2024-04-16 Qualcomm Incorporated Split network acceleration architecture
US11372404B2 (en) * 2019-02-22 2022-06-28 Qualcomm Incorporated Systems and methods for adaptive model processing
CN111611221A (zh) * 2019-02-26 2020-09-01 北京京东尚科信息技术有限公司 混合计算系统、数据处理方法及装置
US11654926B2 (en) * 2019-03-18 2023-05-23 Mobileye Vision Technologies Ltd. Secure system that includes an open source operating system
JP6644231B1 (ja) * 2019-04-26 2020-02-12 Awl株式会社 画像分析装置、及び画像分析システム
EP3739396A1 (de) * 2019-05-15 2020-11-18 Siemens Aktiengesellschaft System zur bewegungsführung eines manipulators aufweisend einen ersten und einen zweiten prozessor
US11868901B1 (en) 2019-05-21 2024-01-09 Percieve Corporation Compiler for optimizing memory allocations within cores
US11531349B2 (en) * 2019-06-21 2022-12-20 Volkswagen Ag Corner case detection and collection for a path planning system
US10956776B2 (en) 2019-08-06 2021-03-23 Alibaba Group Holding Limited 2D convolutional accelerator that generates 3D results
CN112348732B (zh) * 2019-08-08 2023-11-17 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质
US11310451B1 (en) 2019-09-05 2022-04-19 Waymo Llc Smart sensor with region of interest capabilities
US12526547B2 (en) 2019-09-05 2026-01-13 Waymo Llc Smart sensor with region of interest capabilities
CN110677278A (zh) * 2019-09-10 2020-01-10 无锡江南计算技术研究所 一种消息处理机
WO2021051917A1 (zh) * 2019-09-16 2021-03-25 华为技术有限公司 人工智能ai模型的评估方法、系统及设备
CN112905331B (zh) * 2019-11-19 2024-06-07 上海商汤智能科技有限公司 任务处理系统、方法及装置、电子设备和存储介质
US20230004837A1 (en) * 2019-11-29 2023-01-05 Tokyo Electron Limited Inference device, inference method and inference program
CN112988527A (zh) * 2019-12-13 2021-06-18 中国电信股份有限公司 Gpu管理平台异常检测方法、装置以及存储介质
US11284021B1 (en) * 2019-12-30 2022-03-22 Waymo Llc Smart sensor scheduler
US11428550B2 (en) 2020-03-03 2022-08-30 Waymo Llc Sensor region of interest selection based on multisensor data
CN111694365B (zh) * 2020-07-01 2021-04-20 武汉理工大学 一种基于深度强化学习的无人船艇编队路径跟踪方法
KR102899904B1 (ko) 2020-09-16 2025-12-18 삼성전자주식회사 딥러닝 워크로드를 위한 하이브리드 스케줄링 방법과 이를 수행하는 컴퓨팅 장치
EP3985573A1 (en) * 2020-10-13 2022-04-20 Imagination Technologies Limited Implementation of a neural network in multicore hardware
CN114387150B (zh) * 2020-10-20 2024-10-22 富泰华工业(深圳)有限公司 用于人工智能学习的处理方法及装置、设备及存储介质
DE102020128461A1 (de) * 2020-10-29 2022-05-05 Bayerische Motoren Werke Aktiengesellschaft System und Verfahren zur Erfassung des Umfelds eines Fahrzeugs
US11552943B2 (en) * 2020-11-13 2023-01-10 Cyberark Software Ltd. Native remote access to target resources using secretless connections
US11756283B2 (en) 2020-12-16 2023-09-12 Waymo Llc Smart sensor implementations of region of interest operating modes
CN112799809B (zh) * 2021-01-26 2023-12-26 南京大学 基于高速缓存着色的资源共享和隔离的混合关键实时系统
CN115220787A (zh) * 2021-04-17 2022-10-21 华为技术有限公司 驾驶控制指令生成方法、异构计算方法、相关装置及系统
US12217160B1 (en) 2021-04-23 2025-02-04 Amazon Technologies, Inc. Allocating blocks of unified memory for integrated circuit executing neural network
CN113225623B (zh) * 2021-04-30 2023-01-31 四川云从天府人工智能科技有限公司 自适应视频文件加速解析方法、装置、设备及存储介质
CN113345067B (zh) * 2021-06-25 2023-03-31 深圳中微电科技有限公司 一种统一渲染方法、装置、设备和引擎
US12288141B2 (en) * 2021-06-25 2025-04-29 Intel Corporation Multi-level caching for dynamic deep learning models
US12265844B2 (en) 2021-09-07 2025-04-01 Apple Inc. Quality of service techniques in distributed graphics processor
US12039368B2 (en) * 2021-09-07 2024-07-16 Apple Inc. Priority inversion mitigation techniques
US12579416B1 (en) 2021-09-13 2026-03-17 Amazon Technologies, Inc. Neural network inference circuit with piecewise linear activation circuit
US20230274165A1 (en) * 2022-02-28 2023-08-31 International Business Machines Corporation Inference model on restrained gpu memory
US12511163B2 (en) 2022-03-03 2025-12-30 Bank Of America Corporation System for predicting memory resources and scheduling jobs in service-oriented architectures using database processors and a job ingestion processor
CN116795742A (zh) * 2022-03-16 2023-09-22 阿里巴巴(中国)有限公司 存储设备、信息存储方法及系统
US12608320B1 (en) 2022-04-04 2026-04-21 Nvidia Corporation Application programming interface to allocate memory for shared virtual memory
US20240126613A1 (en) * 2022-10-17 2024-04-18 Intel Corporation Chained accelerator operations
TWI837972B (zh) * 2022-11-29 2024-04-01 宏碁股份有限公司 圖像處理裝置和方法
TWI845081B (zh) * 2022-12-21 2024-06-11 國立成功大學 圖形處理器
CN116310894B (zh) * 2023-02-22 2024-04-16 中交第二公路勘察设计研究院有限公司 一种基于无人机遥感的小样本小目标藏羚羊智能识别方法
TWI834503B (zh) * 2023-02-24 2024-03-01 財團法人工業技術研究院 用於選擇影像中的感興趣區域的電子裝置及方法
CN118313458B (zh) * 2024-03-22 2025-07-08 上海壁仞科技股份有限公司 数据处理方法、数据处理器、电子设备、存储介质
CN118981368B (zh) * 2024-10-22 2025-03-07 青岛国实科技集团有限公司 一种基于时间序列预测的并行策略调整系统及方法

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004094900A (ja) * 2002-07-09 2004-03-25 National Institute Of Advanced Industrial & Technology 生産計画作成システム及び方法、並びにプログラム
US7127326B2 (en) * 2002-11-15 2006-10-24 Iguana Robotics, Inc. Certain principles of biomorphic robots including foot placement selection using non-geometric visual properties
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US8274518B2 (en) * 2004-12-30 2012-09-25 Microsoft Corporation Systems and methods for virtualizing graphics subsystems
US7627723B1 (en) * 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
US8284205B2 (en) * 2007-10-24 2012-10-09 Apple Inc. Methods and apparatuses for load balancing between multiple processing units
US8610727B1 (en) * 2008-03-14 2013-12-17 Marvell International Ltd. Dynamic processing core selection for pre- and post-processing of multimedia workloads
US9424370B2 (en) * 2009-03-12 2016-08-23 Siemens Product Lifecycle Management Software Inc. System and method for spatial partitioning of CAD models
US20130117168A1 (en) * 2011-11-04 2013-05-09 Mark Henrik Sandstrom Maximizing Throughput of Multi-user Parallel Data Processing Systems
US8933942B2 (en) * 2011-12-08 2015-01-13 Advanced Micro Devices, Inc. Partitioning resources of a processor
DE102013100169A1 (de) * 2012-01-18 2013-07-18 Nvidia Corporation Planen und Ausführung einer Rechenaufgabe
US8572573B2 (en) * 2012-03-09 2013-10-29 Nvidia Corporation Methods and apparatus for interactive debugging on a non-preemptible graphics processing unit
US10095548B2 (en) * 2012-05-21 2018-10-09 Nvidia Corporation Mechanism for waking common resource requests within a resource management subsystem
CN102750131B (zh) * 2012-06-07 2015-10-07 中国科学院计算机网络信息中心 一种面向gpu的双调归并排序方法
US9153230B2 (en) * 2012-10-23 2015-10-06 Google Inc. Mobile speech recognition hardware accelerator
US20140152848A1 (en) * 2012-12-04 2014-06-05 Nvidia Corporation Technique for configuring a digital camera
US20140244548A1 (en) * 2013-02-22 2014-08-28 Nvidia Corporation System, method, and computer program product for classification of silicon wafers using radial support vector machines to process ring oscillator parametric data
US9286574B2 (en) * 2013-11-04 2016-03-15 Google Inc. Systems and methods for layered training in machine-learning architectures
US20150145871A1 (en) * 2013-11-22 2015-05-28 Nvidia Corporation System, method, and computer program product to enable the yielding of threads in a graphics processing unit to transfer control to a host processor
US9558712B2 (en) * 2014-01-21 2017-01-31 Nvidia Corporation Unified optimization method for end-to-end camera image processing for translating a sensor captured image to a display image
US9836701B2 (en) * 2014-08-13 2017-12-05 Microsoft Technology Licensing, Llc Distributed stage-wise parallel machine learning
US10032244B2 (en) * 2014-08-21 2018-07-24 Intel Corporation Method and apparatus for implementing a nearest neighbor search on a graphics processing unit (GPU)
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US9684514B2 (en) 2014-09-10 2017-06-20 International Business Machines Corporation Inference based condition code generation
US10521874B2 (en) * 2014-09-26 2019-12-31 Intel Corporation Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
US10282227B2 (en) * 2014-11-18 2019-05-07 Intel Corporation Efficient preemption for graphics processors
US9940905B2 (en) * 2015-02-03 2018-04-10 Qualcomm Incorporated Clock rate adjustment for processing unit
US20160328644A1 (en) 2015-05-08 2016-11-10 Qualcomm Incorporated Adaptive selection of artificial neural networks
US10019283B2 (en) * 2015-06-22 2018-07-10 Advanced Micro Devices, Inc. Predicting a context portion to move between a context buffer and registers based on context portions previously used by at least one other thread
US9916525B2 (en) 2015-10-13 2018-03-13 Siemens Healthcare Gmbh Learning-based framework for personalized image quality evaluation and optimization
US9830678B2 (en) * 2016-03-03 2017-11-28 International Business Machines Corporation Graphics processing unit resource sharing
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
US10649518B2 (en) * 2017-01-26 2020-05-12 Ati Technologies Ulc Adaptive power control loop
CN108364251B (zh) * 2017-01-26 2021-06-25 超威半导体公司 具有通用寄存器资源管理的矢量处理器
US10639550B2 (en) * 2017-04-18 2020-05-05 Bullguard Ltd System and method for dynamically allocating resources to a game process
US10304154B2 (en) 2017-04-24 2019-05-28 Intel Corporation Coordination and increased utilization of graphics processors during inference

Also Published As

Publication number Publication date
PL4325424T3 (pl) 2026-02-16
US20180308202A1 (en) 2018-10-25
CN116362310A (zh) 2023-06-30
CN116362310B (zh) 2026-04-17
EP3396622A1 (en) 2018-10-31
CN112561048B (zh) 2022-04-01
DK3955203T3 (da) 2024-05-13
US20240013337A1 (en) 2024-01-11
EP4614429A3 (en) 2025-10-08
ES2985693T3 (es) 2024-11-07
US20210201438A1 (en) 2021-07-01
FI3955203T3 (fi) 2024-05-14
US11748841B2 (en) 2023-09-05
DK4325424T3 (da) 2025-12-01
US10304154B2 (en) 2019-05-28
EP3955203B1 (en) 2024-02-21
EP3955203A3 (en) 2022-03-09
US20190295211A1 (en) 2019-09-26
EP4325424A3 (en) 2024-05-08
CN112561048A (zh) 2021-03-26
PL3955203T3 (pl) 2024-06-10
CN108734286B (zh) 2025-07-04
US11430082B2 (en) 2022-08-30
EP4614429A2 (en) 2025-09-10
FI4325424T3 (fi) 2025-12-04
EP4325424A2 (en) 2024-02-21
US12462328B2 (en) 2025-11-04
US10891707B2 (en) 2021-01-12
EP4325424B1 (en) 2025-09-03
US20220366527A1 (en) 2022-11-17
EP3955203A2 (en) 2022-02-16
CN120852140A (zh) 2025-10-28
CN108734286A (zh) 2018-11-02
CN115456156A (zh) 2022-12-09

Similar Documents

Publication Publication Date Title
ES3054895T3 (en) Coordination and increased utilization of graphics processors during inference
US11393211B2 (en) Hybrid graphics processor-field programmable gate array system
ES2996958T3 (en) Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
ES3011182T3 (en) Barriers and synchronization for machine learning at autonomous machines
ES3034021T3 (en) Compute optimization mechanism
ES3033526T3 (en) Compute optimizations for low precision machine learning operations
ES2906398T3 (es) Procesador de múltiples núcleos, presentando cada núcleo una ruta de datos de tipo coma flotante y una ruta de datos de tipo entero independientes
ES2939271T3 (es) Ejecución de cómputo y comunicación de grano fino para estructuras de aprendizaje profundo
ES3034105T3 (en) Neural network scheduling mechanism
ES3034673T3 (en) Convolutional neural network optimization mechanism
ES2962813T3 (es) Mecanismo de cómputo disperso del aprendizaje automático
ES2988624T3 (es) Mejoras de reconocimiento, reidentificación y seguridad usando máquinas autónomas
ES2925598T3 (es) Instrucciones y lógica para realizar operaciones de coma flotante y de números enteros para el aprendizaje automático
ES2993162T3 (en) Efficient sharing and compression of data across processing systems
ES2930550T3 (es) Métodos y aparatos para canalización de ejecución de red de aprendizaje profundo en plataforma multiprocesador
ES3037715T3 (en) Methods and systems for boosting deep neural networks for deep learning
ES3052990T3 (en) Methods and systems for budgeted and simplified training of deep neural networks
ES3025359T3 (en) Methods and systems using improved convolutional neural networks for image processing
ES3040471T3 (en) Advanced artificial intelligence agent for modeling physical interactions
EP3396545A1 (en) Storage management for machine learning at autonomous machines
ES3056687T3 (en) Real time context dependent deep learning
ES2934735T3 (es) Sistemas y métodos para generar números aleatorios gaussianos con aceleración por hardware