ES3032644T3 - Communication optimizations for distributed machine learning - Google Patents

Communication optimizations for distributed machine learning

Info

Publication number
ES3032644T3
ES3032644T3 ES18209320T ES18209320T ES3032644T3 ES 3032644 T3 ES3032644 T3 ES 3032644T3 ES 18209320 T ES18209320 T ES 18209320T ES 18209320 T ES18209320 T ES 18209320T ES 3032644 T3 ES3032644 T3 ES 3032644T3
Authority
ES
Spain
Prior art keywords
processor
data
graphics
memory
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES18209320T
Other languages
English (en)
Inventor
Srinivas Sridharan
Karthikeyan Vaidyanathan
Dipankar Das
Chandrasekaran Sakthivel
Mikhail E Smorkalov
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 ES3032644T3 publication Critical patent/ES3032644T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/08—Learning methods
    • G06N3/098—Distributed learning, e.g. federated learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/08—Learning methods
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00—Arrangements for program control, e.g. control units
    • G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46—Multiprogramming arrangements
    • G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00—Arrangements for program control, e.g. control units
    • G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46—Multiprogramming arrangements
    • G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061—Partitioning or combining of resources
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00—Arrangements for program control, e.g. control units
    • G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46—Multiprogramming arrangements
    • G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061—Partitioning or combining of resources
    • G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/044—Recurrent networks, e.g. Hopfield networks
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/045—Combinations of networks
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/0464—Convolutional networks [CNN, ConvNet]
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/08—Learning methods
    • G06N3/084—Backpropagation, e.g. using gradient descent
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/08—Learning methods
    • G06N3/088—Non-supervised learning, e.g. competitive learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/08—Learning methods
    • G06N3/09—Supervised learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/048—Activation functions
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00—Computing arrangements based on specific mathematical models
    • G06N7/01—Probabilistic graphical models, e.g. probabilistic networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Image Generation (AREA)
  • Small-Scale Networks (AREA)
  • Computer And Data Communications (AREA)

Abstract

Las realizaciones descritas en este documento proporcionan un sistema para configurar el entrenamiento distribuido de una red neuronal, comprendiendo el sistema una memoria para almacenar una biblioteca para facilitar la transmisión de datos durante el entrenamiento distribuido de la red neuronal; una interfaz de red para permitir la transmisión y recepción de datos de configuración asociados con un conjunto de nodos de trabajo, estando los nodos de trabajo configurados para realizar el entrenamiento distribuido de la red neuronal; y un procesador para ejecutar instrucciones proporcionadas por la biblioteca, siendo las instrucciones las que hacen que el procesador cree uno o más grupos de nodos de trabajo, creándose el o los grupos de nodos de trabajo según un patrón de comunicación para que se transmitan mensajes entre los nodos de trabajo durante el entrenamiento distribuido de la red neuronal. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Optimizaciones de comunicación para aprendizaje automático distribuido
CAMPO TÉCNICO
Las realizaciones se refieren en general a lógica para realizar operaciones de procesamiento usando unidades de procesamiento de gráficos de propósito general. Más particularmente, las realizaciones se refieren a optimizaciones de comunicación para aprendizaje automático distribuido.
ANTECEDENTES
Un modelo de red neuronal puede implementarse como colecciones de nodos (neuronas) que están conectados en un grafo acíclico. Un tipo de una red neuronal, una "red de propagación hacia adelante", puede recibir una entrada (un vector único) en su capa de entrad de nodos, y, a través de una serie de capas ocultas, mapear la entrada a valores en una capa de salida de nodos. Cada capa en la red está compuesta de un conjunto de neuronas, donde cada neurona está completamente conectada a todas las neuronas en la capa o capas adyacentes, y donde las neuronas dentro de una capa no comparten ninguna conexión. Si la red está modelando una clasificación, cada uno de los nodos en la capa de salida puede representar una de las clases posibles a las que pertenece una entidad, y el valor de cada nodo de salida puede representar la probabilidad de que la entidad de entrada pertenezca a esa clase. Una red neuronal convolucional (CNN) es otro tipo de modelo de red neuronal que puede modelar detección de características realizando operaciones convolucionales en datos de entrada. Por ejemplo, en procesamiento de imágenes, una CNN puede recibir datos de imagen sin procesar introducidos y a continuación emitir un conjunto de mapas de características que representan abstracciones de los datos sin procesar.
El procesamiento paralelo de datos gráficos actual incluye sistemas y métodos desarrollados para realizar operaciones específicas sobre datos gráficos tales como, por ejemplo, interpolación lineal, teselación, rasterización, mapeado de texturas, pruebas de profundidad, etc. Adicionalmente, los procesadores de gráficos de propósito general programables pueden configurase para realizar una amplia diversidad de operaciones para procesar datos de vértices y fragmentos, así como para realizar operaciones de procesamiento paralelo de propósito general. Por ejemplo, los procesadores de gráficos paralelos con arquitecturas de instrucción única para múltiples hilos (SIMT) están diseñados para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura SIMT, los grupos de hilos en paralelo intentan ejecutar instrucciones de programa de forma sincrónica con la mayor frecuencia posible para aumentar la eficiencia de procesamiento. Puede encontrarse una vista global general del software y hardware para arquitecturas SIMT en Shane Cook, CUDA Programming, capítulo 3, páginas 37-51 (2013) y/o Nicholas Wilt, CUDA Handbook, A Comprehensive Guide to GPU Programming, secciones 2.6.2 a 3.1.2 (junio de 2013).
El documento WO 2015/192812 A1 divulga un método de procesamiento de datos paralelos basado en múltiples GPU, en donde en una unidad de procesamiento central (CPU), se crea una pluralidad de hilos trabajadores para controlar una pluralidad de grupos trabajadores, en donde los grupos trabajadores incluyen una o más GPU. Cada hilo trabajador está unido a una correspondiente GPU. Una pluralidad de lotes de datos de entrenamiento se carga desde una memoria no volátil a memorias de vídeo de GPU en la pluralidad de grupos trabajadores, y la pluralidad de GPU se controlan para realizar procesamiento de datos en paralelo a través de los hilos trabajadores.
La invención se define por un sistema de acuerdo con la reivindicación independiente. Se definen realizaciones preferidas en las reivindicaciones dependientes.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Para que la forma en que las características citadas anteriormente de las presentes realizaciones puedan entenderse en detalle, se puede obtener una descripción más particular de las realizaciones, brevemente resumida anteriormente, con referencia a las realizaciones, algunas de las cuales se ilustran en los dibujos adjuntos. Se ha de observar, sin embargo, que los dibujos adjuntos ilustran únicamente realizaciones típicas.
LaFigura 1es un diagrama de bloques de un sistema de procesamiento, de acuerdo con una realización;
LaFigura 2es un diagrama de bloques de un procesador de acuerdo con una realización;
LaFigura 3es un diagrama de bloques de un procesador de gráficos, de acuerdo con una realización;
LaFigura 4es un diagrama de bloques de un motor de procesamiento de gráficos de un procesador de gráficos de acuerdo con algunas realizaciones;
LaFigura 5es un diagrama de bloques de lógica de hardware de un núcleo de procesador de gráficos, de acuerdo con algunas realizaciones descritas en el presente documento.
LasFiguras 6A-6Bilustran la lógica de ejecución de hilos que incluye una matriz de elementos de procesamiento empleados en un núcleo de procesador de gráficos de acuerdo con realizaciones descritas en el presente documento. LaFigura 7es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos de acuerdo con algunas realizaciones;
LaFigura 8es un diagrama de bloques de un procesador de gráficos de acuerdo con otra realización.
LaFigura 9A-9Bilustra un formato de comando de procesador de gráficos y secuencia de comandos, de acuerdo con algunas realizaciones;
LaFigura 10ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos de acuerdo con algunas realizaciones;
LaFigura 11Aes un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP, de acuerdo con una realización;
LaFigura 11Bilustra una vista lateral en sección transversal de un conjunto de paquete de circuito integrado, de acuerdo con algunas realizaciones descritas en el presente documento;
LaFigura 12es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo, de acuerdo con una realización;
LasFiguras 13A-13Bson diagramas de bloques que ilustran procesadores de gráficos ilustrativos para su uso dentro de un SoC, de acuerdo con realizaciones descritas en el presente documento;
LasFiguras 14A-14Bilustran lógica de procesador de gráficos ilustrativa adicional de acuerdo con realizaciones descritas en el presente documento;
LaFigura 15ilustra una pila de software de aprendizaje automático, de acuerdo con una realización;
LasFiguras 16A-16Bilustran capas de redes neuronales profundas ilustrativas;
LaFigura 17ilustra una red neuronal recurrente ilustrativa;
LaFigura 18ilustra el entrenamiento y despliegue de una red neuronal profunda;
LaFigura 19es un diagrama de bloques que ilustra un aprendizaje distribuido;
Las Figuras 20A-20Eilustran patrones de comunicación usados durante operaciones de cálculo de aprendizaje automático distribuido realizadas a través de múltiples nodos de cálculo, de acuerdo con las realizaciones descritas en el presente documento;
LasFiguras 21A-21Bilustran detalles arquitectónicos de la biblioteca de escalamiento de aprendizaje automático proporcionada por las realizaciones descritas en el presente documento;
LaFigura 22ilustra una red de entrenamiento de múltiples nodos, de acuerdo con la invención;
LaFigura 23ilustra un proceso para permitir un algoritmo a nivel de topología para agrupación de nodos flexible, de acuerdo con una realización;
LasFiguras 24A-24Bilustran sistemas de procesamiento, de acuerdo con las realizaciones descritas en el presente documento;
LaFigura 25ilustra un proceso para gestionar QoS de comunicación entre y dentro de nodos de cálculo de procesador paralelo, de acuerdo con una realización;
LaFigura 26ilustra un sistema informático de múltiples chasis adicional, de acuerdo con una realización;
LaFigura 27ilustra un conmutador de interfaz de anfitrión, de acuerdo con una realización
LasFiguras 28A-28Cilustran un sistema para permitir comunicación de aprendizaje profundo persistente;
LasFiguras 29A-29Cilustran hardware y un proceso de software asociado para permitir agrupamiento de acelerador sin servidor para inferencia, de acuerdo con las realizaciones descritas en el presente documento;
LasFiguras 30A-30Bmuestran la generación de un punto de recuperación para un modelo de entrenamiento o de datos, de acuerdo con una realización;
LaFigura 31muestra lógica computacional asociada con un algoritmo adicional para manejar un fallo de hardware abrupto en un ASDV, de acuerdo con una realización;
LaFigura 32es un diagrama de bloques de un sistema de procesamiento de datos, de acuerdo con las realizaciones descritas en el presente documento;
LaFigura 33es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento;
LasFiguras 34A-34Dilustran componentes de procesador paralelo, de acuerdo con una realización;
Las Figuras 35A-35Bson diagramas de bloques de multiprocesadores de gráficos, de acuerdo con realizaciones;
LasFiguras 36A-36Gilustran una arquitectura ilustrativa en la que una pluralidad de GPU se acopla de manera comunicativa a una pluralidad de procesadores de múltiples núcleos; y
LaFigura 37ilustra una canalización de procesamiento de gráficos, de acuerdo con una realización.
DESCRIPCIÓN DE REALIZACIONES
A efectos explicativos, se exponen numerosos detalles específicos para proporcionar una comprensión completa de las diversas realizaciones descritas a continuación. Sin embargo, será evidente para un profesional experto en la materia que las realizaciones pueden ponerse en práctica sin algunos de estos detalles específicos. En otros casos, estructuras y dispositivos bien conocidos se muestran en forma de diagrama de bloques para evitar oscurecer los principios subyacentes y para proporcionar una compresión más completa de las realizaciones. Aunque algunas de las siguientes realizaciones se describen con referencia a un procesador de gráficos, las técnicas y enseñanzas descritas en el presente documento se pueden aplicar a diversos tipos de circuitos o dispositivos de semiconductores, incluyendo dispositivos de procesamiento de propósito general o dispositivos de procesamiento de gráficos. La referencia en el presente documento a "una realización" indica que un rasgo, estructura o característica particular descrita en relación con la realización puede incluirse en al menos una de tales realizaciones. Sin embargo, las apariciones de la expresión "en una realización" en diversos lugares en la memoria descriptiva no se refieren necesariamente todas a la misma realización.
En la siguiente descripción y reivindicaciones, pueden usarse los términos "acoplado" y "conectado", junto con sus derivados. Debe entenderse que, estos términos no pretenden ser sinónimos entre sí. "Acoplado" se usa para indicar que dos o más elementos, que pueden o no estar en contacto físico o eléctrico directo entre sí, cooperan o interactúan entre sí. "Conectado" se usa para indicar el establecimiento de comunicaciones entre dos o más elementos que están acoplados entre sí.
En la descripción a continuación, las Figuras 1-14 proporcionan una vista general de sistemas de procesamiento de datos y lógica de procesador de gráficos que incorporan o se refieren a las diversas realizaciones. Las Figuras 15-35 proporcionan detalles específicos de las diversas realizaciones. Se describen algunos aspectos de las siguientes realizaciones con referencia a un procesador de gráficos, mientras que se describen otros aspectos con respecto a un procesador de fin general, tal como una unidad central de procesamiento (CPU). Se pueden aplicar técnicas y enseñanzas similares a otros tipos de circuitos o dispositivos de semiconductores, incluyendo, pero sin limitación, un procesador de núcleo múltiple integrado, una agrupación de GPU o una o más instancias de una matriz de puertas programables en campo (FPGA). En general, las enseñanzas son aplicables a cualquier procesador o máquina que manipule o procese imágenes (por ejemplo, muestra, píxel), datos de vértices o datos de geometría.
Visión general del sistema
LaFigura 1es un diagrama de bloques de un sistema de procesamiento 100, de acuerdo con una realización. En diversas realizaciones, el sistema 100 incluye uno o más procesadores 102 y uno o más procesadores gráficos 108, 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 102 o núcleos de procesador 107. En una realización, el sistema 100 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
En una realización, el sistema 100 puede incluir o incorporarse dentro de una plataforma de juegos basada en servidor, una consola de juegos, incluyendo una consola de juegos y medios, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos en línea. En algunas realizaciones, el sistema 100 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tipo tableta o un dispositivo de Internet móvil. El sistema de procesamiento 100 también puede incluir, acoplarse o estar integrado dentro de un dispositivo ponible, tal como un dispositivo ponible de tipo reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento 100 es un televisor o dispositivo decodificador que tiene uno o más procesadores 102 y una interfaz gráfica generada por uno o más procesadores gráficos 108.
En algunas realizaciones, cada uno del uno o más procesadores 102 incluye uno o más núcleos de procesador 107 para procesar instrucciones que, cuando son ejecutadas, realizan operaciones para software de usuario y sistema. En algunas realizaciones, cada uno del uno o más núcleos de procesador 107 está configurado para procesar un conjunto de instrucciones específico 109. En algunas realizaciones, el conjunto de instrucciones 109 puede facilitar la computación de conjunto de instrucciones complejas (CISC), la computación de conjunto de instrucciones reducidas (RISC) o la computación mediante una palabra de instrucción muy larga (VLIW). Cada uno de múltiples núcleos de procesador 107 puede procesar un conjunto de instrucciones diferente 109, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo de procesador 107 también puede incluir otros dispositivos de procesamiento, tal como un procesador de señales digitales (DSP).
En algunas realizaciones, el procesador 102 incluye memoria caché 104. Dependiendo de la arquitectura, el procesador 102 puede tener una única caché interna o múltiples niveles de caché interna. En algunas realizaciones, la caché se comparte entre varios componentes del procesador 102. En algunas realizaciones, el procesador 102 también usa una caché externa (por ejemplo, una caché de nivel-3 (L3) o una caché de último nivel (LLC)) (no mostrada), que puede estar compartida entre los núcleos de procesador 107 usando técnicas de coherencia de memoria caché conocidas. Adicionalmente, se incluye un archivo de registros 106 en el procesador 102, 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 a instrucción). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos al diseño del procesador 102.
En algunas realizaciones, uno o más procesador o procesadores 102 están acoplados con uno o más bus o buses de interfaz 110 para transmitir señales de comunicación tales como señales de direcciones, de datos o de control entre el procesador 102 y otros componentes en el sistema 100. El bus de interfaz 110, en una realización, puede ser un bus de procesador, tal como una versión del bus de interfaz de medios directa (DMI). Sin embargo, los buses de procesador no se limitan al bus DMI y pueden incluir uno o más buses de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express), buses de memoria u otros tipos de buses de interfaz. En una realización, el procesador o procesadores 102 incluyen un controlador de memoria integrado 116 y un concentrador de controlador de plataforma 130. El controlador de memoria 116 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 100, mientras que el concentrador de controlador de plataforma (PCH) 130 proporciona conexiones a dispositivos de E/S mediante un bus de E/S local.
El dispositivo de memoria 120 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), un dispositivo de memoria flash, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como memoria de proceso. En una realización, el dispositivo de memoria 120 puede funcionar como memoria del sistema para el sistema 100, para almacenar datos 122 e instrucciones 121 para utilizarse cuando el uno o más procesadores 102 ejecutan una aplicación o proceso. El controlador de memoria 116 también se acopla con un procesador de gráficos externo opcional 112, que puede comunicarse con el uno o más procesadores de gráficos 108 en los procesadores 102 para realizar operaciones de gráficos y de medios. En algunas realizaciones, un dispositivo de visualización 111 se puede conectar al procesador o procesadores 102. El dispositivo de visualización 111 puede ser uno o más de un dispositivo de visualización interno, como en un dispositivo electrónico móvil o un dispositivo portátil o un dispositivo de visualización externo unido mediante una interfaz de visualización (por ejemplo, DisplayPort, etc.). En una realización, el dispositivo de visualización 111 puede ser una pantalla montada en la cabeza (EMD), tal como un dispositivo de visualización estereoscópico para su uso en aplicaciones de realidad virtual (RV) o aplicaciones de realidad aumentada (RA).
En algunas realizaciones, el concentrador de controlador de plataforma 130 posibilita que se conecten periféricos al dispositivo de memoria 120 y al procesador 102 mediante un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero sin limitación, un controlador de audio 146, un controlador de red 134, una interfaz de firmware 128, un transceptor inalámbrico 126, unos sensores táctiles 125, un dispositivo de almacenamiento de datos 124 (por ejemplo, unidad de disco duro, memoria flash, etc.). El dispositivo de almacenamiento de datos 124 puede conectarse mediante una interfaz de almacenamiento (por ejemplo, SATA) o mediante un bus de periféricos, tal como un bus de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express). Los sensores táctiles 125 pueden incluir sensores de pantalla táctil, sensores de presión o sensores de huellas digitales. El transceptor inalámbrico 126 puede ser un transceptor de Wi-Fi, un transceptor de Bluetooth o un transceptor de red móvil tal como un transceptor de 3G, 4G o evolución a largo plazo (LTE). La interfaz de firmware 128 posibilita la comunicación con firmware de sistema y puede ser, por ejemplo, una interfaz de firmware ampliable unificada (UEFI). El controlador de red 134 puede posibilitar una conexión de red a una red cableada. En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de interfaz 110. El controlador de audio 146, en una realización, es un controlador de audio de alta definición de múltiples canales. En una realización, el sistema 100 incluye un controlador de E/S heredado opcional 140 para acoplar dispositivos heredados (por ejemplo, de sistema personal 2 (PS/2)) al sistema. El concentrador de controlador de plataforma 130 también puede conectarse a uno o más controladores de bus serie universal (USB) 142 para conectar dispositivos de entrada, tales como combinaciones de teclado y ratón 143, una cámara 144 u otros dispositivos de entrada de USB.
Se apreciará que el sistema 100 mostrado es ilustrativo y no limitativo, debido a que también pueden usarse otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, una instancia del controlador de memoria 116 y del concentrador de controlador de plataforma 130 puede integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 112. En una realización, el concentrador de controlador de plataforma 130 y/o el controlador de memoria 160 pueden ser externos al uno o más procesador o procesadores 102. Por ejemplo, el sistema 100 puede incluir un controlador de memoria externo y un concentrador de controlador de plataforma, que puede configurarse como un concentrador de controlador de memoria y un concentrador de controlador de periféricos dentro de un conjunto de chips de sistema que está en comunicación con el procesador o procesadores 102.
LaFigura 2es un diagrama de bloques de una realización de un procesador 200 que tiene uno o más núcleos de procesador 202A-202N, un controlador de memoria integrado 214 y un procesador de gráficos integrado 208. Aquellos elementos de laFigura 2que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. El procesador 200 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 202N representado por los recuadros de línea discontinua. Cada uno de los núcleos de procesador 202A-202N incluye una o más unidades de caché internas 204A-204N. En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades de caché compartidas 206.
Las unidades de caché internas 204A-204N y las unidades de caché compartidas 206 representan una jerarquía de memoria caché dentro del procesador 200. 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 intermedio compartida, tal como nivel 2 (L2), nivel 3 (L3), nivel 4 (L4) u otros niveles de caché, donde el nivel más alto de caché antes de la memoria externa se clasifica como LLC. En algunas realizaciones, la lógica de coherencia de caché mantiene la coherencia entre las diversas unidades de caché 206 y 204A-204N.
En algunas realizaciones, el procesador 200 puede incluir también un conjunto de una o más unidades de controlador de bus 216 y un núcleo de agente de sistema 210. La una o más unidades de controlador de bus 216 gestionan un conjunto de buses periféricos, tal como uno o más buses PCI o PCI Express. El núcleo de agente de sistema 210 proporciona funcionalidad de gestión para los diversos componentes de procesador. En algunas realizaciones, el núcleo de agente de sistema 210 incluye uno o más controladores de memoria integrados 214 para gestionar el acceso a varios dispositivos de memoria externa (no se muestran).
En algunas realizaciones, uno o más de los núcleos de procesador 202A-202N incluyen soporte para procesamiento de múltiples hilos simultáneo. En dicha realización, el núcleo de agente de sistema 210 incluye componentes para coordinar y operar los núcleos 202A-202N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 210 puede incluir adicionalmente una unidad de control de energía (PCU), que incluye una lógica y componentes para regular el estado de potencia de los núcleos de procesador 202A-202N y el procesador de gráficos 208.
En algunas realizaciones, el procesador 200 incluye adicionalmente el procesador de gráficos 208 para ejecutar operaciones de procesamiento de gráficos. En algunas realizaciones, el procesador de gráficos 208 se acopla con el conjunto de unidades de caché compartidas 206 y el núcleo de agente de sistema 210, incluyendo el uno o más controladores de memoria integrados 214. En algunas realizaciones, el núcleo de agente de sistema 210 también incluye un controlador de visualización 211 para controlar la salida del procesador de gráficos a una o más pantallas acopladas. En algunas realizaciones, el controlador de visualización 211 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 208.
En algunas realizaciones, se usa una unidad de interconexión basada en anillo 212 para acoplar los componentes internos del procesador 200. Sin embargo, puede usarse una unidad de interconexión alternativa, tal como una interconexión de punto a punto, una interconexión conmutada u otras técnicas, incluyendo técnicas bien conocidas en la técnica. En algunas realizaciones, el procesador de gráficos 208 se acopla con la interconexión en anillo 212 mediante un enlace de E/S 213.
El enlace de E/S 213 ilustrativo representa al menos una de múltiples diversidades de interconexiones de E/S, que incluyen una interconexión de E/S de paquete, que facilita la comunicación entre diversos componentes de procesador y un módulo de memoria integrado de alto rendimiento 218, tal como un módulo de eDRAM. En algunas realizaciones, cada uno de los núcleos de procesador 202A-202N y del procesador de gráficos 208 utiliza módulos de memoria embebida 218, tal como una caché compartida de último nivel.
En algunas realizaciones, los núcleos de procesador 202A-202N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra realización, los núcleos de procesador 202A-202N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 202A-202N ejecutan un primer conjunto de instrucciones, mientras que al menos uno de los otros núcleos ejecuta un subconjunto del primer conjunto de instrucciones o un conjunto de instrucciones diferente. En una realización, los núcleos de procesador 202A-202N 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 energía más bajo. Adicionalmente, el procesador 200 se puede implementar en uno o más chips o como un circuito integrado de SoC que tiene los componentes ilustrados, además de otros componentes.
LaFigura 3es un diagrama de bloques de un procesador de gráficos 300, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento. En algunas realizaciones, el procesador de gráficos se comunica a través de una interfaz de E/S de memoria mapeada a registros en el procesador de gráficos y con comandos colocados en la memoria de procesador. En algunas realizaciones, el procesador de gráficos 300 incluye una interfaz de memoria 314 para acceder a memoria. La interfaz de memoria 314 puede ser una interfaz a una memoria local, a una o más cachés internas, a una o más cachés externas compartidas y/o a una memoria de sistema.
En algunas realizaciones, el procesador de gráficos 300 también incluye un controlador de visualización 302 para controlar los datos de salida de visualización a un dispositivo de visualización 320. El controlador de visualización 302 incluye hardware para uno o más planos de superposición para la visualización y la composición de múltiples capas de vídeo o elementos de interfaz de usuario. El dispositivo de visualización 320 puede ser un dispositivo de visualización interno o externo. En una realización, el dispositivo de visualización 320 es un dispositivo de visualización montado en la cabeza, tal como un dispositivo de visualización de realidad virtual (RV) o un dispositivo de visualización de realidad aumentada (RA). En algunas realizaciones, el procesador de gráficos 300 incluye un motor de códec de vídeo 306 para codificar, descodificar 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).
En algunas realizaciones, el procesador gráfico 300 incluye un motor de transferencia de imágenes en bloques (BLIT) 304 para realizar operaciones de rasterización bidimensionales (2D) que incluyen, por ejemplo, transferencias de bloques con límites de bits. Sin embargo, en una realización, se realizan operaciones de gráficos 2D usando uno o más componentes de motor de procesamiento de gráficos (GPE) 310. En algunas realizaciones, el GPE 310 es un motor de cálculo para realizar operaciones de gráficos, incluyendo operaciones de gráficos tridimensionales (3D) y operaciones multimedia.
En algunas realizaciones, el GPE 310 incluye una canalización 3D 312 para realizar operaciones 3D, tales como representar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas de primitivas en 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 312 incluye elementos de función programable y fija que llevan a cabo diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema de 3D/medios 315. Si bien la canalización 3D 312 se puede utilizar para realizar operaciones de medios, una realización de GPE 310 también incluye una canalización de medios 316 que se utiliza específicamente para realizar operaciones de medios, tales como posprocesamiento de vídeo y mejora de imágenes.
En algunas realizaciones, la canalización de medios 316 incluye unidades de lógica programable o de función fija para realizar una o más operaciones de medios especializadas, tales como aceleración de descodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar o en nombre del motor de códec de vídeo 306. En algunas realizaciones, la canalización de medios 316 incluye adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 315. 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 315.
En algunas realizaciones, el subsistema 3D/de medios 315 incluye una lógica para ejecutar hilos generados por la canalización 3D 312 y la canalización de medios 316. En una realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema 3D/de medios 315, que incluyen una lógica de despacho de hilos para arbitrar y despachar las diversas solicitudes a los 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 algunas realizaciones, el subsistema 3D/de medios 315 incluye una o más memorias caché internas para instrucciones de hilos y datos. En algunas realizaciones, el subsistema también incluye una memoria compartida, que incluye registros y una memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
Motor de procesamiento de gráficos
LaFigura 4es un diagrama de bloques de un motor de procesamiento de gráficos 410 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 410 es una versión del GPE 310 mostrado en laFigura 3.Los elementos de laFigura 4que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. Por ejemplo, se ilustra la canalización 3D 312 y la canalización de medios 316 de laFigura 3. La canalización de medios 316 es opcional en algunas realizaciones del GPE 410 y puede no incluirse explícitamente dentro del GPE 410. Por ejemplo, y en al menos una realización, un procesador de medios y/o de imágenes separado se acopla al GPE 410.
En algunas realizaciones, el GPE 410 se acopla con o incluye un emisor por flujo continuo de comandos 403, que proporciona un flujo de comandos a la canalización 3D 312 y/o a las canalizaciones de medios 316. En algunas realizaciones, el emisor por flujo continuo de comandos 403 está acoplado con memoria, que puede ser memoria de sistema, o una o más de memoria caché interna y memoria caché compartida. En algunas realizaciones, el emisor por flujo continuo de comandos 403 recibe comandos desde la memoria y envía los comandos a la canalización 3D 312 y/o a la canalización de medios 316. Los comandos son directivas extraídas de una memoria intermedia en anillo, que almacena comandos para la canalización 3D 312 y la canalización de medios 316. En una realización, 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 3D 312 también pueden incluir referencias a datos almacenados en la memoria, tales como, pero sin limitación, datos de vértices y de geometría para la canalización 3D 312 y/o datos de imagen y objetos de memoria para la canalización de medios 316. La canalización 3D 312 y la canalización de medios 316 procesan los comandos y los datos llevando a cabo operaciones por medio de una lógica dentro de las canalizaciones respectivas o despachando uno o más hilos de ejecución a una matriz de núcleos de gráficos 414. En una realización, la matriz de núcleo de gráficos 414 incluye uno o más bloques de núcleos de gráficos (por ejemplo, núcleo o núcleos de gráficos 415A, núcleo o núcleos de gráficos 415B), incluyendo cada bloque uno o más núcleos de gráficos. Cada núcleo de gráficos incluye un conjunto de recursos de ejecución de gráficos que incluyen lógica de ejecución de propósito general y específica de gráficos para realizar operaciones de gráficos y de cálculo, así como lógica de aceleración de inteligencia artificial y aprendizaje automático y/o procesamiento de texturas de función fija.
En diversas realizaciones, la canalización 3D 312 incluye lógica de función fija y programable para procesar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cálculo u otros programas de sombreado, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleos de gráficos 414. La matriz de núcleo de gráficos 414 proporciona un bloque unificado de recursos de ejecución para su uso en el procesamiento de estos programas de sombreado. La lógica de ejecución de múltiples propósitos (por ejemplo, las unidades de ejecución) dentro del núcleo o núcleos de gráficos 415A-414B de la matriz de núcleo de gráficos 414 incluye el soporte para diversos lenguajes sombreadores de API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados con múltiples sombreadores.
En algunas realizaciones, la matriz de núcleo de gráficos 414 también incluye lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. En una realización, las unidades de ejecución incluyen adicionalmente lógica de propósito general que es programable para realizar operaciones computacionales de propósito general paralelas, además de operaciones de procesamiento de gráficos. La lógica de propósito general puede realizar operaciones de procesamiento en paralelo o en conjunto con la lógica de propósito general dentro del núcleo o núcleos de procesador 107 de laFigura 1o el núcleo 202A-202N como en laFigura 2.
Los datos de salida generados por hilos que se ejecutan en la matriz de núcleos de gráficos 414 pueden emitir datos a memoria en una memoria intermedia de retorno unificada (URB) 418. La URB 418 puede almacenar datos para múltiples hilos. En algunas realizaciones, la URB 418 puede usarse para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleo de gráficos 414. En algunas realizaciones, la URB 418 puede usarse adicionalmente para la sincronización entre hilos en la matriz de núcleos de gráficos y la lógica de función fija dentro de la lógica de función compartida 420.
En algunas realizaciones, la matriz de núcleos de gráficos 414 es ajustable a escala, de manera que la matriz incluye un número variable de núcleos de gráficos, teniendo cada uno un número variable de unidades de ejecución basándose en la potencia objetivo y en el nivel de rendimiento del GPE 410. En una realización, 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.
La matriz de núcleo de gráficos 414 se acopla con la lógica de función compartida 420 que incluye múltiples recursos que se comparten entre los núcleos de gráficos en la matriz de núcleo de gráficos. Las funciones compartidas dentro de la lógica de función compartida 420 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleo de gráficos 414. En diversas realizaciones, la lógica de función compartida 420 incluye, pero sin limitación, la lógica del muestreador 421, la lógica matemática 422 y la lógica de comunicación entre hilos (ITC) 423. Adicionalmente, algunas realizaciones implementan una o más cachés 425 dentro de la lógica de función compartida 420.
Se implementa una función compartida donde la demanda de una función especializada dada es insuficiente para su inclusión dentro de la matriz de núcleo de gráficos 414. En su lugar, una única instanciación de esa función especializada se implementa como una entidad autónoma en la lógica de función compartida 420 y se comparte entre los recursos de ejecución dentro de la matriz de núcleo de gráficos 414. El conjunto preciso de funciones que se comparten entre la matriz de núcleo de gráficos 414 y se incluyen dentro de la matriz de núcleo de gráficos 414 varía entre realizaciones. En algunas realizaciones, funciones compartidas específicas dentro de la lógica de función compartida 420 que se usan ampliamente por la matriz de núcleo de gráficos 414 pueden incluirse dentro de la lógica de función compartida 416 dentro de la matriz de núcleo de gráficos 414. En diversas realizaciones, la lógica de función compartida 416 dentro de la matriz de núcleo de gráficos 414 puede incluir alguna o toda la lógica dentro de la lógica de función compartida 420. En una realización, todos los elementos lógicos dentro de la lógica de función compartida 420 pueden duplicarse dentro de la lógica de función compartida 416 de la matriz de núcleo de gráficos 414. En una realización, la lógica de función compartida 420 se excluye en favor de la lógica de función compartida 416 dentro de la matriz de núcleo de gráficos 414.
LaFigura 5es un diagrama de bloques de lógica de hardware de un núcleo de procesador de gráficos 500, de acuerdo con algunas realizaciones descritas en el presente documento. Los elementos de laFigura 5que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. El núcleo de procesador de gráficos 500 ilustrado, en algunas realizaciones, se incluye dentro de la matriz de núcleo de gráficos 414 de la Figura 4. El núcleo de procesador de gráficos 500, denominado, en ocasiones, segmento de núcleo, puede ser uno o múltiples núcleos de gráficos dentro de un procesador de gráficos modular. El núcleo de procesador de gráficos 500 es ilustrativo de un segmento de núcleo de gráficos, y un procesador de gráficos como se describe en el presente documento puede incluir múltiples segmentos de núcleo de gráficos basándose en la potencia objetivo y en las envolventes de rendimiento. Cada núcleo de procesador de gráficos 500 puede incluir un bloque de función fija 530 acoplado con múltiples subnúcleos 501A-501F, también denominados subsegmentos, que incluyen bloques modulares de lógica de función fija y de propósito general. Se entenderá que, como se describe en el presente documento, las referencias a "lógica" pueden incluir, a modo de ejemplo, software, hardware, firmware, o cualquier combinación de los mismos que está configurada para realizar operaciones descritas.
En algunas realizaciones, el bloque de función fija 530 incluye una canalización de geometría/función fija 536 que puede compartirse por todos los subnúcleos en el procesador de gráficos 500, por ejemplo, en implementaciones de procesador de gráficos de menor rendimiento y/o menor potencia. En diversas realizaciones, la canalización de geometría/función fija 536 incluye una canalización de función fija 3D (por ejemplo, la canalización 3D 312 como en la Figura 3 y la Figura 4), una unidad de extremo frontal de vídeo, un generador de hilos y un despachador de hilos, y un gestor de memoria intermedia de retorno unificada, que gestiona memorias intermedias de retorno unificadas, tales como la memoria intermedia de retorno unificada 418 de la Figura 4.
En una realización, el bloque de función fija 530 también incluye una interfaz de SoC de gráficos 537, un microcontrolador de gráficos 538 y una canalización de medios 539. La interfaz de SoC de gráficos 537 proporciona una interfaz entre el núcleo de gráficos 500 y otros núcleos de procesador dentro de un circuito integrado de sistema en un chip. El microcontrolador de gráficos 538 es un subprocesador programable que puede configurarse para gestionar diversas funciones del procesador de gráficos 500, incluyendo el despacho de hilos, la planificación y el otorgamiento de prioridad. La canalización de medios 539 (por ejemplo, la canalización de medios 316 de la Figura 3 y la Figura 4) incluye lógica para facilitar la descodificación, la codificación, el preprocesamiento y/o el post procesamiento de datos multimedia, que incluyen datos de imagen y de vídeo. La canalización de medios 539 implementa operaciones de medios mediante solicitudes a lógica de cálculo o muestreo dentro de los subnúcleos 501 -501F.
En una realización, la interfaz de SoC 537 posibilita que el núcleo de gráficos 500 se comunique con núcleos de procesador de aplicaciones de propósito general (por ejemplo, CPU) y/u otros componentes dentro de un SoC, incluyendo elementos de jerarquía de memoria tales como una memoria caché de último nivel compartida, la RAM de sistema y/o DRAM en chip o en paquete integrada. La interfaz de SoC 537 también puede posibilitar la comunicación con dispositivos de función fija dentro del SoC, tales como canalizaciones de formación de imágenes de cámara, y posibilita el uso y/o implementa atomizaciones de memoria global que pueden compartirse entre el núcleo de gráficos 500 y las CPU dentro del SoC. La interfaz de SoC 537 también puede implementar controles de gestión de energía para el núcleo de gráficos 500 y posibilitar una interfaz entre un dominio de reloj del núcleo de gráficos 500 y otros dominios de reloj dentro del SoC. En una realización, la interfaz de SoC 537 permite la recepción de memorias intermedias de comandos desde un emisor de flujo continuo de comandos y un despachador de hilos global que están configurados para proporcionar comandos e instrucciones a cada uno de uno o más núcleos de gráficos dentro de un procesador de gráficos. Los comandos e instrucciones pueden despacharse a la canalización de medios 539, cuando van a realizarse operaciones de medios, o a una canalización de geometría y función fija (por ejemplo, la canalización de geometría y función fija 536, la canalización de geometría y función fija 514) cuando van a realizarse operaciones de procesamiento de gráficos.
El microcontrolador de gráficos 538 puede configurarse para realizar diversas tareas de planificación y gestión para el núcleo de gráficos 500. En una realización, el microcontrolador de gráficos 538 puede realizar una planificación de carga de trabajo de gráficos y/o de cálculo en los diversos motores paralelos de gráficos dentro de las matrices de unidades de ejecución (EU) 502A-502F, 504A-504F dentro de los subnúcleos 501A-501F. En este modelo de planificación, el software de anfitrión que se ejecuta en un núcleo de CPU de un SoC que incluye el núcleo de gráficos 500 puede enviar cargas de trabajo a uno de múltiples llamadores de procesador de gráficos, lo que invoca una operación de planificación en el motor de gráficos apropiado. Las operaciones de planificación incluyen determinar qué carga de trabajo ejecutar a continuación, emitir una carga de trabajo a un emisor por flujo continuo de comandos, dar preferencia a las cargas de trabajo existentes que se ejecutan en un motor, monitorizar el progreso de una carga de trabajo y notificar al software de anfitrión cuándo está completada una carga de trabajo. En una realización, el microcontrolador de gráficos 538 también puede facilitar estados de baja potencia o en reposo para el núcleo de gráficos 500, proporcionando al núcleo de gráficos 500 la capacidad de guardar y restablecer registros dentro del núcleo de gráficos 500 a través de transiciones de estado de baja potencia de forma independiente desde el sistema operativo y/o el software de controlador de gráficos en el sistema.
El núcleo de gráficos 500 puede tener más o menos que los subnúcleos 501A-501F ilustrados, hastaNsubnúcleos modulares. Para cada conjunto deNsubnúcleos, el núcleo de gráficos 500 también puede incluir lógica de función compartida 510, memoria compartida y/o caché 512, una canalización de geometría/función fija 514, así como lógica de función fija adicional 516 para acelerar diversas operaciones de gráficos y de procesamiento de cálculo. La lógica de función compartida 510 puede incluir unidades lógicas asociadas con la lógica de función compartida 420 de la Figura 4 (por ejemplo, lógica del muestreador, matemática y/o de comunicación inter-hilo) que puede compartirse por cada N subnúcleos dentro del núcleo de gráficos 500. La memoria compartida y/o caché 512 puede ser una caché de último nivel para el conjunto deNsubnúcleos 501A-501F dentro del núcleo de gráficos 500, y también puede servir como memoria compartida a la que pueden acceder múltiples subnúcleos. La canalización de geometría/función fija 514 puede incluirse en lugar de la canalización de geometría/función fija 536 dentro del bloque de función fija 530 y puede incluir las mismas unidades de lógica o similares.
En una realización, el núcleo de gráficos 500 incluye una lógica de función fija adicional 516 que puede incluir diversas lógicas de aceleración de función fija para su uso por el núcleo de procesador de gráficos 500. En una realización, la lógica de función fija adicional 516 incluye una canalización de geometría adicional para su uso en sombreado únicamente de posición. En el sombreado únicamente de posición, existen dos canalizaciones de geometría, la canalización de geometría completa dentro de la canalización de geometría/función fija 516, 536, y una canalización de selección, que es una canalización de geometría adicional que puede incluirse dentro de la lógica de función fija adicional 516. En una realización, la canalización de selección es una versión recortada de la canalización de geometría completa. La canalización completa y la canalización de selección pueden ejecutar diferentes instancias de la misma aplicación, teniendo cada instancia un contexto separado. El sombreado únicamente de posición puede ocultar largos tramos de selección de triángulos descartados, lo que permite completar el sombreado antes en algunos casos. Por ejemplo, y en una realización, la lógica de canalización de selección dentro de la lógica de función fija adicional 516 puede ejecutar sombreadores de posición en paralelo con la aplicación principal y generalmente genera resultados críticos más rápido que la canalización completa, ya que la canalización de selección extrae y sombrea únicamente el atributo de posición de los vértices, sin realizar la rasterización y representación de los píxeles en la memoria intermedia de fotogramas. La canalización de selección puede usar los resultados críticos generados para calcular la información de visibilidad de todos los triángulos sin tener en cuenta si esos triángulos están seleccionados. La canalización completa (que en este caso puede denominarse canalización de reproducción) puede consumir la información de visibilidad para omitir los triángulos seleccionados para sombrear solo los triángulos visibles que se pasan finalmente a la fase de rasterización.
En una realización, la lógica de función fija adicional 516 también puede incluir lógica de aceleración de aprendizaje automático, tal como lógica de multiplicación matricial de función fija, para implementaciones que incluyen optimizaciones para entrenamiento o inferencia de aprendizaje automático.
Dentro de cada subnúcleo de gráficos, 501A-501F incluye un conjunto de recursos de ejecución que pueden usarse para realizar operaciones de gráficos, medios y cálculo en respuesta a solicitudes por la canalización de gráficos, la canalización de medios o los programas sombreadores. Los subnúcleos de gráficos 501A-501F incluyen múltiples matrices EU 502A-502F, 504A-504F, lógica de despacho de hilos y comunicación inter-hilo (TD/IC) 503A-503F, un muestreador 3D (por ejemplo, de textura) 505A-505F, un muestreador de medios 506A-506F, un procesador sombreador 507A-507F y memoria local compartida (s Lm ) 508A-508F. Cada una de las matrices EU 502A-502F, 504A-504F incluye múltiples unidades de ejecución, que son unidades de procesamiento de gráficos de propósito general que pueden realizar operaciones lógicas de coma flotante y número entero/coma fija al servicio de una operación de gráficos, de medios o de cálculo, incluyendo programas de gráficos, de medios o sombreadores de cálculo. La lógica TD/IC 503A-503F realiza operaciones de control de hilo y despacho de hilo local para las unidades de ejecución dentro de un subnúcleo y facilita la comunicación entre hilos que se ejecutan en las unidades de ejecución del subnúcleo. El muestreador 3D 505A-505F puede leer texturas u otros datos relacionados con gráficos 3D en la memoria. El muestreador 3D puede leer datos de textura de manera diferente basándose en el estado de muestra configurado y en el formato de textura asociado con una textura dada. El muestreador de medios 506A-506F puede realizar operaciones de lectura similares de acuerdo con el tipo y formato asociado con los datos de medios. En una realización, cada subnúcleo de gráficos 501A-501F puede incluir, como alternativa, un muestreador de 3D y de medios unificado. Los hilos que se ejecutan en las unidades de ejecución dentro de cada uno de los subnúcleos 501A-501F pueden hacer uso de la memoria local compartida 508A-508F dentro de cada subnúcleo, para permitir que los hilos que se ejecutan dentro de un grupo de hilos se ejecuten usando una agrupación común de memoria en chip.
Unidades de ejecución
LasFiguras 6A-6Bilustran la lógica de ejecución de hilos 600 que incluye una matriz de elementos de procesamiento empleados en un núcleo de procesador de gráficos de acuerdo con realizaciones descritas en el presente documento. Los elementos de lasFiguras 6A-6Bque tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. La Figura 6A ilustra una vista general de la lógica de ejecución de hilos 600, que puede incluir una variante de la lógica de hardware ilustrada con cada subnúcleo 501A-501F de la Figura 5. La Figura 6B ilustra detalles internos ilustrativos de una unidad de ejecución.
Como se ilustra en la Figura 6A, en algunas realizaciones, la lógica de ejecución de hilos 600 incluye un procesador de sombreador 602, un despachador de hilos 604, una caché de instrucciones 606, una matriz de unidades de ejecución ajustable a escala que incluye una pluralidad de unidades de ejecución 608A-608N, un muestreador 610, una caché de datos 612 y un puerto de datos 614. En una realización, la matriz de unidades de ejecución ajustable a escala puede realizar un ajuste a escala dinámico habilitando o deshabilitando una o más unidades de ejecución (por ejemplo, cualquiera de las unidades de ejecución 608A, 608B, 608C, 608D a 608N-1 y 608N) basándose en los requisitos computacionales de una carga de trabajo. En una realización, los componentes incluidos están interconectados mediante un tejido de interconexión que se enlaza con cada uno de los componentes. En algunas realizaciones, la lógica de ejecución de hilos 600 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 606, el puerto de datos 614, el muestreador 610 y las unidades de ejecución 608A-608N. En algunas realizaciones, cada unidad de ejecución (por ejemplo, 608A) es una unidad computacional de propósito general programable autónoma que puede ejecutar múltiples hilos de hardware simultáneos mientras se procesan múltiples elementos de datos en paralelo para cada hilo. En diversas realizaciones, la matriz de unidades de ejecución 608A-608N es ajustable a escala para incluir cualquier número de unidades de ejecución individuales.
En algunas realizaciones, las unidades de ejecución 608A-608N se usan principalmente para ejecutar programas de sombreador. Un procesador de sombreador 602 puede procesar los diversos programas de sombreador y despachar hilos de ejecución asociados con los programas de sombreador a través de un despachador de hilos 604. En una realización, el despachador de hilos incluye lógica para arbitrar las solicitudes de iniciación de hilo desde las canalizaciones de gráficos y de medios e instanciar los hilos solicitados en una o más unidades de ejecución en las unidades de ejecución 608A-608N. Por ejemplo, una canalización de geometría puede despachar sombreadores de vértices, de teselación o de geometría a la lógica de ejecución de hilos para su procesamiento. En algunas realizaciones, el despachador de hilos 604 puede procesar también hilos en tiempo de ejecución que generan solicitudes desde los programas sombreadores de ejecución.
En algunas realizaciones, las unidades de ejecución 608A-608N soportan un conjunto de instrucciones que incluye un soporte nativo para muchas instrucciones de sombreador de gráficos 3D convencionales, de modo que los programas sombreadores desde bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traducción mínima. Las unidades de ejecución soportan 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). Cada una de las unidades de ejecución 608A-608N puede emitir de manera múltiple la ejecución de única instrucción de múltiples datos (SIMD) y la operación de múltiples hilos posibilita un entorno de ejecución eficiente frente a los accesos a memoria de latencia más alta. Cada hilo de hardware dentro de cada unidad de ejecución tiene un archivo de registro de ancho de banda alto especializado y un estado de hilo independiente asociado. La ejecución es de múltiples emisiones por reloj a canalizaciones que pueden realizar operaciones de números enteros, de coma flotante de precisión sencilla y doble, de capacidad de ramificación de SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones misceláneas. Mientras se esperan datos desde memoria o una de las funciones compartidas, una lógica de dependencia dentro de las unidades de ejecución 608A-608N hace que un hilo en espera pase a estar inactivo hasta que se hayan devuelto los datos solicitados. Mientras el hilo en espera está inactivo, pueden dedicarse recursos de hardware a procesar otros hilos. Por ejemplo, durante un retardo asociado con una operación de sombreador de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, un sombreador de fragmentos u otro tipo de programa sombreador, incluyendo un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 608A-608N opera sobre matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución" o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso, enmascaramiento y control de flujo de elementos de datos dentro de las instrucciones. El número de canales puede ser independiente del número de unidades aritméticológicas (ALU) o unidades de coma flotante (FPU) físicas de un procesador de gráficos particular. En algunas realizaciones, las unidades de ejecución 608A-608N soportan tipos de datos de números enteros y de coma flotante.
El conjunto de instrucciones de unidad de ejecución incluye instrucciones de SIMD. 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 basándose en el tamaño de datos de los elementos. Por ejemplo, cuando se realizan operaciones con un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución realiza operaciones con el vector como cuatro elementos de datos empaquetados de 64 bits separados (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados de 32 bits separados (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados de 16 bits separados (elementos de datos de tamaño de palabra (W)) o treinta y dos elementos de datos de 8 bits separados (elementos de datos de tamaño de octeto (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
En una realización, una o más unidades de ejecución pueden combinarse en una unidad de ejecución fusionada 609A-609N que tiene una lógica de control de hilos (607A-607N) que es común a las EU fusionadas. Múltiples EU pueden fusionarse en un grupo de EU. Cada EU del grupo de EU fusionado se puede configurar para ejecutar un hilo de hardware de SIMD separado. El número de EU en un grupo de EU fusionado puede variar de acuerdo con las realizaciones. Adicionalmente, se pueden realizar diversas anchuras de SIMD por EU, que incluyen, pero sin limitación, SIMD8, SIMD16 y SIMD32. Cada unidad de ejecución de gráficos fusionada 609A-609N incluye al menos dos unidades de ejecución. Por ejemplo, la unidad de ejecución fusionada 609A incluye una primera EU 608A, una segunda EU 608B y una lógica de control de hilos 607A que es común a la primera EU 608A y a la segunda EU 608B. La lógica de control de hilos 607A controla los hilos ejecutados en la unidad de ejecución de gráficos fusionada 609A, permitiendo que cada EU dentro de las unidades de ejecución fusionadas 609A-609N se ejecute usando un registro de puntero de instrucción común.
Una o más cachés de instrucción internas (por ejemplo, 606) están incluidas en la lógica de ejecución de hilos 600 a las instrucciones de hilos de caché para las unidades de ejecución. En algunas realizaciones, una o más cachés de datos (por ejemplo, 612) se incluyen para almacenar en caché datos de hilo durante la ejecución de hilos. En algunas realizaciones, se incluye un muestreador 610 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunas realizaciones, el muestreador 610 incluye funcionalidad especializada de muestreo de textura o de medios para procesar datos de textura o de medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, las canalizaciones de gráficos y medios envían solicitudes de inicio de hilo a la lógica de ejecución de hilo 600 a través de la lógica de generación y despacho de hilos. Una vez que un grupo de objetos geométricos ha sido procesado y rasterizado en datos de píxeles, la lógica del procesador de píxeles (por ejemplo, lógica de sombreador de píxeles, lógica de sombreador de fragmentos, etc.) dentro del procesador de sombreador 602 es invocada para seguir calculando la información de salida y hacer que los resultados se escriban en las superficies de salida (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de estarcido, etc.). En algunas realizaciones, un sombreador de píxeles o un sombreador de fragmentos calcula los valores de los diversos atributos de vértice que se van a interpolar a lo largo del objeto rasterizado. En algunas realizaciones, la lógica de procesador de píxeles dentro del procesador de sombreador 602 ejecuta a continuación un píxel suministrado por la interfaz de programación de aplicación (API) o programa de sombreador de fragmentos. Para ejecutar el programa de sombreador, el procesador de sombreador 602 despacha hilos a una unidad de ejecución (por ejemplo, 608A) mediante el despachador de hilos 604. En algunas realizaciones, el procesador de sombreador 602 usa la lógica de muestreo de textura en el muestreador 610 para acceder a datos de textura en mapas de textura almacenados en memoria. Las operaciones aritméticas en los datos de textura y los datos de geometría de entrada calculan datos de color de píxel para cada fragmento geométrico o descartan uno o más píxeles del procesamiento adicional.
En algunas realizaciones, el puerto de datos 614 proporciona un mecanismo de acceso a memoria para que la lógica de ejecución de hilos 600 emita datos procesados a memoria para su procesamiento adicional en una canalización de salida de procesador de gráficos. En algunas realizaciones, el puerto de datos 614 incluye o se acopla a una o más memorias caché (por ejemplo, la caché de datos 612) para almacenar en caché datos para el acceso a memoria mediante el puerto de datos.
Como se ilustra en la Figura 6B, una unidad de ejecución de gráficos 608 puede incluir una unidad de extracción de instrucciones 637, una matriz de archivo de registro general (GRF) 624, una matriz de archivo de registro arquitectónico (ARF) 626, un árbitro de hilos 622, una unidad de envío 630, una unidad de bifurcación 632, un conjunto de unidades de coma flotante (FPU) de SIMD 634 y, en una realización, un conjunto de ALU de SIMD de números enteros especializadas 635. El GRF 624 y el ARF 626 incluyen el conjunto de archivos de registro generales y archivos de registro de arquitectura asociados con cada hilo de hardware simultáneo que puede estar activo en la unidad de ejecución de gráficos 608. En una realización, el estado arquitectónico por hilo se mantiene en el ARF 626, mientras que los datos utilizados durante la ejecución del hilo se almacenan en el GRF 624. El estado de ejecución de cada hilo, incluyendo los punteros de instrucción para cada hilo, se puede mantener en registros específicos de hilo en el ARF 626.
En una realización, la unidad de ejecución de gráficos 608 tiene una arquitectura que es una combinación de múltiples hilos simultáneos (SMT) y múltiples hilos entrelazados de precisión (IMT). La arquitectura tiene una configuración modular que puede ajustarse con precisión en tiempo de diseño basándose en un número objetivo de hilos simultáneos y en un número de registros por unidad de ejecución, donde los recursos de unidad de ejecución se dividen a través de la lógica usada para ejecutar múltiples hilos simultáneos.
En una realización, la unidad de ejecución de gráficos 608 puede emitir conjuntamente múltiples instrucciones, cada una de las cuales pueden ser instrucciones diferentes. El árbitro de hilos 622 del hilo de la unidad de ejecución de gráficos 608 puede despachar las instrucciones a una de la unidad de envío 630, la unidad de bifurcación 642 o la o las FPU de SIMD 634 para su ejecución. Cada hilo de ejecución puede acceder a 128 registros de propósito general dentro del GRF 624, donde cada registro puede almacenar 32 bytes, accesibles como un vector de SIMD de 8 elementos de datos de 32 bits. En una realización, cada hilo de unidad de ejecución tiene acceso a 4 Kbytes dentro del GRF 624, aunque las realizaciones no están así limitadas y, en otras realizaciones, se pueden proporcionar más o menos recursos de registro. En una realización, hasta siete hilos pueden ejecutarse simultáneamente, aunque el número de hilos por unidad de ejecución también puede variar de acuerdo con realizaciones. En una realización en la que siete hilos pueden acceder a 4 Kbytes, el GRF 624 puede almacenar un total de 28 Kbytes. Los modos de direccionamiento flexibles pueden permitir que los registros se direccionen juntos para crear registros más amplios de manera efectiva o representar estructuras de datos de bloques rectangulares escalonados.
En una realización, las operaciones de memoria, operaciones de muestreo y otras comunicaciones del sistema de latencia más larga se despachan a través de instrucciones de "envío" que se ejecutan mediante la unidad de envío de paso de mensajes 630. En una realización, las instrucciones de bifurcación se despachan a una unidad de bifurcación especializada 632 para facilitar la divergencia de SIMD y la eventual convergencia.
En una realización, la unidad de ejecución de gráficos 608 incluye una o más unidades de SIMD de coma flotante (la o las FPU) 634 para realizar operaciones de coma flotante. En una realización, la o las FPU 634 también soportan el cálculo de números enteros. En una realización, la o las FPU 634 pueden ejecutar SIMD hasta un número M de operaciones de coma flotante (o de números enteros) de 32 bits, o ejecutar SIMD hasta 2M operaciones de coma flotante de 16 bits o de números enteros de16 bits. En una realización, al menos una de la o las FPU proporciona capacidad matemática extendida para soportar funciones matemáticas trascendentales de alto rendimiento y coma flotante de 64 bits de doble precisión. En algunas realizaciones, también está presente un conjunto de ALU de SIMD 635 de números enteros de 8 bits, y puede optimizarse específicamente para realizar operaciones asociadas con cálculos de aprendizaje automático.
En una realización, se pueden crear instancias de matrices de múltiples instancias de la unidad de ejecución de gráficos 608 en una agrupación de subnúcleos de gráficos (por ejemplo, un subsegmento). Para lograr escalabilidad, los arquitectos de producto pueden elegir el número exacto de unidades de ejecución por agrupamiento de subnúcleos. En una realización, la unidad de ejecución 608 puede ejecutar instrucciones a través de una pluralidad de canales de ejecución. En otra realización, cada hilo ejecutado en la unidad de ejecución de gráficos 608 se ejecuta en un canal diferente.
LaFigura 7es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos 700 de acuerdo con algunas realizaciones. En una o más realizaciones, las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros con línea continua ilustran los componentes que se incluyen, en general, en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de las instrucciones. En algunas realizaciones, el formato de instrucción 700 descrito e ilustrado son macroinstrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a microoperaciones resultantes de la descodificación de instrucciones una vez que se ha procesado la instrucción.
En algunas realizaciones, las unidades de ejecución del procesador de gráficos soportan de manera nativa instrucciones en un formato de instrucción de 128 bits 710. Un formato de instrucción compacta de 64 bits 730 está disponible para algunas instrucciones basándose en la instrucción, las opciones de instrucción y el número de operandos seleccionados. El formato de instrucción de 128 bits nativo 710 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 730. Las instrucciones nativas disponibles en el formato de 64 bits 730 varían por realización. En algunas realizaciones, la instrucción se compacta en parte utilizando un conjunto de valores de índice en un campo de índice 713. 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 710.
Para cada formato, el código de operación de instrucción 712 define la operación que ha de realizar la unidad de ejecución. Las unidades de ejecución ejecutan cada instrucción en paralelo a través de los múltiples elementos de datos de cada operando. Por ejemplo, en respuesta a una instrucción de adición, la unidad de ejecución realiza una operación de adición simultánea en cada canal de color que representa un elemento de textura o elemento de imagen.
Por defecto, la unidad de ejecución ejecuta cada instrucción a lo largo de todos los canales de datos de los operandos. En algunas realizaciones, el campo de control de instrucción 714 permite controlar ciertas opciones de ejecución, como la selección de canales (por ejemplo, predicación) y el orden de los canales de datos (por ejemplo, mezcla). Para las instrucciones en el formato de instrucción de 128 bits 710, un campo de tamaño de ejecución 716 limita el número de canales de datos que se ejecutarán en paralelo. En algunas realizaciones, el campo de tamaño de ejecución 716 no está disponible para su uso en el formato de instrucción compacta de 64 bits 730.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 720, src1 722 y un destino 718. En algunas realizaciones, 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, SRC2 724), donde el código de operación 712 de la instrucción determina el número de operandos fuente. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, precodificado) que se pasa con la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 710 incluye un campo de modo de acceso/dirección 726 que especifica, por ejemplo, si se usa el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se usa el modo de direccionamiento de registro directo, la dirección de registro de uno o más operandos se proporciona directamente por los bits en la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 710 incluye un campo de modo de acceso/dirección 726, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una realización, se usa el modo de acceso para definir una alineación de acceso de datos para la instrucción. Algunas realizaciones soportan modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de 1 byte, donde la alineación de bytes del modo de acceso determina la alineación de acceso de los operandos de instrucción. Por ejemplo, cuando está en un primer modo, la instrucción puede utilizar un direccionamiento alineado por byte para los operandos de origen y de destino y, cuando está en un segundo modo, la instrucción puede utilizar un direccionamiento alineado de 16 bytes para todos los operandos de origen y de destino.
En una realización, la porción de modo de dirección del campo de modo de acceso/dirección 726 determina si la instrucción ha de usar el direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, los bits en la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se usa el modo de direccionamiento de registro indirecto, se puede calcular la dirección de registro de uno o más operandos basándose en un valor de registro de dirección y un campo de dirección inmediata en la instrucción.
En algunas realizaciones, las instrucciones se agrupan basándose en los campos de bits del código de operación 712 para simplificar la descodificación de código de operación 740. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación de código de operación precisa mostrada es meramente un ejemplo. En algunas realizaciones, un grupo de código de operación de movimiento y lógica 742 incluye instrucciones lógicas y de movimiento de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas realizaciones, el grupo de movimiento y lógica 742 comparte los cinco bits más significativos (MSB), donde las instrucciones de movimiento (mov) están tienen la forma 0000xxxxb y las instrucciones lógicas tienen la forma 0001xxxxb. Un grupo de instrucciones de control de flujo 744 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones de miscelánea 746 incluye una mezcla de instrucciones, que incluyen instrucciones de sincronización (por ejemplo, espera, envío) en forma de 001 1xxxxb (por ejemplo, 0x30). Un grupo de instrucciones de cálculo matemático paralelo 748 incluye instrucciones aritméticas a nivel de componente (por ejemplo, añadir, multiplicar (mult)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cálculo matemático paralelo 748 realiza las operaciones aritméticas en paralelo a través de los canales de datos. El grupo de cálculo matemático vectorial 750 incluye instrucciones aritméticas (por ejemplo, dp4) en la forma de 0101xxxxb (por ejemplo, 0x50). El grupo de cálculo vectorial realiza operaciones aritméticas tales como cálculos de producto escalar en operandos vectoriales.
Canalización de gráficos
LaFigura 8es un diagrama de bloques de otra realización de un procesador de gráficos 800. Los elementos de laFigura 8que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto.
En algunas realizaciones, el procesador de gráficos 800 incluye una canalización de geometría 820, una canalización de medios 830, un motor de visualización 840, una lógica de ejecución de hilos 850 y una canalización de salida de representación 870. En algunas realizaciones, el procesador de gráficos 800 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 gráfico está controlado por escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador gráfico 800 mediante una interconexión en anillo 802. En algunas realizaciones, la interconexión en anillo 802 acopla el procesador de gráficos 800 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de propósito general. Los comandos desde la interconexión en anillo 802 se interpretan por un emisor de envío por flujo continuo de comandos 803, que suministra instrucciones a componentes individuales de la canalización de geometría 820 o la canalización de medios 830.
En algunas realizaciones, el emisor de envío por flujo continuo 803 dirige la operación de un extractor de vértices 805 que lee los datos de vértices de memoria y ejecuta comandos de procesamiento de vértices proporcionados por el emisor de envío por flujo continuo 803. En algunas realizaciones, el extractor de vértices 805 proporciona datos de vértices a un sombreador de vértices 807, que realiza operaciones de transformación espacial de coordenadas y de iluminación en cada vértice. En algunas realizaciones, el extractor de vértices 805 y el sombreador de vértices 807 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a las unidades de ejecución 852A-852B mediante un despachador de hilos 831.
En algunas realizaciones, las unidades de ejecución 852A-852B son una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunas realizaciones, las unidades de ejecución 852A-852B tienen una caché L1 adjunta 851 que es específica para cada matriz o está compartida entre las matrices. La memoria caché se puede configurar como una memoria caché de datos, una memoria caché de instrucciones o una única memoria caché que se divide para contener datos e instrucciones en diferentes particiones.
En algunas realizaciones, la canalización de geometría 820 incluye componentes de teselación para realizar teselación acelerada por hardware de objetos 3D. En algunas realizaciones, un sombreador de casco programable 811 configura las operaciones de teselación. Un sombreador de dominio programable 817 proporciona una evaluación de extremo trasero de la salida de teselación. Un teselador 813 opera en la dirección del sombreador de casco 811 y contiene una lógica de propósito especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico grueso que se proporciona como entrada a la canalización de geometría 820. En algunas realizaciones, si no se usa la teselación, pueden omitirse los componentes de teselación (por ejemplo, el sombreador de casco 811, el teselador 813 y el sombreador de dominio 817).
En algunas realizaciones, unos objetos geométricos completos pueden ser procesados por un sombreador de geometría 819 mediante uno o más hilos despachados a las unidades de ejecución 852A-852B, o puede avanzar directamente al recortador 829. En algunas realizaciones, el sombreador de geometría opera sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en etapas previas de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 819 recibe la entrada desde el sombreador de vértices 807. En algunas realizaciones, el sombreador de geometría 819 se puede programar mediante un programa de sombreado de geometría para realizar la teselación de geometría si las unidades de teselación están deshabilitadas.
Antes de la rasterización, un recortador 829 procesa datos de vértices. El recortador 829 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y sombreador de geometría. En algunas realizaciones, un componente de prueba de rasterizador y profundidad 873 en la canalización de salida del representador 870 despacha sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxeles. En algunas realizaciones, la lógica de sombreador de píxeles está incluida en la lógica de ejecución de hilos 850. En algunas realizaciones, una aplicación puede omitir el componente de prueba de rasterizador y profundidad 873 y acceder a los datos de vértices no rasterizados por medio de una unidad de salida de flujo 823.
El procesador de gráficos 800 tiene un bus de interconexión, un tejido de interconexión o algún otro mecanismo de interconexión que permite que datos y mensajes pasen entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 852A-852B y las unidades lógicas asociadas (por ejemplo, la caché L1 851, el muestreador 854, la caché de textura 858, etc.) se interconectan a través de un puerto de datos 856 para realizar el acceso a memoria y comunicarse con los componentes de la canalización de salida del representador del procesador. En algunas realizaciones, el muestreador 854, las cachés 851, 858 y las unidades de ejecución 852A-852B cada uno tienen rutas de acceso a memoria separadas. En una realización, la caché de textura 858 también se puede configurar como una caché de muestreador.
En algunas realizaciones, la canalización de salida del representador 870 contiene un componente de prueba de rasterizador y profundidad 873 que convierte objetos basados en vértices en una representación basada en píxeles asociada. En algunas realizaciones, la lógica del rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de triángulo y de línea de función fija. En algunas realizaciones también están disponibles una caché de representación 878 y una caché de profundidad 879 asociadas. Un componente de operaciones de píxeles 877 realiza operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxeles asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) se realizan por el motor 2D 841, o son sustituidas en el momento de la visualización por el controlador de visualización 843 utilizando planos de visualización de superposición. En algunas realizaciones, una caché L3 compartida 875 está disponible para todos los componentes gráficos, lo que permite compartir datos sin el uso de la memoria de sistema principal.
En algunas realizaciones, la canalización de medios de procesador de gráficos 830 incluye un motor de medios 837 y un extremo frontal de vídeo 834. En algunas realizaciones, el extremo frontal de vídeo 834 recibe comandos de canalización desde el emisor por flujo continuo de comandos 803. En algunas realizaciones, la canalización de medios 830 incluye un emisor de flujo continuo de comandos separado. En algunas realizaciones, el extremo frontal de vídeo 834 procesa comandos de medios antes de enviar el comando al motor de medios 837. En algunas realizaciones, el motor de medios 837 incluye una funcionalidad de generación de hilos para generar hilos para su despacho a la lógica de ejecución de hilos 850 a través del distribuidor de hilos 831.
En algunas realizaciones, el procesador de gráficos 800 incluye un motor de visualización 840. En algunas realizaciones, el motor de visualización 840 es externo al procesador 800 y está acoplado al procesador de gráficos mediante la interconexión en anillo 802 o algún otro bus o tejido de interconexión. En algunas realizaciones, el motor de visualización 840 incluye un motor 2D 841 y un controlador de visualización 843. En algunas realizaciones, el motor de visualización 840 contiene lógica de propósito especial que puede operar independientemente de la canalización 3D. En algunas realizaciones, el controlador de visualización 843 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en el sistema, como en un ordenador portátil, o un dispositivo de visualización externo conectado por medio de un conector de dispositivo de visualización.
En algunas realizaciones, la canalización de geometría 820 y la canalización de medios 830 pueden configurarse para realizar operaciones basándose en múltiples interfaces de programación de gráficos y de medios y no son específicas de ninguna interfaz de programación de aplicaciones (API). En algunas realizaciones, el software de controlador para el procesador gráfico traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden procesarse por el procesador de gráficos. En algunas realizaciones, se proporciona soporte para la biblioteca de gráficos abierta (OpenGL), lenguaje informático abierto (OpenCL) y/o gráficos Vulkan y API de cálculo, todo ello gracias al grupo Khronos. En algunas realizaciones, también se puede proporcionar soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas realizaciones, puede soportarse una combinación de estas bibliotecas. También puede proporcionarse 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 puede hacerse un mapeo desde la canalización de la API futura a la canalización del procesador de gráficos.
Programación de canalización de gráficos
LaFigura 9Aes un diagrama de bloques que ilustra un formato de comandos de procesador de gráficos 900 de acuerdo con algunas realizaciones. LaFigura 9Bes un diagrama de bloques que ilustra una secuencia de comando de procesador de gráficos 910 de acuerdo con una realización. Los recuadros de línea continua en laFigura 9Ailustran los componentes que están incluidos en general en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que están incluidos únicamente en un subconjunto de comandos de gráficos. El formato de comando de procesador de gráficos 900 ilustrativo de laFigura 9Aincluye campos de datos para identificar un cliente 902, un código de operación (opcode) de comando 904 y unos datos 906 para el comando. También se incluyen un subcódigo de operación 905 y un tamaño de comando 908 en algunos comandos.
En algunas realizaciones, el cliente 902 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En algunas realizaciones, un analizador de comandos de procesador de gráficos examina el campo de cliente de cada comando para acondicionar el procesamiento adicional del comando y encaminar los datos de comando a la unidad de cliente apropiada. En algunas realizaciones, las unidades cliente del procesador gráfico incluyen una unidad de interfaz de memoria, una unidad de representación, una unidad 2D, una unidad 3D y una unidad multimedia. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que el comando es recibido por la unidad de cliente, la unidad de cliente lee el código de operación 904 y, si está presente, el subcódigo de operación 905 para determinar la operación a realizar. La unidad de cliente realiza el comando usando información en el campo de datos 906. Para algunos comandos se espera un tamaño de comando 908 explícito para especificar el tamaño del comando. En algunas realizaciones, el analizador de comandos determina automáticamente el tamaño de al menos algunos de los comandos basándose en el código de operación de comando. En algunas realizaciones, se alinean los comandos mediante múltiplos de una palabra doble.
El diagrama de flujo en laFigura 9Bilustra una secuencia de comandos de procesador de gráficos 910 ilustrativa. En algunas realizaciones, el software o firmware de un sistema de procesamiento de datos que presenta una realización de un procesador gráfico utiliza 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 fines ilustrativos, ya que las realizaciones no están limitadas a estos comandos específicos o para esta secuencia de comandos. Por otra parte, los comandos se pueden emitir como un lote de comandos en una secuencia de comandos, de tal forma que el procesador gráfico procesará la secuencia de comandos al menos parcialmente en concurrencia.
En algunas realizaciones, la secuencia de comandos del procesador de gráficos 910 puede comenzar con un comando de vaciado de canalización 912 para hacer que alguna canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización 3D 922 y la canalización de medios 924 no operan concurrentemente. El vaciado de la canalización se realiza para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de canalización, el analizador de comandos del procesador gráfico pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las cachés de lectura relevantes. Opcionalmente, cualquier dato en la caché de representación que esté marcado como 'sucio' se puede vaciar a la memoria. En algunas realizaciones, el comando de vaciado de canalización 912 se puede utilizar para la sincronización de canalización o antes de colocar el procesador gráfico en un estado de baja potencia.
En algunas realizaciones, se utiliza un comando de selección de canalización 913 cuando una secuencia de comandos requiere que el procesador gráfico cambie explícitamente entre canalizaciones. En algunas realizaciones, se requiere únicamente un comando de selección de canalización 913 una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea emitir comandos para ambas canalizaciones. En algunas realizaciones, se requiere un comando de vaciado de canalización 912 inmediatamente antes de un conmutador de canalización mediante el comando de selección de canalización 913.
En algunas realizaciones, un comando de control de canalización 914 configura una canalización de gráficos para la operación y se utiliza para programar la canalización 3D 922 y la canalización de medios 924. En algunas realizaciones, el comando de control de canalización 914 configura el estado de canalización para la canalización activa. En una realización, se usa el comando de control de canalización 914 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 algunas realizaciones, se usan comandos de estado de memoria intermedia de retorno 916 para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o más memorias intermedias de retorno en las que las operaciones escriben datos intermedios durante el procesamiento. En algunas realizaciones, el procesador gráfico también utiliza una o más memorias intermedias de retorno para almacenar datos de salida y para realizar una comunicación entre hilos. En algunas realizaciones, el estado de memoria intermedia de retorno 916 incluye seleccionar el tamaño y número de memorias intermedias de retorno que usar para un conjunto de operaciones de canalización.
Los comandos restantes en la secuencia de comandos difieren basándose en la canalización activa para las operaciones. Basándose en una determinación de canalización 920, la secuencia de comandos se adapta a la canalización 3D 922 comenzando con el estado de canalización 3D 930, o a la canalización de medios 924 comenzando en el estado de canalización de medios 940.
Los comandos para configurar el estado de canalización 3D 930 incluyen comandos de ajuste de estado 3D para el estado de memoria intermedia de vértices, el estado de elemento de vértice, el estado de color constante, el estado de memoria intermedia de profundidad y otras variables de estado que se han de configurar antes de que se procesen comandos de primitivas 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en uso. En algunas realizaciones, los comandos de estado de canalización 3D 930 también pueden desactivar o desviar selectivamente ciertos elementos de canalización si esos elementos no se usarán.
En algunas realizaciones, el comando de primitivas 3D 932 se usa para enviar primitivas 3D que serán procesadas mediante la canalización 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos a través del comando de primitivas 3D 932 se reenvían a la función de extracción de vértices en la canalización de gráficos. La función de extracción de vértices utiliza los datos del comando de primitiva 3D 932 para generar estructuras de datos de vértices. Las estructuras de datos de vértices se almacenan en una o más memorias intermedias de retorno. En algunas realizaciones, el comando de primitivas 3D 932 se utiliza para realizar operaciones de vértices en primitivas 3D por medio de sombreadores de vértices. Para procesar sombreadores de vértices, la canalización 3D 922 despacha hilos de ejecución de sombreadores a unidades de ejecución de procesadores de gráficos.
En algunas realizaciones, la canalización 3D 922 se activa mediante un comando o evento de ejecución 934. En algunas realizaciones, una escritura de registro activa la ejecución de comando. En algunas realizaciones, la ejecución se activa mediante un comando 'ir' o 'patear' en la secuencia de comandos. En una realización, la ejecución de comando se activa 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 que están completadas las operaciones, se rasterizan los objetos geométricos resultantes y los colores de motor de píxel y los píxeles resultantes. También pueden incluirse comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo trasero de píxeles para esas operaciones.
En algunas realizaciones, la secuencia de comandos de procesador de gráficos 910 sigue la ruta de canalización de medios 924 cuando se realizan operaciones de medios. En general, el uso específico y la forma de programación para la canalización de medios 924 depende de los medios o de las operaciones de cálculo que se van a realizar. Las operaciones de descodificación de medios específicas pueden descargarse hacia la canalización de medios durante la descodificación de medios. En algunas realizaciones, puede omitirse también la canalización de medios y puede realizarse la descodificació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 una realización, 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.
En algunas realizaciones, la canalización de medios 924 se configura de una manera similar a la de la canalización 3D 922. Un conjunto de comandos para configurar el estado de canalización de medios 940 se despachan o colocan en una cola de comandos antes de los comandos de objeto de medios 942. En algunas realizaciones, los comandos para el estado de canalización de medios 940 incluyen datos para configurar los elementos de canalización de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de descodificación de vídeo y de codificación de vídeo dentro de la canalización de medios, tal como el formato de codificación o de descodificación. En algunas realizaciones, los comandos para el estado de canalización de medios 940 también soportan el uso de uno o más punteros a elementos de estado "indirectos" que contienen un lote de ajustes de estado.
En algunas realizaciones, los comandos de objetos de medios 942 suministran punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos multimedia incluyen memorias intermedias que contienen datos de vídeo a procesar. En algunas realizaciones, todos los estados de canalización de medios deben ser válidos antes de emitir un comando de objeto de medios 942. Una vez que se configura el estado de la canalización y se ponen en cola los comandos de objeto de medios 942, la canalización de medios 924 se desencadenará a través de un comando de ejecución 944 o un evento de ejecución equivalente (por ejemplo, escritura de registro). La salida de la canalización de medios 924 puede a continuación procesarse posteriormente por operaciones proporcionadas por la canalización 3D 922 o la canalización de medios 924. En algunas realizaciones, las operaciones de GPGPU se configuran y se ejecutan de una manera similar a la de las operaciones de medios.
Arquitectura de software de gráficos
LaFigura 10ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos 1000 de acuerdo con algunas realizaciones. En algunas realizaciones, la arquitectura de software incluye una aplicación de gráficos 3D 1010, un sistema operativo 1020 y al menos un procesador 1030. En algunas realizaciones, el procesador 1030 incluye un procesador de gráficos 1032 y uno o más núcleos de procesador de propósito general 1034. Cada uno de la aplicación de gráficos 1010 y el sistema operativo 1020 se ejecutan en la memoria de sistema 1050 del sistema de procesamiento de datos.
En algunas realizaciones, la aplicación de gráficos 3D 1010 contiene uno o más programas de sombreador que incluyen instrucciones de sombreador 1012. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el lenguaje de sombreador de alto nivel (HLSL) o el lenguaje de sombreador de OpenGL (GLSL). La aplicación incluye también instrucciones ejecutables 1014 en un lenguaje de máquina adecuado para su ejecución por el núcleo de procesador de propósito general 1034. La aplicación también incluye los objetos de gráficos 1016 definidos por datos de vértices.
En algunas realizaciones, el sistema operativo 1020 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo tipo UNIX propietario o un sistema operativo tipo UNIX de código abierto que utiliza una variante del núcleo de Linux. El sistema operativo 1020 puede soportar una API de gráficos 1022 tal como por ejemplo la API de Direct3D, la API de OpenGL o la API Vulkan. Cuando la API Direct3D está en uso, el sistema operativo 1020 utiliza un compilador de sombreadore de extremo frontal 1024 para compilar cualesquiera instrucciones de sombreador 1012 en HLSL a un lenguaje de sombreadore de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede realizar una precompilación de sombreador. En algunas realizaciones, los sombreadores de alto nivel se compilan en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 1010. En algunas realizaciones, las instrucciones de sombreador 1012 se proporcionan en una forma intermedia, como por ejemplo una versión de la Representación Intermedia Portátil Estándar (SPIR) utilizada por la API Vulkan.
En algunas realizaciones, el controlador de gráficos en modo de usuario 1026 contiene un compilador de sombreador de extremo trasero 1027 para convertir las instrucciones de sombreador 1012 en una representación específica de hardware. Cuando se utiliza la API de OpenGL, las instrucciones de sombreador 1012 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 1026 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 1026 utiliza las funciones de modo de núcleo de sistema operativo 1028 para comunicarse con un controlador de gráficos de modo de núcleo 1029. En algunas realizaciones, el controlador de gráficos de modo de núcleo 1029 se comunica con el procesador de gráficos 1032 para despachar comandos e instrucciones.
Implementaciones de núcleo de IP
Uno o más aspectos de al menos una realización pueden implementarse mediante un código representativo almacenado en un medio legible por máquina que representa y/o define una lógica dentro de un circuito integrado tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan diversa lógica dentro del procesador. Cuando son leídas por una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", son unidades reutilizables de lógica para un circuito integrado que se pueden almacenar 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 fabrican el circuito integrado. El circuito integrado puede fabricarse de manera que realice las operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
LaFigura 11Aes un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 1100 que puede usarse para fabricar un circuito integrado para realizar las operaciones de acuerdo con una realización. El sistema de desarrollo de núcleo de IP 1100 puede usarse para generar diseños reutilizables modulares que pueden incorporarse en un diseño más grande o usarse para construir un circuito integrado entero (por ejemplo, un circuito integrado de SOC). Una instalación de diseño 1130 puede generar una simulación de software 1110 de un diseño de núcleo de IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). La simulación de software 1110 puede usare para diseñar, probar y verificar el comportamiento del núcleo de IP usando un modelo de simulación 1112. El modelo de simulación 1112 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. Un diseño de nivel de transferencia de registro (RTL) 1115 se puede crear o sintetizar a partir del modelo de simulación 1112. El diseño de RTL 1115 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registros de hardware, incluyendo la lógica asociada realizada utilizando las señales digitales modeladas. Además de un diseño de RTL 1115, también pueden crearse, diseñarse o sintetizarse diseños de nivel inferior al nivel de lógica o al nivel de transistores. Por tanto, los detalles particulares del diseño y simulación inicial pueden variar.
El diseño de RTL 1115, o un equivalente, puede ser sintetizado adicionalmente por la instalación de diseño para dar un modelo de hardware 1120, que puede estar en un lenguaje de descripción de hardware (HDL) o alguna otra representación de datos de diseño físico. El HDL se puede simular o probar además para verificar el diseño de núcleo de IP. El diseño de núcleo de IP puede almacenarse para su entrega a una instalación de fabricación de 3os 1165 usando memoria no volátil 1140 (por ejemplo, disco duro, memoria flash o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo de IP puede transmitirse (por ejemplo, a través de Internet) a través de una conexión por cable 1150 o una conexión inalámbrica 1160. La instalación de fabricación 1165 puede entonces fabricar un circuito integrado que se basa al menos en parte en el diseño de núcleo de IP. El circuito integrado fabricado puede estar configurado para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
LaFigura 11Bilustra una vista lateral en sección transversal de un conjunto de paquete de circuito integrado 1170, de acuerdo con algunas realizaciones descritas en el presente documento. El conjunto de paquete de circuito integrado 1170 ilustra una implementación de uno o más dispositivos procesadores o aceleradores como se describe en el presente documento. El conjunto de paquete 1170 incluye múltiples unidades de lógica de hardware 1172, 1174 conectadas a un sustrato 1180. La lógica 1172, 1174 puede implementarse al menos parcialmente en hardware de lógica configurable o lógica de funcionalidad fija, y puede incluir una o más porciones de cualquiera del núcleo o núcleos de procesador, procesador o procesadores de gráficos u otros dispositivos aceleradores descritos en el presente documento. Cada unidad de lógica 1172, 1174 puede implementarse dentro de una pastilla de semiconductores y acoplarse con el sustrato 1180 mediante una estructura de interconexión 1173. La estructura de interconexión 1173 puede configurarse para encaminar señales eléctricas entre la lógica 1172, 1174 y el sustrato 1180, y puede incluir interconexiones tales como, pero sin limitación, protuberancias o pilares. En algunas realizaciones, la estructura de interconexión 1173 puede configurarse para enrutar señales eléctricas tales como, por ejemplo, señales de entrada/salida (E/S) y/o señales de alimentación o de tierra asociadas con la operación de la lógica 1172, 1174. En algunas realizaciones, el sustrato 1180 es un sustrato laminado basado en epoxi. El sustrato de paquete 1180 puede incluir otros tipos adecuados de sustratos en otras realizaciones. El conjunto de paquete 1170 puede conectarse a otros dispositivos eléctricos mediante una interconexión de paquete 1183. La interconexión de paquete 1183 puede acoplarse a una superficie del sustrato 1180 para encaminar señales eléctricas a otros dispositivos eléctricos, tales como una placa base, otro conjunto de chips o un módulo de múltiples chips.
En algunas realizaciones, las unidades de lógica 1172, 1174 se acoplan eléctricamente con un puente 1182 que está configurado para encaminar señales eléctricas entre la lógica 1172, 1174. El puente 1182 puede ser una estructura de interconexión densa que proporciona una ruta para señales eléctricas. El puente 1182 puede incluir un sustrato de puente compuesto de vidrio o un material semiconductor adecuado. Pueden formarse características de encaminamiento eléctrico sobre el sustrato de puente para proporcionar una conexión de chip a chip entre la lógica 1172, 1174.
Aunque se ilustran dos unidades de lógica 1172, 1174 y un puente 1182, las realizaciones descritas en el presente documento pueden incluir más o menos unidades lógicas en uno o más chips. El uno o más chips pueden estar conectados por cero o más puentes, ya que el puente 1182 puede excluirse cuando la lógica está incluida en un único chip. Como alternativa, se pueden conectar múltiples chips o unidades lógicas mediante uno o más puentes. Adicionalmente, se pueden conectar entre sí múltiples unidades lógicas, chips y puentes en otras configuraciones posibles, incluyendo configuraciones tridimensionales.
Circuito integrado de sistema en un chip ilustrativo
LasFiguras 12-14ilustran circuitos integrados ilustrativos y procesadores de gráficos asociados que pueden fabricarse usando uno o más núcleos de IP, de acuerdo con diversas realizaciones descritas en el presente documento. Además de lo que se ilustra, puede incluirse otra lógica y circuitos, que incluyen procesadores/núcleos de gráficos adicionales, controladores de interfaz periférica o núcleos de procesador de propósito general.
LaFigura 12es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip 1200 ilustrativo que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El circuito integrado 1200 ilustrativo incluye uno o más procesadores de aplicaciones 1205 (por ejemplo, unas CPU), al menos un procesador de gráficos 1210, y puede incluir adicionalmente un procesador de imágenes 1215 y/o un procesador de vídeo 1220, cualquiera de los cuales puede ser un núcleo de IP modular desde las mismas o múltiples instalaciones de diseño diferentes. El circuito integrado 1200 incluye una lógica de bus o de periféricos que incluye un controlador de USB 1225, un controlador de UART 1230, un controlador de SPI/SDIO 1235 y un controlador de I2S/I2C 1240. Además, el circuito integrado puede incluir un dispositivo de visualización 1245 acoplado a uno o más de un controlador de interfaz multimedia de alta definición (HDMI) 1250 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 1255. El almacenamiento puede proporcionarse por un subsistema de memoria flash 1260 que incluye memoria flash y un controlador de memoria flash. La interfaz de memoria se puede proporcionar mediante un controlador de memoria 1265 para acceder a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 1270.
LasFiguras 13A-13Bson diagramas de bloques que ilustran procesadores de gráficos ilustrativos para su uso dentro de un SoC, de acuerdo con realizaciones descritas en el presente documento. LaFigura 13Ailustra un procesador de gráficos 1310 ilustrativo de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. LaFigura 13Bilustra un procesador de gráficos 1340 ilustrativo adicional de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El procesador de gráficos 1310 de la Figura 13A es un ejemplo de un núcleo de procesador de gráficos de bajo consumo. El procesador de gráficos 1340 de la Figura 13B es un ejemplo de un núcleo de procesador de gráficos de rendimiento superior. Cada uno de los procesadores gráficos 1310, 1340 puede ser variantes del procesador de gráficos 1210 de laFigura 12.
Como se muestra en la Figura 13A, el procesador de gráficos 1310 incluye un procesador de vértices 1305 y uno o más procesador o procesadores de fragmentos 1315A-1315N (por ejemplo, 1315A, 1315B, 1315C, 1315D a 1315N-1, y 1315N). El procesador de gráficos 1310 puede ejecutar diferentes programas de sombreador mediante lógica separada, de manera que el procesador de vértices 1305 está optimizado para ejecutar operaciones para programas de sombreador de vértices, mientras que el uno o más procesador o procesadores de fragmentos 1315A-1315N ejecutan operaciones de sombreado de fragmentos (por ejemplo, de píxeles) para programas de sombreador de fragmentos o de píxeles. El procesador de vértices 1305 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértices. El procesador o procesadores de fragmentos 1315A-1315N usan los datos de primitivas y de vértices generados por el procesador de vértices 1305 para producir una memoria intermedia de fotogramas que se visualiza en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 1315A-1315N están optimizados para ejecutar programas de sombreador de fragmentos según se proporciona en la API de OpenGL, que pueden usarse para realizar operaciones similares como un programa de sombreador de píxeles como se proporciona en la API de Direct 3D.
El procesador de gráficos 1310 incluye adicionalmente una o más unidades de gestión de memoria (MMU) 1320A-1320B, caché(s) 1325A-1325B e interconexión(es) de circuito 1330A-1330B. La una o más MMU 1320A-1320B proporcionan un mapeo de dirección virtual a física para el procesador de gráficos 1310, incluyendo para el procesador de vértices 1305 y/o el procesador o procesadores de fragmentos 1315A-1315N, que pueden hacer referencia a datos de vértice o de imagen/textura almacenados en memoria, además de datos de vértice o de imagen/textura almacenados en la una o más cachés 1325A-1325B. En una realización, las una o más MMU 1320A-1320B pueden sincronizarse con otras MMU dentro del sistema, incluyendo una o más MMU asociadas a los uno o más procesadores de aplicación 1205, procesador de imagen 1215 y/o procesador de vídeo 1220 de laFigura 12, de manera que cada procesador 1205-1220 puede participar en un sistema de memoria virtual compartida o unificada. La una o más interconexiones de circuito 1330A-1330B permiten al procesador de gráficos 1310 interactuar con otros núcleos de IP dentro del SoC, ya sea por medio de un bus interno del SoC o por medio de una conexión directa, de acuerdo con las realizaciones.
Como se muestra en la Figura 13B, el procesador de gráficos 1340 incluye la una o más MMU 1320A-1320B, la caché o cachés 1325A-1325B y la interconexión o interconexiones de circuito 1330A-1330B del procesador de gráficos 1310 de laFigura 13A.El procesador de gráficos 1340 incluye uno o más núcleo o núcleos de sombreador 1355A-1355N (por ejemplo, 1455A, 1355B, 1355C, 1355D, 1355E, 1355F, a 1355N-1 y 1355N), que proporciona una arquitectura de núcleo de sombreado unificada en la que un solo núcleo o tipo o núcleo puede ejecutar todo tipo de código de sombreado programable, incluyendo el código de programa de sombreador para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cálculo. El número exacto de núcleos de sombreador presentes puede variar entre realizaciones e implementaciones. Adicionalmente, el procesador de gráficos 1340 incluye un gestor de tareas entre núcleos 1345, que actúa como un despachador de hilos para despachar hilos de ejecución a uno o más núcleos de sombreador 1355A-1355N y una unidad de teselado 1358 para acelerar operaciones de teselado para una representación basada en teselas, en la que las operaciones de representación para una escena se subdividen en el espacio de imágenes, por ejemplo, para aprovechar la coherencia espacial local dentro de una escena o para optimizar el uso de cachés internas.
LasFiguras 14A-14Bilustran lógica de procesador de gráficos ilustrativa adicional de acuerdo con realizaciones descritas en el presente documento. LaFigura 14Ailustra un núcleo de gráficos 1400 que puede estar incluido dentro del procesador de gráficos 1210 de laFigura 12,y puede ser un núcleo de sombreador unificado 1355A-1355N como en la Figura 13B. LaFigura 14Bilustra una unidad de procesamiento de gráficos de propósito general altamente paralela 1430 adecuada para su implementación en un módulo de múltiples chips.
Como se muestra en la Figura 14A, el núcleo de gráficos 1400 incluye una caché de instrucciones compartidas 1402, una unidad de texturas 1418 y una caché/memoria compartida 1420 que son comunes a los recursos de ejecución dentro del núcleo de gráficos 1400. El núcleo de gráficos 1400 puede incluir múltiples segmentos 1401A-1401N o particiones para cada núcleo, y un procesador de gráficos puede incluir múltiples instancias del núcleo de gráficos 1400. Los segmentos 1401A-1401N pueden incluir lógica de soporte que incluye una caché de instrucciones local 1404A-1404N, un planificador de hilos 1406A-1406N, un despachador de hilos 1408A-1408N y un conjunto de registros 1410A. Para realizar operaciones lógicas, los segmentos 1401A-1401N pueden incluir un conjunto de unidades de función (AFU 1412A-1412N) adicionales, unidades de coma flotante (FPU 1414A-1414N), unidades aritmético-lógicas de números enteros (ALU 1416-1416N), unidades de cálculo de direcciones (ACU 1413A-1413N), unidades de coma flotante de precisión doble (DPFPU 1415A-1415N) y unidades de procesamiento de matrices (MPU 1417A-1417N).
Algunas de las unidades computacionales operan con una precisión específica. Por ejemplo, las FPU 1414A-1414N pueden realizar operaciones de coma flotante de precisión sencilla (32 bits) y de media precisión (16 bits), mientras que las DPFPU 1415A-1415N realizan operaciones de coma flotante de precisión doble (64 bits). Las ALU 1416A-1416N pueden realizar operaciones con números enteros de precisión variable con una precisión de 8 bits, 16 bits y 32 bits, y pueden configurarse para operaciones de precisión mixta. Las MPU 1417A-1417N también pueden configurarse para operaciones con matrices de precisión mixta, incluyendo operaciones de coma flotante de media precisión y operaciones de enteros de 8 bits. Las MPU 1417-1417N pueden realizar una diversidad de operaciones con matrices para acelerar las estructuras de aplicaciones de aprendizaje automático, incluyendo la habilitación del soporte para la multiplicación de matriz con matriz general (GEMM) acelerada. Las AFU 1412A-1412N pueden realizar operaciones lógicas adicionales no soportadas por las unidades de coma flotante o de números enteros, incluyendo operaciones trigonométricas (por ejemplo, seno, coseno, etc.).
Como se muestra en la Figura 14B, una unidad de procesamiento de propósito general (GPGPU) 1430 puede configurarse para habilitar que una serie de unidades de procesamiento de gráficos realicen operaciones de cálculo altamente paralelas. Adicionalmente, la GPGPU 1430 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. La GPGPU 1430 incluye una interfaz de anfitrión 1432 para habilitar una conexión con un procesador de anfitrión. En una realización, la interfaz de anfitrión 1432 es una interfaz PCI Express. Sin embargo, la interfaz de anfitrión también puede ser una interfaz de comunicaciones o tejido de comunicaciones específico de proveedor. La GPGPU 1430 recibe comandos desde el procesador de anfitrión y usa un planificador global 1434 para distribuir hilos de ejecución asociados con estos comandos a un conjunto de agrupaciones de cálculo 1436A-1436H. Las agrupaciones de cálculo 1436A-1436H comparten una memoria caché 1438. La memoria caché 1438 puede servir como una caché de nivel superior para memorias caché dentro de las agrupaciones de cálculo 1436A-1436H.
La GPGPU 1430 incluye la memoria 1434A-1434B acoplada con las agrupaciones de cálculo 1436A-1436H mediante un conjunto de controladores de memoria 1442A-1442B. En diversas realizaciones, la memoria 1434A-1434B puede incluir diversos tipos de dispositivos de memoria, que incluyen memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como memoria de acceso aleatorio de gráficos síncrona (SGRAM), que incluye memoria de tasa de datos doble de gráficos (GDDR).
En una realización, las agrupaciones de cálculo 1436A-1436H incluyen cada uno un conjunto de núcleos de gráficos, tales como el núcleo de gráficos 1400 de la Figura 14A, que puede incluir múltiples tipos de unidades de lógica de enteros y de coma flotante que pueden realizar operaciones computacionales con un intervalo de precisiones, incluyendo las adecuadas para cálculos de aprendizaje automático. Por ejemplo, y en una realización, al menos un subconjunto de las unidades de coma flotante en cada una de las agrupaciones de cálculo 1436A-1436H 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.
Múltiples instancias de la GPGPU 1430 pueden configurarse para funcionar como una agrupación de cálculo. El mecanismo de comunicación usado por la agrupación de cálculo para la sincronización y el intercambio de datos varía a lo largo de las realizaciones. En una realización, las múltiples instancias de la GPGPU 1430 se comunican a través de la interfaz de anfitrión 1432. En una realización, la GPGPU 1430 incluye un concentrador de E/S 1439 que acopla la GPGPU 1430 con un enlace de GPU 1440 que posibilita una conexión directa a otras instancias de la GPGPU. En una realización, el enlace de GPU 1440 está acoplado a un puente de GPU a GPU dedicado que permite la comunicación y sincronización entre múltiples instancias de la GPGPU 1430. En una realización, el enlace de GPU 1440 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPU o procesadores paralelos. En una realización, las múltiples instancias de la GPGPU 1430 están ubicadas en sistemas de procesamiento de datos separados y se comunican a través de un dispositivo de red al que puede accederse a través de la interfaz de anfitrión 1432. En una realización, el enlace de GPU 1440 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 1432.
Aunque la configuración ilustrada de la GPGPU 1430 puede configurarse para entrenar redes neuronales, una realización proporciona una configuración alternativa de la GPGPU 1430 que puede configurarse para el despliegue dentro de una plataforma de inferencia de alto rendimiento o de baja potencia. En una configuración de inferencia, la GPGPU 1430 incluye menos de las agrupaciones de cálculo 1436A-1436H con relación a la configuración de entrenamiento. Adicionalmente, la tecnología de memoria asociada con la memoria 1434A-1434B puede diferir entre configuraciones de inferencia y de entrenamiento, con tecnologías de memoria de mayor ancho de banda dedicadas a las configuraciones de entrenamiento. En una realización, la configuración de inferencia de la GPGPU 1430 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 números enteros de 8 bits, que se usan comúnmente durante operaciones de inferencia para redes neuronales desplegadas.
Vista general de aprendizaje automático
Un algoritmo de aprendizaje automático es un algoritmo que puede aprender basándose en un conjunto de datos. Pueden diseñarse realizaciones de algoritmos de aprendizaje automático 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 realizar texto a habla y/o reconocimiento de habla.
Un tipo ilustrativo de algoritmo de aprendizaje automático es una red neuronal. Hay muchos tipos de redes neuronales; un tipo sencillo de red neuronal es una red de realimentación prospectiva. Una red de realimentación prospectiva puede implementarse como un grafo acíclico en el que los nodos se disponen en capas. Típicamente, una topología de red de realimentación prospectiva incluye una capa de entrada y una capa de salida que están 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 realimentación prospectiva se propagan (es decir, "se realimentan prospectivamente") a los nodos de la capa de salida mediante una función de activación que calcula los estados de los nodos de cada capa sucesiva en la red basándose en coeficientes ("pesos") asociados, respectivamente, con cada uno de los bordes que conectan las capas. Dependiendo del modelo específico representado por el algoritmo que se está ejecutando, la salida del algoritmo de red neuronal puede tomar varias formas.
Antes de que pueda usarse un algoritmo de aprendizaje automático para modelar un problema particular, se entrena el algoritmo usando un conjunto de datos de entrenamiento. Entrenar una red neuronal implica seleccionar una topología de red, usar un conjunto de datos de entrenamiento que representa un problema que es modelado por la red, y ajustar los pesos hasta que el modelo de red rinde 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 "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 los pesos asociados con las conexiones para minimizar ese error a medida que la señal de error se retropropaga a través de las capas de la red. La red se considera "entrenada" cuando se minimizan los errores para cada una de las salidas generadas a partir de las instancias del conjunto de datos de entrenamiento.
La precisión de un algoritmo de aprendizaje automático puede verse afectada significativamente por la calidad del conjunto de datos usado para entrenar el algoritmo. El proceso de entrenamiento puede ser computacionalmente intensivo y puede requerir una cantidad de tiempo significativa en un procesador de propósito general convencional. En consecuencia, se usa hardware de procesamiento paralelo para entrenar muchos tipos de algoritmos de aprendizaje automático. Esto es particularmente útil para optimizar el entrenamiento de redes neuronales, ya que los cálculos realizados al ajustar los coeficientes en las redes neuronales se prestan de manera natural a implementaciones paralelas. Específicamente, muchos algoritmos de aprendizaje automático y aplicaciones de software se han adaptado para hacer uso del hardware de procesamiento paralelo dentro de dispositivos de procesamiento de gráficos de propósito general.
LaFigura 15es un diagrama generalizado de una pila de software de aprendizaje automático 1500. Se puede configurar una aplicación de aprendizaje automático 1502 para entrenar una red neuronal usando un conjunto de datos de entrenamiento o para usar una red neurona! profunda entrenada para implementar inteligencia de máquina. La aplicación de aprendizaje automático 1502 puede incluir una funcionalidad de entrenamiento y de inferencia para una red neuronal y/o software especializado que puede usarse para entrenar una red neuronal antes del despliegue. La aplicación de aprendizaje automático 1502 puede implementar cualquier tipo de inteligencia de máquina, incluidos, 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.
Puede posibilitarse una aceleración de hardware para la aplicación de aprendizaje automático 1502 mediante una estructura de aprendizaje automático 1504. El marco de trabajo de aprendizaje automático 1504 puede proporcionar una biblioteca de primitivas de aprendizaje automático. Las primitivas de aprendizaje automático son operaciones básicas que suelen realizarse con algoritmos de aprendizaje automático. Sin la estructura de aprendizaje automático 1504, se requeriría que los desarrolladores de algoritmos de aprendizaje automático crearan y optimizaran la lógica computacional principal asociada con el algoritmo de aprendizaje automático, y que volvieran a optimizar la lógica computacional a medida que se desarrollan nuevos procesadores paralelos. En su lugar, la aplicación de aprendizaje automático puede configurarse para realizar los cálculos necesarios usando las primitivas proporcionadas por la estructura de aprendizaje automático 1504. Las primitivas ilustrativas incluyen convoluciones de tipo tensor, funciones de activación y agrupamiento, que son operaciones computacionales que se realizan mientras se entrena una red neuronal convolucional (CNN). La estructura de aprendizaje automático 1504 puede proporcionar también primitivas para implementar subprogramas de álgebra lineal básicos realizados por muchos algoritmos de aprendizaje automático, tales como operaciones matriciales y vectoriales.
La estructura de aprendizaje automático 1504 puede procesar datos de entrada recibidos desde la aplicación de aprendizaje automático 1502 y generar la entrada apropiada a una estructura de cálculo 1506. La estructura de cálculo 1506 puede abstraer las instrucciones subyacentes proporcionadas al controlador de GPGPU 1508 para posibilitar que la estructura de aprendizaje automático 1504 se aproveche de la aceleración de hardware mediante el hardware de GPGPU 1510 sin requerir que la estructura de aprendizaje automático 1504 tenga conocimiento íntimo de la arquitectura del hardware de GPGPU 1510. Adicionalmente, el entorno de cálculo 1506 puede habilitar la aceleración de hardware para la estructura de aprendizaje automático 1504 en una diversidad de tipos y generaciones del hardware GpGp U 1510.
Implementaciones de red neuronal de aprendizaje automático
La arquitectura informática proporcionada por realizaciones descritas en el presente documento puede configurarse para realizar los tipos de procesamiento paralelo que son particularmente adecuados para entrenar y desplegar redes neuronales para un aprendizaje automático. Una red neuronal puede generalizarse como una red de funciones que tienen una relación de grafo. Como es conocido en la técnica, hay una diversidad de tipos de implementaciones de red neuronal usadas en el aprendizaje automático. Un tipo ilustrativo de red neuronal es la red de realimentación prospectiva, como se ha descrito previamente.
Un segundo tipo ilustrativo de red neuronal es la red neuronal convolucional (CNN). Una CNN es una red neuronal de realimentación prospectiva especializada para procesar datos que tienen una topología similar a cuadrícula conocida, tal como datos de imagen. En consecuencia, las CNN se usan comúnmente para aplicaciones de reconocimiento de imágenes y de visión de cálculo, pero también pueden usarse para otros tipos de reconocimiento de patrones, tales como procesamiento de habla y de idioma. Los nodos en la capa de entrada de CNN están organizados en un conjunto de "filtros" (detectores de características inspirados por los campos receptivos encontrados en la retina), y la salida de cada conjunto de filtros se propaga a nodos en capas sucesivas de la red. Los cálculos para una CNN incluyen aplicar la operación matemática convolucional 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 redes convolucionales, la primera función para la convolución puede denominarse entrada, mientras que la segunda función puede denominarse núcleo de convolución. La salida puede denominarse mapa de características. Por ejemplo, la entrada a una capa de convolución puede ser una matriz multidimensional de datos que definen los diversos componentes de color de una imagen de entrada. El núcleo de convolución puede ser una matriz multidimensional de parámetros, donde los parámetros están adaptados por el proceso de entrenamiento para la red neuronal.
Las redes neuronales recurrentes (RNN) son una familia de redes neuronales de retroalimentación prospectiva que incluyen conexiones de realimentación entre capas. Las RNN posibilitan el modelado de datos secuenciales compartiendo datos de parámetro a lo largo de diferentes partes de la red neuronal. La arquitectura para una RNN incluye ciclos. Los ciclos representan la influencia de un valor presente de una variable sobre su propio valor en un tiempo futuro, debido a que al menos una parte de los datos de salida desde la RNN se usa como realimentación para procesar una entrada posterior en una secuencia. Esta característica hace que las RNN sean particularmente útiles para el procesamiento de lenguaje debido a la naturaleza variable en la que pueden componerse los datos de lenguaje.
Las figuras descritas a continuación presentan ejemplos de redes de realimentación prospectiva, CNN y RNN, y describen un proceso general para entrenar e implementar respectivamente cada uno de esos tipos de redes. Se entenderá que estas descripciones son ilustrativas y no limitantes en cuanto a cualquier realización específica descrita 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.
Las redes neuronales ilustrativas descritas anteriormente pueden usarse para realizar un aprendizaje profundo. El aprendizaje profundo es un aprendizaje automático que usa redes neuronales profundas. Las redes neuronales profundas usadas en el aprendizaje profundo son redes neuronales artificiales compuestas por múltiples capas ocultas, en contraposición a redes neuronales poco profundas que únicamente incluyen una única capa oculta. Las redes neuronales más profundas generalmente requieren un entrenamiento computacional más intensivo. Sin embargo, las capas ocultas adicionales de la red permiten el reconocimiento de patrones de múltiples etapas que da como resultado un error de salida reducido en relación con las técnicas de aprendizaje automático poco profundas.
Las redes neuronales profundas usadas en el aprendizaje automático habitualmente incluyen una red de extremo frontal para realizar un reconocimiento de características, acoplada a una red de extremo posterior que representa un modelo matemático que puede realizar operaciones (por ejemplo, clasificación de objetos, reconocimiento de habla, etc.) basándose en la representación de características proporcionada al modelo. Un aprendizaje profundo posibilita que se realice un aprendizaje automático sin requerir que se realice una ingeniería de características artesanal para el modelo. En su lugar, las redes neuronales profundas pueden aprender características basándose en una correlación o estructura estadística dentro de los datos de entrada. Las características aprendidas se pueden proporcionar a un modelo matemático que puede mapear características detectadas a una salida. El modelo matemático usado por la red está especializado, en general, para la tarea específica a realizar, y se usarán diferentes modelos para realizar diferentes tareas.
Una vez que se ha estructurado la red neuronal, puede aplicarse un modelo de aprendizaje a la red para entrenar la red para realizar tareas específicas. El modelo de aprendizaje describe cómo ajustar los pesos 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 usando una función de pérdidas y se calcula un valor de error para cada una de las neuronas en la capa de salida. Los valores de error se retropropagan, a continuación, hasta que cada neurona tiene un valor de error asociado que representa aproximadamente su contribución a la salida original. La red puede aprender, a continuación, de esos errores usando un algoritmo, tal como el algoritmo de descenso de gradiente estocástico, para actualizar los pesos de la red neuronal.
LasFiguras 16A-16Bilustran una red neuronal convolucional ilustrativa. La Figura 16A ilustra diversas capas dentro de una CNN. Como se muestra en la Figura 16A, una CNN ilustrativa usada para modelar el procesamiento de imagen puede recibir la entrada 1602 que describe las componentes de rojo, verde y azul (RGB) de una imagen de entrada. La entrada 1602 puede ser procesada por múltiples capas convolucionales (por ejemplo, la primera capa convolucional 1604, la segunda capa convolucional 1606). La salida desde las múltiples capas convolucionales puede ser procesada opcionalmente por un conjunto de capas completamente conectadas 1608. Las neuronas en una capa completamente conectada tienen conexiones completas a todas las activaciones en la capa previa, como se ha descrito previamente para una red de realimentación prospectiva. La salida de las capas completamente conectadas 1608 puede usarse para generar un resultado de salida a partir de la red. Las activaciones dentro de las capas completamente conectadas 1608 pueden calcularse usando una multiplicación matricial en lugar de una convolución. No todas las implementaciones de CNN hacen uso de las capas completamente conectadas 1608. Por ejemplo, en algunas implementaciones, la segunda capa convolucional 1606 puede generar una salida para la CNN.
Las capas convolucionales se conectan de manera dispersa, lo que difiere de la configuración de red neuronal tradicional encontrada en las capas completamente conectadas 1608. Las capas de red neuronal tradicionales están completamente conectadas, de manera que cada unidad de salida interacciona con cada unidad de entrada. Sin embargo, las capas convolucionales están escasamente conectadas porque la salida de la convolución de un campo es la entrada (en lugar del valor de estado respectivo de cada uno de los nodos en el campo) a los nodos de la capa posterior, según se ilustra. Los núcleos asociados con 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 posibilita que la CNN realice un ajuste a escala para procesar imágenes grandes.
La Figura 16B ilustra etapas de cálculo ilustrativas dentro de una capa convolucional de una CNN. La entrada a una capa convolucional 1612 de una CNN puede procesarse en tres etapas de una capa convolucional 1614. Las tres fases pueden incluir una fase de convolución 1616, una fase de detector 1618 y una fase de agrupamiento 1620. La capa de convolución 1614 puede emitir, a continuación, datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de mapeo de características de salida o proporcionar entrada a una capa completamente conectada, por ejemplo, para generar un valor de clasificación para la entrada a la CNN.
En la fase de convolución 1616 se realizan varias convoluciones en paralelo para producir un conjunto de activaciones lineales. La fase de convolución 1616 puede incluir una transformación afín, que es cualquier transformación que pueda especificarse como una transformación lineal más una traslación. Las transformaciones afines incluyen rotaciones, traslaciones, ajuste a escala y combinaciones de estas transformaciones. La etapa de convolución calcula la salida de funciones (por ejemplo, neuronas) que están conectadas a regiones específicas en la entrada, que puede determinarse como la región local asociada con la neurona. Las neuronas calculan un producto escalar entre los pesos de las neuronas y la región en la entrada local a la que están conectadas las neuronas. La salida de la etapa de convolución 1616 define un conjunto de activaciones lineales que se procesan por etapas sucesivas de la capa convolucional 1614.
Las activaciones lineales pueden ser procesadas por una etapa de detector 1618. En la etapa de detector 1618, cada activación lineal se procesa por 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. Pueden usarse varios tipos de funciones de activación no lineal. Un tipo particular es la unidad lineal rectificada (ReLU), que usa una función de activación definida como f(x) = máx (0, x), de manera que se fija un umbral de cero para la activación.
La etapa de agrupamiento 1620 usa una función de agrupamiento que sustituye la salida de la segunda capa convolucional 1606 con una estadística de resumen de las salidas cercanas. La función de agrupamiento puede usarse para introducir la invarianza de traslación en la red neuronal, de manera que traslaciones pequeñas a la entrada no cambian las salidas agrupadas. La invarianza a la traslació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. Pueden usarse diversos tipos de funciones de agrupamiento durante la etapa de agrupamiento 1620, que incluye agrupamiento máximo, agrupamiento promedio y agrupamiento de norma l2. Adicionalmente, algunas implementaciones de CNN no incluyen una fase de agrupamiento. En su lugar, tales implementaciones sustituyen una fase de convolución adicional que tiene un paso aumentado en relación con etapas de convolución previas.
La salida desde la capa convolucional 1614 puede procesarse, a continuación, por la siguiente capa 1622. La siguiente capa 1622 puede ser una capa convolucional adicional o una de las capas completamente conectadas 1608. Por ejemplo, la primera capa convolucional 1604 de la Figura 16A puede emitirse a la segunda capa convolucional 1606, mientras que la segunda capa convolucional puede emitirse a una primera capa de las capas completamente conectadas 1608.
LaFigura 17ilustra una red neuronal recurrente ilustrativa. En una red neuronal recurrente (RNN), el estado previo de la red influye sobre la salida del estado actual de la red. Las RNN pueden crearse en una diversidad de maneras usando una diversidad 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 RNN puede usarse para realizar un modelado de idioma estadístico para predecir una palabra venidera, dada una secuencia previa de palabras. La RNN 1700 ilustrada puede describirse como que tiene una capa de entrada 1702 que recibe un vector de entrada, las capas ocultas 1704 para implementar una función recurrente, un mecanismo de realimentación 1705 para posibilitar una 'memoria' de estados previos y una capa de salida 1706 para emitir un resultado. La RNN 1700 funciona basándose en pasos de tiempo. El estado de la RNN en una etapa de tiempo dada se ve influenciado basándose en la etapa de tiempo previa mediante el mecanismo de realimentación 1705. Para una etapa de tiempo dada, el estado de las capas ocultas 1704 se define por el estado previo y la entrada en la etapa de tiempo actual. Una entrada inicial (x1) en una primera etapa de tiempo puede procesarse por la capa oculta 1704. Puede procesarse una segunda entrada (x2) por la capa oculta 1704 usando información de estado que se determina durante el procesamiento de la entrada inicial (x1). Un estado dado puede calcularse comost = f(UxtWst-1), dondeUyWson matrices de parámetros. La funciónfes generalmente una no linealidad, tal como la función tangente hiperbólica (Tanh) o una variante de la función rectificadora f(x) = máx(0, x). Sin embargo, la función matemática específica usada en las capas ocultas 1704 puede variar dependiendo de los detalles de la implementación específica de la RNN 1700.
Además de las redes CNN y RNN básicas descritas, pueden habilitarse variaciones en esas redes. Una variante de RNN ilustrativa es la RNN de memoria a corto plazo larga (LSTM). Las RNN de LSTM pueden aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias de idioma más largas. Una variante en la CNN es una red de creencia profunda convolucional, que tiene una estructura similar a una CNN y se entrena de una manera similar a una red de creencia profunda. Una red de creencia profunda (DBN) es una red neuronal generativa que está compuesta de múltiples capas de variables estocásticas (aleatorias). Las RCP pueden entrenarse capa a capa usando aprendizaje no supervisado voraz. Los pesos aprendidos de la RCP se pueden utilizar a continuación para proporcionar redes neuronales entrenadas previamente determinando un conjunto inicial óptimo de pesos para la red neuronal.
LaFigura 18ilustra el entrenamiento y despliegue de una red neuronal profunda. Una vez que se ha estructurado una red dada para una tarea, se entrena la red neuronal usando un conjunto de datos de entrenamiento 1802. Se han desarrollado diversas estructuras de entrenamiento para habilitar la aceleración de hardware del proceso de entrenamiento. Por ejemplo, la estructura de aprendizaje automático 1504 de la Figura 15 puede estar configurada como una estructura de entrenamiento 1804. La estructura de entrenamiento 1804 puede engancharse a una red neuronal no entrenada 1806 y posibilitar que la red neuronal no entrenada se entrene usando los recursos de procesamiento paralelo descritos en el presente documento para generar una red neuronal entrenada 1808. Para iniciar el proceso de entrenamiento, pueden elegirse los pesos iniciales aleatoriamente o mediante entrenamiento previo usando una red de creencia profunda. El ciclo de entrenamiento puede realizarse, a continuación, de una manera supervisada o no supervisada.
El aprendizaje supervisado es un método de aprendizaje en el que se realiza entrenamiento como una operación mediada, tal como cuando el conjunto de datos de entrenamiento 1802 incluye la entrada emparejada con la salida deseada para la entrada, o cuando el conjunto de datos de entrenamiento incluye la entrada que tiene la salida conocida y se clasifica manualmente la salida de la red neuronal. La red procesa las entradas y compara las salidas resultantes contra un conjunto de salidas esperadas o deseadas. A continuación, los errores se propagan a través del sistema. La estructura de entrenamiento 1804 puede ajustar los pesos que controlan la red neuronal no entrenada 1806. La estructura de entrenamiento 1804 puede proporcionar herramientas para monitorizar cómo de bien la red neuronal no entrenada 1806 está convergiendo hacia un modelo adecuado para generar respuestas correctas basadas en datos de entrada conocidos. El proceso de entrenamiento tiene lugar repetidamente a medida que se ajustan los pesos de la red para perfeccionar la salida generada por la red neuronal. El proceso de entrenamiento puede continuar hasta que la red neuronal alcanza una precisión estadísticamente deseada asociada con una red neuronal entrenada 1808. La red neuronal entrenada 1808 puede desplegarse a continuación para implementar cualquier número de operaciones de aprendizaje automático.
El aprendizaje no supervisado es un procedimiento de aprendizaje en el que la red intenta entrenarse a sí misma usando datos no etiquetados. Por lo tanto, para un aprendizaje no supervisado, el conjunto de datos de entrenamiento 1802 incluirá datos de entrada sin ningún dato de salida asociado. La red neuronal no entrenada 1806 puede aprender agrupamientos dentro de la entrada no etiquetada y puede determinar cómo las entradas individuales están relacionadas con el conjunto de datos global. El entrenamiento no supervisado puede usarse para generar un mapa de autoorganización, que es un tipo de red neuronal entrenada 1807 que puede realizar operaciones útiles en cuanto a la reducción de la dimensionalidad de los datos. El entrenamiento no supervisado puede usarse también para realizar una detección de anomalías, lo que permite la identificación de puntos de datos en un conjunto de datos de entrada que se desvían de los patrones normales de los datos.
También pueden emplearse variaciones al entrenamiento supervisado y no supervisado. El aprendizaje semisupervisado es una técnica en la que el conjunto de datos de entrenamiento 1802 incluye una mezcla de datos etiquetados y no etiquetados de la misma distribución. El aprendizaje incremental es una variante del aprendizaje supervisado en el que se usan continuamente datos de entrada para entrenar adicionalmente el modelo. El aprendizaje incremental habilita la adaptación de la red neuronal entrenada 1808 a los datos nuevos 1812 sin olvidar el conocimiento inculcado dentro de la red durante el entrenamiento inicial.
Ya sea supervisado o no supervisado, el proceso de entrenamiento para redes neuronales particularmente profundas puede ser demasiado intensivo desde el punto de vista computacional para un único nodo cálculo. En lugar de usar un único nodo de cálculo, puede usarse una red distribuida de nodos de cálculo para acelerar el proceso de entrenamiento.
LaFigura 19es un diagrama de bloques que ilustra un aprendizaje distribuido. El aprendizaje distribuido es un modelo de entrenamiento que usa múltiples nodos informáticos distribuidos para realizar un entrenamiento supervisado o no supervisado de una red neuronal. Cada uno de los nodos computacionales distribuidos puede incluir uno o más procesadores de anfitrión y uno o más de los nodos de procesamiento de propósito general. Como se ilustra, un aprendizaje distribuido puede realizarse con el paralelismo de modelo 1902, el paralelismo de datos 1904 o una combinación del paralelismo de modelo y de datos 1904.
En el paralelismo de modelo 1902, diferentes nodos computacionales en un sistema distribuido pueden realizar cálculos de entrenamiento para diferentes partes de una única red. Por ejemplo, cada capa de una red neuronal puede entrenarse por un nodo de procesamiento diferente del sistema distribuido. Los beneficios del paralelismo de modelo incluyen la capacidad de ajustar a escala a modelos particularmente grandes. La división de los cálculos asociados con diferentes capas de la red neuronal posibilita el entrenamiento de redes neuronales muy grandes en las que los pesos de todas las capas no cabrían en la memoria de un único nodo computacional. En algunos casos, el paralelismo de modelo puede ser particularmente útil en la realización de un entrenamiento no supervisado de redes neuronales grandes.
En el paralelismo de datos 1904, los diferentes nodos de la red distribuida tienen una instancia completa del modelo y cada nodo recibe una porción diferente de los datos. Los resultados de los diferentes nodos, a continuación, se combinan. Aunque son posibles diferentes enfoques al paralelismo de datos, los enfoques de entrenamiento paralelo de datos requieren, todos ellos, una técnica de combinación de resultados y de sincronización de los parámetros de modelo entre cada nodo. Los enfoques ilustrativos para la combinación de datos incluyen promediado de parámetros y paralelismo de datos basado en actualizaciones. El promediado de parámetros entrena cada nodo en un subconjunto de los datos de entrenamiento y establece los parámetros globales (por ejemplo, pesos, desviaciones) al promedio de los parámetros desde cada nodo. El promediado de parámetros usa un servidor de parámetros central que mantiene los datos de parámetros. El paralelismo de datos basado en actualizaciones es similar al promediado de parámetros excepto en que, en lugar de transferir parámetros desde los nodos al servidor de parámetros, se transfieren las actualizaciones al modelo. Adicionalmente, el paralelismo de datos basado en actualizaciones puede realizarse de una manera descentralizada, donde las actualizaciones se comprimen y se transfieren entre nodos.
El paralelismo de modelo y de datos combinado 1906 puede 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 separadas dentro de cada nodo que se usan para entrenar diferentes porciones del modelo.
El entrenamiento distribuido ha aumentado la sobrecarga en relación con el entrenamiento en una única máquina. Sin embargo, cada uno de los procesadores paralelos y las GPGPU descritos en el presente documento pueden implementar diversas técnicas para reducir la sobrecarga del entrenamiento distribuido, incluyendo técnicas para posibilitar una transferencia de datos de GPU a GPU de alto ancho de banda y una sincronización de datos remota acelerada.
Aplicaciones de aprendizaje automático ilustrativas
El aprendizaje automático puede aplicarse a resolver una diversidad de problemas tecnológicos, incluyendo, pero sin limitación, visión informática, conducción y navegación autónoma, reconocimiento de habla y procesamiento de idioma. La visión informática ha sido tradicionalmente una de las áreas de investigación más activas para aplicaciones de aprendizaje automático. Las aplicaciones de visión informática varían de reproducir capacidades visuales humanas, tales como reconocer caras, a crear nuevas categorías de capacidades visuales. Por ejemplo, las aplicaciones de visión informática pueden configurarse para reconocer ondas de sonido de las vibraciones inducidas en los objetos visibles en un vídeo. El aprendizaje automático acelerado por procesador paralelo habilita el entrenamiento de aplicaciones de visión informática usando un conjunto de datos de entrenamiento significativamente mayor que el previamente factible y habilita el desarrollo de sistemas de inferenciación usando procesadores paralelos de baja potencia.
El aprendizaje automático acelerado por procesador paralelo tiene aplicaciones de conducción autónoma que incluyen reconocimiento de señales de carretera y de carril, evitación de obstáculos, navegación y control de conducción. Las técnicas de aprendizaje automático aceleradas pueden usarse para entrenar modelos de conducción basándose en conjuntos de datos que definen las respuestas apropiadas a entrada de entrenamiento específica. Los procesadores paralelos descritos en el presente documento pueden habilitar el entrenamiento rápido de las redes neuronales cada vez más complejas usadas para soluciones de conducción autónoma y posibilita el despliegue de procesadores de inferenciación de baja potencia en una plataforma móvil adecuada para su integración en vehículos autónomos.
Las redes neuronales profundas aceleradas por procesador paralelo han posibilitado enfoques de aprendizaje automático para un reconocimiento de habla automático (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 usando redes neuronales profundas ha posibilitado la sustitución de los modelos ocultos de Markov (HMM) y los modelos de mezcla gaussiana (GMM) previamente usados para el ASR.
El aprendizaje automático acelerado por procesador paralelo puede usarse también para acelerar el procesamiento de lenguaje natural. Los procedimientos de aprendizaje automático pueden hacer uso de algoritmos de inferencia estadística para producir modelos que son robustos ante una entrada errónea o no familiar. Las aplicaciones de procesador de lenguaje natural ilustrativas incluyen traducción de máquina automática entre idiomas humanos.
Las plataformas de procesamiento paralelo usadas para el aprendizaje automático pueden dividirse en plataformas de entrenamiento y plataformas de despliegue. Las plataformas de entrenamiento son, en general, altamente paralelas e incluyen optimizaciones para acelerar el entrenamiento de múltiples GPU y un único nodo y el entrenamiento de múltiples nodos y múltiples GPU, mientras que las plataformas de aprendizaje automático implementadas (por ejemplo, inferencia) incluyen, en general, procesadores paralelos de potencia inferior adecuados para su uso en productos tales como cámaras, robots autónomos y vehículos autónomos.
Capas de abstracción para aprendizaje automático distribuido escalable
Actualmente, los científicos de datos que desarrollan aplicaciones que hacen uso de aprendizaje profundo distribuido se requiere que implementen explícitamente el sistema de comunicación entre los nodos de cálculo. Implementar el sistema de comunicaciones subyacente para aprendizaje profundo distribuido requiere algún conocimiento de técnicas de comunicación de nodo distribuido o en red, que incluye las bibliotecas requeridas para implementar tales técnicas. Por ejemplo, para implementar modelos de aprendizaje profundo distribuidos tales como paralelismos de datos, paralelismo de modelo, o paralelismo híbrido (datos mixtos y paralelismo de modelo), puede requerirse que el desarrollador de aplicaciones construya explícitamente la infraestructura de comunicación usando bibliotecas de comunicación de bajo nivel, tal como la biblioteca de interfaz de paso de mensajes (MPI). El desarrollador de aplicaciones se requerirá a continuación que determine las unidades de datos específicas para la transferencia y los nodos específicos que transmitirán y recibirán tal información. A medida que los desarrolladores de aplicaciones de aprendizaje profundo pueden no ser expertos específicos de dominio en la construcción de infraestructura de cálculo distribuida, muchas mejores prácticas y optimizaciones pueden no incluirse en la implementación de comunicación desarrollada para una aplicación de aprendizaje profundo dada.
El aprendizaje automático distribuido puede implementarse usando una diversidad de patrones de paralelismo, tales como paralelismo de datos, paralelismo de modelo, o un paralelismo híbrido de datos y modelo, como se ilustra en la Figura 19. Como se ha descrito con respecto a la Figura 19, el paralelismo de datos usa el mismo modelo para cada nodo de cálculo, procesando cada nodo diferentes porciones de los datos. El paralelismo de modelo usa los mismos datos para cada nodo de cálculo, con la división de modelo entre nodos de cálculo.
Para permitir la comunicación, se usan múltiples tipos de patrones de comunicación de bajo nivel para transferir datos entre nodos. Los patrones de comunicación de bajo nivel usados se ilustran en laTabla 1a continuación.
Tabla 1 -Operación de comunicación de bajo nivel
Las Figuras 20A-20Eilustran patrones de comunicación usados durante operaciones de cálculo de aprendizaje automático distribuido realizadas a través de múltiples nodos de cálculo, de acuerdo con las realizaciones descritas en el presente documento. La Figura 20A ilustra la transferencia de datos para cálculo de aprendizaje automático usando paralelismo de datos. La Figura 20B ilustra la transferencia de datos para cálculo de aprendizaje automático distribuido usando paralelismo de modelo. La Figura 20C ilustra la subdivisión de cálculo de aprendizaje automático a través de múltiples nodos usando paralelismo híbrido. La Figura 20D ilustra cálculo de aprendizaje automático distribuido usando paralelismos híbridos a través de múltiples nodos y a través de múltiples capas. La Figura 20E ilustra un conjunto de operaciones de patrones de mensajería de ejemplo que pueden usarse para aprendizaje automático distribuido. En cada una de las Figuras 20A-20E, los datos de entrada 2002 se procesan por un modelo de aprendizaje por máquina que tiene un conjunto de pesos 2004 para generar un conjunto de activaciones 2008 o activaciones parciales 2006.
Como se muestra en la Figura 20A, el paralelismo de datos puede implementarse en el que los datos de entrada 2002 se dividen a lo largo de una dimensión de mini lotes y el mismo modelo se replica a través de los nodos. El mini lote se divide a través de varios nodos de cálculo, siendo cada nodo responsable para calcular gradientes con respecto a todos los parámetros de modelo usando un subconjunto de las muestras en el mini lote. La propagación hacia delante se realiza independientemente en cada nodo. En una realización únicamente se realiza una comunicación durante el paso hacia atrás para calcular un promedio para los gradientes con respecto a parámetros que pueden aprenderse. Una operación all reduce (reducir todo) 2005 se usa para actualizar los pesos de cada capa para la siguiente pasada hacia adelante. En una realización, se puede permitir una actualización de peso distribuido en la que se utiliza un reduce_scatter para calcular un promedio de gradientes antes de que se realice un descenso de gradiente estocástico y se usa una operación allgather (recoger todo) después del descenso de gradiente estocástico para sincronizar pesos a través de los nodos.
Como se muestra en la Figura 20B, el paralelismo de modelo puede implementarse en el que el modelo o conjunto de pesos se divide a través de múltiples nodos. En general, el paralelismo de modelo realiza diferentes porciones de un cálculo del modelo en diferentes nodos para el mismo lote de ejemplos. Para paralelismo de modelo, los datos de entrada también se dividen (por ejemplo, a lo largo de la dimensión del canal), como se muestra en la Figura 20B. Usando el enfoque ilustrado, se realiza una operación reducir para acumular las activaciones para obtener la salida real y a continuación dispersar las activaciones para su uso en activaciones de cálculo para la siguiente capa. Se puede realizar una operación reduce_scatter (reducir dispersión) 2007 para transferir los datos en una única operación de comunicación. En la pasada hacia atrás se realiza una operación allgather para combinar las franjas de gradientes calculados en cada nodo.
Como se muestra en la Figura 20C, se puede realizar paralelismo híbrido en el que se realiza una subdivisión a través de activaciones y pesos para minimizar matrices sesgadas. Para una capa de una red neuronal, los datos de entrada 2002, los datos de peso 2004, y/o los datos de activación 2006 se subdividen y distribuyen a través de múltiples nodos de cálculo (por ejemplo, nodo 0-nodo 3). El nodo 0 recibe un primer bloque de datos de entrada 2002A y datos de peso 2004A. Se realizan operaciones de cálculo en el nodo 0 para generar una primera activación parcial 2006A. Análogamente, el nodo 1 recibe un segundo bloque de datos de entrada 2002B y datos de peso 2004B. Se realizan operaciones de cálculo en el nodo 1 para generar una segunda activación parcial 2006A. El nodo 2 puede realizar operaciones de cálculo en terceros datos de entrada 2002C y datos de peso 2004C para generar una tercera activación parcial 2006C. El nodo 3 puede realizar operaciones de cálculo en cuartos datos de entrada 2002D y datos de peso 2004D para generar una cuarta activación parcial 2006D.
La Figura 20D ilustra la transferencia de datos de activación parcial 2006A-2006B para una capa dada de una red neuronal (capa N-1) a una capa sucesiva de la red neuronal (capa N). A través de múltiples nodos (nodo 0, nodo 1), se genera un conjunto de activaciones parciales 2006A-2006B basándose en la aplicación de una operación matemática (por ejemplo, convolución) a los datos de entrada 2002A-2002B y datos de peso 2004A-2004B. Por ejemplo, en una realización se usa una operación reduce_scatter 2010 que realiza una operación de reducción en las activaciones parciales 2006A-2006B de la capa N-1 a partir de los múltiples nodos y dispersa el resultado a los múltiples nodos como activaciones para su uso en la capa N de la red neuronal.
La Figura 20E ilustra las operaciones de comunicación ilustrativas usadas para transferir datos para entrenamiento distribuido de una red neuronal para operaciones de aprendizaje automático. Las bibliotecas de mensajería de bajo nivel se usan para permitir transferencia de datos para datos de peso y de activación durante el entrenamiento distribuido de una red neuronal. Una red neuronal de ejemplo que tiene N capas 2021A, 2021B, 2021N (por ejemplo, capa 1, capa 2, a la capa N) puede entrenarse de una manera distribuida realizar operaciones de cálculo hacia delante sucesivas en las capas sucesivas para permitir la propagación hacia delante 2026 de datos de activación a través de la red neuronal. Durante la propagación hacia adelante 2026, se usa una operación de comunicación alltoall 2009 para transferir datos de activación desde una primera capa 2021A a una capa sucesiva 2021B, por ejemplo, donde la primera capa y la capa sucesiva son capas ocultas o capas no de salida. La operación alltoall 2009 transfiere distintos datos desde los nodos de cálculo que generan los datos de activación o activación parcial a todos los receptores disponibles, que usan los datos de activación como datos de entrada para operaciones en capas sucesivas. Cuando se transfieren capas finales de datos (por ejemplo, capa N), se realiza la operación reducir dispersión 2010, que se describe con respecto a la Figura 20B. Durante la propagación hacia atrás 2028, se realiza descenso de gradiente estocástico distribuido para generar datos de peso actualizados. Se realiza una operación allreduce 2012 inicial para la capa N y se realizan un conjunto de operaciones allreduce 2011A, 2011B, 2011N para actualizar los pesos de cada capa para la siguiente pasada hacia adelante. Las operaciones allreduce son operaciones de reducción para las que los resultados se difunden o transfieren a las memorias intermedias de recepción de todos los procesos en el grupo de comunicación. La propagación hacia atrás 2028 también puede incluir las operaciones de comunicación allgather 2013 y alltoall 2014. Para la operación allgather 2013 se recogen datos de todas las tareas y los datos combinados se distribuyen a todas las tareas. Para la operación alltoall 2014 se transfieren datos desde todos los procesos a todos los procesos.
Las transferencias de datos requeridas para realizar operaciones de cálculo distribuidas para aprendizaje automático se pueden implementar usando biblioteca de mensajería de bajo nivel, tal como MPI, gRPC, o zeroMQ. Sin embargo, implementar las operaciones de comunicación de ejemplo puede ser difícil sin experiencia de nivel de dominio de bibliotecas de comunicaciones de multiprocesador. Adicionalmente, el escalamiento de estas operaciones a un número muy grande de nodos puede ser difícil. Sin conocimiento específico del dominio de las técnicas informáticas distribuidas, implementar un sistema de comunicación escalable para aprendizaje automático que pueda manejar la comunicación entre cientos o miles de nodos puede ampliar significativamente el tiempo de desarrollo para aplicaciones de aprendizaje automático.
Las realizaciones descritas en el presente documento proporcionan diversas técnicas para abstraer el detalle de sistema de comunicación distribuido para una aplicación de aprendizaje profundo. En una realización, se proporciona una biblioteca de escalamiento de aprendizaje automático (MLSL) que permite a los desarrolladores de aplicaciones de aprendizaje profundo desarrollar aplicaciones de aprendizaje profundo distribuidas sin requerir el conocimiento de los detalles de comunicación específicos requeridos para permitir el aprendizaje profundo de múltiples nodos. Un desarrollador de aplicaciones para una aplicación de aprendizaje profundo puede especificar, usando terminología específica de dominio de aprendizaje profundo, el tipo de sistema de cálculo distribuido que se usa por una aplicación y las técnicas de biblioteca proporcionadas por realizaciones descritas en el presente documento pueden implementar los métodos de comunicación subyacentes requeridos para permitir el sistema de cálculo distribuido solicitado.
LasFiguras 21A-21Bilustran detalles arquitectónicos de la biblioteca de escalamiento de aprendizaje automático proporcionada por las realizaciones descritas en el presente documento. La Figura 21A ilustra una pila de arquitectura de aprendizaje automático 2100 de ejemplo. La Figura 21B ilustra detalles de la arquitectura de MLSL 2111.
La Figura 21A ilustra una pila de arquitectura de aprendizaje automático 2100 de ejemplo, que puede ser una variante de la pila de software de aprendizaje automático 1500 de la Figura 15. La pila de arquitectura de aprendizaje automático 2100 incluye múltiples capas de software y hardware que varían de datos de entrada 2102 proporcionados por una matriz de sensores a elementos de hardware 2114 que realizan diversas operaciones de cálculo, almacenamiento o comunicación. Cada capa de la pila de arquitectura de aprendizaje automático 2100 ilustrativa puede ser una capa de abstracción opaca que oculta los detalles de implementación de las capas superiores, mientras usa la funcionalidad proporcionada por capas inferiores para implementar las funciones requeridas por capas superiores.
Los datos de entrada 2102 se proporcionan a una capa de aplicaciones 2104. En una realización, los datos de entrada 2102 son entrada multimodal que incluye, pero sin limitación, datos de vídeo y/o de imagen, desde múltiples sensores y datos de señal externos. Las aplicaciones 2104 incluyen aplicaciones de toma de decisiones y fusión multimodal que pueden procesar la entrada para permitir tareas de aprendizaje automático tales como comprensión de imágenes, resumen de vídeo, procesamiento del habla y lenguaje natural, planificación de rutas, navegación o cualquier otra implementación de aprendizaje automático descrita en el presente documento. Las aplicaciones 2104 se comunican con una o más estructuras de aprendizaje automático 2106, tal como, pero sin limitación, Caffe, Theano, Torch, TensorFlow, o cualquier otra estructura de aprendizaje automático basada en lenguaje de guiones, para implementar operaciones específicas aprendizaje automático. Las estructuras de aprendizaje automático 2106 pueden permitir que se realicen operaciones de aprendizaje automático usando uno o cualquier número de topologías de red neuronal 2108, incluyendo, pero sin limitación, una CNN, RNN, LSTM, redes neuronales profundas genéricas y redes de aprendizaje de refuerzo. Las estructuras de aprendizaje automático 2106 implementan las topologías de red neuronal 2108 mediante uno o más bloques de construcciones 2110. Los bloques de construcción 2110 ilustrativos incluyen el bloque de multiplicación de matriz general flotante de precisión sencilla (SGEMM), bloques de construcción de convolución, bloques de transformada rápida de Fourier/Winograd, bloques de cálculo de ruta más corta de única fuente (SSSP), bloques de multiplicación de matriz-matriz dispersa (SpGEMM), y la biblioteca de ajuste a escala de aprendizaje automático (MLSL) 2111 proporcionados por las realizaciones descritas en el presente documento. Los bloques de construcción 2110 puede implementar cada uno algoritmos 2112 para permitir las operaciones de cálculo solicitadas por las estructuras de aprendizaje automático 2106 para implementar las topologías de red neuronal 2108. Los algoritmos 2112 incluyen optimizaciones para mejorar la eficiencia estadística y arquitectónica, habilitan el despliegue en la nube, y habilitan el ajuste a escala a un gran número de nodos. En una realización, el MLSL 2111 incluye algoritmos 2112 para habilitar el ajuste a escala de operaciones de aprendizaje automático a un gran número de nodos. En una realización, los bloques de construcción 2110 pueden implementarse mediante bibliotecas de software que pueden acelerarse por uno o más elementos del hardware 2114. En una realización, al menos una porción de los bloques de construcción 2110 puede implementarse dentro de hardware 2114. Por ejemplo, los aceleradores basados en FPGA o ASIC pueden incluir lógica personalizada para habilitar porciones del MLSL 2111 o una o más bibliotecas de GEMM.
Diversos componentes del hardware 2114 pueden usarse para implementar la funcionalidad de capas superiores de la pila de arquitectura de aprendizaje automático 2100. Los componentes del hardware 2114 incluyen, pero sin limitación, una CPU u otro procesador de fin general encargado con la realización de cálculos computacionales y/o relacionados con sistema operativo. El hardware 2114 también incluye un sistema de procesamiento paralelo basado en GPU de muchos núcleos integrados (MIC) o de propósito general. En algunas realizaciones, el hardware 2114 incluye aceleradores de aprendizaje profundo basados en FPGA o ASIC. Un componente de interconexión de tejido del hardware 2114 se usa para habilitar comunicación de alta velocidad entre los diversos componentes y memoria volátil o no volátil de alto ancho de banda. Las tecnologías de memoria pueden incluir cualquiera de las tecnologías de memoria de gráficos descritas en el presente documento, incluyendo memoria HBM y GDDR. Las tecnologías de memoria no volátil pueden incluir memoria flash, que incluye 3D NAND flash, u otras tecnologías de memoria tales como memoria 3D Xpoint.
La Figura 21B ilustra detalles de la arquitectura de MLSL 2111, de acuerdo con realizaciones. La arquitectura de MLSL 2111 incluye una capa de abstracción que tiene abstracciones específicas de aprendizaje automático 2113, así como abstracciones no específicas de aprendizaje automático 2115. La interfaz de abstracciones con un módulo de comunicación 2117 que controla una biblioteca de mensajería subyacente 2119. La biblioteca de mensajería 2119 usa rutinas de comunicación de bajo nivel optimizadas para transmitir datos a través de un tejido de comunicaciones de alto rendimiento 2121.
La arquitectura de MLSL 2111 habilita que los desarrolladores de software aprendizaje automático desarrollen aplicaciones de aprendizaje automático escalables usando abstracciones específicas de aprendizaje automático 2113. En una realización, las abstracciones específicas de aprendizaje automático 2113 habilitan que un desarrollador de aplicaciones use conocimiento específico del domino de aprendizaje automático para controlar rendimiento escalable para operaciones de cálculo para capas de red neuronal. Las abstracciones específicas de aprendizaje automático 2113 permiten que se desarrollen aplicaciones de una manera transparente para la arquitectura subyacente, lo que permite que las aplicaciones de aprendizaje automático se adapten automáticamente a cualquier número de elementos de hardware 2114, incluyendo múltiples tipos de elementos de cálculo y de tejido. Además de las abstracciones específicas de aprendizaje automático 2113, un conjunto de abstracciones no específicas de aprendizaje automático 2115 también puede proporcionarse por la arquitectura de MLSL 2111. Las abstracciones no específicas de aprendizaje automático 2115 habilitan que un desarrollador de una aplicación de aprendizaje automático defina, en un nivel de abstracción superior, uno o más detalles de aprendizaje no automático de la aplicación, tal como uno o más detalles específicos de la implementación o detalles de sistema operativo que no están relacionados con el aprendizaje automático.
En una realización, las abstracciones específicas de aprendizaje automático 2113 habilitan que la capa de red neuronal apropiada soporte múltiples tipos de paralelismo (por ejemplo, de datos, de máquina, híbrido). Las abstracciones específicas de aprendizaje automático 2113 también habilitan las abstracciones de comunicación de capa a capa para permitir que los desarrolladores implementen fácilmente patrones de comunicación para diferentes tipos de capa y paralelismo. Los diferentes tipos de capas y el paralelismo se definen usando la terminología específica de aprendizaje automático usando las abstracciones específicas de aprendizaje automático 2113 y la comunicación para esos tipos de capas se habilita a través del módulo de comunicación 2117, la biblioteca de mensajería 2119 y la estructura de comunicaciones de alto rendimiento 2121. Las abstracciones específicas de aprendizaje automático 2113 también permiten la planificación de mensajes inteligentes a través de las capas de red neuronales definidas, mientras se abstraen las distribuciones de datos y transformaciones requeridas para implementar técnicas de aprendizaje automático al nivel de aplicación.
En una realización, el módulo de comunicación 2117 incluye lógica para controlar la biblioteca de mensajería subyacente 2119. El módulo de comunicación 2117 incluye diversas optimizaciones para habilitar que la red sea controlada de manera eficaz mientas se transmiten datos de aprendizaje automático entre los diversos nodos de cálculo usados para realizar aprendizaje automático distribuido. El módulo de comunicación 2117 incluye lógica para optimizar ancho de banda de red y para permitir las comunicaciones de baja latencia. Las abstracciones específicas de aprendizaje automático 2113 y/o las abstracciones no específicas de aprendizaje automático 2115 pueden especificar o proporcionar interfaces para habilitar que el desarrollador de aplicaciones especifique los recursos de procesador encargados de la gestión de comunicación distribuida. En una realización, pueden especificarse procesadores específicos. En una realización, el número de procesadores asociados con la comunicación están especificados. En una realización, puede especificarse una mezcla entre recursos de cálculo y de comunicación. En una realización, el módulo de comunicación 2117 incluye lógica para asignar de manera adaptativa núcleos de procesador para su uso en controlar y realizar operaciones para el módulo de comunicación 2117 y/o la biblioteca de mensajería 2119. En una realización el módulo de comunicación 2117 puede asignar de manera adaptativa recursos de procesamiento para comunicación sin dirección explícita a partir de las abstracciones específicas de aprendizaje automático 2113 o las abstracciones no específicas de aprendizaje automático 2115. En una realización, el módulo de comunicación 2117 puede ajustar o asignar de forma adaptativa recursos de procesamiento para intentar saturar completamente los recursos de red disponibles para intentar minimizar el impacto de latencia de la comunicación dentro del sistema distribuido. Por ejemplo, si el módulo de comunicación 2117 determina que el tejido de comunicación de alto rendimiento 2121 no está completamente saturado con datos, se pueden asignar procesadores o núcleos de procesador adicionales para realizar tareas de red si se desea aumentar el caudal general del sistema de cálculo distribuido. En una realización la cantidad de recursos de cálculo asignados para controlar la biblioteca de mensajería 2119 puede variar basándose en el ancho de banda del tejido de comunicaciones de alto rendimiento. Para tejido de ancho de banda superior, pueden requerirse mayores recursos computacionales para saturar la red. La estructura de comunicaciones de alto rendimiento 2121 se puede implementar a través de cualquier cantidad de tecnologías de conexión de red de alta velocidad, incluyendo, pero sin limitación, Ethernet, InfiniBand, Omni-Path Interconnect o a través de una malla de interconexiones punto a punto, tal como NVLink.
En una realización, el módulo de comunicación 2117 incluye lógica para garantizar el progreso hacia delante de operaciones de cálculo distribuidas habilitando la comunicación asíncrona entre nodos de procesamiento. La comunicación asíncrona habilitada por el módulo de comunicación 2117 permite cálculo superpuesto y operaciones de comunicación que se intercalan de manera eficaz para optimizar tanto la eficiencia como el caudal de cálculo y las comunicaciones. En una realización, el módulo de comunicación 2117 también soporta canales de comunicación priorizados para habilitar una resolución priorizada de solicitudes de comunicación de contienda.
La biblioteca de mensajería 2119 usa rutinas de comunicación de bajo nivel optimizadas para transmitir datos a través de un tejido de comunicaciones de alto rendimiento 2121. La arquitectura MLSL 2111 es agnóstica con respecto a la biblioteca de mensajería subyacente 2119 y al tejido de comunicaciones de alto rendimiento 2121. En una realización, la biblioteca de mensajería es una biblioteca basada en MPI. En tal realización, los patrones de comunicación usados por una aplicación de aprendizaje automático se implementan usando funciones de MPI (por ejemplo, MPI_Alltoall, MPI_Allreduce, MPI_Allgather, etc.). En algunas realizaciones, las bibliotecas gRPC o zeroMQ y funciones asociadas se usan para mensajería. En una realización, también pueden usarse rutinas de la biblioteca de comunicaciones colectiva de Nvidia (NCCL). NCCL proporciona rutinas de comunicación tales como recuperar todo, reducir y difundir para acelerar el entrenamiento de aprendizaje automático de múltiples GPU a través de múltiples GPGPU y puede habilitar la comunicación multi-GPU y multi-GPU/multi-nodo.
Algoritmo con conocimiento de topología para agrupación de nodos flexible
Las redes neuronales DL pueden tener un gran número de capas convolucionales. Entrenar tales redes con un periodo de tiempo razonable puede requerir el uso de entrenamiento de múltiples nodos. El entrenamiento de múltiples nodos puede experimentar cuellos de botella en forma de latencia de comunicación. El gran número de nodos de procesadores paralelos que operan simultáneamente puede dar como resultado el rendimiento de un gran número de operaciones de comunicación simultáneas. El gran volumen de comunicación puede provocar congestión en ciertas áreas de la red.
Las técnicas existentes para entrenamiento de múltiples nodos incluyen el uso de entrenamiento puramente distribuido en el que cada nodo puede interactuar directamente con cada otro nodo en la red. Como alternativa, puede usarse uno o más servidores de parámetros para distribuir parámetros actualizados a cada nodo. En enfoque basado en servidor de parámetros permite flexibilidad de topología, ya que los nodos están comunicándose directamente con el servidor de parámetros en lugar de entre ellos. También se introduce la resiliencia mediante el uso del servidor de parámetros. Si el servidor de parámetros fallara, el sistema puede instanciar fácilmente un nodo diferente como un servidor de parámetros. A continuación, los nodos restantes pueden empezar a comunicarse con el nuevo servidor de parámetros.
Sin embargo, el entrenamiento puramente distribuido tiene ventajas sobre un servidor de parámetros, ya que se puede lograr un mayor rendimiento si la topología de red se construye teniendo en mente el entrenamiento puramente distribuido. En otras palabras, los tipos de topologías de red que pueden usarse están limitados a aquellos en los que cada nodo en el sistema puede comunicarse fácilmente con todos y cada uno de los demás nodos dentro del sistema. De lo contrario, pueden formarse cuellos de botella en la red, reduciendo el rendimiento global. Por ejemplo, cuando se realiza una operación all-reduce con un grupo de nodos, el rendimiento de la operación puede volverse sensible a los picos de latencia dentro de la red.
Se describe en el presente documento un sistema de comunicación que hace uso de un algoritmo con conocimiento de topología para agrupación de nodos flexible. En una realización, se puede construir un sistema de entrenamiento distribuido de una manera que sea sensible a la topología de red existente de los nodos trabajadores, de modo que los nodos locales se puedan ensamblar en grupos de cálculo basándose en la topología de red. Los nodos dentro de un grupo de cálculo se comunican entre sí usando operaciones tales como all-reduce, mientras que los nodos distantes se puentean mediante operaciones de sincronización realizadas con un servidor de parámetros. En una realización, una estructura de comunicación asociada con la red de entrenamiento distribuida puede hacer uso de un algoritmo con conocimiento de topología para ajustar de manera flexible y transparente la agrupación de nodos basándose en el conjunto actual de operaciones de comunicación a realizar. Dependiendo del tipo de operación de comunicación que se realice, pueden utilizarse agrupaciones de nodos diferentes. Por ejemplo, cuando la estructura de comunicación que facilita la mensajería entre nodos (por ejemplo, el módulo de comunicación 2117 como en la Figura 21B) determina que ha de realizarse una serie de operaciones de comunicación sensibles a la latencia, la estructura de comunicación puede ajustar la agrupación de nodos en consecuencia.
LaFigura 22ilustra una red de entrenamiento de múltiples nodos 2200, de acuerdo con la invención. La red de entrenamiento de múltiples nodos 2200 incluye múltiples conjuntos de nodos trabajadores 2216A-2216B, 2236A-2236B. Cuando se ha de realizar una operación de comunicación sensible a la latencia, tal como una operación allreduce, en la red de entrenamiento de múltiples modos 2200, la estructura de comunicaciones ajusta dinámicamente la agrupación de nodos basándose en la topología de red. En la red de entrenamiento de múltiples nodos ilustrada 2200, la estructura de comunicación determina los conjuntos de nodos trabajadores 2216A-2216B que experimentan una latencia de comunicación relativamente inferior cuando se intercambian datos en comparación con la latencia de comunicación observada cuando se comunican con otros conjuntos de nodos trabajadores 2236A-2236B. Para intercambiar parámetros de datos de modelo, tales como actualizaciones de gradientes, entre los nodos trabajadores, la estructura de comunicaciones puede establecer múltiples grupos de nodos trabajadores. Por ejemplo, la estructura de comunicaciones puede crear un primer grupo 2210 de nodos trabajadores que pueden incluir conjuntos de nodos trabajadores 2216A-2216B que tienen baja latencia mutua. La estructura de comunicaciones puede crear a continuación un segundo grupo 2230 de nodos trabajadores que incluye conjuntos adicionales de nodos trabajadores 2236A-2236B que tienen baja latencia mutua. El número específico de grupos que se crean puede variar basándose en la topología de red. A continuación, se instancian uno o más servidores de parámetros 2220. A continuación, los servidores de parámetros están configurados para habilitar la comunicación inter-grupo eficiente entre los diversos grupos 2210, 2230.
LaFigura 23ilustra un proceso 2300 para permitir un algoritmo a nivel de topología para agrupación de nodos flexible, de acuerdo con una realización. El proceso 2300 puede realizarse por una estructura de comunicación como se describe en el presente documento, tal como, pero sin limitación, el módulo de comunicación 2117 como en la Figura 21B. En una realización, el proceso 2300 incluye inicializar un sistema de entrenamiento distribuido, como se muestra en el bloque 2302. El proceso 2300 incluye adicionalmente una operación, como se muestra en el bloque 2303, para determinar si la topología de red actual que inter-enlaza los nodos es conocida. Si la topología de red es conocida, una estructura de comunicación, u otro elemento lógico configurado para realizar el proceso, 2300, puede recuperar información de topología de red, como se muestra en el bloque 2305. La información de topología de red puede recuperarse, en una realización, a partir de una unidad de topología de red 2808 como en la Figura 28 a continuación. Si la topología de red actual no es conocida, como se determina en el bloque 2303, puede realizarse una operación para iniciar un conjunto de iteraciones de entrenamiento de muestras, como se muestra en el bloque 2304. Durante las iteraciones de entrenamiento de muestras, la lógica de comunicación puede monitorizar las latencias de red entre nodos para determinar una aproximación de topología de red, como se muestra en el bloque 2306.
El proceso 2300 incluye adicionalmente crear grupos de nodos trabajadores topológicamente locales, como se muestra en el bloque 2308. Una estructura de comunicaciones crea grupos en el bloque 2308 basándose en la topología de red recuperada en el bloque 2305, o la topología de red aproximada determinada en el bloque 2306. Cuando la topología de la red es conocida, los nodos trabajadores locales se agrupan bajo el supuesto de que los nodos trabajadores locales topológicamente experimentan una latencia de comunicación relativamente menor, aunque, en una realización, se pueden realizar mediciones de latencia objetivas para verificar tal supuesto incluso cuando se conoce la topología de red en el momento de inicialización de la red.
El proceso 2300 incluye adicionalmente crear uno o más servidores de parámetros para puentear grupos de nodos, como se muestra en el bloque 2310. El uno o más servidores de parámetros pueden crearse reutilizando uno o más nodos trabajadores y reinicializando los nodos reutilizados como servidores de parámetros. El proceso 2300 incluye adicionalmente ajustar las rutas de comunicación para puentear los grupos de nodos trabajadores con servidores de parámetros, como se muestra en el bloque 2312. En una realización, el proceso 2300 incluye adicionalmente ajustar de manera transparente rutas de comunicación entre los nodos trabajadores basándose en el patrón de comunicación a realizar.
Optimizar comunicación intra-chasis e inter-chasis
Algunas realizaciones descritas en el presente documento proporcionan sistemas y métodos para habilitar la calidad de servicio (QoS) para la comunicación intra-chasis e inter-chasis entre GPU dentro de una agrupación de entrenamiento distribuida. Una realización proporciona contadores de QoS de plataforma normalizada que conceden visibilidad de software en detalles de rendimiento de nivel de hardware. La exposición de dichos contadores de QoS permite que el software haga mejores decisiones con respecto a la comunicación de datos dentro de un chasis en relación con la comunicación entre chasis. Se puede especializar una mayor proporción de ancho de banda existente a aplicaciones de prioridad superior o aplicaciones sensibles a la latencia. Las aplicaciones menos sensibles a la latencia se pueden regular o ajustar durante el periodo de contienda de recursos. En una implementación, basándose en datos de contador de QoS de plataforma, un módulo de comunicación de estructura de aprendizaje automático puede ajustar la asignación de ancho de banda entre aplicaciones en un planificador, concediendo mayor prioridad de planificador a las aplicaciones de prioridad superior. En una implementación, la funcionalidad QoS de memoria caché de procesador se puede aprovechar para gestionar la latencia de comunicación para la comunicación inter-chasis e intra-chasis, de modo que los datos asociados con aplicaciones de alta prioridad se puedan priorizar dentro de las cachés de los procesadores de CPU, GPU y tejido. Para priorizar daos dentro de la CPU, GPU, y el procesador de tejido, las cachés pueden incluir etiquetar los datos en la caché y reducir la probabilidad de expulsión de datos etiquetados.
LasFiguras 24A-24Bilustran sistemas de procesamiento 2400, 2430, de acuerdo con las realizaciones descritas en el presente documento. LaFigura 24Ailustra el sistema de procesamiento 2400 que realiza comunicación inter-nodo. LaFigura 24Bilustra el sistema de procesamiento 2430 que realiza comunicación inter-nodo e intra-nodo.
Como se muestra en la Figura 24A, sistema de procesamiento 2400 incluye dos o más procesadores 2402, 2404, que, en una realización, son procesadores de múltiples núcleos de propósito general, tal como procesadores de aplicaciones o unidades de procesamiento central (CPU). Los procesadores 2402, 2404 se acoplan con un sistema de cálculo de procesador paralelo 2410, que incluye una agrupación de cálculo paralela 2420 y un conjunto de conmutadores de interfaz de plataforma 2411A-2411D. Los conmutadores de interfaz de plataforma 2411A-2411D habilitan que la agrupación de cálculo paralela 2420 se interconecte con los procesadores 2402, 2402, que pueden enlazarse al sistema de cálculo de procesador paralelo 2410 mediante un bus de interconexión de plataforma 2406. En una realización, el bus de interconexión de plataforma 2406 y los conmutadores de interfaz de plataforma 2411A-2411D soportan cada uno una versión de la norma de bus Interconexión de Componentes Periféricos express (PCIe), que incluye, pero sin limitación, PCIe 3.0, 3.1,4.0, 5.0, etc.
En algunas realizaciones la agrupación de cálculo paralelo 2420 incluye múltiples procesadores de gráficos de propósito general (GPGPU) 2422A-2422D, 2424A-2424D. En otras realizaciones, la agrupación de cálculo paralelo 2420 puede incluir también otros tipos de procesadores paralelos, tales como procesadores MIC, FPGA, o procesadores ASIC personalizados. En una realización, cuando la agrupación de cálculo paralelo 2420 incluye las GPGPU 2422A-2422<d>, 2424A-2424D, las GPU de la agrupación de cálculo paralelo 2420 pueden interconectarse mediante enlaces de interconexión de punto a punto (por ejemplo, 2423), tal como, pero sin limitación, la tecnología de señalización de alta velocidad de Nvidia (NVHS) (por ejemplo, NVLink). Los enlaces de interconexión de punto a punto pueden incluir múltiples conjuntos de pares diferenciales, donde múltiples pares diferenciales se pueden combinar para formar un enlace. En una realización, se pueden monitorizar métricas de rendimiento para datos transmitidos a través de cada enlace de punto a punto e informar a los procesadores 2402, 2404, junto con métricas de comunicación para datos transmitidos a través de los conmutadores de interfaz de plataforma 2411A-2411D. Las métricas de rendimiento para datos transmitidos pueden incluir métricas para transacción de datos a través de cada enlace de punto a punto y para transacciones de datos realizadas mediante los conmutadores de interfaz de plataforma 2411A-2411D. En una realización, las métricas de rendimiento incluyen caudal en bruto caudal efectivo considerando la sobrecarga, latencia instantánea y latencia promedio.
Como se muestra en la Figura 24B, el sistema de procesamiento 2430 incluye dos o más procesadores 2432, 2434, que pueden ser similares a los procesadores 2402, 2404 como en la Figura 24A. El sistema de procesamiento 2430 también incluye dos sistemas de cálculo de procesador paralelo 2440, 2460, cada uno de los cuales puede ser similar al sistema de cálculo de procesador paralelo 2410 como en la Figura 24A, con cada sistema de cálculo de procesador paralelo 2440, 2460 incluyendo uno o más buses de interconexión de plataforma 2472, 2474 para acoplar los sistemas de cálculo de procesador paralelo 2440, 2460 con el procesador 2432, 2434. El sistema de cálculo de procesador paralelo 2440 incluye un conjunto de conmutadores de interfaz de plataforma 2441A-2441D. El sistema de cálculo de procesador paralelo 2460 incluye un conjunto de conmutadores de interfaz de plataforma 2461A-2461D. Los conmutadores de interfaz de plataforma 2441A-2441D acoplan los procesadores 2432, 2434 con la agrupación de cálculo paralelo 2450. Los conmutadores de interfaz de plataforma 2461A-2461D acoplan los procesadores 2432, 2434 con la agrupación de cálculo paralelo 2470. La agrupación de cálculo paralelo 2450, en una realización, incluye la GPGPU 2452A-2452D y la GPGPU 2454A-2454D. La agrupación de cálculo paralelo 2470, incluye la GPGPU 2472A-2472B y la GPGPU 2472A-2474D. La GPGPU 2452A-2452D y la GPGPU 2454A-2454D pueden comunicarse mediante interconexiones de punto a punto, tales como la interconexión de punto a punto 2453. La GPGPU 2472A-2472D y 2474A-2474D pueden comunicarse mediante interconexiones de punto a punto, tales como la interconexión de punto a punto 2473. Las GPGPU pueden registrar métricas de comunicación de datos y transmitir tales métricas a los procesadores 2432, 2434. Las métricas para transmisión de datos mediante los conmutadores de interfaz de plataforma 2441A-2441D y 2461A-2461D también pueden informarse al procesador 2432, 2434. Tales métricas se pueden usar para gestionar la QoS de la comunicación intra-chasis e inter-chasis, para gestionar el ancho de banda asociado con la comunicación dentro de cada chasis y entre los diversos chasis (por ejemplo, entre el sistema de cálculo de procesador paralelo 2440 y el sistema de cálculo de procesador paralelo 266), a través de uno o más buses de interconexión de plataforma 2472, 2474.
LaFigura 25ilustra un proceso 2500 para gestionar QoS de comunicación entre y dentro de nodos de cálculo de procesador paralelo, de acuerdo con una realización. El proceso 2500 puede realizarse por la lógica de QoS de plataforma que está configurado para gestionar la comunicación inter-proceso e intra-proceso entre GPU y CPU, tal como en el sistema de procesamiento 2400 como en la Figura 24A y el sistema de procesamiento 2430 como en la Figura 24B.
En una realización, el proceso 2500 incluye rastrear, en una estructura de aprendizaje automático como se describe en el presente documento, un comportamiento de comunicación de aplicaciones que se comunican en una plataforma de aprendizaje automático, a través de contadores de QoS expuestos por un procesador central dentro de la plataforma de aprendizaje automático, como se muestra en el bloque 2502.
El proceso 2500 puede determinar una proporción relativa de ancho de banda de comunicación intra-chasis e inter chasis consumido por cada aplicación gestionada por la estructura de aprendizaje automático, como se muestra en el bloque 2504. La proporción relativa de comunicación intra-chasis e inter-chasis puede determinarse mediante la monitorización de los contadores de QoS de plataforma expuestos por los diversos procesadores dentro del sistema. Los datos de contador de QoS se pueden agregar en uno o más procesadores de control del sistema, que pueden ajustar la asignación de ancho de banda o la prioridad de planificación para las tareas de comunicación asociadas con diversas aplicaciones que se ejecutan en el sistema basándose en la prioridad asociada con la aplicación o la sensibilidad de la aplicación a la latencia. Por ejemplo, cuando los enlaces de comunicación entre un sistema de cálculo de procesador paralelo y un procesador, o entre el sistema de cálculo de procesador paralelo y un sistema de cálculo de procesador paralelo en un chasis diferente, están congestionados, la biblioteca de comunicación que gestiona la transmisión de datos dentro del sistema puede priorizar la comunicación intra-chasis dentro de un período de transmisión de datos a través de la comunicación inter-chasis. Como alternativa, cuando las técnicas de comunicación inter-chasis están congestionadas, puede priorizarse la comunicación intra-chasis.
En una realización, el proceso 2500 incluye adicionalmente determinar puntos de congestión dentro de enlaces de comunicación intra-chasis e inter-chasis como se describe en el presente documento, como se muestra en el bloque 2506. Los puntos de congestión pueden manifestarse cuando la demanda de comunicación de datos supera el caudal disponible para un enlace dado. Por ejemplo, los enlaces de comunicación usados para la comunicación inter-chasis pueden ser enlaces de ancho de banda inferior con relación a aquellos usados para comunicación intra-chasis dependiendo de los protocolos usados en una implementación de sistema dada. El proceso 2500 puede ajustar a continuación una planificación de comunicación de aplicación y rutas basándose en una proporción relativa de ancho de banda de comunicación y puntos de congestión dentro de enlaces de comunicación intra-chasis e inter-chasis, como se muestra en el bloque 2508. Ajustar una planificación de comunicación de aplicación puede incluir, por ejemplo, retardar la planificación de un conjunto de mensajes inter-chasis durante un periodo de congestión inter-chasis y planificar la transmisión de mensajes intra-chasis en su lugar. Ajustar la planificación de comunicación de aplicación también puede incluir retardar un conjunto de mensajes intra-chasis durante un periodo de congestión y planificación intra-chasis y mensajes inter-chasis en su lugar. Sin embargo, en el caso de congestión intra-chasis, el ajuste también puede incluir ajustar una ruta mediante la que se retardará el mensaje intra-chasis. En una realización, los ajustes pueden incluir adicionalmente ajustar dinámicamente modelos de QoS de caché para priorizar datos para aplicaciones sensibles a la latencia, como se muestra en el bloque 2510.
LaFigura 26ilustra un sistema informático de múltiples chasis adicional 2600, de acuerdo con una realización. Cada chasis del sistema de cálculo de múltiples nodos 2600 es similar a un chasis dentro de, por ejemplo, el sistema de procesamiento 2430 como en la Figura 24B. Las unidades de procesamiento de gráficos de propósito general (GPGPU) realizan comunicación intra-chasis e inter-chasis. Por ejemplo, cada una de las GPGPU 2604A-2604D se interconectan mediante un conjunto de enlaces de GPU de punto a punto 2614. Cada GPGPU 2606A-2606D se interconecta mediante enlaces de GPU de punto a punto 2616. Cada GPGPU 2604A-2604D puede comunicarse con el procesador 2603 mediante un conmutador de interfaz de anfitrión 2602. La GPGPU 2606A-2606D se puede comunicar con el procesador 2605 mediante el conmutador de interfaz de anfitrión 2604. Las GPGPU 2604A-2604D y 2606A-2606C pueden no interconectarse directamente mediante enlaces de GPU de punto a punto, sino que pueden comunicarse, en una realización, mediante una interconexión 2607 entre el conmutador de interfaz de anfitrión 2602 y el conmutador de interfaz de anfitrión 2604, que puede ser cada uno, por ejemplo, conmutadores PCIe.
En una realización, el caudal de datos proporcionado por el conmutador de interfaz de anfitrión 2602 y el conmutador de interfaz de anfitrión 2604, así como el caudal a través de la interconexión 2607, pueden ser una interconexión de ancho de banda inferior con relación a los enlaces de GPU de punto a punto 2614 y los enlaces de GPU de punto a punto 2616. Tales interconexiones pueden usarse bajo circunstancias en las que el procesador 2603 y el procesador 2605 no incluyen soporte para enlaces de GPU de punto a punto 2614 y enlaces de GPU de punto a punto 2616. En una realización alternativa, puede acelerarse la comunicación inter-chasis mediante un conmutador de interfaz de anfitrión mejorada que habilita un enlace de GPU de punto a punto, tal como, pero sin limitación NVLink, para implementarse dentro de un conmutador de interfaz de anfitrión como se describe en el presente documento. Por ejemplo, en una realización, el conmutador de interfaz de anfitrión 2602 y el conmutador de interfaz de anfitrión 2604 pueden implementarse como conmutadores de NVLink, que pueden usarse para interconectar GPU dentro de diferentes chasis. En una realización, el procesador 2603 y el procesador 2605 pueden residir en un chasis diferente al de la GPGPU 2604A-2604D o la<g>P<g>PU 2606A-2606D. El conmutador de interfaz de anfitrión 2602 y el conmutador de interfaz de anfitrión 2604 pueden facilitar la interconexión inter-chasis entre un chasis de procesador y un chasis de GPGPU.
LaFigura 27ilustra un conmutador de interfaz de anfitrión 2700, de acuerdo con una realización. En una realización, el conmutador de interfaz de anfitrión 2700 puede usarse para habilitar una interconexión de punto a punto conmutada para su uso en conectar agrupaciones de GPU de múltiples chasis. El conmutador de interfaz de anfitrión ilustrado 2700 es ilustrativo de una realización, y no es limitante en cuanto a todas las realizaciones. En una realización, el conmutador de interfaz de anfitrión 2700 puede usarse como conmutador de interfaz de anfitrión 2603 o conmutador de interfaz de anfitrión 2604 como en la Figura 26. Por ejemplo, el conmutador de interfaz de anfitrión 2700 ilustrado implementa un conmutador para una interconexión de punto a punto tal como NVLink mediante el uso de múltiples puentes de NVLink a PCIe 2705, 2515 y un conmutador de alto ancho de banda, baja latencia y de barra transversal 2710, tal como un conmutador de barra transversal PCIe que implementa una interconexión PCIe 4.0 o PCIe 5.0. Un conjunto de puntos de extremo de punto a punto 2702A-2702D puede acoplarse con un circuito de puente 2705, que puede puentear eléctrica o lógicamente el enlace de punto a punto con el conmutador de barra transversal 2710. En una realización, los datos pueden encaminarse a través del conmutador de barra transversal 2710 a un segundo circuito de puente conectado 2715, que puede puentear eléctrica o lógicamente el protocolo del conmutador de barra transversal 2710 con el protocolo de puntos de extremo de enlace a punto a punto 2772A-2772D. Cuando los puntos de extremo de punto a punto 2702A-2702D, 2722A-2722D usan tecnología NVHS, la señalización de punto final está configurada como sin retorno a cero. En una realización, el puente 2705 y el puente 2715 están configurados para convertir la señalización de no retorno a cero de los puntos de extremo de enlace de punto a punto a y desde la señalización diferencial usada por el conmutador de barra transversal 2710.
En una realización, el número de enlaces usados para puentear los puntos de extremo de punto a punto 2702A-2702D y los puntos de extremo de punto a punto 2722A-2722D con el conmutador de barra transversal 2710 puede variar basándose en el protocolo implementado en el conmutador de barra transversal 2710. Por ejemplo, para evitar cuellos de botella de puente, el puente 2705 y el puente 2715 puede usar una relación variable de enlaces de punto a punto con relación a enlaces de PCIe cuando se conecta al conmutador de barra transversal 2710. Por ejemplo, una interconexión de PCIe 4.0 puede tener una transferencia de 16 GT/s (giga-transferencias por segundo) por carril, mientras que una interconexión de NVLink 2.0 puede tener una tasa de transferencia de 25 GT/s por carril. Por consiguiente, puede usarse más de un carril de PCIe 4.0 para cada carril de NVLink dentro de los puentes de NVLink a PCIe 2705, 2515 para garantizar que los puentes no presentan un cuello de botella de transmisión. También está presente un procesador de tejido 2730. En una realización, el procesador de tejido 2730 se acopla con y configura cada puente 2705, 2715 y el conmutador de barra transversal 2710 de acuerdo con requisitos de potencia y rendimiento especificados por el sistema.
Soporte de hardware para comunicación de aprendizaje profundo persistente
En las estructuras actuales para aprendizaje automático, incluso cuando el grafo de comunicación entre nodos es un grafo estático, las estructuras de comunicación aún realizan la comunicación entre nodos como si el sistema usara un grafo dinámico, lo que aumenta la sobrecarga de las tareas de comunicación entre nodos. Por ejemplo, cuando se realizan operaciones de comunicación a través de múltiples nodos, se asignan, usan y desasignan recursos de memoria y red de dispositivo para cada operación. En algunos sistemas, puede realizarse asignación de ancho de banda para operaciones de comunicación para cada transacción. La eficacia de las operaciones de comunicación de red puede aumentarse de la estructura de comunicación de red que puede configurare para suponer un grafo de nodo estático, lo que permite que se hagan persistentes ciertas asignaciones.
Una realización descrita en el presente documento habilita canales de comunicación persistentes para comunicación inter-nodo en red para aprendizaje automático distribuido. Cuando se configura un sistema de entrenamiento de aprendizaje automático distribuido, el patrón de comunicación entre los nodos se especifica con antelación, lo que permite que se especifique una lista de operaciones de comunicación y nodos asociados. La lista de operaciones de comunicación se repetirá a lo largo de todo el proceso de entrenamiento distribuido a medida que se realizan cálculos de propagación hacia delante y hacia atrás y se distribuyen gradientes a través de los nodos. En lugar de pagar los costes de tiempo de ejecución asociados con la realización de una operación de comunicación a través de una red o estructura de comunicaciones cada vez que se realiza una operación, se puede solicitar un grafo de comunicación de aprendizaje automático persistente. El grafo de comunicaciones de aprendizaje automático persistente puede habilitar que se realice la asignación de recursos de red de tiempo de ejecución como un coste de un solo uso. Las asignaciones de recursos se hacen persistir para la duración de la sesión de entrenamiento distribuida. Cuando se completa la sesión de entrenamiento distribuida, los recursos asignados pueden desasignarse.
Implementar tales realizaciones incluye modificaciones a hardware y software dentro de una pila de comunicaciones de tejido o red. Por ejemplo, el software de una estructura de comunicaciones de aprendizaje automático puede indicar al hardware de comunicación el conjunto específico de operaciones que deberían hacerse persistentes, ya que puede no ser deseable hacer todas las operaciones persistentes. Por ejemplo, puede que no sea deseable que ciertas operaciones de configuración, puntos de control y de corrección de errores se hagan persistentes. Adicionalmente, puede ser ventajoso que algunas funciones de transferencia de activación o gradiente de peso permanezcan no persistentes. Por lo tanto, la estructura de comunicaciones y el hardware de comunicaciones pueden modificarse para incluir soporte para el establecimiento de sesiones de comunicación persistentes entre nodos específicos de la red y, durante la duración de tales sesiones, una lista de operaciones para las que las asignaciones de recursos han de realizarse de manera persistente.
LasFiguras 28A-28Cilustran un sistema para permitir comunicación de aprendizaje profundo persistente. La Figura 28A ilustra una pila de comunicaciones persistente 2800, de acuerdo con una realización. La Figura 28B ilustra operaciones de lógica de comunicación de aprendizaje profundo persistente 2830, de acuerdo con una realización. La Figura 28C ilustra operaciones de lógica de gestión de recursos 2840 de un sistema de comunicación de aprendizaje profundo persistente, de acuerdo con una realización.
La pila de comunicaciones persistente 2800 de la Figura 28A puede ser parte de una arquitectura de ajuste a escala de aprendizaje automático como se ilustra en la Figura 21A-21B. Por ejemplo, en una realización, el módulo de comunicación 2117 incluye una unidad de conexión persistente 2802, una unidad de topología de red 2804 y una unidad de ancho de banda/QoS 2806, cada una de las cuales puede configurar interacciones del módulo de comunicación 2117 con la biblioteca de mensajería 2119 y la estructura de comunicación de alto rendimiento 2121 como se describe en el presente documento.
En una realización, la unidad de conexión persistente 2802 puede configurar memorias intermedias de comunicación y una planificación de comunicación una vez al inicio de una sesión de comunicación de red y reutilizar contextos de comunicación, en lugar de configurar y desmantelar conexiones de red repetidamente durante el entrenamiento distribuido. La unidad de conexión persistente 2802 puede interactuar con la unidad de topología de red 2804 para asociar una topología de red con un patrón de comunicación dado. Los nodos de red asociados con una operación de entrenamiento distribuida pueden identificarse, enumerarse y proporcionarse a la unidad de conexión persistente 2802. La unidad de conexión persistente 2802 puede comunicarse con una interfaz de conexión persistente 2812 en la biblioteca de mensajería 2119. La interfaz de conexión persistente 2812 proporciona un mecanismo mediante el que los recursos de la biblioteca de mensajería 2119 pueden indicarse como persistentes para una sesión de comunicación dada. Cuando se indica que los recursos de sesión son persistentes, los datos, los contextos y las configuraciones creados para la retransmisión de mensajes durante una sesión de entrenamiento distribuida se asignarán y mantendrán de manera persistente, con asignaciones de recursos realizadas y mantenidas hasta que se indique que la sesión persistente está completa.
Una interfaz de tejido de comunicaciones 2820 incluye elementos de software y hardware que se usan para habilitar la comunicación a través del tejido de comunicaciones de alto rendimiento 2121. En una realización, la interfaz de tejido de comunicaciones 2820 incluye una interfaz de conexión persistente 2822, una unidad de registro de memoria 2824, una unidad de contexto de red 2826, y una unidad de control de flujo 2828. La interfaz de tejido de comunicaciones 2820 puede incluir adicionalmente otros componentes asociados con interfaces de tejido conocidas en la técnica, tales como procesadores de control, memoria, ASIC de reenvío y similares. La interfaz de conexión persistente 2822, en respuesta a mensajes y/o comandos recibidos a través de la biblioteca de mensajería, puede configurar recursos de hardware y software asociados con la estructura de comunicación de alto rendimiento 2121 para que se asignen de manera persistente, de manera que los recursos que se asignarían y desasignarían cíclicamente se mantendrán durante la duración de la sesión de comunicación.
Los recursos y contextos específicos que se hacen persistentes pueden variar basándose en el tipo de interfaz de tejido de comunicaciones 2820. En una realización, la unidad de registro de memoria 2824 puede registrar memoria de manera persistente para su uso en transmisión y recepción de mensajes. El registro de memoria incluye la fijación de direcciones de memoria virtual asociadas con memorias intermedias de memoria que contienen datos para transferir o para contener datos recibidos. En una realización, el registro de memoria incluye realizar traducción de direcciones física para direcciones de memoria virtual asociadas con memorias intermedias de memoria. En una realización, la unidad de registro de memoria 2824 puede almacenar un registro de memorias intermedias de memoria asignadas de manera persistente. En una realización, los metadatos para las memorias intermedias asignadas pueden indicar que una memoria intermedia dada está asignada de manera persistente. La desasignación de estas memorias intermedias puede omitirse, y, durante una transferencia de red posterior dentro de una sesión, pueden reutilizarse memorias intermedias previamente asignadas.
En una realización, la unidad de contexto de red 2826 puede asignar de manera persístete información de contexto de red para su uso en transmisión y recepción de mensajes a través de tejido de comunicaciones de alto rendimiento. Por ejemplo, puede omitirse la desasignación de memoria de contexto asignada de manera persistente que se usa para procesar datos asociados con un protocolo de transmisión. Donde de otro modo se reasignaría memoria, se puede reutilizar la memoria previamente asignada. En una realización, la unidad de control de flujo 2828 puede gestionar la tasa de transmisión y recepción de datos mediante el tejido de comunicaciones de alto rendimiento 2121. En general, las capas de red del tejido de comunicación de alto rendimiento 2121 hacen uso del control de flujo para evitar desbordamientos de memoria intermedia en el receptor. En una realización, se usa un sistema de control de flujo basado en crédito para rastrear las ranuras disponibles dentro de las memorias intermedias de recepción. Pueden enviarse créditos a un emisor para datos recibidos cuando los datos recibidos se extraen de las memorias intermedias de recepción. Dado que el conjunto de emisores y receptores dentro de una sesión son conocidos con antelación, las estructuras de datos de control de flujo se pueden establecer como un costo de único uso antes de que comience la mayor parte de la transmisión de datos a través de nodos dentro de una agrupación de entrenamiento distribuida.
Como se muestra en la Figura 28B, la lógica de comunicación de aprendizaje profundo persistente 2830 puede configurar el software y hardware de comunicación para hacer persistir asignaciones de memoria, el contexto de red y la información de contexto de hardware para una sesión de comunicación de red realizada durante el entrenamiento distribuido de una red neuronal. La lógica 2830 puede implementarse por un módulo de comunicación 2117, biblioteca de mensajería 2119, y/o interfaz de tejido de comunicaciones 2820 como en la Figura 28A.
En una realización, la lógica 2830 puede recibir un identificador de un nodo al que se ha de establecer una sesión de comunicación de red persistente, como se muestra en el bloque 2831. Una sesión persistente puede establecerse con uno o más nodos, y puede recibirse un conjunto de identificadores que especifica cada nodo asociado con la sesión de comunicación persistente. La lógica 2830 puede resolver a continuación una o más direcciones de red para el nodo y almacenar de manera persistente la una o más direcciones de red resueltas, como se muestra en el bloque 2832. En el bloque 2834, la lógica 2830 puede recibir una indicación de un conjunto de operaciones de red para las que las asignaciones de recursos serán persistentes. Puede no ser deseable hacer todas las operaciones persistentes, ya que puede ser óptimo para algunas operaciones de comprobación de configuración y error que no sean persistentes. La lógica 2830 puede asignar recursos usados para comunicarse con el nodo y marcar los recursos como persistentes, como se muestra en el bloque 2836. Los recursos se pueden marcar como persistentes almacenando identificadores para los recursos en una estructura de datos, o los metadatos de los recursos pueden indicar que el recurso se asignará de manera persistente. Como se muestra en el bloque 2837, la lógica 2830 puede realizar operaciones de red solicitadas con el nodo o nodos identificados mientras se hacen persistir las asignaciones de recursos asociadas con operaciones identificadas como persistentes. En el bloque 2837, la lógica 2830 puede desasignar recursos asignados de manera persistente después de recibir la indicación de que ha finalizado una sesión persistente.
Como se muestra en la Figura 28C, las operaciones de la lógica de gestión de recursos 2840 de un sistema de comunicación de aprendizaje profundo persistente pueden incluir recibir una solicitud en una estructura de comunicaciones para realizar una operación asociada con una sesión de entrenamiento distribuida persistente, como se muestra en el bloque 2841. Si, como se determina, en el bloque 2843, la operación se etiqueta como persistente, la lógica 2840 puede acceder a recursos previamente asignados para la operación. Si, como se determina en el bloque 2843, la operación no se etiqueta como persistente, la lógica 2840 puede realizar nuevas asignaciones de recursos para la operación, como se muestra en el bloque 2844. En algunas realizaciones, en lugar de etiquetarse como persistente, la operación puede enumerarse en una estructura de datos o base de datos de operaciones que se han de hacer persistentes para una sesión de comunicación.
Agrupación de acelerador sin servidor para inferencia
Un desafío significativo presentado durante inferencia de aprendizaje automático es la latencia. Aunque el rendimiento de cálculo es crítico para el entrenamiento de aprendizaje automático, las operaciones de inferencia tienen requisitos de cálculo inferiores, pero son extremadamente sensibles a la latencia, midiéndose el marco de tiempo óptimo para ejecutar una inferencia generalmente en milisegundos. La sensibilidad de latencia de operaciones de inferencia resulta de la naturaleza en tiempo real de más despliegues de inferencia. Las solicitudes de inferencia se realizan de forma continua, por ejemplo, mediante sistemas de conducción y navegación autónomos, así como mediante sistemas de visión informática o de detección remota asociados con sistemas de conducción y navegación autónomos. Adicionalmente, pueden configurarse programas asistentes digitales para realizar inferencia de aprendizaje automático en respuesta a una solicitud de usuario. Cuando la inferencia se realiza como parte de una experiencia de usuario interactiva, cualquier latencia exhibida por el sistema puede afectar negativamente la experiencia de usuario.
La inferencia a gran escala orientada al usuario se puede implementar como una solución basada en centro de datos basado en la nube. Cuando se realiza una operación de aprendizaje automático en un centro de datos, se pueden recopilar y agrupar datos de una gran cantidad de clientes (por ejemplo, dispositivos de consumo) y transmitirlos a un servidor de CPU del centro de datos o a una agrupación de CPU. Los datos se transforman o modifican en un formato aceptable para una estructura de aprendizaje automático o un modelo de datos desplegado, y a continuación se procesan en agrupaciones de procesamiento paralelo, tales como una agrupación de GPGPU. En las implementaciones en las que el rendimiento de estructura de GPU a GPU supera al de la estructura de GPU a anfitrión, el servidor/agrupación de CPU puede introducir un cuello de botella de latencia en los sistemas de inferencia del centro de datos.
Algunas realizaciones descritas en el presente documento habilitan la agrupación de acelerador sin servidor para operaciones de inferencia. En una realización, un grupo de aceleradores de inferencia, que pueden ser aceleradores de GPGPU, aceleradores de FPGA, ASIC personalizados u otro tipo de acelerador de inferencia, se pueden acoplar a una estructura de conmutación de alto ancho de banda y baja latencia. Las agrupaciones de aceleradores pueden ser agrupaciones "sin servidor", en que un servidor de CPU primario y sistema operativo asociado no están presentes. En lugar de ello, un conjunto de interfaces de red programables, procesadores de baja potencia y/o interfaces de tejido programable pueden preconfigurarse por un servidor de CPU conectado a tejido. Una vez que se configura la red, las interfaces de estructura o el sistema de procesador de bajo consumo en una agrupación de aceleradores, el servidor de CPU se puede quitar de la ruta crítica, recibiéndose directamente las solicitudes de inferencia en y procesándose por la agrupación de aceleradores. En una implementación, las agrupaciones de aceleradores se pueden virtualizar, lo que habilita el acceso de nivel de dispositivo como dispositivos virtuales dentro de soluciones de servidores virtuales implementadas dentro de un centro de datos.
LasFiguras 29A-29Cilustran hardware y un proceso de software asociado para permitir agrupamiento de acelerador sin servidor para inferencia, de acuerdo con las realizaciones descritas en el presente documento. La Figura 29A ilustra un centro de datos 2900 que incluye agrupaciones de aceleradores sin servidor, de acuerdo con una realización. La Figura 29B ilustra un ejemplo de servidor de CPU y sistema de agrupación de acelerador, de acuerdo con una realización. La Figura 29C ilustra un proceso 2930 para configurar agrupaciones de acelerador sin servidor para inferencia, de acuerdo con una realización.
Como se muestra en la Figura 29A, un centro de datos 2900 puede incluir un extremo frontal 2902 a través del que se reciben solicitudes de procesamiento. El extremo frontal 2902 puede interactuar con un conjunto de servidores de CPU 2904A-2904N. Cada servidor de CPU, por ejemplo, el servidor de CPU 2904N, incluye un conjunto de controladores de interfaz de red (por ejemplo, NIC 2914), memoria 2912, una agrupación de ejecución de aplicaciones 2910 y una interfaz de estructura 2807. Los controladores de interfaz de red, incluyendo el NIC 2914, pueden usarse para conectar los servidores de CPU 2904A-2904B al extremo frontal 2902. En diversas realizaciones, pueden usarse diversos tipos de controladores de interfaz de red, incluyendo, pero sin limitación Ethernet, InfiniBand, Omni-Path Interconnect, u otros protocolos de interconexión en red de alta velocidad. La memoria 2912 es memoria de acceso aleatorio volátil o no volátil y puede ser cualquier tipo de memoria de sistema descrita en el presente documento. La agrupación de aplicaciones de ejecución 2910 incluye uno o más procesadores de servidor de múltiples núcleos configurados para ejecutar aplicaciones, incluyendo máquinas virtuales. La agrupación de ejecución de aplicaciones puede ejecutar aplicaciones de aprendizaje automático que pueden aprovechar uno o más agrupamientos de aceleradores de inferencia (por ejemplo, el agrupamiento de GPU 2908A-2908N), o puede configurar los agrupamientos de aceleradores de inferencia para responder directamente a las solicitudes recibidas a través del extremo frontal 2902. La interfaz de tejido 2907 en los servidores de CPU 2904A-2904N puede habilitar que el agrupamiento de ejecución de aplicaciones 2910 conecte con el tejido de conmutador de alto ancho de banda 2906. El tejido de conmutador de alto ancho de banda 2906 puede ser cualquier interconexión de alta velocidad descrita en el presente documento, tal como, pero sin limitación PCIe o NVHS/NVLink.
En una realización, el agrupamiento de aceleradores de inferencia son aceleradores de GPU dentro de agrupamientos de GPU 2908A-2908N. Cada grupo de GPU puede incluir, por ejemplo, como en el agrupamiento de g Pu 2908N, memoria 2922, una o más interfaces de red (por ejemplo, NIC 2924), uno o más procesadores de baja potencia opcionales 2920, un agrupamiento de cálculo de GPU 2918 y una interfaz de tejido 2917. La memoria 2922 puede ser, en diversas realizaciones, una memoria de sistema volátil o no volátil similar a la memoria 2912, o puede ser un agrupamiento de memoria de gráficos, tal como memoria DDR de gráficos (por ejemplo, GDDR5, GDDR5X, GDDR6, etc.). Los controladores de interfaz de red (por ejemplo, NIC 2924) pueden ser controladores de interfaz de red conocidos en la técnica, como con, por ejemplo, el NIC 2914. En una realización, los controladores de interfaz de red de los agrupamientos de GPU 2908A-2908N incluyen elementos programables o de procesamiento adicionales para facilitar la operación sin servidor del agrupamiento de GPU 2908A-2908N. Por ejemplo, uno de los servidores de CPU 2904A-2904N puede configurar un conjunto de direcciones y rutas estáticas para la duración de una sesión de inferencia. Un procesador de baja potencia operacional 2920 puede presentarse en uno o más de los agrupamientos de GPU 2908A-2908N para facilitar el movimiento de datos entre la memoria 2922 y la interfaz de tejido 2917. Como alternativa, la interfaz de tejido 2917 puede incluir recursos programables y/o recursos de procesamiento para realizar operaciones que, de otro modo, se realizarían, por un procesador de servidor, tal como uno de los procesadores de la agrupación de ejecución de aplicaciones 2910 de los servidores de CPU 2904A-2904N.
Como se muestra en la Figura 29B, un agrupamiento de aceleradores basado en GPU 2908 puede estructurase de una manera similar como el sistema de procesamiento 2400 como en la Figura 24A, con los procesadores 2402, 2404 de la Figura 24A retirados del chasis. En cambio, una agrupación de cálculo de GPU 2918 puede incluir múltiples procesadores de gráficos de propósito general (GPGPU) 2422A-2422D, 2424A-2424D, que pueden interconectarse a través de una malla de interconexiones de punto a punto, tal como NVHS/NVLink (por ejemplo, NVLink, NVLink 2.0, etc.). La agrupación de GPU 2918 puede interconectarse con el tejido de conmutador de alto ancho de banda 2906 mediante interfaces de tejido 2917A-2917D. Uno de los servidores de CPU (por ejemplo, el servidor de CPU 2904A) puede aprovisionar las interfaces de tejido 2917A-2917D, que pueden ser interfaces programables que tienen lógica de procesador.
La naturaleza específica de la interacción entre los servidores de CPU 2904A-2904N y el agrupamiento de GPU 2908 puede variar a través de realizaciones. En una realización, el agrupamiento de GPU 2908 se puede configurar para acoplar las GPGPU 2422A-2422D, 2424A-2424D como clientes de dispositivo de uno de los servidores de CPU 2904A-2904N como si las GPGPU estuvieran ubicadas dentro del chasis del respectivo servidor de CPU acoplado. En una realización, un único servidor de CPU (por ejemplo, el servidor de CPU 2904A) puede configurar el agrupamiento de GPU 2908 como un procesador de cálculo independiente que puede recibir directamente solicitudes de inferencia a través de la estructura de conmutación de alto ancho de banda 2904, o a través de un controlador de interfaz de red (por ejemplo, NIC 2924).
Una vez que el servidor de CPU 2904A configura el agrupamiento de GPU 2908, el servidor de CPU 2904A puede retirarse de la ruta de inferencia crítica. A continuación, el agrupamiento de GPU 2908 puede recibir directamente la solicitud de inferencia para procesamiento. Por ejemplo, un cliente de inferencia 2901, tal como un vehículo autónomo, un cliente de procesamiento del habla, un asistente virtual, etc., puede enviar datos formateados directamente al agrupamiento de GPU 2908 para su procesamiento a través de una red 2903 (por ejemplo, Internet), omitiendo los servidores de CPU 2904A-2904N.
En una realización, para habilitar la latencia reducida para implementaciones de inferencia de centro de datos, el agrupamiento de GPU 2908 puede ubicarse en el perímetro del centro de datos, en lugar de en el núcleo de centro de datos. En una realización, los agrupamientos de GPU sin servidor, que tienen coste total inferior de propiedad y requisitos de potencia inferiores, pueden colocarse más cerca de fuentes de solicitudes de inferencia que los despliegues de agrupamiento servidor/GPU existentes.
Como se muestra en la Figura 29C, un proceso 2930 para configurar agrupamientos de acelerador sin servidor para inferencia puede implementarse por un servidor de CPU. Una vez que se configura un agrupamiento de acelerador, el servidor de CPU puede retirarse de la ruta crítica de inferencia. Como alternativa, un único servidor de CPU puede acoplarse a múltiples agrupamientos de acelerador. Aunque se ilustran agrupamientos de GPU en la Figura 29A-29B, los agrupamientos de aceleradores pueden configurarse para usar diversos tipos de elementos de procesamiento optimizados de aprendizaje automático, incluyendo, pero sin limitación, GPGPU, FPGA, ASIC, u otros tipos de elementos de cálculo que están optimizados para cálculo de aprendizaje automático.
En una realización, como se muestra en el bloque 2932, el proceso 2930 incluye que un servidor de CPU reciba una solicitud para aprovisionar uno o más agrupamientos de aceleradores para su operación dentro de un centro de datos. El servidor de CPU puede determinar, en el bloque 2933, si el agrupamiento de aceleradores tendrá una configuración de agrupamiento sin servidor autónoma. Para una configuración de agrupamiento sin servidor autónoma, el servidor de CPU puede aprovisionar interfaces de red y tejido programables de los agrupamientos de acelerador para recibir directamente solicitudes de inferencia desde clientes, como se muestra en el bloque 2934. Recibir solicitudes de inferencia directa en el agrupamiento de aceleradores es recibir solicitudes de inferencia desde los dispositivos cliente, omitiendo el uso del servidor de CPU y el sistema operativo del servidor de CPU asociado. Si no se solicita una configuración sin servidor directa, el servidor de CPU puede aprovisionar las interfaces de red y tejido programables del uno o más agrupamientos de acelerador como dispositivos cliente del servidor de CPU, como se muestra en el bloque 2935. En esta configuración, múltiples agrupamientos de aceleradores pueden conectarse a un único servidor de CPU mediante el tejido de conmutación de alto ancho de banda. Los múltiples agrupamientos de aceleradores pueden operar a continuación como clientes de acelerador del servidor de CPU, permitiendo que un único servidor de CPU utilice directamente un mayor número de aceleradores. La sobrecarga asociada con la configuración de las interfaces programables de red para cargas de trabajo específicas se amortiza a través de largas cargas de trabajo de ejecución, ya que los agrupamientos de aceleradores es probable que permanezcan en una configuración aprovisionada para un periodo de tiempo. Tal configuración habilita una reducción en el número de servidores de CPU dentro de un centro de datos, con el número reducido de servidores de CPU potencialmente sustituidos por agrupamientos de acelerador.
Manejar fallos de hardware abruptos en un vehículo de conducción autónoma
En un sistema de aprendizaje automático distribuido, si falla una unidad de procesamiento de gráficos dentro del sistema, se puede habilitar un enrutamiento de emergencia alternativo de las operaciones de la red neuronal. La estructura de comunicación que habilita la comunicación entre nodos de cálculo y las GPU dentro de cada nodo de cálculo puede configurarse con grafos de comunicación alternativos. Si falla una CPU o GPU dentro de la red de entrenamiento distribuida, las operaciones de cálculo de la red neuronal se pueden reequilibrar a través de las porciones funcionales de la red de entrenamiento distribuida, con los datos de modelo o de parámetros asociados con la porción fallada se pueden redistribuir a otros nodos. Sin embargo, es crítico que los sistemas de inferencia, incluyendo los sistemas de inferencia distribuidos, puedan recuperarse de fallos de hardware abruptos, particularmente cuando estos fallos se producen dentro de un vehículo de conducción autónoma (ASDV) durante la operación. Si se produce un fallo de hardware en un sistema de inferencia de ASDV, especialmente cuando hay un pasajero presente, puede requerirse que el sistema se recupere de una forma que se preserve la seguridad del pasajero del vehículo, mientras se considera la seguridad de los pasajeros de otros vehículos cercanos. Por consiguiente, pueden requerirse múltiples capas de mecanismos de seguridad para habilitar que el vehículo, al menos, navegue hacia una ubicación segura y se detenga de manera segura. En vehículos en los que el control de conducción es posible, la opción está disponible para que el sistema señalice al conductor que tome el control del vehículo. En vehículos completamente autónomos en los que el control de pasajero es posible, el sistema de aprendizaje automático debe poder navegar a una parada segura.
Se describe en el presente documento hardware y software para habilitar un modo de emergencia para que un sistema de inferencia maneje o se recupere de un fallo de software de hardware abrupto. En una realización, se habilita una técnica de recuperación de fallo en cascada en la que se intenta la recuperación de error en el nivel de software. Si los esfuerzos de software no pueden devolver el sistema de inferencia a al menos funcionalidad parcial, pueden tomarse medidas basadas en hardware.
Si se detecta un fallo de software, por ejemplo, corrupción dentro de la pila de software, el sistema intentará reconstruir el modelo de datos basándose en puntos de comprobación que se capturan para conservar el estado de operación de los modelos de datos. Esta técnica puede ser de particular uso si se ha ajustado cualquier aspecto de modelo de datos actual en relación con un modelo de datos almacenado, por ejemplo, si se ha realizado o se encuentra actualmente en curso cualquier forma de reentrenamiento de red neuronal. Como se muestra en laFigura 30A,porciones del modelo de datos o de entrenamiento 3002 pueden conservarse como un punto de recuperación/traza 3004 que pueden usarse para reconstruir el modelo de datos en el caso de corrupción de software o de datos, por ejemplo, debido a fallos de software o eventos de fallo de hardware de un solo uso. El punto de recuperación/tazo 3004 puede usarse para reconstruir o recuperar datos, por ejemplo, si se requiere que las operaciones de procesamiento migren a un procesador o nodo diferente dentro de un sistema de cálculo de inferencia o de re-entrenamiento.
LaFigura 30Bilustra un sistema de procesamiento de aprendizaje automático 3000 que tiene múltiples redundancias, de acuerdo con una realización. El sistema de procesamiento de aprendizaje automático 3000, en una realización, es un sistema de procesamiento desplegado para su uso en, por ejemplo, en al menos un vehículo de conducción autónoma semi-autónomo. El sistema de procesamiento de aprendizaje automático 3000 incluye un conjunto de procesadores de inferencia 3010A-3010B, donde un primer procesador de inferencia 3010A es un procesador primario y un segundo procesador de inferencia 3010B se reserva como un procesador de respaldo. Los procesadores de inferencia 3010A-3010B puede cada uno estar presente en un circuito integrado de sistema en un chipo y tener acceso a un sistema de memoria y almacenamiento compartido.
Los procesadores de inferencia 3010A-3010B se acoplan con una interconexión 3012. La interconexión también se puede conectar con una interfaz de red externa 3018, un controlador a prueba de fallos 3016 y un procesador de información y entretenimiento 3014 y un procesador de propósito general 3015, tal como un procesador de aplicación o una unidad central de procesamiento (CPU). La interfaz de red externa 3018 puede ser una interfaz de datos inalámbrica, tal como una interfaz LTE o GSM. La interfaz de red externa 3018 puede habilitar la comunicación con un servidor en la nube 3020. El procesador de información y entretenimiento 3014 puede ser un procesador de gráficos que está especializado a proporcionar funcionalidad de representación de gráficos para habilitar una cabina virtual, un sistema de indicadores virtuales, un sistema de mapeo y navegación y/o una interfaz multimedia para el ASDV. El procesador de propósito general 3015 puede ser un procesador de aplicaciones que se usa para ejecutar las aplicaciones proporcionadas por el ASDV, y puede funcionar en conjunto con el procesador de información y entretenimiento 3014. El controlador a prueba de fallos 3016, en una realización, puede ser un microcontrolador o procesador de baja potencia que puede realizar un subconjunto de funciones proporcionadas por los procesadores de inferencia 3010A-3010B, el procesador de información y entretenimiento 3014, y/o el procesador de fin general 3015. El controlador a prueba de fallos puede sustituir temporalmente a tales procesadores en caso de que un error de software o hardware los deje inoperables. Adicionalmente, el controlador a prueba de fallos 3016 puede coordinar el traspaso de las operaciones de procesamiento entre procesadores compatibles en el caso de un fallo de hardware.
Manejar fallos de hardware abruptos en un vehículo de conducción autónoma puede realizarse como un proceso de múltiples fases. Los puntos de recuperación/trazo 3004, como en la Figura 30A, pueden transmitirse regularmente a un servidor en la nube 3020 mediante la interfaz de red externa. Además, el servidor en nube 3020 puede mantener un algoritmo de emergencia para una conducción segura que se puede recuperar a través de la interfaz de red externa 3018 en caso de una pérdida crítica de datos o funcionalidad del hardware, para permitir que el sistema de procesamiento de aprendizaje automático 3000, como mínimo, navegue el ASDV hasta una parada segura en una posición segura, tal como al lado de una carretera y fuera del camino del flujo de tráfico.
La lógica computacional 3100 asociada con un algoritmo adicional para manejar un fallo de hardware abrupto en un ASDV se muestra en laFigura 31.En una realización, la lógica computacional 3100, que puede proporcionarse por el firmware que se ejecuta en el controlador a prueba de fallos 3016 de la Figura 31B, puede monitorizar la operación de los diversos procesos de software y hardware dentro de un sistema de procesamiento de aprendizaje automático, tal como el sistema de procesamiento de aprendizaje automático 3000 como en la Figura 30B.
En una realización, el controlador a prueba de fallos puede detectar un fallo crítico en un elemento del sistema de procesamiento de red neuronal de conducción autónoma, como se muestra en el bloque 3102. El controlador a prueba de fallos puede desencadenar a continuación un reinicio de un sistema de software en el elemento fallido e intentar recargar el modelo de datos desde un punto de comprobación previamente conservado, como se muestra en el bloque 3104. El punto de comprobación previamente conservado puede cargarse desde almacenamiento local. Si el almacenamiento local no está disponible, puede cargarse un punto de comprobación previamente conservado desde un servidor en la nube mediante una interfaz de red externa. En una realización, recargar el modelo de datos desde el servidor en la nube también puede incluir pre-extraer un algoritmo para conducción segura para su potencial uso posterior en el proceso de recuperación. Si el controlador a prueba de fallos determina en el bloque 3105 que el sistema se ha recuperado como resultado del reseteo de sistema de software realizado en el bloque 3104, el controlador a prueba de fallos puede advertir de un error recuperable en el bloque 3106. La advertencia puede visualizarse a un operador del ASDV, registrarse en un sistema de registro y/o informarse a un servidor en la nube. Los errores recuperables repetidos pueden indicar un error de hardware crítico inminente.
Si el sistema no se recupera en el bloque 3105, el controlador a prueba de fallos puede determinar, en el bloque 3107, si están presentes recursos informáticos compartidos con el sistema fallido. Si un recurso compartido está disponible, como se determina en el bloque 3107, el controlador a prueba de fallos puede migrar el procesamiento de red neuronal al recurso informático compartido como se muestra en el bloque 3108. En caso de que un recurso informático compartido no esté disponible, como se determina en el bloque 3107, el controlador a prueba de fallos puede migrar la red neuronal o el modelo de datos al controlador a prueba de fallos, que puede configurarse con suficiente funcionalidad de procesamiento simplemente para navegar y conducir el ASDV hasta una parada segura en una ubicación segura fuera del flujo de tráfico.
Las capacidades específicas del procesador al que se ha migrado el procesamiento de red neuronal se pueden determinar en el bloque 3110. En respuesta a las capacidades detectadas, el controlador a prueba de fallos, o procesador primario actual, puede ajustar las características autónomas basándose en las capacidades actuales, como se muestra en el bloque 3112. Si hay un recurso informático equivalente disponible, por ejemplo, el procesador de inferencia 3010B en caso de fallo del procesador de inferencia 3010a , las operaciones pueden continuar de manera normal, aunque se puede dar una advertencia de componente fallido y se puede marcar el ASDV para servicio. En el caso de que esté disponible un recurso informático compartido no equivalente, puede aún realizare la migración, aunque las operaciones pueden continuar a un nivel de servicio potencialmente degradado. Por ejemplo, con referencia a la Figura 30, si un error de hardware provoca el fallo del procesador de inferencia 3010A y del procesador de inferencia 3010B, las operaciones pueden continuar con el procesador de propósito general 3015 y/o el procesador de información y entretenimiento 3014 realizando algunas de las operaciones de inferencia, aunque puede limitarse la funcionalidad de sistema global. Por ejemplo, puede imponerse una velocidad máxima baja en el ASDV debido al nivel de caudal de cálculo reducido disponible. Las características multimedia o de información y entretenimiento en tal modo operacional. Adicionalmente, la operación autónoma puede limitarse para navegar el ASDV a una ubicación segura para su recuperación. En una realización, el algoritmo para conducción segura previamente recuperado desde el servidor en la nube 3020 se puede cargar en el procesador de propósito general 3015 y/o en el procesador de información y entretenimiento 3014, donde el algoritmo ha sido optimizado específicamente para operar en hardware de procesamiento de respaldo.
LaFigura 32es un diagrama de bloques de un sistema de procesamiento de datos 3200, de acuerdo con las realizaciones descritas en el presente documento. El sistema de procesamiento de datos 3200 es un sistema de procesamiento heterogéneo que tiene procesador 3202, memoria unificada 3210 y una GPGPU 3220 que incluye lógica de aceleración de aprendizaje automático. El procesador 3202 y la GPGPU 3220 pueden ser cualquiera de los procesadores y GPGPU/procesadores paralelos, como se describe en el presente documento. El procesador 3202 puede ejecutar instrucciones para un compilador 3215 almacenado en la memoria de sistema 3212. El compilador 3215 se ejecuta en el procesador 3202 para compilar el código fuente 3214A en código compilado 3214B. El código compilado 3214B puede incluir código que puede ejecutarse por el procesador 3202 y/o código que puede ejecutarse por la GPGPU 3220. Durante la compilación, el compilador 3215 puede realizar operaciones para insertar metadatos, que incluyen sugerencias en cuanto al nivel de paralelismo de datos presente en el código compilado 3214B y/o sugerencias con respecto a la localidad de datos asociada con los hilos que van a despacharse basándose en el código compilado 3214B. El compilador 3215 puede incluir la información necesaria para realizar tales operaciones o las operaciones se pueden realizar con la asistencia de una biblioteca de tiempo de ejecución 3216, tal como la biblioteca de ajuste a escala de aprendizaje automático (MLSL) descrita en el presente documento. La biblioteca de tiempo de ejecución 3216 puede facilitar también al compilador 3215 en la compilación del código fuente 3214A e incluye instrucciones que están vinculadas en tiempo de ejecución con el código compilado 3214B para facilitar la ejecución de las instrucciones compiladas en la GPGPU 3220.
La memoria unificada 3210 representa un espacio de direcciones unificado al que pueden acceder el procesador 3202 y la GPGPU 3220. La memoria unificada incluye la memoria de sistema 3212, así como la memoria de GPGPU 3218. La memoria de GPGPU 3218 incluye la memoria local de GPGPU 3228 dentro de la GPGPU 3220 y también puede incluir parte o toda la memoria de sistema 3212. Por ejemplo, el código compilado 3214B almacenado en la memoria de sistema 3212 puede mapearse también en la memoria de GPGPU 3218 para su acceso por la GPGPU 3220.
La GPGPU 3220 incluye múltiples bloques de cálculo 3224A-3224N, cada uno de los cuales incluye una o más agrupaciones de procesamiento paralelo. La GPGPU 3220 también incluye un conjunto de registros 3224, memoria caché 3226 y un módulo de potencia y rendimiento 3225 que pueden usarse como recursos compartidos para los bloques de cálculo 3224A-3224N. El módulo de potencia y de rendimiento 3225 puede configurarse para ajustar el suministro de potencia y las frecuencias de reloj para los bloques de cálculo 3224A-3224N para controlar por alimentación componentes en espera dentro de los bloques de cálculo 3224A-3224N bajo cargas de trabajo intensas. La GPGPU 3220 incluye la memoria local de GPGPU 3228, que es una memoria física que comparte una tarjeta de gráficos o un módulo de múltiples chips con la GPGPU 3220.
En una realización, la GPGPU 3220 incluye lógica de aceleración de gráficos y de cálculo que incluye una unidad de extracción y descodificación de instrucciones 3221, una unidad de planificador 3222, y una unidad de función fija de aprendizaje automático 3223. La unidad de extracción y descodificación 3221 es una unidad de extracción y descodificación que incluye lógica para extraer y descodificar instrucciones a calcular por la GPGPU 3220. En una realización, las instrucciones ejecutadas pueden secuenciar y/o serializar, a través de la unidad de planificador 3222, un conjunto de operaciones y/o microoperaciones a realizar a través del bloque de cálculo 3224A-3224N y/o la unidad de función fija de aprendizaje automático 3223.
En una realización, la unidad de función fija de aprendizaje automático 3223 es un circuito integrado específico de la aplicación y exclusivamente configurado para realizar un gran número de operaciones de multiplicación paralelas. En una realización, la unidad de función fija de aprendizaje automático 3223 está configurada para realizar multiplicaciones matriciales para filtros de convolución que tienen tamaños de filtro no de potencia de dos. En una realización, la unidad de función fija de aprendizaje automático 3223 es una matriz de puertas programables en campo (FPGA) que proporciona lógica de función fija que puede actualizarse entre cargas de trabajo.
En algunas realizaciones, la GPGPU 3220 incluye una interfaz de tejido integrada 3230 y caché de interfaz de tejido 3232. En una realización, la interfaz de tejido integrada 3230 incluye adicionalmente un módulo de tejido de MLSL 3231 que habilita que la interfaz de tejido proporcione aceleración de hardware para ciertas operaciones de MLSL. La interfaz de tejido 3230 puede ser una variante del tejido de comunicaciones de alto rendimiento 1521 de la Figura 15B. La interfaz de tejido 3230 tiene un espacio de direcciones que está mapeado a al menos una porción de la memoria local de GPGPU 3228 y en una realización puede participar en la memoria unificada 3210 compartida por el procesador 3202 y la GPGPU 3220. La caché de interfaz de tejido 3232 se usa para almacenar en caché datos recibidos desde o transmitidos al tejido de comunicación que habilita la comunicación de datos entre nodos de cálculo. En una realización, cuando los resultados de cálculo se calculan por la GPGPU 3220 y se almacenan dentro de la memoria local de GPGPU 3228, la interfaz de tejido 3230 puede transmitir los datos a otros nodos de cálculo desde la memoria local de GPGPU 3228. En tal realización, no se requiere que se transmitan los datos a la memoria de sistema 3212 a menos que se requieran los datos para su uso por una aplicación que se ejecuta en el procesador 3202.
El módulo de tejido de MLSL 3231 está configurado para facilitar la transmisión de baja latencia de datos entre nodos. En una realización, el módulo de estructura de MLSL 3231 puede recibir un conjunto de direcciones dentro de la memoria local de GPGPU 3228 que están asociadas con objetos de datos gestionados por el tiempo de ejecución de MLSL (por ejemplo, la biblioteca de tiempo de ejecución 3216). Por ejemplo, un intervalo de direcciones para una memoria intermedia de salida para almacenar datos de activación a generar por la GPGPU 3220 pueden proporcionarse al módulo de tejido de MLSL 3231. El módulo de tejido de MLSL 3231 puede a continuación configurarse para monitorizar el intervalo de direcciones para actualizaciones. Cuando el intervalo de direcciones recibe una escritura de datos de activación emitidos por la GPGPU 3220, el módulo de estructura de MLSL 3231 puede planificar una transferencia directamente a la interfaz de estructura 3230 para transferir los datos de activación de salida. El módulo de tejido de MLSL 3231 también puede usarse para implementar las técnicas de comunicación de hardware de punto a punto y de comunicación de precisión descritas en el presente documento.
El protocolo soportado por la interfaz de tejido 3230 puede variar. En una realización, la interfaz de tejido 3230 es una interfaz de Ethernet de alta velocidad. En una realización, la interfaz de tejido 3230 es una interfaz de interconexión Omni-Path. En una realización, la interfaz de tejido 3230 es una interfaz InfiniBand. En una realización, la interfaz de tejido 3230 es una versión de la interfaz NVLink. También pueden soportarse otras tecnologías de interfaz de tejido.
Se debe apreciar que, para ciertas implementaciones, puede ser preferible un sistema menor o más equipado que el ejemplo descrito anteriormente. Por lo tanto, la configuración del sistema de procesamiento de datos 3200 puede variar a través de las implementaciones dependiendo de numerosos factores, tales como restricciones de precio, requisitos de rendimiento, mejoras tecnológicas u otras circunstancias. Las realizaciones descritas en el presente documento pueden encontrar un uso extensivo en entornos de entrenamiento de aprendizaje automático y cálculo de alto rendimiento. En consecuencia, la presente descripción anticipa que el sistema de procesamiento de datos 3200 y otros sistemas de procesamiento de datos y cálculo descritos en el presente documento se han de implementar como un servidor o matriz de servidores de alto rendimiento dentro de un sistema de cálculo distribuido. Tal sistema de cálculo distribuido puede implementarse dentro de un centro de datos o granja de servidores. Sin embargo, las realizaciones no se limitan a tal implementación, y las técnicas descritas en el presente documento también pueden encontrar uso en un sistema de cálculo distribuido a gran escala de dispositivos de rendimiento inferior, tales como, pero sin limitación, dispositivos móviles o portátiles, dispositivos informáticos de tableta o dispositivos de electrónica de consumo conectados.
Sistema de procesamiento de gráficos ilustrativo adicional
Los detalles de las realizaciones anteriormente descritas pueden incorporarse dentro de los sistemas de procesamiento de gráficos y los dispositivos descritos a continuación. Los dispositivos y el sistema de procesamiento de gráficos de laFigura 33a laFigura 37ilustran hardware de procesamiento de gráficos y sistemas que pueden implementar todas y cada una de las técnicas descritas anteriormente.
LaFigura 33es un diagrama de bloques que ilustra un sistema informático 3300 configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento. El sistema informático 3300 incluye un subsistema de procesamiento 3301 que tiene uno o más procesadores 3302 y una memoria de sistema 3304 que se comunica por medio de una ruta de interconexión que puede incluir un concentrador de memoria 3305. El concentrador de memoria 3305 puede ser un componente separado dentro de un componente de un conjunto de chips o puede estar integrado dentro del uno o más procesadores 3302. El concentrador de memoria 3305 se acopla con un subsistema de E/S 3311 mediante un enlace de comunicaciones 3306. El subsistema de E/S 3311 incluye un concentrador de E/S 3307 que puede posibilitar que el sistema informático 3300 reciba una entrada desde uno o más dispositivo de entrada 3308. Adicionalmente, el concentrador de E/S 3307 puede permitir que un controlador de visualización, que puede incluirse en el uno o más procesadores 3302, proporcione salidas para uno o más dispositivos de visualización 3310A. En una realización, el uno o más dispositivos de visualización 3310A acoplados con el concentrador de E/S 3307 pueden incluir un dispositivo de visualización local, interno o embebido.
En una realización, el subsistema de procesamiento 3301 incluye uno o más procesador o procesadores paralelos 3312 acoplados al concentrador de memoria 3305 mediante un bus u otro enlace de comunicación 3313. El enlace de comunicación 3313 puede ser uno de cualquier número de tecnologías o protocolos de enlace de comunicación basados en normas, tales como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones o tejido de comunicaciones específico de proveedor. En una realización, el uno o más procesadores paralelos 3312 forman un sistema de procesamiento paralelo o vectorial enfocado informáticamente que incluye un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tal como un procesador de muchos núcleos integrados (MIC). En una realización, el uno o más procesadores paralelos 3312 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno del uno o más o dispositivos de visualización 3310A acoplados a través del concentrador de E/S 3307. El uno o más procesadores paralelos 3312 pueden incluir también un controlador de visualización y una interfaz de visualización (no mostrados) para permitir una conexión directa a uno o más dispositivos de visualización 3310B.
Dentro del subsistema de E/S 3311, una unidad de almacenamiento de sistema 3314 puede conectarse al concentrador de E/S 3307 para proporcionar un mecanismo de almacenamiento para el sistema informático 3300. Se puede utilizar un conmutador de E/S 3316 para proporcionar un mecanismo de interfaz para permitir conexiones entre el concentrador de E/S 3307 y otros componentes, tales como un adaptador de red 3318 y/o un adaptador de red inalámbrica 3319 que pueden estar integrados en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivos de adición 3320. El adaptador de red 3318 puede ser un adaptador de Ethernet u otro adaptador de red cableada. El adaptador de red inalámbrica 3319 puede incluir uno o más de un dispositivo de red Wi-Fi, Bluetooth, de comunicación de campo cercano (NFC) o de otro tipo que incluye una o más radios inalámbricas.
El sistema informático 3300 puede incluir otros componentes no explícitamente mostrados, que incluyen USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo y similares que también puede conectarse al concentrador de E/S 3307. Las rutas de comunicación que interconectan los diversos componentes en la Figura 33 pueden implementarse utilizando cualquier protocolo adecuado, tal como protocolos basados en PCI (Interconexión de Componentes Periféricos) (por ejemplo, PCI-Express), o cualesquiera otras interfaces y/o protocolo o protocolos de comunicación de bus o de punto a punto, tales como la interconexión de alta velocidad NV-Link, o protocolos de interconexión conocidos en la técnica.
En una realización, el uno o más procesadores paralelos 3312 incorporan circuitería optimizada para procesamiento de gráficos y vídeo, incluyendo, por ejemplo, circuitería de salida de vídeo, y constituyen una unidad de procesamiento de gráficos (GPU). En otra realización, el uno o más procesadores paralelos 3312 incorporan circuitería optimizada para procesamiento de propósito general, mientras conservan la arquitectura computacional subyacente, descrita en mayor detalle en el presente documento. En otra realización más, los componentes del sistema informático 3300 pueden estar integrados con uno o más otros elementos de sistema en un único circuito integrado. Por ejemplo, el uno o más procesadores paralelos 3312, el concentrador de memoria 3305, el/los procesador(es) 3302 y el concentrador de E/S 3307 pueden integrarse en un circuito integrado de sistema en chip (SoC). Como alternativa, los componentes del sistema informático 3300 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 3300 se puede integrar en un módulo de múltiples chips (MCM), que se puede interconectar con otros módulos de múltiples chips en un sistema informático modular.
Se apreciará que el sistema informático 3300 mostrado en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, incluyendo el número y disposición de puentes, el número de procesador o procesadores 3302 y el número de procesador o procesadores paralelos 3312, puede modificarse como se desee. Por ejemplo, en algunas realizaciones, la memoria de sistema 3304 está conectada al procesador o procesadores 3302 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 3304 mediante el concentrador de memoria 3305 y el procesador o procesadores 3302. En otras topologías alternativas, el procesador o procesadores paralelos 3312 están conectados al concentrador de E/S 3307 o directamente a uno del uno o más procesadores 3302, en lugar de al concentrador de memoria 3305. En otras realizaciones, el concentrador de E/S 3307 y el concentrador de memoria 3305 pueden integrarse en un único chip. Algunas realizaciones pueden incluir dos o más conjuntos de procesador o procesadores 3302 conectados mediante múltiples zócalos, que pueden acoplarse con dos o más instancias del procesador o procesadores paralelos 3312.
Algunos de los componentes particulares mostrados en el presente documento son opcionales y pueden no incluirse en todas las implementaciones del sistema informático 3300. Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos de adición o se pueden eliminar algunos componentes. Además, algunas arquitecturas pueden usar una terminología diferente para componentes similares a los ilustrados en la Figura 33. Por ejemplo, el concentrador de memoria 3305 puede denominarse puente norte en algunas arquitecturas, mientras que el concentrador de E/S 3307 puede denominarse puente sur.
LaFigura 34Ailustra un procesador en paralelo 3400, de acuerdo con una realización. Los diversos componentes del procesador paralelo 3400 pueden implementarse usando uno o más dispositivos de circuito integrado, tal como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o matrices de puertas programables en campo (FPGA). El procesador paralelo 3400 ilustrado es una variante del uno o más procesadores paralelos 3312 mostrados en la Figura 33, de acuerdo con una realización.
En una realización, el procesador paralelo 3400 incluye una unidad de procesamiento paralelo 3402. La unidad de procesamiento paralelo incluye una unidad de E/S 3404 que permite una comunicación con otros dispositivos, que incluyen otras instancias de la unidad de procesamiento paralelo 3402. La unidad de E/S 3404 puede conectarse directamente a otros dispositivos. En una realización, la unidad de E/S 3404 se conecta con otros dispositivos por medio de la utilización de una interfaz de concentrador o de conmutador, tal como, por ejemplo, un concentrador de memoria 3305. Las conexiones entre el concentrador de memoria 3305 y la unidad de E/S 3404 forman un enlace de comunicación 3313. Dentro de la unidad de procesamiento paralelo 3402, la unidad de E/S 3404 se conecta con una interfaz de anfitrión 3406 y una barra transversal de memoria 3416, donde la interfaz de anfitrión 3406 recibe comandos dirigidos a realizar operaciones de procesamiento y la barra transversal de memoria 3416 recibe comandos dirigidos a realizar operaciones de memoria.
Cuando la interfaz de anfitrión 3406 recibe una memoria intermedia de comandos mediante la unidad de E/S 3404, la interfaz de anfitrión 3406 puede dirigir operaciones de trabajo para realizar aquellos comandos a un extremo frontal 3408. En una realización, el extremo frontal 3408 se acopla con un planificador 3410, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupaciones de procesamiento 3412. En una realización, el planificador 3410 garantiza que la matriz de agrupaciones de procesamiento 3412 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 3412. En una realización, el planificador 3410 se implementa mediante una lógica de firmware que se ejecuta en un microcontrolador. El planificador implementado por microcontrolador 3410 se puede configurar para realizar operaciones de planificación compleja y distribución de trabajo con granularidad gruesa y fina, lo que permite dar prioridad de manera rápida y la conmutación de contexto de hilos que se ejecutan en la matriz de procesamiento 3412. En una realización, el software de anfitrión puede demostrar cargas de trabajo para la planificación en la matriz de procesamiento 3412 mediante uno de múltiples timbres de procesamiento de gráficos. Las cargas de trabajo, a continuación, pueden distribuirse automáticamente a través de la matriz de procesamiento 3412 por la lógica del planificador 3410 dentro del microcontrolador de planificador.
La matriz de agrupaciones de procesamiento 3412 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, de la agrupación 3414A, agrupación 3414B a la agrupación 3414N). Cada agrupación 3414A-3414N de la matriz de agrupaciones de procesamiento 3412 puede ejecutar un gran número de hilos concurrentes. El planificador 3410 puede asignar trabajo a las agrupaciones 3414A-3414N de la matriz de agrupaciones de procesamiento 3412 usando diversos algoritmos de planificación y/o de distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo. La planificación puede manejarse dinámicamente por el planificador 3410, o puede ser ayudada, en parte, por lógica de compilador durante la compilación de la lógica de programa configurada para la ejecución por la matriz de agrupaciones de procesamiento 3412. En una realización, pueden asignarse diferentes agrupaciones 3414A-3414N de la matriz de agrupaciones de procesamiento 3412 para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
La matriz de agrupaciones de procesamiento 3412 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. En una realización, la matriz de agrupaciones de procesamiento 3412 está configurada para realizar operaciones de cálculo paralelo de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 3412 puede incluir lógica para ejecutar tareas de procesamiento que incluyen filtración de datos de vídeo y/o de audio, realización de operaciones de modelado, que incluyen operaciones físicas y realización de transformaciones de datos.
En una realización, la matriz de agrupaciones de procesamiento 3412 está configurada para realizar operaciones de procesamiento de gráficos paralelo. En realizaciones en las que el procesador paralelo 3400 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 3412 puede incluir una lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, incluyendo, pero sin limitación, una lógica de muestreo de textura para realizar operaciones de textura, así como una lógica de teselación y otra lógica de procesamiento de vértices. Adicionalmente, la matriz de agrupaciones de procesamiento 3412 puede configurarse para ejecutar programas de sombreador relacionados con el procesamiento de gráficos tales como, pero sin limitación, sombreadores de vértices, sombreadores de teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento paralelo 3402 puede transferir datos desde la memoria de sistema por medio de la unidad de E/S 3404 para su procesamiento. Durante el procesamiento, los datos transferidos se pueden almacenar en la memoria en chip (por ejemplo, la memoria de procesador paralelo 3422) durante el procesamiento y, a continuación, escribirse de nuevo en la memoria de sistema.
En una realización, cuando se usa la unidad de procesamiento paralelo 3402 para realizar el procesamiento de gráficos, el planificador 3410 puede estar configurado para dividir la carga de trabajo de procesamiento en tareas de tamaño aproximadamente igual, para posibilitar mejor la distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 3414A-3414N de la matriz de agrupaciones de procesamiento 3412. En algunas realizaciones, porciones de la matriz de agrupaciones de procesamiento 3412 pueden configurarse para realizar diferentes tipos de procesamiento. Por ejemplo, una primera porción puede configurarse para realizar un sombreado de vértices y una generación de topología, una segunda porción puede configurarse para realizar sombreado de teselación y de geometría, y una tercera porción puede configurarse para realizar sombreado de píxeles u otras operaciones de espacio de pantalla, para producir una imagen representada para su visualización. Los datos intermedios producidos por una o más de las agrupaciones 3414A-3414N pueden almacenarse en memorias intermedias para permitir que se transmitan los datos intermedios entre las agrupaciones 3414A-3414N para su procesamiento adicional.
Durante la operación, la matriz de agrupaciones de procesamiento 3412 puede recibir tareas de procesamiento que se van a ejecutar a través del planificador 3410, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 3408. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos a procesar, por ejemplo, datos de superficie (parche), datos de primitiva, datos de vértices y/o datos de píxel, así como parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa ha de ejecutarse). El planificador 3410 puede configurarse para extraer los índices correspondientes a las tareas o puede recibir los índices desde el extremo frontal 3408. El extremo frontal 3408 puede configurarse para garantizar que la matriz de agrupaciones de procesamiento 3412 está configurada en un estado válido antes de que se inicie la carga de trabajo especificada por memorias intermedias de comandos entrantes (por ejemplo, memorias intermedias por lotes, memorias intermedias de inserción, etc.).
Cada una de las una o más instancias de la unidad de procesamiento paralelo 3402 puede acoplarse con memoria de procesador paralelo 3422. Se puede acceder a la memoria de procesador paralelo 3422 mediante la barra transversal de memoria 3416, que puede recibir solicitudes de memoria desde la matriz de agrupaciones de procesamiento 3412, así como desde la unidad de E/S 3404. La barra transversal de memoria 3416 puede acceder a la memoria de procesador paralelo 3422 mediante una interfaz de memoria 3418. La interfaz de memoria 3418 puede incluir múltiples unidades de subdivisión (por ejemplo, la unidad de subdivisión 3420A, la unidad de subdivisión 3420B, hasta la unidad de subdivisión 3420N) pudiendo cada una acoplarse a una porción (por ejemplo, unidad de memoria) de la memoria de procesador paralelo 3422. En una implementación, el número de unidades de subdivisión 3420A-3420N está configurado para que sea igual al número de unidades de memoria, de manera que una primera unidad de subdivisión 3420A tiene una primera unidad de memoria 3424A correspondiente, una segunda unidad de subdivisión 3420B tiene una unidad de memoria 3424B correspondiente y una N-ésima unidad de subdivisión 3420N tiene una N-ésima unidad de memoria 3424N correspondiente. En otras realizaciones, el número de unidades de subdivisión 3420A-3420N puede no ser igual al número de dispositivos de memoria.
En diversas realizaciones, las unidades de memoria 3424A-3424N pueden incluir diversos tipos de dispositivos de memoria, incluyendo memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como una memoria de acceso aleatorio de gráficos sincrónica (SGRAM), incluyendo una memoria de tasa de datos doble de gráficos (GDDR). En una realización, las unidades de memoria 3424A-3424N pueden incluir también memoria 3D apilada, que incluye, pero sin limitación, memoria de alto ancho de banda (HBM). Los expertos en la materia apreciarán que la implementación específica de las unidades de memoria 3424A-3424N puede variar y puede seleccionarse a partir de uno de diversos diseños convencionales. Los objetivos de representación, tales como las memorias intermedias de fotograma o los mapas de textura pueden almacenarse a lo largo de las unidades de memoria 3424A-3424N, permitiendo que las unidades de subdivisión 3420A-3420N escriban porciones de cada objetivo de representación en paralelo para usar de manera eficiente el ancho de banda disponible de la memoria de procesador paralelo 3422. En algunas realizaciones, puede excluirse una instancia local de la memoria de procesador paralelo 3422 en favor de un diseño de memoria unificado que utiliza memoria de sistema junto con memoria caché local.
En una realización, una cualquiera de las agrupaciones 3414A-3414N de la matriz de agrupaciones de procesamiento 3412 puede procesar datos que se escribirán en cualquiera de las unidades de memoria 3424A-3424N dentro de la memoria de procesador paralelo 3422. La barra transversal de memoria 3416 puede configurarse para transferir la salida de cada agrupación 3414A-3414N a cualquier unidad de subdivisión 3420A-3420N o a otra agrupación 3414A-3414N, que puede realizar operaciones de procesamiento adicionales en la salida. Cada agrupación 3414A-3414N puede comunicarse con la interfaz de memoria 3418 a través de la barra transversal de memoria 3416 para leer desde o escribir en diversos dispositivos de memoria externos. En una realización, la barra transversal de memoria 3416 tiene una conexión a la interfaz de memoria 3418 para comunicarse con la unidad de E/S 3404, así como una conexión a una instancia local de la memoria de procesador paralelo 3422, lo que posibilita que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 3414A-3414N se comuniquen con la memoria de sistema u otra memoria que no sea local a la unidad de procesamiento paralelo 3402. En una realización, la barra transversal de memoria 3416 puede usar canales virtuales para separar flujos de tráfico entre las agrupaciones 3414A-3414N y las unidades de subdivisión 3420A-3420N.
Aunque se ilustra una única instancia de la unidad de procesamiento paralelo 3402 dentro del procesador paralelo 3400, puede incluirse cualquier número de instancias de la unidad de procesamiento paralelo 3402. Por ejemplo, pueden proporcionarse múltiples instancias de la unidad de procesamiento paralelo 3402 en una única tarjeta de adición, o pueden interconectarse múltiples tarjetas de adición. Las diferentes instancias de la unidad de procesamiento paralelo 3402 pueden configurarse para interoperar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria de procesador paralelo local y/u otras diferencias de configuración. Por ejemplo, en una realización, algunas instancias de la unidad de procesamiento paralelo 3402 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 3402 o el procesador paralelo 3400 pueden implementarse en una diversidad de configuraciones y factores de forma, incluyendo, pero sin limitación, sobremesa, portátil u ordenadores personales portátiles, servidores, estaciones de trabajo, consolas de juegos y/o sistemas integrados.
LaFigura 34Bes un diagrama de bloques de una unidad de subdivisión 3420, de acuerdo con una realización. En una realización, la unidad de subdivisión 3420 es una instancia de una de las unidades de subdivisión 3420A-3420N de la Figura 34A. Como se ilustra, la unidad de subdivisión 3420 incluye una caché L23421, una interfaz de memoria intermedia de fotogramas 3425 y una ROP 3426 (unidad de operaciones de rasterización). La caché L23421 es una caché de lectura/escritura que está configurada para realizar operaciones de carga y de almacenamiento recibidas desde la barra transversal de memoria 3416 y la ROP 3426. Los errores de lectura y las solicitudes urgentes de escritura se emiten por la memoria caché L2, 3421, a la interfaz de memoria intermedia de fotogramas 3425 para su procesamiento. Las actualizaciones también se pueden enviar a la memoria intermedia de fotogramas a través de la interfaz de memoria intermedia de fotogramas 3425 para su procesamiento. En una realización, la interfaz de memoria intermedia de fotogramas 3425 interactúa con una de las unidades de memoria en la memoria de procesador paralelo, tal como las unidades de memoria 3424A-3424N de la Figura 34 (por ejemplo, dentro de la memoria de procesador paralelo 3422).
En las aplicaciones de gráficos, la ROP 3426 es una unidad de procesamiento que realiza operaciones de rasterización tales como estarcido, prueba z, mezcla y similares. La ROP 3426 emite, a continuación, datos de gráficos procesados que se almacenan en memoria de gráficos. En algunas realizaciones, la ROP 3426 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. La lógica de compresión puede ser lógica de compresión sin pérdidas, que hace uso de uno o más de múltiples algoritmos de compresión. El tipo de compresión que se realiza por la ROP 3426 puede variar basándose en las características estadísticas de los datos que van a comprimirse. Por ejemplo, en una realización, se realiza una compresión de color delta sobre datos de profundidad y de color por tesela.
En algunas realizaciones, la ROP 3426 se incluye dentro de cada agrupación de procesamiento (por ejemplo, la agrupación 3414A-3414N de la Figura 34) en lugar de dentro de la unidad de subdivisión 3420. En tal realización, se transmiten solicitudes de lectura y de escritura de datos de píxel a través de la barra transversal de memoria 3416 en lugar de datos de fragmento de píxel. Los datos de gráficos procesados pueden visualizarse en un dispositivo de visualización, tal como uno del uno o más dispositivo o dispositivos de visualización 3310 de la Figura 33, encaminarse para su procesamiento adicional por el procesador o procesadores 3302, o encaminarse para su procesamiento adicional por una de las entidades de procesamiento dentro del procesador paralelo 3400 de la Figura 34A.
LaFigura 34Ces un diagrama de bloques de una agrupación de procesamiento 3414 dentro de una unidad de procesamiento paralelo, de acuerdo con una realización. En una realización, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 3414A-3414N de la Figura 34. La agrupación de procesamiento 3414 puede configurarse para ejecutar muchos hilos en paralelo, donde el término "hilo" se refiere a una instancia de un programa particular que se ejecuta en un conjunto particular de datos de entrada. En algunas realizaciones, se usan técnicas de emisión de instrucciones de única instrucción, de múltiples datos (SIMD) para soportar la ejecución paralela de un gran número de hilos sin proporcionar múltiples unidades de instrucción independientes. En otras realizaciones, se usan técnicas de única instrucción, 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 entenderán que un régimen de procesamiento de SIMD representa un subconjunto funcional de un régimen de procesamiento de SIMT.
La operación de la agrupación de procesamiento 3414 se puede controlar por medio de un gestor de canalizaciones 3432 que distribuye tareas de procesamiento a procesadores paralelos de SIMT. El gestor de canalizaciones 3432 recibe instrucciones desde el planificador 3410 de la Figura 34 y gestiona la ejecución de estas instrucciones mediante un multiprocesador de gráficos 3434 y/o una unidad de texturas 3436. El multiprocesador de gráficos 3434 ilustrado es una instancia ilustrativa de un procesador paralelo de SIMT. Sin embargo, pueden incluirse diversos tipos de procesadores paralelos de SIMT de arquitecturas diferentes dentro de la agrupación de procesamiento 3414. Una o más instancias del multiprocesador de gráficos 3434 pueden incluirse dentro de una agrupación de procesamiento 3414. El multiprocesador de gráficos 3434 puede procesar datos y puede usarse una barra transversal de datos 3440 para distribuir los datos procesados a uno de múltiples posibles destinos, que incluyen otras unidades de sombreador. El gestor de canalizaciones 3432 puede facilitar la distribución de los datos procesados mediante la especificación de destinos para los datos procesados que se distribuirán a través de la barra transversal de datos 3440.
Cada multiprocesador de gráficos 3434 dentro de la agrupación de procesamiento 3414 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades aritmético-lógicas, unidades de cargaalmacenamiento, etc.). La lógica de ejecución funcional puede configurarse de una manera canalizada en la que pueden emitirse nuevas instrucciones antes de que se hayan completado instrucciones previas. La lógica de ejecución funcional soporta una diversidad de operaciones, incluyendo aritmética de números enteros y de coma flotante, operaciones de comparación, operaciones booleanas, desplazamiento de bits y cálculo de diversas funciones algebraicas. En una realización, puede aprovecharse el mismo hardware de unidades funcionales para realizar diferentes operaciones, y puede estar presente cualquier combinación de unidades funcionales.
Las instrucciones transmitidas a la agrupación de procesamiento 3414 constituyen un hilo. Un conjunto de hilos que se ejecutan a lo largo del conjunto de motores de procesamiento paralelo es un grupo de hilos. Un grupo de hilos ejecuta el mismo programa en diferentes datos de entrada. Cada hilo dentro de un grupo de hilos puede asignarse a un motor de procesamiento diferente dentro de un multiprocesador de gráficos 3434. Un grupo de hilos puede incluir menos hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 3434. Cuando un grupo de hilos incluye menos hilos que el número de motores de procesamiento, uno o más de los motores de procesamiento pueden estar inactivos durante los ciclos en los que se está procesando ese grupo de hilos. Un grupo de hilos puede incluir también más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 3434. Cuando el grupo de hilos incluye más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 3434, puede realizarse un procesamiento a lo largo de ciclos de reloj consecutivos. En una realización, pueden ejecutarse múltiples grupos de hilos concurrentemente en un multiprocesador de gráficos 3434.
En una realización, el multiprocesador de gráficos 3434 incluye una memoria caché interna para realizar operaciones de carga y almacenamiento. En una realización, el multiprocesador de gráficos 3434 puede prescindir de una caché interna y usar una memoria caché (por ejemplo, la caché L1 3448) dentro de la agrupación de procesamiento 3414. Cada multiprocesador de gráficos 3434 también tiene acceso a cachés L2 dentro de las unidades de subdivisión (por ejemplo, las unidades de subdivisión 3420A-3420N de la Figura 34) que se comparten entre todas las agrupaciones de procesamiento 3414 y pueden usarse para transferir datos entre hilos. El multiprocesador de gráficos 3434 puede acceder también a una memoria global fuera de chip, que puede incluir una o más de una memoria de procesador paralelo local y/o una memoria de sistema. Puede usarse cualquier memoria externa a la unidad de procesamiento paralelo 3402 como memoria global. Las realizaciones en las que la agrupación de procesamiento 3414 incluye múltiples instancias del multiprocesador de gráficos 3434 pueden compartir instrucciones y datos comunes, que se pueden almacenar en la caché L1,3448.
Cada agrupación de procesamiento 3414 puede incluir una MMU 3445 (unidad de gestión de memoria) que está configurada para mapear direcciones virtuales en direcciones físicas. En otras realizaciones, una o más instancias de la MMU 3445 pueden residir dentro de la interfaz de memoria 3418 de la Figura 34. La MMU 3445 incluye un conjunto de entradas de tabla de página (PTE) usadas para mapear una dirección virtual con una dirección física de una tesela y, opcionalmente, un índice de líneas de caché. La MMU 3445 puede incluir memorias intermedias de traducción adelantada (TLB) de direcciones o cachés que pueden residir dentro del multiprocesador de gráficos 3434 o la caché L1 o la agrupación de procesamiento 3414. La dirección física se procesa para distribuir la localidad de acceso a los datos de superficie para permitir un entrelazado eficiente de solicitudes entre unidades de subdivisión. El índice de líneas de caché se puede utilizar para determinar si una solicitud de una línea de caché es un acierto o un error.
En aplicaciones de gráficos y de cálculo, una agrupación de procesamiento 3414 puede configurarse de manera que cada multiprocesador de gráficos 3434 esté acoplado a una unidad de texturas 3436 para realizar operaciones de mapeo de textura, por ejemplo, determinar posiciones de muestras de textura, leer datos de textura y filtrar los datos de textura. Los datos de textura se leen desde una caché L1 de textura interna (no mostrada) o, en algunas realizaciones, desde la caché L1 dentro del multiprocesador de gráficos 3434 y se extraen desde una caché L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador de gráficos 3434 emite tareas procesadas a la barra transversal de datos 3440 para proporcionar la tarea procesada a otra agrupación de procesamiento 3414 para su procesamiento adicional o para almacenar la tarea procesada en una caché de L2, memoria de procesador paralelo local o memoria de sistema mediante la barra transversal de memoria 3416. Una preROP 3442 (unidad de operaciones previas a la rasterización) está configurada para recibir datos desde el multiprocesador de gráficos 3434, dirigir datos a las unidades de ROP, que pueden estar ubicadas con unidades de subdivisión como se describe en el presente documento (por ejemplo, las unidades de subdivisión 3420A-3420N de la Figura 34). La unidad preROP 3442 puede realizar optimizaciones para la mezcla de color, organizar datos de color de píxel y realizar traducciones de dirección.
Se apreciará que, la arquitectura de núcleo descrita en el presente documento es ilustrativa y que son posibles variaciones y modificaciones. Cualquier número de unidades de procesamiento, por ejemplo, multiprocesador de gráficos 3434, unidades de texturas 3436, preROP 3442, etc., pueden incluirse dentro de una agrupación de procesamiento 3414. Además, aunque solo se muestra una agrupación de procesamiento 3414, una unidad de procesamiento paralelo como se describe en el presente documento puede incluir cualquier número de instancias de la agrupación de procesamiento 3414. En una realización, cada agrupación de procesamiento 3414 puede estar configurada para operar independientemente de otras agrupaciones de procesamiento 3414 utilizando unidades de procesamiento separadas y distintas, cachés L1, etc.
La Figura 34D muestra un multiprocesador de gráficos 3434, de acuerdo con una realización. En tal realización, el multiprocesador gráfico 3434 se acopla con el gestor de canalización 3432 de la agrupación de procesamiento 3414. El multiprocesador de gráficos 3434 tiene una canalización de ejecución que incluye, pero sin limitación, una caché de instrucciones 3452, una unidad de instrucción 3454, una unidad de mapeo de direcciones 3456, un archivo de registro 3458, uno o más núcleos de unidad de procesamiento de gráficos de propósito general (GPGPU) 3462 y una o más unidades de carga/almacenamiento 3466. Los núcleos de GPGPU 3462 y las unidades de carga/almacenamiento 3466 se acoplan con la memoria caché 3472 y la memoria compartida 3470 mediante una interconexión de memoria y caché 3468.
En una realización, la caché de instrucciones 3452 recibe un flujo de instrucciones para ejecutarse desde el gestor de canalizaciones 3432. Las instrucciones se almacenan en caché en la caché de instrucciones 3452 y son despachadas para su ejecución por la unidad de instrucciones 3454. La unidad de instrucciones 3454 puede despachar instrucciones como grupos de hilos (por ejemplo, urdimbres), con cada hilo del grupo de hilos asignado a una unidad de ejecución diferente dentro del núcleo GPGPU 3462. Una instrucción puede acceder a cualquiera de un espacio de direcciones local, compartido o global especificando una dirección dentro de un espacio de direcciones unificado. Se puede utilizar la unidad de mapeo de direcciones 3456 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 3466.
El archivo de registro 3458 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 3434. El archivo de registro 3458 proporciona almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, los núcleos de GPGPU 3462, las unidades de carga/almacenamiento 3466) del multiprocesador de gráficos 3434. En una realización, el archivo de registro 3458 se divide entre cada una de las unidades funcionales de tal manera que a cada unidad funcional se le asigna una porción especializada del archivo de registro 3458. En una realización, el archivo de registros 3458 se divide entre las diferentes urdimbres que son ejecutados por el multiprocesador de gráficos 3434.
Cada núcleo de GPGPU 3462 puede incluir unidades de coma flotante (FPU) y/o unidades aritmético-lógicas (ALU) de números enteros que se usan para ejecutar instrucciones del multiprocesador de gráficos 3434. Los núcleos de GPGPU 3462 pueden ser similares en arquitectura o pueden diferir en arquitectura, de acuerdo con las realizaciones. Por ejemplo, en una realización, una primera porción de los núcleos de GPGPU 3462 incluye una FPU de precisión sencilla y una ALU de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. En una realización, las FPU pueden implementar la norma IEEE 754-2008 para aritmética de coma flotante o posibilitar aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 3434 puede incluir adicionalmente una o más unidades de función fija o de función especial para realizar funciones específicas tales como operaciones de copiar rectángulo o de mezcla de píxeles. En una realización, uno o más de los núcleos de GPGPU puede incluir también una lógica de función fija o especial.
En una realización, los núcleos de GPGPU 3462 incluyen una lógica de SIMD que puede realizar una única instrucción en múltiples conjuntos de datos. En una realización, los núcleos de GPGPU 3462 pueden ejecutar físicamente instrucciones S iMd4, SIMD8 y SIMD16 y ejecutar lógicamente instrucciones SIMD1, SIMD2 y SIMD32. Las instrucciones de SIMD para los núcleos de GPGPU pueden generarse en el momento de compilación por un compilador de sombreador o generarse automáticamente cuando se ejecutan programas escritos y compilados para arquitecturas de datos de múltiples programas sencillos (SPMD) o SIMT. Se pueden ejecutar múltiples hilos de un programa configurado para el modelo de ejecución de SIMT por medio de una única instrucción de SIMD. Por ejemplo, y en una realización, ocho hilos SIMT pueden realizar las mismas operaciones o similares que pueden ejecutarse en paralelo mediante una unidad lógica SIMD8 sencilla.
La interconexión de memoria y caché 3468 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 3434 al archivo de registro 3458 y a la memoria compartida 3470. En una realización, la interconexión de memoria y caché 3468 es una interconexión de barra transversal que permite que la unidad de carga/almacenamiento 3466 implemente operaciones de carga y almacenamiento entre la memoria compartida 3470 y el archivo de registro 3458. El archivo de registro 3458 puede operar a la misma frecuencia que los núcleos de GPGPU 3462, por tanto, la transferencia de datos entre los núcleos de GPGPU 3462 y el archivo de registro 3458 tiene una latencia muy baja. La memoria compartida 3470 puede usarse para posibilitar la comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 3434. La memoria caché 3472 puede usarse como una caché de datos, por ejemplo, para almacenar en caché datos de textura comunicados entre las unidades funcionales y la unidad de texturas 3436. La memoria compartida 3470 puede usarse también como una caché gestionada por programa. Los hilos que se ejecutan en los núcleos de GPGPU 3462 pueden almacenar datos mediante programación dentro de la memoria compartida además de los datos almacenados en memoria caché automáticamente que se almacenan dentro de la memoria caché 3472.
Las Figuras 35A-35Bilustran multiprocesadores de gráficos adicionales, de acuerdo con realizaciones. Los multiprocesadores de gráficos 3525, 3550 ilustrados son variantes del multiprocesador de gráficos 3434 de la Figura 34C. Los multiprocesadores de gráficos 3525, 3550 ilustrados pueden estar configurados como un multiprocesador de envío por flujo continuo (SM) que puede realizar la ejecución simultánea de un gran número de hilos de ejecución.
La Figura 35A muestra un multiprocesador de gráficos 3525 de acuerdo con una realización adicional. El multiprocesador de gráficos 3525 incluye múltiples instancias adicionales de unidades de recurso de ejecución relativas al multiprocesador de gráficos 3434 de la Figura 34D. Por ejemplo, el multiprocesador de gráficos 3525 puede incluir múltiples instancias de la unidad de instrucciones 3532A-3532B, el archivo de registro 3534A-3534B y la unidad o unidades de textura 3544A-3544B. El multiprocesador de gráficos 3525 también incluye múltiples conjuntos de unidades de ejecución de cálculo o de gráficos (por ejemplo, el núcleo de GPGPU 3536A-3536B, el núcleo de GPGPU 3537A-3537B, el núcleo de GPGPU 3538A-3538B) y múltiples conjuntos de unidades de carga/almacenamiento 3540A-3540B. En una realización, las unidades de recurso de ejecución tienen una caché de instrucciones común 3530, una memoria caché de textura y/o de datos 3542 y una memoria compartida 3546.
Los diversos componentes pueden comunicarse mediante un tejido de interconexión 3527. En una realización, el tejido de interconexión 3527 incluye uno o más conmutadores de barra transversal para posibilitar la comunicación entre los diversos componentes del multiprocesador de gráficos 3525. En una realización, el tejido de interconexión 3527 es una capa de tejido de red de alta velocidad separada en la que se apila cada componente del multiprocesador de gráficos 3525. Los componentes del multiprocesador de gráficos 3525 se comunican con componentes remotos mediante el tejido de interconexión 3527. Por ejemplo, cada uno de los núcleos de GPGPU 3536A-3536B, 3537A-3537B y 35378A-3538B puede comunicarse con la memoria compartida 3546 mediante el tejido de interconexión 3527. El tejido de interconexión 3527 puede arbitrar la comunicación dentro del multiprocesador de gráficos 3525 para garantizar una asignación de ancho de banda equitativa entre los componentes.
La Figura 35B muestra un multiprocesador de gráficos 3550 de acuerdo con una realización adicional. El procesador de gráficos incluye múltiples conjuntos de recursos de ejecución 3556A-3556D, donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucciones, archivos de registro, núcleos de GPGPU y unidades de almacenamiento de carga, como se ilustra en la Figura 354D y la Figura 35A. Los recursos de ejecución 3556A-3556D pueden trabajar en concierto con la unidad o unidades de textura 3560A-3560D para operaciones de textura, mientras comparten una caché de instrucciones 3554, y memoria compartida 3562. En una realización, los recursos de ejecución 3556A-3556D pueden compartir una caché de instrucciones 3554 y una memoria compartida 3562, así como múltiples instancias de una memoria caché de textura y/o de datos 3558A-3558B. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 3552 similar al tejido de interconexión 3527 de la Figura 35A.
Los expertos en la materia comprenderán que la arquitectura descrita en las Figuras 33, 34A-34D y 35A-35B es descriptiva. Por lo tanto, las técnicas descritas en el presente documento pueden implementarse en cualquier unidad de procesamiento configurada apropiadamente, incluyendo, sin limitación, uno o más procesadores de aplicaciones móviles, una o más unidades centrales de procesamiento (CPU) de sobremesa o de servidor, incluyendo CPU de múltiples núcleos, una o más unidades de procesamiento paralelo, tales como la unidad de procesamiento paralelo 3402 de la Figura 34, así como uno o más procesadores de gráficos o unidades de procesamiento de propósito especial, sin apartarse del alcance de las realizaciones descritas en el presente documento.
En algunas realizaciones, un procesador paralelo o GPGPU como se describe en el presente documento está acoplado de manera comunicativa a núcleos de anfitrión/procesador para acelerar operaciones de gráficos, operaciones de aprendizaje automático, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede acoplarse de manera comunicativa al procesador/núcleos de anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU puede integrarse en el mismo paquete o chip que los núcleos y acoplarse de manera comunicativa a los núcleos a través de un bus/interconexión de procesador interno (es decir, internamente al paquete o chip). Independientemente de la manera en la que esté conectada la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza circuitos/lógica dedicados para procesar de manera eficiente estos comandos/instrucciones.
Técnicas para la interconexión de GPU a procesador de anfitrión
LaFigura 36Ailustra una arquitectura ilustrativa en la que una pluralidad de GPU 3610-3613 está acoplada de manera comunicativa a una pluralidad de procesadores de múltiples núcleos 3605-3606 a través de los enlaces de alta velocidad 3640-3643 (por ejemplo, buses, interconexiones de punto a punto, etc.). En una realización, los enlaces de alta velocidad 3640-3643 soportan un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o mayor, dependiendo de la implementación. Se pueden utilizar diversos protocolos de interconexión, incluyendo, 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.
Además, en una realización, dos o más de las GPU 3610-3613 están interconectadas a través de enlaces de alta velocidad 3644-3645, que pueden implementarse usando los mismos protocolos/enlaces o diferentes que aquellos usados para enlaces de alta velocidad 3640-3643. De manera similar, dos o más de los procesadores de múltiples núcleos 3605-3606 pueden conectarse a través del enlace de alta velocidad 3633, que puede ser buses de múltiples procesadores simétricos (SMP) que operan a 20 GB/s, 30 GB/s, 120 GB/s o más. Como alternativa, toda la comunicación entre los diversos componentes de sistema mostrados en laFigura 36Apuede conseguirse usando los mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, como se menciona, los principios subyacentes de la invención no están limitados a ningún tipo particular de tecnología de interconexión.
En una realización, cada procesador de múltiples núcleos 3605-3606 está acoplado de manera comunicativa a una memoria de procesador 3601-3602, mediante las interconexiones de memoria 3630-3631, respectivamente, y cada GPU 3610-3613 está acoplada de manera comunicativa a la memoria de GPU 3620-3623 a través de las interconexiones de memoria de GPU 3650-3653, respectivamente. Las interconexiones de memoria 3630-3631 y 3650-3653 pueden utilizar las mismas tecnologías de acceso de memoria u otras diferentes. A modo de ejemplo y no como limitación, las memorias de procesador 3601-3602 y las memorias de GPU 3620-3623 pueden ser memorias volátiles, tal como memorias de acceso aleatorio dinámicas (DRAM) (incluyendo DRAM apiladas), SDRAM DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6) o memoria de ancho de banda alto (HBM) y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram. En una realización, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
Como se describe a continuación, aunque los diversos procesadores 3605-3606 y las diversas GPU 3610-3613 pueden acoplarse físicamente a una memoria 3601-3602, 3620-3623 particular, respectivamente, puede implementarse una arquitectura de memoria unificada en la que el mismo espacio de direcciones de sistema virtual (también denominado espacio "de direcciones eficaces") está distribuido entre todas las diversas memorias físicas. Por ejemplo, las memorias de procesador 3601 -3602 pueden comprender cada una 64 GB del espacio de direcciones de la memoria del sistema y las memorias de GPU 3620-3623 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).
LaFigura 36Bilustra detalles adicionales para una interconexión entre un procesador de múltiples núcleos 3607 y un módulo de aceleración de gráficos 3646 de acuerdo con una realización. El módulo de aceleración de gráficos 3646 puede incluir uno o varios chips de GPU integrados en una tarjeta de línea que está acoplada al procesador 3607 mediante el enlace de alta velocidad 3640. Como alternativa, el módulo de aceleración de gráficos 3646 puede integrarse en el mismo paquete o chip que el procesador 3607.
El procesador 3607 ilustrado incluye una pluralidad de núcleos 3660A-3660D, cada uno con una memoria intermedia de traducción adelantada 3661A-3661D y una o más cachés 3662A-3662D. Los núcleos pueden incluir diversos otros componentes para ejecutar instrucciones y procesar datos, que no se han ilustrado para evitar oscurecer los principios subyacentes de la invención, (por ejemplo, unidades de extracción de instrucciones, unidades de predicción de ramificación, descodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 3662A-3662D pueden comprender cachés de nivel 1 (L1) y de nivel 2 (L2). Además, una o más cachés compartidas 3626 pueden incluirse en la jerarquía de almacenamiento en caché y ser compartidas por conjuntos de núcleos 3660A-3660D. Por ejemplo, una realización del procesador 3607 incluye 24 núcleos, cada uno con su propia caché L1, doce cachés L2 compartidas y doce cachés L3 compartidas. En esta realización, una de las cachés L2 y L3 está compartida por dos núcleos adyacentes. El procesador 3607 y el módulo de integración de acelerador de gráficos 3646 se conectan con la memoria de sistema 3641, que puede incluir las memorias de procesador 3601 -3602
La coherencia se mantiene para los datos e instrucciones almacenados en las diversas cachés 3662A-3662D, 3656 y la memoria de sistema 3641 a través de comunicación entre núcleos a través de un bus de coherencia 3664. Por ejemplo, cada caché puede tener una lógica/circuitería de coherencia de caché asociada con la misma para comunicarse a través del bus de coherencia 3664 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de monitorización de caché a través del bus de coherencia 3664 para monitorizar los accesos de memoria caché. Las técnicas de coherencia/monitorización de caché son bien entendidas por los expertos en la materia y no se describirán en el presente caso en detalle para evitar complicar los principios subyacentes de la invención.
En una realización, un circuito proxy 3625 acopla de manera comunicativa el módulo de aceleración de gráficos 3646 al bus de coherencia 3664, permitiendo que el módulo de aceleración de gráficos 3646 participe en el protocolo de coherencia de caché como un par de los núcleos. En particular, una interfaz 3635 proporciona conectividad al circuito proxy 3625 a través del enlace de alta velocidad 3640 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 3637 conecta el módulo de aceleración de gráficos 3646 al enlace de alta velocidad 3640.
En una implementación, un circuito de integración de acelerador 3636 proporciona servicios de gestión de caché, de acceso a memoria, de gestión de contexto y de gestión de interrupciones en nombre de una pluralidad de motores de procesamiento de gráficos 3631,3632, N del módulo de aceleración de gráficos 3646. Cada motor de procesamiento de gráficos 3631, 3632, N puede comprender una unidad de procesamiento de gráficos (GPU) separada. Como alternativa, los motores de procesamiento de gráficos 3631, 3632, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tales como unidades de ejecución de gráficos, motores de procesamiento de medios (por ejemplo, codificadores/descodificadores de vídeo), muestreadores y motores de BLIT. En otras palabras, el módulo de aceleración de gráficos puede ser una GPU con una pluralidad de motores de procesamiento de gráficos 3631 -3632, N, o los motores de procesamiento de gráficos 3631 -3632, N, pueden ser GPU individuales integradas en un paquete, tarjeta de línea o chip común.
En una realización, el circuito de integración de acelerador 3636 incluye una unidad de gestión de memoria (MMU) 3639 para realizar diversas funciones de gestión de memoria tales como traducciones de memoria virtual a física (también denominadas traducciones de memoria efectiva a real) y protocolos de acceso de memoria para acceder a la memoria de sistema 3641. La MMU 3639 puede incluir también una memoria intermedia de traducción adelantada (TLB) (no mostrada) para almacenar en caché las traducciones de dirección virtual/efectiva a física/real. En una implementación, una caché 3638 almacena comandos y datos para un acceso eficiente por los motores de procesamiento de gráficos 3631-3632, N. En una realización, los datos almacenados en la caché 3638 y en las memorias de gráficos 3633-3634, N se mantienen coherentes con las cachés de núcleo 3662A-3662D, 3656 y la memoria de sistema 3611. Como se ha mencionado, esto puede conseguirse mediante el circuito proxy 3625 que toma parte en el mecanismo de coherencia de caché en nombre de la caché 3638 y las memorias 3633-3634, N (por ejemplo, enviando actualizaciones a la caché 3638 relacionadas con modificaciones/accesos de líneas de caché en las cachés de procesador 3662A-3662D, 3656 y recibiendo actualizaciones desde la caché 3638).
Un conjunto de registros 3649 almacena datos de contexto para hilos ejecutados por los motores de procesamiento de gráficos 3631-3632, N y un circuito de gestión de contexto 3648 gestiona los contextos de hilos. Por ejemplo, el circuito de gestión de contexto 3648 puede realizar operaciones de guardado y restauración para guardar y restaurar contextos de los diversos hilos durante cambios de contexto (por ejemplo, cuando se guarda un primer hilo y se almacena un segundo hilo de modo que el segundo hilo puede ser ejecutado por un motor de procesamiento de gráficos). Por ejemplo, en una conmutación de contexto, el circuito de gestión de contexto 3648 puede almacenar valores de registro actuales en una región designada en memoria (por ejemplo, identificada por un puntero de contexto). A continuación, puede restaurar los valores de registro cuando se vuelve al contexto. En una realización, un circuito de gestión de interrupciones 3647 recibe y procesa interrupciones recibidas desde los dispositivos de sistema.
En una implementación, direcciones virtuales/efectivas desde un motor de procesamiento de gráficos 3631 son traducidas, por la MMU 3639, a direcciones reales/físicas en la memoria de sistema 3611. Una realización del circuito de integración de acelerador 3636 soporta múltiples (por ejemplo, 4, 8, 16) módulos de aceleración de gráficos 3646 y/u otros dispositivos de acelerador. El módulo acelerador de gráficos 3646 puede estar especializado en una única aplicación ejecutada en el procesador 3607 o puede compartirse entre múltiples aplicaciones. En una realización, se presenta un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 3631-3632, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos pueden subdividirse en "segmentos" que se asignan a diferentes VM y/o aplicaciones basándose en los requisitos de procesamiento y las prioridades asociadas con las VM y/o las aplicaciones.
Por tanto, el circuito de integración de acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 3646 y proporciona servicios de traducción de direcciones y de memoria caché de sistema. Además, el circuito de integración de acelerador 3636 puede proporcionar instalaciones de virtualización para que el procesador anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de memoria.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 3631-3632, N se mapean explícitamente con el espacio de direcciones reales observado por el procesador de anfitrión 3607, cualquier procesador de anfitrión puede dirigir estos recursos directamente usando un valor de dirección efectiva. Una función del circuito de integración de acelerador 3636, en una realización, es la separación física de los motores de procesamiento de gráficos 3631-3632, N de modo que aparecen al sistema como unidades independientes.
Como se menciona, en la realización ilustrada, una o más memorias de gráficos 3633-3634, M están acopladas a cada uno de los motores de procesamiento de gráficos 3631-3632, N, respectivamente. Las memorias de gráficos 3633 3634, M almacenan instrucciones y datos que son procesados por cada uno de los motores de procesamiento de gráficos 3631-3632, N. Las memorias de gráficos 3633-3634, M pueden ser memorias volátiles, tales como DRAM (incluyendo DRAM apiladas), memoria GDDR (por ejemplo, GDDR5, GDDR6) o HBM y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram.
En una realización, para reducir el tráfico de datos a través del enlace 3640, se usan técnicas de desvío para garantizar que los datos almacenados en las memorias de gráficos 3633-3634, M sean datos que serán usados con mayor frecuencia por los motores de procesamiento de gráficos 3631-3632, N y, preferentemente, no usados por los núcleos 3660A-3660D (al menos no con frecuencia). De manera similar, el mecanismo de desvío intenta mantener datos que necesitan los núcleos (y, preferentemente, no los motores de procesamiento de gráficos 3631-3632, N) dentro de las cachés 3662A-3662D, 3656 de los núcleos y la memoria de sistema 3611.
LaFigura 36Cilustra otra realización en la que el circuito de integración de acelerador 3636 está integrado dentro del procesador 3607. En esta realización, los motores de procesamiento de gráficos 3631-3632, N se comunican directamente a través del enlace de alta velocidad 3640 al circuito de integración de acelerador 3636 mediante la interfaz 3637 y la interfaz 3635 (que, de nuevo, pueden utilizar cualquier forma de bus o protocolo de interfaz). El circuito de integración de acelerador 3636 puede realizar las mismas operaciones que las descritas con respecto a laFigura 36B, pero potencialmente a un caudal superior dada su proximidad estrecha al bus de coherencia 3662 y a las cachés 3662A-3662D, 3626.
Una realización soporta diferentes modelos de programación que incluyen un modelo de programación de proceso especializado (sin virtualización de módulo de aceleración de gráficos) y modelos de programación compartida (con virtualización). Este último puede incluir modelos de programación que son controlados por el circuito de integración de acelerador 3636 y modelos de programación que son controlados por el módulo de aceleración de gráficos 3646.
En una realización del modelo de proceso especializado, los motores de procesamiento de gráficos 3631-3632, N están especializados a una única aplicación o proceso bajo un único sistema operativo. La única aplicación puede canalizar otras solicitudes de aplicación a los motores de gráficos 3631-3632, N, lo que proporciona virtualización dentro de una VM/subdivisión.
En los modelos de programación de proceso dedicado, los motores de procesamiento de gráficos 3631-3632, N, pueden ser compartidos por múltiples subdivisiones de aplicación/VM. Los modelos compartidos requieren un hipervisor de sistema para virtualizar los motores de procesamiento de gráficos 3631 -3632, N para permitir el acceso por cada sistema operativo. Para sistemas de subdivisión única sin hipervisor, los motores de procesamiento de gráficos 3631-3632, N son propiedad del sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 3631 -3632, N para proporcionar acceso a cada proceso o aplicación.
Para el modelo de programación compartido, el módulo de aceleración de gráficos 3646 o un motor de procesamiento de gráficos individual 3631-3632, N selecciona un elemento de proceso utilizando un manejador de proceso. En una realización, los elementos de proceso se almacenan en memoria de sistema 3611 y son direccionables usando las técnicas de traducción de dirección efectiva a dirección real descritas en el presente documento. El manejador de proceso puede ser un valor específico de implementación proporcionado al proceso de anfitrión cuando se registra su contexto con el motor de procesamiento de gráficos 3631-3632, N (es decir, llamando a software de sistema para añadir el elemento de proceso a la lista vinculada de elementos de proceso). Los 16 bits inferiores del manejador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista vinculada de elementos de proceso.
LaFigura 36Dilustra un segmento de integración de acelerador 3690 ilustrativo. Como se usa en el presente documento, un "segmento" comprende una porción especificada de los recursos de procesamiento del circuito de integración de acelerador 3636. El espacio de direcciones efectivas de aplicación 3682 dentro de la memoria de sistema 3611 almacena elementos de proceso 3683. En una realización, los elementos de proceso 3683 se almacenan en respuesta a invocaciones de GPU 3681 desde las aplicaciones 3680 ejecutadas en el procesador 3607. Un elemento de proceso 3683 contiene el estado de proceso para la aplicación 3680 correspondiente. Un descriptor de trabajo (WD) 3684 contenido en el elemento de proceso 3683 puede ser un único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En el último caso, el WD 3684 es un puntero a la cola de solicitudes de trabajo en el espacio de direcciones de la aplicación 3682.
El módulo de aceleración de gráficos 3646 y/o los motores de procesamiento de gráficos individuales 3631-3632, N pueden compartirse por todos, o por un subconjunto de, los procesos en el sistema. Las realizaciones de la invención incluyen una infraestructura para configurar el estado de proceso y enviar un WD 3684 a un módulo de aceleración de gráficos 3646 para iniciar un trabajo en un entorno virtualizado.
En una implementación, el modelo de programación de proceso especializado es específico para la implementación. En este modelo, un único proceso es propietario del módulo de aceleración de gráficos 3646 o de un motor de procesamiento de gráficos individual 3631. Debido a que el módulo de aceleración de gráficos 3646 es propiedad de un único proceso, el hipervisor inicializa el circuito de integración de acelerador 3636 para la subdivisión propietaria y el sistema operativo inicializa el circuito de integración de acelerador 3636 para el proceso de propiedad en el momento en que se asigna el módulo de aceleración de gráficos 3646.
Durante la operación, una unidad de extracción de WD 3691 en el segmento de integración de acelerador 3690 extrae el siguiente WD 3684 que incluye una indicación del trabajo a hacer por uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 3646. Los datos del WD 3684 pueden almacenarse en registros 3649 y ser usados por la MMU 3639, el circuito de gestión de interrupciones 3647 y/o el circuito de gestión de contexto 3646 como se ilustra. Por ejemplo, una realización de la MMU 3639 incluye circuitería de recorrido de segmentos/páginas para acceder a las tablas de segmentos/páginas 3686 dentro del espacio de direcciones virtuales de SO 3685. El circuito de gestión de interrupciones 3647 puede procesar los eventos de interrupción 3692 recibidos del módulo de aceleración de gráficos 3646. Cuando se llevan a cabo operaciones de gráficos, una dirección efectiva 3693 generada por un motor de procesamiento de gráficos 3631 -3632, N se traduce a una dirección real por la MMU 3639.
En una realización, el mismo conjunto de registros 3649 se duplica para cada motor de procesamiento de gráficos 3631 -3632, N y/o módulo de aceleración de gráficos 3646, y puede inicializarse por el hipervisor o el sistema operativo. Cada uno de estos registros duplicados puede incluirse en un segmento de integración de acelerador 3690. En laTabla 2se muestran registros de ejemplo que pueden inicializarse por el hipervisor.
Tabla 2- Registros inicializados por hipervisor
En laTabla 3se muestran registros de ejemplo que pueden inicializarse por el sistema operativo.
Tabla 3- Registros inicializados por sistema operativo
En una realización, cada WD 3684 es específico de un módulo de aceleración de gráficos 3646 y/o de un motor de procesamiento de gráficos 3631-3632, N particular. Este contiene toda la información que requiere un motor de procesamiento de gráficos 3631-3632, N para hacer su trabajo, o puede ser un puntero a una ubicación de memoria en la que la aplicación ha establecido una cola de comandos de trabajo que hay que completar.
LaFigura 36Eilustra detalles adicionales para una realización de un modelo compartido. Esta realización incluye un espacio de direcciones real de hipervisor 3698 en el que se almacena una lista de elementos de proceso 3699. El espacio de direcciones real de hipervisor 3698 es accesible mediante un hipervisor 3696 que virtualiza los motores de módulo de aceleración de gráficos para el sistema operativo 3695.
Los modelos de programación compartida permiten que todos o un subconjunto de procesos de todas o un subconjunto de subdivisiones en el sistema usen un módulo de aceleración de gráficos 3646. Hay dos modelos de programación en los que el módulo de aceleración de gráficos 3646 está compartido por múltiples procesos y subdivisiones: compartido en segmentos de tiempo y compartido dirigido a gráficos.
En este modelo, el hipervisor de sistema 3696 tiene propiedad del módulo de aceleración de gráficos 3646 y hace que su función esté disponible para todos los sistemas operativos 3695. Para que un módulo de aceleración de gráficos 3646 soporte virtualización por el hipervisor de sistema 3696, el módulo de aceleración de gráficos 3646 puede satisfacer los siguientes requisitos: 1) Una solicitud de trabajo de la aplicación debe ser autónoma (es decir, el estado no necesita mantenerse entre trabajos), o el módulo de aceleración de gráficos 3646 debe proporcionar un mecanismo de guardado y restauración de contexto. 2) El módulo de aceleración de gráficos 3646 garantiza que la solicitud de trabajo de una aplicación se completará en una cantidad específica de tiempo, incluyendo cualquier error de traducción o el módulo de aceleración de gráficos 3646 proporciona la capacidad de adelantarse al procesamiento del trabajo. 3) Se ha de garantizar al módulo de aceleración de gráficos 3646 la equidad entre procesos cuando se opera en el modelo de programación compartido dirigido.
En una realización, para el modelo compartido, se requiere que la aplicación 3680 realice una llamada al sistema operativo 3695 con un tipo de módulo de aceleración de gráficos 3646, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero a área de guardado/restauración de contexto (CSRP). El tipo del módulo de aceleración de gráficos 3646 describe la función de aceleración dirigida como objetivo para la llamada de sistema. El tipo del módulo de aceleración de gráficos 3646 puede ser un valor específico de sistema. El WD se formatea específicamente para el módulo de aceleración de gráficos 3646 y puede estar en forma de un comando de módulo de aceleración de gráficos 3646, un puntero de dirección efectiva a una estructura definida por el usuario, un puntero de dirección efectiva a una cola de comandos o cualquier otra estructura de datos para describir el trabajo que va a hacerse por el módulo de aceleración de gráficos 3646. En una realización, 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 3636 y del módulo de aceleración de gráficos 3646 no soportan un registro de anulación de máscara de autoridad de usuario (UAMOR), el sistema operativo puede aplicar el valor de UAMOR actual al valor de AMR antes de pasar el AMR en la llamada del hipervisor. Opcionalmente, el hipervisor 3696 puede aplicar el valor de registro de anulación de máscara de autoridad (AMOR) actual antes de colocar el AMR en el elemento de proceso 3683. En una realización, el CSRP es uno de los registros 3649 que contienen la dirección efectiva de un área en el espacio de direcciones de la aplicación 3682 para que el módulo de aceleración de gráficos 3646 guarde y restaure el estado de contexto. Este puntero es opcional si no se requiere que se guarde estado entre trabajos o cuando se da prioridad a un trabajo. El área de guardado/restauración de contexto puede ser una memoria de sistema anclada.
Tras recibir la llamada de sistema, el sistema operativo 3695 puede verificar que la aplicación 3680 se ha registrado y que se le ha dado la autoridad para utilizar el módulo de aceleración de gráficos 3646. El sistema operativo 3695, a continuación, llama al hipervisor 3696 con la información mostrada en laTabla 4.
Tabla 4- Parámetros de llamada de SO a hipervisor
Al recibir la llamada de hipervisor, el hipervisor 3696 verifica que el sistema operativo 3695 se ha registrado y se le ha otorgado la autoridad para usar el módulo de aceleración de gráficos 3646. El hipervisor 3696 pone, a continuación, el elemento de proceso 3683 en la lista vinculada de elementos de proceso para el tipo de módulo de aceleración de gráficos 3646 correspondiente. El elemento de proceso puede incluir la información mostrada en laTabla 5.
Tabla 5- Información de elemento de proceso
En una realización, el hipervisor inicializa una pluralidad de registros 3649 del segmento de integración de acelerador 3690.
Como se ilustra en laFigura 36F,una realización de la invención emplea una memoria unificada direccionable mediante un espacio de direcciones virtual de memoria común usado para acceder a las memorias de procesador físico 3601-3602 y a las memorias de GPU 3620-3623. En esta implementación, las operaciones ejecutadas en las GPU 3610-3613 utilizan el mismo espacio de direcciones de memoria virtual/efectivo para acceder a las memorias de procesador 3601 -3602 y viceversa, simplificando de esta manera la programabilidad. En una realización, una primera porción del espacio de direcciones virtual/efectivo está asignada a la memoria de procesador 3601, una segunda porción a la segunda memoria de procesador 3602, una tercera porción a la memoria de GPU 3620, y así sucesivamente. El espacio de memoria virtual/efectivo total (en ocasiones denominado el espacio de direcciones efectivo) está distribuido, de esta manera, a lo largo de cada una de las memorias de procesador 3601-3602 y de las memorias de GPU 3620-3623, permitiendo que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual mapeada a esa memoria.
En una realización, la circuitería de gestión de desvío/coherencia 3694A-3694E dentro de una o más de las MMU 3639A-3639E garantiza la coherencia de caché entre las cachés de los procesadores de anfitrión (por ejemplo, 3605) y las GPU 3610-3613 e implementa técnicas de desvío que indican las memorias físicas en las que deben almacenarse ciertos tipos de datos. Aunque se ilustran múltiples instancias de la circuitería de gestión de desvío/coherencia 3694A-3694E en laFigura 36F, la circuitería de desvío/coherencia puede implementarse dentro de la MMU de uno o más procesadores de anfitrión 3605 y/o dentro del circuito de integración de acelerador 3636.
Una realización permite que la memoria anexada a GPU 3620-3623 se mapee como parte de la memoria de sistema, y que se acceda a la misma usando tecnología de memoria virtual compartida (SVM), pero sin sufrir de las desventajas de rendimiento típicas asociadas con la coherencia de caché de sistema completa. La capacidad de que se acceda a la memoria adjunta a la GPU 3620-3623 como memoria de sistema sin sobrecarga de coherencia de caché onerosa proporciona un entorno de operación beneficioso para la descarga de la GPU. Esta disposición permite que el software del procesador de anfitrión 3605 establezca operandos y acceda a resultados de cálculo, sin la sobrecarga de copias de datos de DMA de E/S tradicionales. Tales copias tradicionales implican llamadas de controlador, interrupciones y accesos de E/S mapeados en memoria (MMIO) que son, todos ellos, ineficientes en relación con los accesos de memoria sencillos. Al mismo tiempo, la capacidad de acceder a la memoria anexada a la GPU 3620-3623 sin sobrecargas de coherencia de caché puede ser crucial para el tiempo de ejecución de un cálculo descargado. En casos con tráfico de memoria de escritura de envío por flujo continuo sustancial, por ejemplo, la sobrecarga de coherencia de caché puede reducir significativamente el ancho de banda de escritura efectivo observado por una GPU 3610-3613. 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 juegan un papel en la determinación de la efectividad de la descarga de la GPU.
En una implementación, la selección entre el desvío de GPU y el desvío de procesador de anfitrión se controla por una estructura de datos de rastreador de desvío. Puede usarse una tabla de desvíos que puede ser, por ejemplo, una estructura granular de página (es decir, controlada en la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria anexa a la GPU. La tabla de desvíos puede implementarse en un intervalo de memoria robado de una o más memorias conectadas a la GPU 3620-3623, con o sin caché de desvío en la GPU 3610-3613 (por ejemplo, para almacenar en memoria caché entradas utilizadas de manera frecuente/reciente de la tabla de desvíos). Como alternativa, toda la tabla de desvío puede mantenerse dentro de la GPU.
En una implementación, se accede a la entrada de tabla de desvíos asociada a cada acceso a la memoria adjunta a la GPU 3620-3623 antes del acceso real a la memoria de GPU, lo que provoca las siguientes operaciones. En primer lugar, las solicitudes locales desde la GPU 3610-3613 que encuentran su página en el desvío de GPU se reenvían directamente a una memoria de GPU 3620-3623 correspondiente. Las solicitudes locales de la GPU que encuentran su página en el desvío del anfitrión se reenvían al procesador 3605 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). En una realización, las solicitudes del procesador 3605 que encuentran la página solicitada en el desvío de procesador de anfitrión completan la solicitud como una lectura de memoria normal. Como alternativa, las solicitudes dirigidas a una página con desvío de GPU pueden reenviarse a la GPU 3610-3613. La GPU puede hacer, a continuación, que la página realice una transición a un desvío de procesador de anfitrión si actualmente no está utilizando la página.
El estado de desvío de una página puede cambiarse mediante o bien un mecanismo basado en software, o bien un mecanismo basado en software asistido por hardware, o bien, para un conjunto limitado de casos, un mecanismo basado puramente en hardware.
Un mecanismo para cambiar el estado de desvío emplea una llamada a la API (por ejemplo, OpenCL), que, a su vez, llama al controlador de dispositivo de la GPU que, a su vez, envía un mensaje (o pone en cola un descriptor de comando) a la GPU indicándole que cambie el estado de desvío y, para algunas transiciones, lleve a cabo una operación de vaciado de caché en el anfitrión. La operación de vaciado de caché es necesaria para una transición del desvío de procesador anfitrión 3605 al desvío de GPU, pero no es necesaria para la transición opuesta.
En una realización, la coherencia de caché se mantiene haciendo que temporalmente las páginas desviadas por la GPU no puedan ser almacenadas en la caché por el procesador anfitrión 3605. Para acceder a estas páginas, el procesador 3605 puede solicitar acceso desde la GPU 3610, que puede conceder o no acceso inmediato, dependiendo de la implementación. Por tanto, para reducir la comunicación entre el procesador 3605 y la GPU 3610 es beneficioso garantizar que las páginas con desvío por la GPU sean aquellas requeridas por la GPU, pero no por el procesador anfitrión 3605 y viceversa.
LaFigura 36Gilustra un sistema informático de múltiples GPU, de acuerdo con una realización. El sistema informático de múltiples GPU puede incluir un procesador 3603 acoplado a múltiples GPU 3614A-3614D mediante un conmutador de interfaz de anfitrión 3604. El conmutador de interfaz de anfitrión 3604, en una realización, es un dispositivo de conmutador de PCI Express que acopla el procesador 3603 a un bus de PCI Express a través del que el procesador 3603 puede comunicarse con el conjunto de GPU 3614A-3614D. Las GPU 3614A-3614D pueden interconectarse mediante un conjunto de enlaces de GPU a GPU de punto a punto de alta velocidad 3616. Los enlaces de GPU a GPU de alta velocidad pueden conectarse a cada una de las GPU 3614A-3614D mediante un enlace de GPU especializado. Los enlaces de GPU de P2P 3616 posibilitan una comunicación directa entre cada una de las GPU 3614A-3614D sin requerir una comunicación a través del bus de interfaz de anfitrión al que se conecta el procesador 3603. Con el tráfico de GPU a GPU dirigido a los enlaces de GPU de P2P, el bus de interfaz de anfitrión permanece disponible para el acceso de memoria de sistema o para comunicarse con otras instancias del sistema informático de múltiples GPU 3600, por ejemplo, mediante uno o más dispositivos de red. Aunque en la realización ilustrada las GPU 3614A-3614D se conectan al procesador 3603 mediante el conmutador de interfaz de anfitrión 3604, en una realización, el procesador 3603 incluye el soporte directo para los enlaces de GPU de P2P 3616 y puede conectarse directamente a las GPU 3614A-3614D.
Canalización de procesamiento de gráficos
LaFigura 37ilustra una canalización de procesamiento de gráficos 3700, de acuerdo con una realización. En una realización, un procesador de gráficos puede implementar la canalización de procesamiento de gráficos 3700 ilustrada. El procesador de gráficos puede incluirse dentro de los subsistemas de procesamiento paralelo como se describe en el presente documento, tales como el procesador paralelo 3400 de la Figura 34, que, en una realización, es una variante del procesador o procesadores paralelos 3312 de la Figura 33. Los diversos sistemas de procesamiento en paralelo pueden implementar la canalización de procesamiento de gráficos 3700 a través de una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 3402 de la Figura 34) como se describe en el presente documento. Por ejemplo, una unidad de sombreador (por ejemplo, el multiprocesador de gráficos 3434 de la Figura 35) puede estar configurada para realizar las funciones de una o más de una unidad de procesamiento de vértices 3704, una unidad de procesamiento de control de teselación 3708, una unidad de procesamiento de evaluación de teselación 3712, una unidad de procesamiento de geometría 3716 y una unidad de procesamiento de fragmentos/píxeles 3724. Las funciones del ensamblador de datos 3702, los ensambladores de primitivas 3706, 3714, 3718, la unidad de teselación 3710, el rasterizador 3722 y la unidad de operaciones de rasterización 3726 también pueden realizarse por otros motores de procesamiento dentro de una agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 3414 de la Figura 35) y una unidad de subdivisión correspondiente (por ejemplo, la unidad de subdivisión 3420A-3420N de la Figura 34). La canalización de procesamiento de gráficos 3700 puede implementarse también usando unidades de procesamiento especializadas para una o más funciones. En una realización, una o más porciones de la canalización de procesamiento de gráficos 3700 pueden realizarse mediante lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, CPU). En una realización, una o más porciones de la canalización de procesamiento de gráficos 3700 pueden acceder a una memoria en chip (por ejemplo, la memoria de procesador paralelo 3422 como en la Figura 34) mediante una interfaz de memoria 3728, que puede ser una instancia de la interfaz de memoria 3418 de la Figura 34.
En una realización, el ensamblador de datos 3702 es una unidad de procesamiento que recopila datos de vértice para superficies y primitivas. El ensamblador de datos 3702 emite entonces los datos de vértice, incluyendo los atributos de vértice, a la unidad de procesamiento de vértices 3704. La unidad de procesamiento de vértices 3704 es una unidad de ejecución programable que ejecuta programas de sombreador de vértices, iluminando y transformando datos de vértice según lo especificado por los programas de sombreador de vértices. La unidad de procesamiento de vértices 3704 lee datos que se almacenan en caché, en memoria local o de sistema para su utilización al procesar los datos de vértices y puede estar programada para transformar los datos de vértices de una representación de coordenadas basada en objeto a un espacio de coordenadas del espacio mundial o un espacio de coordenadas de dispositivo normalizado.
Una primera instancia de un ensamblador de primitivas 3706 recibe atributos de vértices desde la unidad de procesamiento de vértices 3704. El ensamblador de primitivas 3706 lee atributos de vértice almacenados según sea necesario y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de control de teselación 3708. Las primitivas de gráficos incluyen triángulos, segmentos de línea, puntos, parches, y así sucesivamente, según lo soportado por diversas interfaces de programación de aplicaciones (API) de procesamiento de gráficos.
La unidad de procesamiento de control de teselación 3708 trata los vértices de entrada como puntos de control para un parche geométrico. Los puntos de control se transforman de una representación de entrada del parche (por ejemplo, las bases del parche) a una representación que sea adecuada para su utilización en la evaluación de la superficie por la unidad de procesamiento de evaluación de teselación 3712. La unidad de procesamiento de control de teselación 3708 puede calcular también factores de teselación para bordes de parches geométricos. Se aplica un factor de teselación a un único borde y se cuantifica un nivel de detalle dependiente de la vista asociado con el borde. Una unidad de teselación 3710 está configurada para recibir los factores de teselación para bordes de un parche y para teselar el parche en múltiples primitivas geométricas, tales como primitivas de línea, de triángulo o cuadrilaterales, que se transmiten a una unidad de procesamiento de evaluación de teselación 3712. La unidad de procesamiento de evaluación de teselación 3712 opera en coordenadas parametrizadas del parche subdividido para generar una representación superficial y atributos de vértice para cada vértice asociado con las primitivas geométricas.
Una segunda instancia de un ensamblador de primitivas 3714 recibe atributos de vértices desde la unidad de procesamiento de evaluación de teselación 3712, que lee los atributos de vértices almacenados según sea necesario y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de geometría 3716. La unidad de procesamiento de geometría 3716 es una unidad de ejecución programable que ejecuta programas de sombreador de geometría para transformar primitivas de gráficos recibidas del ensamblador de primitivas 3714 como se especifica por los programas de sombreado de geometría. En una realización, la unidad de procesamiento de geometría 3716 está programada para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
En algunas realizaciones, la unidad de procesamiento de geometría 3716 puede añadir o borrar elementos en el flujo de geometría. La unidad de procesamiento de geometría 3716 emite los parámetros y vértices que especifican primitivas de gráficos nuevas al ensamblador de primitivas 3718. El ensamblador de primitivas 3718 recibe los parámetros y vértices desde la unidad de procesamiento de geometría 3716 y construye primitivas de gráficos para su procesamiento por una unidad de escala, selección y recorte de ventana gráfica 3720. La unidad de procesamiento de geometría 3716 lee datos que se almacenan en memoria de procesador paralelo o memoria de sistema para su uso en el procesamiento de los datos de geometría. La unidad de escalado, selección y recorte de la ventana gráfica 3720 realiza el recorte, la selección y el escalado de la ventana y envía los gráficos primitivos procesados a un rasterizador 3722.
El rasterizador 3722 puede realizar optimizaciones de selección de profundidad y otras basadas en la profundidad. El rasterizador 3722 también realiza una conversión de exploración en las nuevas primitivas de gráficos para generar fragmentos y emitir esos fragmentos y datos de cobertura asociados a la unidad de procesamiento de fragmentos/píxeles 3724. La unidad de procesamiento de fragmentos/píxeles 3724 es una unidad de ejecución programable que está configurada para ejecutar programas de sombreador de fragmentos o programas de sombreador de píxeles. La unidad de procesamiento de fragmentos/píxeles 3724 transforma fragmentos o píxeles recibidos del rasterizador 3722, según lo especificado por los programas de sombreador de fragmentos o píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 3724 puede programarse para realizar operaciones que incluyen, aunque no de forma limitativa, mapeo de texturas, sombreado, combinación, corrección de texturas y corrección de perspectiva para producir fragmentos o píxeles sombreados que se envían a una unidad de operaciones de rasterización 3726. La unidad de procesamiento de fragmentos/píxeles 3724 puede leer datos que se almacenan o bien en la memoria de procesador paralelo o bien en la memoria de sistema para su uso cuando se procesan los datos de fragmento. Los programas de sombreado de fragmentos o de píxeles pueden estar configurados para sombrear a granularidad de muestra, de píxel, de tesela u otras dependiendo de la tasa de muestreo configurada para las unidades de procesamiento.
La unidad de operaciones de rasterización 3726 es una unidad de procesamiento que realiza operaciones de rasterización que incluyen, pero sin limitación, estarcido, prueba z, mezcla y similares, y emite datos de píxeles como datos de gráficos procesados para que se almacenen en la memoria de gráficos (por ejemplo, la memoria de procesador paralelo 3422 como en la Figura 34, y/o la memoria de sistema 3304 como en la Figura 33, para que se visualicen en el uno o más dispositivo o dispositivos de visualización 3310 o para su procesamiento adicional por uno del uno o más procesador o procesadores 3302 o procesador o procesadores paralelos 3312. En algunas realizaciones, la unidad de operaciones de rasterización 3726 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.
Las realizaciones descritas en el presente documento se pueden implementar como cualquiera o una combinación de: uno o más microchips o circuitos integrados interconectados usando una placa base, lógica de cableado permanente, software almacenado por un dispositivo de memoria y ejecutado por un microprocesador, firmware, un circuito integrado específico de la aplicación (ASIC) y/o una matriz de puertas programables en campo (FPGA). El término "lógica" puede incluir, a modo de ejemplo, software o hardware y/o combinaciones de software y hardware. En general, los términos "lógica", "módulo", "componente", "motor", "mecanismo", "herramienta", "circuito" y "circuitería" se mencionan indistintamente por todo este documento y pueden incluir, a modo de ejemplo, software, hardware, firmware o cualquier combinación de los mismos.
Se pueden proporcionar realizaciones, por ejemplo, como un producto de programa informático que puede incluir uno o más medios legibles por máquina que tienen almacenados en los mismos instrucciones ejecutables por máquina que, cuando se ejecutan por una o más máquinas tales como un ordenador, una red de ordenadores u otros dispositivos electrónicos, pueden dar como resultado que las una o más máquinas lleven a cabo operaciones de acuerdo con las realizaciones descritas en el presente documento. Un medio legible por máquina puede incluir, pero sin limitación, disquetes, discos ópticos, CD-ROM (memorias de sólo lectura en disco compacto) y discos magnetoópticos, ROM, RAM, EPROM (memorias de sólo lectura programables y borrables), EEPROM (memorias de sólo lectura programables y borrables eléctricamente), tarjetas magnéticas u ópticas, memoria flash u otro tipo de medios legibles por máquina no transitorios adecuados para almacenar instrucciones ejecutables por máquina.
Las siguientes cláusulas y/o ejemplos se refieren a realizaciones específicas o a ejemplos de las mismas. Los detalles específicos en los ejemplos pueden usarse en cualquier parte en una o más realizaciones. Las diversas características de las diferentes realizaciones o ejemplos pueden combinarse de manera variable con algunas características incluidas y otras excluidas para adecuarse a una diversidad de diferentes aplicaciones. Los ejemplos pueden incluir la materia objeto tal como un método, medios para realizar actos del método, al menos un medio legible por máquina que incluye instrucciones que, cuando se realizan por una máquina, hacen que la máquina realice actos del método, o de un aparato o sistema de acuerdo con las realizaciones y ejemplos descritos en el presente documento. Diversos componentes pueden ser un medio para realizar las operaciones o funciones descritas.
Una realización proporciona un sistema para configurar el entrenamiento distribuido de una red neuronal, comprendiendo el sistema memoria para almacenar una biblioteca para facilitar la transmisión de datos durante el entrenamiento distribuido de la red neuronal; una interfaz de red para permitir la transmisión y recepción de datos de configuración asociados con un conjunto de nodos trabajadores, estando los nodos trabajadores configurados para realizar entrenamiento distribuido de la red neuronal; y un procesador para ejecutar instrucciones proporcionadas por la biblioteca, las instrucciones para hacer que el procesador cree uno o más grupos de nodos trabajadores, estando el uno o más grupos de nodos trabajadores a crear basándose en un patrón de comunicación para que los mensajes se transmitan entre los nodos trabajadores durante el entrenamiento distribuido de la red neuronal.
Una realización proporciona un medio legible por máquina no transitorio que almacena instrucciones que, cuando son ejecutadas por uno o más procesadores, hacen que el uno o más procesadores realicen operaciones que comprenden el rastreo, en una estructura de aprendizaje automático, del comportamiento de comunicación de las aplicaciones que se comunican en una plataforma de aprendizaje automático a través de contadores de calidad de servicio (QoS) expuestos por uno del uno o más procesadores de la plataforma de aprendizaje automático; determinar una proporción relativa del ancho de banda de comunicación intra-chasis e inter-chasis consumido por cada aplicación gestionada por la estructura de aprendizaje automático; determinar puntos de congestión dentro de los enlaces de comunicación intra-chasis e inter-chasis; ajustar una planificación de comunicación de aplicaciones basándose en una proporción relativa del ancho de banda de comunicación y puntos de congestión dentro de los enlaces de comunicación intrachasis e inter-chasis; y ajustar dinámicamente los modelos de QoS de caché del uno o más procesadores para priorizar datos asociados con una aplicación sensible a la latencia.
Una realización proporciona un dispositivo informático que comprende una unidad de procesamiento de propósito general en un primer chasis y un primer conjunto de unidades de procesamiento de gráficos en un segundo chasis. El segundo chasis incluye un conmutador de interfaz de anfitrión para acoplar el segundo chasis con el primer chasis, el conmutador de interfaz de anfitrión para permitir la comunicación entre la unidad de procesamiento de propósito general y el primer conjunto de unidades de procesamiento de gráficos, el primer conjunto de unidades de procesamiento de gráficos para comunicarse a través de una interconexión punto a punto, en donde el conmutador de interfaz de host permite la comunicación conmutada entre el primer conjunto de unidades de procesamiento de gráficos y la unidad de procesamiento de propósito general a través de la interconexión punto a punto.
Una realización proporciona un método para establecer una sesión de comunicación persistente para aprendizaje automático distribuido en múltiples nodos de cálculo, comprendiendo el método recibir un identificador de un nodo al que se ha de establecer una sesión de comunicación de red persistente, la sesión de comunicación de red persistente que se ha de establecer durante el entrenamiento distribuido de una red neuronal que resuelve una o más direcciones de red para el nodo y almacena de manera persistente la una o más direcciones de red resueltas recibiendo una indicación de un conjunto de operaciones de red para las que las asignaciones de recursos serán persistentes asignando recursos usados para comunicarse con el nodo y marcando los recursos como persistentes y realizar operaciones de red solicitadas con el nodo mientras persisten las asignaciones de recursos asociadas con las operaciones identificadas como persistentes.
La descripción y los dibujos anteriores deben considerarse en un sentido ilustrativo más que restrictivo. Los expertos en la materia comprenderán que pueden realizarse diversas modificaciones y cambios en las realizaciones descritas en el presente documento sin apartarse del alcance de la invención, tal como se establece en las reivindicaciones adjuntas.

Claims (7)

REIVINDICACIONES
1. Un sistema para configurar entrenamiento distribuido de una red neuronal, comprendiendo el sistema: memoria para almacenar una biblioteca para facilitar la transmisión de datos durante el entrenamiento distribuido de la red neuronal;
una interfaz de red para permitir la transmisión y recepción de datos de configuración asociados con un conjunto de nodos trabajadores (2216A, 2216B, 2236A, 2236B), los nodos trabajadores (2216A, 2216B, 2236A, 2236B) configurados para realizar entrenamiento distribuido de la red neuronal, en donde cada nodo trabajador (2216A, 2216B, 2236A, 2236B) incluye uno o más procesadores de gráficos para realizar operaciones de cálculo asociadas con un flujo de trabajo de estructura de aprendizaje automático; y
un procesador para ejecutar instrucciones para una agrupación de nodos flexibles proporcionada por la biblioteca, las instrucciones para hacer que el procesador
cree múltiples grupos (2210, 2230) de los nodos trabajadores (2216A, 2216B, 2236A, 2236B), los múltiples grupos (2210, 2230) de los nodos trabajadores (2216A, 2216B, 2236A, 2236B) a crear basándose en una topología de red para una red que interconecta los nodos trabajadores (2216A, 2216B, 2236A, 2236B) de manera que la latencia de comunicación entre los nodos trabajadores dentro de un grupo es menor que la latencia de comunicación observada cuando se comunican con nodos trabajadores de otros grupos, e
instanciar uno o más servidores de parámetros (2220), el uno o más servidores de parámetros (2220) para permitir la comunicación inter-grupo entre los múltiples grupos (2210, 2230) de los nodos trabajadores (2216A, 2216B, 2236A, 2236B),
caracterizado por quelos nodos dentro de un grupo se comunican entre sí usando una operación reducir todo (allreduce).
2. El sistema de acuerdo con la reivindicación 1, en donde las instrucciones hacen que el procesador agrupe los nodos trabajadores (2216A, 2216B, 2236A, 2236B) en uno o más grupos (2210, 2230) de nodos trabajadores locales topológicamente (2216A, 2216B, 2236A, 2236B) y realice una sincronización reducir todo (all-reduce) de datos de parámetros entre los nodos trabajadores (2216A, 2216B, 2236A, 2236B) dentro de un grupo (2210, 2230).
3. El sistema de acuerdo con la reivindicación 1 o 2, en donde las instrucciones hacen que el procesador sincronice datos de parámetros entre grupos (2210, 2230) mediante un servidor de parámetros del uno o más servidores de parámetros (2220).
4. El sistema de acuerdo con la reivindicación 3, las instrucciones hacen que el procesador configure un nodo trabajador como el servidor de parámetros (2220).
5. El sistema de acuerdo con una cualquiera de las reivindicaciones anteriores, las instrucciones para hacer que el procesador sincronice datos de parámetros entre múltiples grupos (2210, 2230) mediante múltiples servidores de parámetros (2220).
6. El sistema de acuerdo con una cualquiera de las reivindicaciones anteriores, las instrucciones para hacer que el procesador recupere una topología de red conocida para la red que interconecta el conjunto de nodos trabajadores (2216A, 2216B, 2236A, 2236b ) y agrupe los nodos trabajadores (2216A, 2216B, 2236A, 2236B) en uno o más grupos de nodos trabajadores locales topológicamente (2216A, 2216B; 2236A, 2236B) basándose en la topología de red conocida.
7. El sistema de acuerdo con una cualquiera de las reivindicaciones anteriores, las instrucciones para hacer que el procesador inicie una iteración de entrenamiento en el conjunto de nodos trabajadores (2216A, 2216B, 2236A, 2236B) y agrupe los nodos trabajadores (2216A, 2216B, 2236A, 2236B) en uno o más grupos (2210, 2230) de nodos trabajadores (2216A, 2216B, 2236A, 2236B) basándose en métricas de latencia observadas para la comunicación entre el conjunto de nodos trabajadores (2216A, 2216B, 2236A, 2236B).
ES18209320T 2017-12-29 2018-11-29 Communication optimizations for distributed machine learning Active ES3032644T3 (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/859,180 US11270201B2 (en) 2017-12-29 2017-12-29 Communication optimizations for distributed machine learning

Publications (1)

Publication Number Publication Date
ES3032644T3 true ES3032644T3 (en) 2025-07-22

Family

ID=64559624

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18209320T Active ES3032644T3 (en) 2017-12-29 2018-11-29 Communication optimizations for distributed machine learning

Country Status (5)

Country Link
US (4) US11270201B2 (es)
EP (1) EP3506095B1 (es)
CN (1) CN110135575B (es)
ES (1) ES3032644T3 (es)
PL (1) PL3506095T3 (es)

Families Citing this family (196)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10390114B2 (en) 2016-07-22 2019-08-20 Intel Corporation Memory sharing for physical accelerator resources in a data center
US20180150256A1 (en) * 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
US11373266B2 (en) 2017-05-05 2022-06-28 Intel Corporation Data parallelism and halo exchange for distributed machine learning
US20190044809A1 (en) 2017-08-30 2019-02-07 Intel Corporation Technologies for managing a flexible host interface of a network interface controller
US11227214B2 (en) 2017-11-14 2022-01-18 Advanced Micro Devices, Inc. Memory bandwidth reduction techniques for low power convolutional neural network inference applications
US11263162B2 (en) * 2017-12-20 2022-03-01 Intel Corporation System decoder for training accelerators
US11270201B2 (en) 2017-12-29 2022-03-08 Intel Corporation Communication optimizations for distributed machine learning
US10579494B2 (en) * 2018-01-05 2020-03-03 Nec Corporation Methods and systems for machine-learning-based resource prediction for resource allocation and anomaly detection
US11044495B1 (en) 2018-02-13 2021-06-22 Cyborg Inc. Systems and methods for variable length codeword based data encoding and decoding using dynamic memory allocation
US11687762B2 (en) 2018-02-27 2023-06-27 Stmicroelectronics S.R.L. Acceleration unit for a deep learning engine
US11586907B2 (en) * 2018-02-27 2023-02-21 Stmicroelectronics S.R.L. Arithmetic unit for deep learning acceleration
US10977854B2 (en) 2018-02-27 2021-04-13 Stmicroelectronics International N.V. Data volume sculptor for deep learning acceleration
US11645507B2 (en) * 2018-03-23 2023-05-09 Vmware, Inc. Providing models to client devices
US11948073B2 (en) * 2018-04-20 2024-04-02 Advanced Micro Devices, Inc. Machine learning inference engine scalability
CN110503593A (zh) * 2018-05-18 2019-11-26 微软技术许可有限责任公司 多个图形处理单元的调度
US11431648B2 (en) 2018-06-11 2022-08-30 Intel Corporation Technologies for providing adaptive utilization of different interconnects for workloads
US10826851B2 (en) * 2018-07-18 2020-11-03 Ambeent Inc. Method and system for routing delay-tolerant communication messages to a destination device
US10909651B2 (en) * 2018-08-08 2021-02-02 International Business Machines Corporation Graphic processor unit topology-aware all-reduce operation
US10782685B1 (en) * 2018-10-10 2020-09-22 Waymo Llc Planner system recovery for autonomous vehicles
US11769041B2 (en) 2018-10-31 2023-09-26 Advanced Micro Devices, Inc. Low latency long short-term memory inference with sequence interleaving
US11526759B2 (en) * 2018-11-05 2022-12-13 International Business Machines Corporation Large model support in deep learning
JP2020077300A (ja) * 2018-11-09 2020-05-21 日本電信電話株式会社 分散深層学習システムおよびデータ転送方法
TWI696961B (zh) * 2018-12-12 2020-06-21 財團法人工業技術研究院 深度神經網路硬體加速器與其操作方法
CN111353575B (zh) 2018-12-20 2025-01-10 超威半导体公司 用于卷积神经网络的图块化格式
US11520331B2 (en) * 2018-12-28 2022-12-06 Intel Corporation Methods and apparatus to update autonomous vehicle perspectives
US11353870B2 (en) * 2018-12-31 2022-06-07 Baidu Usa Llc Autonomous driving computing and storage expansion device with flexible host and client configuration
WO2020147142A1 (zh) * 2019-01-16 2020-07-23 华为技术有限公司 一种深度学习模型的训练方法、系统
US10491240B1 (en) * 2019-01-17 2019-11-26 Cyborg Inc. Systems and methods for variable length codeword based, hybrid data encoding and decoding using dynamic memory allocation
US20200242464A1 (en) * 2019-01-29 2020-07-30 Sony Corporation Incremental ai firmware updates using in-device training and peer-to-peer updates
US11580371B2 (en) * 2019-03-13 2023-02-14 Roviero, Inc. Method and apparatus to efficiently process and execute Artificial Intelligence operations
CN111723918B (zh) 2019-03-18 2026-03-24 超威半导体公司 用于卷积内核的自动生成和调谐工具
US11580321B2 (en) * 2019-04-08 2023-02-14 Ares Technologies, Inc. Systems, devices, and methods for machine learning using a distributed framework
US10552121B1 (en) * 2019-05-07 2020-02-04 Capital One Services, Llc System and method for dynamic process flow control based on real-time events
US11521042B2 (en) * 2019-05-21 2022-12-06 Anil Ravindranath System and method to dynamically and automatically sharing resources of coprocessor AI accelerators
CN110401700B (zh) * 2019-07-03 2020-10-16 阿里巴巴集团控股有限公司 模型加载方法及系统、控制节点及执行节点
US11436019B2 (en) * 2019-07-15 2022-09-06 Microsoft Technology Licensing, Llc Data parallelism in distributed training of artificial intelligence models
US11520592B2 (en) * 2019-07-15 2022-12-06 Microsoft Technology Licensing, Llc Executing large artificial intelligence models on memory-constrained devices
CN110347636B (zh) 2019-07-15 2024-04-30 北京一流科技有限公司 数据执行体及其数据处理方法
US11354579B2 (en) 2019-07-15 2022-06-07 Microsoft Technology Licensing, Llc Dynamic multi-layer execution for artificial intelligence modeling
US10956776B2 (en) 2019-08-06 2021-03-23 Alibaba Group Holding Limited 2D convolutional accelerator that generates 3D results
US12249189B2 (en) 2019-08-12 2025-03-11 Micron Technology, Inc. Predictive maintenance of automotive lighting
WO2021032498A1 (en) * 2019-08-16 2021-02-25 Telefonaktiebolaget Lm Ericsson (Publ) Methods, apparatus and machine-readable media relating to machine-learning in a communication network
WO2021032497A1 (en) * 2019-08-16 2021-02-25 Telefonaktiebolaget Lm Ericsson (Publ) Methods, apparatus and machine-readable media relating to machine-learning in a communication network
US12497055B2 (en) 2019-08-21 2025-12-16 Micron Technology, Inc. Monitoring controller area network bus for vehicle control
US11042350B2 (en) 2019-08-21 2021-06-22 Micron Technology, Inc. Intelligent audio control in vehicles
US11526761B2 (en) * 2019-08-24 2022-12-13 Microsoft Technology Licensing, Llc Neural network training with decreased memory consumption and processor utilization
US20210065038A1 (en) * 2019-08-26 2021-03-04 Visa International Service Association Method, System, and Computer Program Product for Maintaining Model State
CN110503207A (zh) * 2019-08-28 2019-11-26 深圳前海微众银行股份有限公司 联邦学习信用管理方法、装置、设备及可读存储介质
US12210401B2 (en) 2019-09-05 2025-01-28 Micron Technology, Inc. Temperature based optimization of data storage operations
CN110633796B (zh) * 2019-09-05 2022-04-08 北京达佳互联信息技术有限公司 模型更新方法、装置、电子设备及存储介质
US11693562B2 (en) * 2019-09-05 2023-07-04 Micron Technology, Inc. Bandwidth optimization for different types of operations scheduled in a data storage device
US11915041B1 (en) * 2019-09-12 2024-02-27 Neureality Ltd. Method and system for sequencing artificial intelligence (AI) jobs for execution at AI accelerators
CN112529206B (zh) * 2019-09-18 2024-05-17 华为技术有限公司 一种模型运行方法和系统
US12518167B1 (en) * 2019-09-30 2026-01-06 Amazon Technologies, Inc. Neural network training in a distributed system
US11941528B2 (en) 2019-09-30 2024-03-26 Amazon Technologies, Inc. Neural network training in a distributed system
US11556450B2 (en) * 2019-10-11 2023-01-17 International Business Machines Corporation Hybrid data-model parallelism for efficient deep learning
WO2021068243A1 (en) * 2019-10-12 2021-04-15 Baidu.Com Times Technology (Beijing) Co., Ltd. Method and system for accelerating ai training with advanced interconnect technologies
US12511543B2 (en) * 2019-11-05 2025-12-30 Nvidia Corporation Distributed weight update for backpropagation of a neural network
CN110908799A (zh) * 2019-11-08 2020-03-24 浪潮电子信息产业股份有限公司 一种分布式训练中的通信方法、装置、设备、介质
US11507840B2 (en) * 2019-11-13 2022-11-22 International Business Machines Corporation Region constrained regularized adversarial examples for model interpretability
US11615295B2 (en) 2019-11-15 2023-03-28 Baidu Usa Llc Distributed AI training topology based on flexible cable connection
CN111210020B (zh) * 2019-11-22 2022-12-06 清华大学 一种加速分布式机器学习的方法及系统
WO2021097784A1 (en) * 2019-11-22 2021-05-27 Huawei Technologies Co., Ltd. Method and system for constructing compiler intermediate representations from tensorflow graph
US11521062B2 (en) * 2019-12-05 2022-12-06 International Business Machines Corporation Neural network training using a data flow graph and dynamic memory management
US20220414464A1 (en) * 2019-12-10 2022-12-29 Agency For Science, Technology And Research Method and server for federated machine learning
CN112988229B (zh) * 2019-12-12 2022-08-05 上海大学 基于异构计算的卷积神经网络资源优化配置方法
CN112988367B (zh) * 2019-12-12 2024-05-28 中科寒武纪科技股份有限公司 资源的分配方法、装置、计算机设备及可读存储介质
US20210182660A1 (en) * 2019-12-16 2021-06-17 Soundhound, Inc. Distributed training of neural network models
US11521063B1 (en) * 2019-12-17 2022-12-06 Bae Systems Information And Electronic Systems Integration Inc. System and method for terminal acquisition with a neural network
US11250648B2 (en) 2019-12-18 2022-02-15 Micron Technology, Inc. Predictive maintenance of automotive transmission
CN111124696B (zh) * 2019-12-30 2023-06-23 北京三快在线科技有限公司 单元组创建、数据同步方法、装置、单元和存储介质
CN111208980B (zh) * 2019-12-31 2021-04-06 北京九章云极科技有限公司 一种数据分析处理方法和系统
CN111240743B (zh) * 2020-01-03 2022-06-03 格兰菲智能科技有限公司 人工智能集成电路
US11580388B2 (en) * 2020-01-03 2023-02-14 Microsoft Technology Licensing, Llc Distributed processing architecture
US12236343B2 (en) 2020-01-08 2025-02-25 Maxim Integrated Products, Inc. Systems and methods for reducing memory requirements in neural networks
CN113094168A (zh) * 2020-01-08 2021-07-09 北京奇虎科技有限公司 模型的分布式训练方法、装置和系统
CN111262917A (zh) * 2020-01-13 2020-06-09 苏州浪潮智能科技有限公司 一种基于fpga云平台的远端数据搬移装置和方法
CN113128686A (zh) * 2020-01-16 2021-07-16 华为技术有限公司 模型训练方法及装置
CN113138832B (zh) * 2020-01-17 2024-03-01 深圳致星科技有限公司 一种基于重置训练数据传输网络的分布式训练方法及系统
CN111292223B (zh) * 2020-01-22 2023-07-25 北京百度网讯科技有限公司 图计算的处理方法、装置、电子设备及存储介质
US12443831B1 (en) * 2020-01-23 2025-10-14 Nvidia Corporation Neural network execution streams
US11226859B2 (en) * 2020-01-26 2022-01-18 Microsoft Technology Licensing, Llc Systems and methods for error recovery
US11513860B2 (en) * 2020-01-31 2022-11-29 Red Hat, Inc. Serverless function colocation with storage pools
DE102020202093A1 (de) 2020-02-19 2021-08-19 Robert Bosch Gesellschaft mit beschränkter Haftung Verfahren und Vorrichtung für maschinelles Lernen
CN110955530A (zh) * 2020-02-25 2020-04-03 深圳鲲云信息科技有限公司 深度学习引擎并行处理数据方法、装置、设备及储存介质
US11507486B2 (en) * 2020-03-04 2022-11-22 Dell Products L.P. Method and system for generating latency aware workloads using resource devices in a resource device pool
US11250538B2 (en) 2020-03-09 2022-02-15 Apple Inc. Completion signaling techniques in distributed processor
US20230080172A1 (en) * 2020-03-13 2023-03-16 Hewlett-Packard Development Company, L.P. Transmitting node instructions
US20210304025A1 (en) * 2020-03-24 2021-09-30 Facebook, Inc. Dynamic quality of service management for deep learning training communication
CN113452541B (zh) * 2020-03-27 2023-02-03 上海商汤智能科技有限公司 网络带宽调整方法和相关产品
US11468325B2 (en) * 2020-03-30 2022-10-11 Amazon Technologies, Inc. Multi-model training pipeline in distributed systems
CN115335804B (zh) * 2020-03-31 2026-03-17 阿里巴巴集团控股有限公司 由第一计算节点实施的方法、第一计算节点及可读介质
CN111178522B (zh) * 2020-04-13 2020-07-10 杭州雄迈集成电路技术股份有限公司 一种软硬件协同加速方法、系统及计算机可读存储介质
US11681598B2 (en) * 2020-04-16 2023-06-20 Texas Instruments Incorporated Method and apparatus to facilitate low latency fault mitigation, QoS management and debug of a processing pipeline
CN111507257B (zh) * 2020-04-16 2023-09-08 奇安信科技集团股份有限公司 图片处理方法、装置、系统、介质及程序
CN111582494B (zh) * 2020-04-17 2023-07-07 浙江大学 一种基于延迟处理的混合分布式机器学习更新方法
CN111552563B (zh) * 2020-04-20 2023-04-07 南昌嘉研科技有限公司 一种多线程数据系统、多线程消息传递方法及系统
KR102515188B1 (ko) * 2020-04-22 2023-03-31 한국전력공사 에지 컴퓨팅에서 다중 ami 데이터 스트림 가속처리를 위한 하이브리드 딥 러닝 스케줄링 방법
CN113570028A (zh) * 2020-04-28 2021-10-29 超威半导体公司 用于在神经网络中处理数据的静态生成的经编译表示
US11394799B2 (en) 2020-05-07 2022-07-19 Freeman Augustus Jackson Methods, systems, apparatuses, and devices for facilitating for generation of an interactive story based on non-interactive data
CN113705801B (zh) * 2020-05-22 2025-06-03 华为技术有限公司 一种神经网络模型的训练装置、方法及相关设备
CN113743567B (zh) * 2020-05-28 2025-07-08 平头哥(杭州)半导体有限公司 一种将深度学习模型部署到加速单元的方法
CN111752689B (zh) * 2020-06-22 2023-08-25 深圳鲲云信息科技有限公司 一种基于数据流的神经网络多引擎同步计算系统
CN112308205B (zh) * 2020-06-28 2025-03-18 北京沃东天骏信息技术有限公司 基于预训练模型的模型改进方法及装置
CN111813858B (zh) * 2020-07-10 2022-06-24 电子科技大学 基于计算节点自组织分组的分布式神经网络混合同步训练方法
CN111881345B (zh) * 2020-07-13 2023-06-09 汕头大学 基于位置上下文感知的神经协同过滤服务质量预测方法
US11915122B2 (en) * 2020-07-29 2024-02-27 Micron Technology, Inc. Gateway for distributing an artificial neural network among multiple processing nodes
US20230359886A1 (en) * 2020-08-18 2023-11-09 Qualcomm Incorporated Configuration considerations for channel state information
CN111949422B (zh) * 2020-08-26 2024-04-16 南京云灿信息科技有限公司 基于mq和异步io的数据多级缓存与高速传输记录方法
CN112001351A (zh) * 2020-09-01 2020-11-27 城云科技(中国)有限公司 多个视频流处理方法、系统、计算机设备和存储介质
KR20230061370A (ko) * 2020-09-03 2023-05-08 엘지전자 주식회사 복수의 디바이스들의 학습 결과에 기초하여, 서버가 최종 학습 결과물을 도출하는 분산학습을 위한 통신방법 및 서버
US12418333B2 (en) * 2020-09-07 2025-09-16 Lg Electronics Inc. Method for aligning gradient symbols by using bias regarding aircomp in signal amplitude range of receiver
TWI775170B (zh) * 2020-09-30 2022-08-21 新漢股份有限公司 Cpu應用於人工智慧相關程序時的執行方法
US12159225B2 (en) * 2020-10-14 2024-12-03 Google Llc Queue allocation in machine learning accelerators
US12417775B2 (en) 2020-10-15 2025-09-16 Dolby International Ab Method and apparatus for neural network based processing of audio using sinusoidal activation
CN121745182A (zh) 2020-11-02 2026-03-27 平头哥(上海)半导体技术有限公司 神经网络处理单元、集群和训练机器学习模型的方法
CN112465112B (zh) * 2020-11-19 2022-06-07 苏州浪潮智能科技有限公司 基于nGraph的GPU后端分布式训练方法和系统
CN112381218B (zh) * 2020-11-20 2022-04-12 中国人民解放军国防科技大学 一种用于分布式深度学习训练的本地更新方法
US12117908B2 (en) * 2020-12-04 2024-10-15 Intel Corporation Restoring persistent application data from non-volatile memory after a system crash or system reboot
US11847504B2 (en) 2020-12-16 2023-12-19 Nexcom International Co., Ltd. Method for CPU to execute artificial intelligence related processes
US12067465B2 (en) 2020-12-17 2024-08-20 SiMa Technologies, Inc. Instruction streaming for a machine learning accelerator
US11782757B2 (en) * 2021-05-07 2023-10-10 SiMa Technologies, Inc. Scheduling off-chip memory access for programs with predictable execution
JP7896495B2 (ja) * 2020-12-23 2026-07-29 ソニーグループ株式会社 通信装置、通信方法、および通信システム
EP4270253A4 (en) * 2020-12-24 2025-01-15 LG Electronics Inc. METHOD AND APPARATUS FOR SETTING A SHARED POINT IN A WIRELESS COMMUNICATIONS SYSTEM
KR20220096466A (ko) * 2020-12-31 2022-07-07 삼성전자주식회사 뉴럴 네트워크 연산을 위한 메모리 관리 방법 및 장치
US11729279B2 (en) * 2021-01-11 2023-08-15 Dell Products, L.P. System and method for remote assisted optimization of native services
US20220222129A1 (en) * 2021-01-12 2022-07-14 GM Global Technology Operations LLC System for parallel processing middleware node application algorithms using threads
CN112712171B (zh) * 2021-01-12 2022-08-12 湖南工业大学 深度卷积神经网络的分布式训练方法、设备和存储介质
CN112748998B (zh) * 2021-01-21 2023-10-03 中南大学 一种移动端的卷积神经网络任务调度方法及系统
US11516311B2 (en) * 2021-01-22 2022-11-29 Avago Technologies International Sales Pte. Limited Distributed machine-learning resource sharing and request routing
CN112799834B (zh) * 2021-01-26 2024-05-07 北京迈格威科技有限公司 训练数据分发方法、装置、电子设备及存储介质
US12430581B2 (en) 2021-02-15 2025-09-30 Bank Of America Corporation Machine learning training device
US12001511B2 (en) * 2021-03-11 2024-06-04 Hewlett Packard Enterprise Development Lp Systems and methods of resource configuration optimization for machine learning workloads
US12187296B2 (en) * 2021-03-23 2025-01-07 Sony Group Corporation System, method and computer program to suppress vibrations in a vehicle
US12450518B2 (en) * 2021-03-29 2025-10-21 Google Llc Evaluating on-device machine learning model(s) based on performance measures of client device(s) and/or the on-device machine learning model(s)
US11271843B1 (en) * 2021-04-20 2022-03-08 Netapp, Inc. Quality of service performance diagnostic mechanism
WO2022225530A1 (en) * 2021-04-23 2022-10-27 Nokia Technologies Oy Low latency machine learning
CN113222118B (zh) * 2021-05-19 2022-09-09 北京百度网讯科技有限公司 神经网络训练方法、装置、电子设备、介质和程序产品
CN113487025B (zh) * 2021-07-02 2023-09-08 浙江大学 面向神经网络检查点数据的智能压缩存储方法和系统
US12387116B2 (en) 2021-07-06 2025-08-12 Bank Of America Corporation Synchronized data collection for use in hosted virtual desktop slicing
US11789783B2 (en) 2021-07-06 2023-10-17 Bank Of America Corporation Hosted virtual desktop slicing using federated edge intelligence
US11385925B1 (en) 2021-07-06 2022-07-12 Bank Of America Corporation System and method for provisioning hosted virtual desktop resources to remote users
CN115599956B (zh) * 2021-07-07 2024-09-24 清华大学 数据处理方法、执行工作站、分布式计算系统和存储介质
EP4120078A1 (en) * 2021-07-13 2023-01-18 Aptiv Technologies Limited Method for scheduling feature services within a distributed data flow service framework
US20230024130A1 (en) * 2021-07-23 2023-01-26 Advanced Micro Devices, Inc. Workload aware virtual processing units
CN115843037A (zh) * 2021-08-17 2023-03-24 华为技术有限公司 数据处理方法及装置
US12361268B2 (en) 2021-08-30 2025-07-15 Stmicroelectronics International N.V. Neural network hardware accelerator circuit with requantization circuits
CN113703980B (zh) * 2021-08-31 2024-09-06 西安电子科技大学 一种分布式机器学习系统及适用于其的通信调度方法
CN114936117A (zh) * 2021-09-02 2022-08-23 华为技术有限公司 模型训练的方法、服务器、芯片以及系统
CN113867983B (zh) * 2021-09-14 2025-06-24 杭州海康威视数字技术股份有限公司 图数据挖掘方法、装置、电子设备及机器可读存储介质
GB2605664B (en) 2021-09-30 2023-03-29 Imagination Tech Ltd Processor with hardware pipeline
GB2605665B (en) * 2021-09-30 2023-11-01 Imagination Tech Ltd Graphics processor
GB2605471B (en) 2021-09-30 2023-11-01 Imagination Tech Ltd Processor with hardware pipeline
US20230108177A1 (en) * 2021-10-06 2023-04-06 Google Llc Hardware-Aware Progressive Training Of Machine Learning Models
CN116017496A (zh) * 2021-10-21 2023-04-25 华为技术有限公司 通信方法及装置、系统、存储介质、程序产品
US12493789B2 (en) * 2021-10-21 2025-12-09 Rakuten Mobile, Inc. Cooperative training migration
CN113918351B (zh) * 2021-12-08 2022-03-11 之江实验室 深度学习框架与ai加速卡片内分布式训练适配方法和装置
CN114328105B (zh) * 2021-12-27 2025-11-14 中国船舶重工集团公司第七0九研究所 一种四叉树监控网络设计方法
CN114531669B (zh) * 2022-01-14 2024-06-07 山东师范大学 一种基于车辆边缘计算的任务卸载方法及系统
US12423578B1 (en) * 2022-01-26 2025-09-23 Amazon Technologies, Inc. Distributed training of machine learning models
US11902176B2 (en) 2022-02-24 2024-02-13 Bank Of America Corporation System for detecting multi-dimensional linkage and layering of resource transfers using a distributed server network
CN114840445B (zh) * 2022-03-02 2025-01-28 阿里巴巴(中国)有限公司 内存访问方法和装置
CN118922842A (zh) * 2022-04-07 2024-11-08 华为技术有限公司 分布式推理的方法和装置
CN114866429B (zh) * 2022-04-28 2023-07-18 中国科学技术大学苏州高等研究院 联合路由决策和网内聚合的分布式模型训练方法和装置
CN114820279B (zh) * 2022-05-18 2023-03-24 北京百度网讯科技有限公司 基于多gpu的分布式深度学习方法、装置及电子设备
US12074667B2 (en) * 2022-05-31 2024-08-27 Motional Ad Llc Antenna monitoring and selection
CN117395186B (zh) * 2022-06-29 2026-06-30 华为云计算技术有限公司 一种分布式训练方法、系统及装置
CN115357375B (zh) * 2022-07-15 2025-07-01 中国科学院计算技术研究所 一种面向MPI的Serverless并行计算方法及其系统
CN115314397B (zh) * 2022-08-05 2023-07-21 中科计算技术西部研究院 用于分布式训练的网络模拟方法、系统、装置及存储介质
CN115348320B (zh) * 2022-08-08 2024-07-02 航天科工火箭技术有限公司 一种通信数据的转换方法、装置、及电子设备
CN115473854B (zh) * 2022-08-23 2023-10-24 电子科技大学 一种多模态网络的流量智能控制方法
EP4577951A4 (en) * 2022-09-14 2025-10-29 Huawei Tech Co Ltd METHODS, SYSTEMS AND APPARATUS OF INFERENCE USING PROBABILITY INFORMATION
CN115271102B (zh) * 2022-09-26 2022-12-16 太极计算机股份有限公司 一种机器学习引擎的任务导向的优先级方法及系统
US12632298B2 (en) 2022-10-17 2026-05-19 Dell Products L.P. Method to dynamically regulate volatile and non-volatile memory pools on persistent memory across cloud
CN115378818B (zh) * 2022-10-26 2023-02-24 西南民族大学 一种适用于大规模分布式机器学习的新型拓扑设计方法
KR20240103607A (ko) 2022-12-27 2024-07-04 삼성전자주식회사 통합 가상 메모리 관리 방법 및 장치
CN115936095B (zh) * 2023-02-20 2023-05-23 浪潮电子信息产业股份有限公司 一种参数梯度同步方法、装置、设备及存储介质
US20240311153A1 (en) * 2023-03-06 2024-09-19 Microsoft Technology Licensing, Llc Collective communication as a multi-commodity flow problem
US20240314151A1 (en) * 2023-03-16 2024-09-19 International Business Machines Corporation Detecting anomalous activity in a system-on-chip
CN116149759B (zh) * 2023-04-20 2023-07-14 深圳市吉方工控有限公司 Uefi驱动卸载方法、装置、电子设备及可读存储介质
US20240394330A1 (en) * 2023-05-26 2024-11-28 Microsoft Technology Licensing, Llc Solving Differential Equations with Deep Learning
CN119512827A (zh) * 2023-08-25 2025-02-25 华为技术有限公司 分布式计算系统和用于分布式计算系统的故障处理方法
US12677032B2 (en) * 2023-09-20 2026-07-07 The Nielsen Company (Us), Llc Method and system for internal failover of intermediary gateway
CN117669768A (zh) * 2023-11-21 2024-03-08 山东浪潮数据库技术有限公司 一种适用于机器学习的高性能混合分布式架构实现方法
CN117872303A (zh) * 2023-12-13 2024-04-12 中国船舶集团有限公司第七二四研究所 一种基于并行信号处理框架的时间均衡式数据分发方法
WO2025131314A1 (en) * 2023-12-22 2025-06-26 Huawei Technologies Co., Ltd. Method for use in a parallel computing system based on message passing for distributing a workload
US20250291754A1 (en) * 2024-03-12 2025-09-18 Texas Instruments Incorporated Adaptive Burst Transfer for Direct Memory Access
KR102759506B1 (ko) * 2024-05-08 2025-01-24 래블업 주식회사 다중 딥러닝 모델의 사전훈련 계층과 미세조정 계층의 gpu 분리 할당을 통한 다중노드 클러스터 기반 추론 방법 및 시스템
CN121233359A (zh) * 2024-06-27 2025-12-30 华为技术有限公司 一种集合通信方法及装置
US12423234B1 (en) 2024-07-23 2025-09-23 International Business Machines Corporation Cache governance in a computing environment with multiple processors
US20260032092A1 (en) * 2024-07-24 2026-01-29 Advanced Micro Devices, Inc. Prioritize the earlier step messages for collective algorithms
CN118838721B (zh) * 2024-09-23 2025-02-18 山东浪潮科学研究院有限公司 一种基于gpgpu的mpi集体通信传输系统及方法
US20260104966A1 (en) * 2024-10-11 2026-04-16 Nvidia Corporation Fast checkpointing of neural network training
CN119903015A (zh) * 2025-03-27 2025-04-29 苏州亿铸智能科技有限公司 环形通信方法、环形通信装置以及设备
CN121418294B (zh) * 2025-12-30 2026-03-31 上海数据港股份有限公司 一种数据中心中数据迁移处理方法和系统

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7363422B2 (en) * 2000-01-05 2008-04-22 Rambus Inc. Configurable width buffered module
US7412588B2 (en) * 2003-07-25 2008-08-12 International Business Machines Corporation Network processor system on chip with bridge coupling protocol converting multiprocessor macro core local bus to peripheral interfaces coupled system bus
DE10353532A1 (de) 2003-11-14 2005-06-16 Embigence Gmbh Verfahren und Vorrichtung zur Übertragung von Daten
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7783822B2 (en) * 2007-07-25 2010-08-24 Hewlett-Packard Development Company, L.P. Systems and methods for improving performance of a routable fabric
US20090089078A1 (en) * 2007-09-28 2009-04-02 Great-Circle Technologies, Inc. Bundling of automated work flow
US8004977B2 (en) * 2007-11-28 2011-08-23 Alcatel Lucent Method of implementing packet-based resource allocation and persistent resource allocation in a wireless communication system
FR2925187B1 (fr) 2007-12-14 2011-04-08 Commissariat Energie Atomique Systeme comportant une pluralite d'unites de traitement permettant d'executer des taches en parallele,en mixant le mode d'execution de type controle et le mode d'execution de type flot de donnees
US20110091127A1 (en) * 2008-06-20 2011-04-21 Pavel Kisilev Method and system for efficient video processing
US8442927B2 (en) 2009-07-30 2013-05-14 Nec Laboratories America, Inc. Dynamically configurable, multi-ported co-processor for convolutional neural networks
CN102708404B (zh) 2012-02-23 2016-08-03 北京市计算中心 一种基于机器学习的多核下mpi最优运行时的参数预测方法
US9571402B2 (en) * 2013-05-03 2017-02-14 Netspeed Systems Congestion control and QoS in NoC by regulating the injection traffic
US9753767B2 (en) * 2014-03-11 2017-09-05 Sas Institute Inc. Distributed data set task selection
CN104035751B (zh) 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
CN106297774B (zh) 2015-05-29 2019-07-09 中国科学院声学研究所 一种神经网络声学模型的分布式并行训练方法及系统
US10320695B2 (en) * 2015-05-29 2019-06-11 Advanced Micro Devices, Inc. Message aggregation, combining and compression for efficient data communications in GPU-based clusters
US10158575B2 (en) * 2015-06-17 2018-12-18 Citrix Systems, Inc. System for bandwidth optimization with high priority traffic awareness and control
CN107196877B (zh) * 2016-03-14 2021-07-20 华为技术有限公司 网络流量控制的方法及其网络设备
US10338953B2 (en) * 2016-03-18 2019-07-02 Intel Corporation Facilitating execution-aware hybrid preemption for execution of tasks in computing environments
US11086814B2 (en) * 2016-04-15 2021-08-10 Nec Corporation System and method for communication efficient sparse-reduce
CN107463990A (zh) 2016-06-02 2017-12-12 国家计算机网络与信息安全管理中心 一种卷积神经网络的fpga并行加速方法
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10528864B2 (en) 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US20180075347A1 (en) * 2016-09-15 2018-03-15 Microsoft Technology Licensing, Llc Efficient training of neural networks
US10810492B2 (en) * 2017-01-27 2020-10-20 Hewlett Packard Enterprise Development Lp Memory side acceleration for deep learning parameter updates
US11373266B2 (en) 2017-05-05 2022-06-28 Intel Corporation Data parallelism and halo exchange for distributed machine learning
US11288575B2 (en) * 2017-05-18 2022-03-29 Microsoft Technology Licensing, Llc Asynchronous neural network training
US11270201B2 (en) 2017-12-29 2022-03-08 Intel Corporation Communication optimizations for distributed machine learning

Also Published As

Publication number Publication date
US11704565B2 (en) 2023-07-18
US12450484B2 (en) 2025-10-21
US11270201B2 (en) 2022-03-08
EP3506095A2 (en) 2019-07-03
EP3506095B1 (en) 2025-03-19
US20190205745A1 (en) 2019-07-04
US20220245454A1 (en) 2022-08-04
US20230376762A1 (en) 2023-11-23
PL3506095T3 (pl) 2025-07-07
CN110135575A (zh) 2019-08-16
CN110135575B (zh) 2025-11-11
US20260119902A1 (en) 2026-04-30
EP3506095A3 (en) 2019-09-25

Similar Documents

Publication Publication Date Title
US12450484B2 (en) Communication optimizations for distributed machine learning
ES2996958T3 (en) Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
US12190118B2 (en) Data locality enhancement for graphics processing units
ES2993373T3 (en) Disaggregation of soc architecture
ES2993741T3 (en) Hardware for matrix computations with sparse matrices for arbitrary neural networks
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
ES2982454T3 (es) Optimizaciones de cálculo para redes neuronales
CN113496457B (zh) 低精度机器学习操作的计算优化
ES2985693T3 (es) Coordinación y mayor utilización de procesadores de gráficos durante una inferencia
ES2939271T3 (es) Ejecución de cómputo y comunicación de grano fino para estructuras de aprendizaje profundo
ES3034021T3 (en) Compute optimization mechanism
KR20210059648A (ko) 그래픽 프로세싱 유닛 프로세싱 및 캐싱 개선
WO2020190371A1 (en) Local memory sharing between kernels
ES2963941T3 (es) Ahorro de memoria de GPU compartiendo la memoria intermedia entre instancias similares en la misma GPU
CN111694601A (zh) 使用细粒度依赖性检查加速同步并基于可用共享存储器空间调度优化的图形系统和方法
US20200293368A1 (en) Systems and methods for synchronization of multi-thread lanes
CN116339907A (zh) 到硬件加速器的基于签名的自动迁移
CN116339935A (zh) 集群化图形体系结构中的线程组调遣