ES2914299T3 - Hardware de cómputo optimizado para operaciones de aprendizaje automático - Google Patents
Hardware de cómputo optimizado para operaciones de aprendizaje automático Download PDFInfo
- Publication number
- ES2914299T3 ES2914299T3 ES18170154T ES18170154T ES2914299T3 ES 2914299 T3 ES2914299 T3 ES 2914299T3 ES 18170154 T ES18170154 T ES 18170154T ES 18170154 T ES18170154 T ES 18170154T ES 2914299 T3 ES2914299 T3 ES 2914299T3
- Authority
- ES
- Spain
- Prior art keywords
- graphics
- unit
- processor
- memory
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/044—Recurrent networks, e.g. Hopfield networks
- G06N3/0442—Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/0495—Quantised networks; Sparse networks; Compressed 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/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
-
- 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/0895—Weakly supervised learning, e.g. semi-supervised or self-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/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/08—Learning methods
- G06N3/098—Distributed learning, e.g. federated learning
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/382—Reconfigurable for different fixed word lengths
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Multimedia (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Image Processing (AREA)
- Advance Control (AREA)
- Image Generation (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Un aparato de cómputo para realizar operaciones de aprendizaje automático, comprendiendo el aparato de cómputo: una unidad de extracción dispuesta para extraer (742) una única instrucción que tiene múltiples operandos de entrada, en donde los múltiples operandos de entrada tienen una longitud en bits desigual, teniendo un primer operando de entrada una primera longitud en bits y teniendo un segundo operando de entrada una segunda longitud en bits; una unidad de descodificación dispuesta para descodificar (744) la única instrucción en una instrucción descodificada; una unidad de longitud de operando para determinar (744) la longitud en bits más pequeña de la primera longitud en bits y la segunda longitud en bits; y una unidad de cómputo dispuesta para realizar (746) una operación matricial sobre los múltiples operandos de entrada para generar un valor de salida que tiene una longitud en bits igual a la longitud en bits más pequeña, en donde la unidad de cómputo está dispuesta adicionalmente para: determinar si una operación de multiplicación de la operación matricial tiene una entrada cero; y sortear la operación de multiplicación que tiene la entrada cero.
Description
DESCRIPCIÓN
Hardware de cómputo optimizado para operaciones de aprendizaje automático
CAMPO TÉCNICO
Las realizaciones se refieren, en general, al procesamiento de datos y, más particularmente, al procesamiento de aprendizaje automático mediante una unidad de procesamiento de gráficos de propósito general.
ANTECEDENTES DE LA DESCRIPCIÓN
El procesamiento de datos de gráficos paralelo actual incluye sistemas y métodos desarrollados para realizar operaciones específicas sobre datos de gráficos, tales como, por ejemplo, interpolación lineal, teselación, rasterización, correlación de textura, prueba de profundidad, etc. Tradicionalmente, los procesadores de gráficos usan unidades computacionales de función fija para procesar datos de gráficos; sin embargo, más recientemente, porciones de procesadores de gráficos se han hecho programables, lo que permite que tales procesadores soporten una gama más amplia de operaciones para procesar datos de vértice y de fragmento.
Para aumentar adicionalmente el rendimiento, los procesadores de gráficos habitualmente implementan técnicas de procesamiento, tales como encauzamiento en canalizaciones, que intentan procesar, en paralelo, tantos datos de gráficos como sea posible a lo largo de todas las diferentes partes de la canalización de gráficos. Los procesadores de gráficos paralelos con arquitecturas de múltiples hilos y única instrucción (SIMT) están diseñados para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura de SIMT, grupos de hilos paralelos intentan ejecutar conjuntamente instrucciones de programa de manera sincrónica tan a menudo como sea posible para aumentar la eficiencia de procesamiento. Puede hallarse una vista global general de software y hardware para arquitecturas de SIMT en Shane Cook, CUDA Programming, capítulo 3, páginas 37-51 (2013) y/o Nicholas Wilt, CUDA Handbook, A Comprehensiva Guide to GPU Programming, secciones 2.6.2 a 3.1.2 (junio de 2013).
He Yifan y col. "A configurable SIMD architecture with explicit datapath for intelligent learning" se refiere a una unidad de multiplicación-acumulación con un número variable de registro de acumulador.
El documento de Mark Harris, "Mixed-Precision Programming with CUDA 8", se refiere a arquitecturas de hardware de unidades de procesamiento de gráficos y a la interfaz de programación de aplicaciones CUDA 8.
El documento de Bill Dally, "Hardware for Deep Learning" se refiere a hardware para aprendizaje profundo.
HAN SONG Y COL.: "EIE: Efficient Inference Engine on Compressed Deep Neural Network", 2013, 21a CONFERENCIA INTERNACIONAL SOBRE COMPRENSIÓN DE PROGRAMAS (ICPC); [SIMPOSIO INTERNACIONAL SOBRE ARQUITECTURA DE ORDENADORES (ISCA)], IEEE, EE. UU., 18 de junio de 2016, se refiere a unidades de cómputo dentro de bloques de cómputo sorteando operaciones individuales.
La invención se define en las reivindicaciones independientes. Se definen realizaciones ventajosas adicionales en las reivindicaciones dependientes. Específicamente, la invención es tal y como se expone en la realización de la Figura 7C y su descripción, y cualquier otra parte de la descripción a la que se haga referencia implícitamente en la misma.
Breve descripción de los dibujos
De modo que las características de la presente invención puedan entenderse en detalle, puede tenerse una descripción más particular de la invención por referencia a las realizaciones, algunas de las cuales se ilustran en los dibujos adjuntos. Sin embargo, se ha de observar que los dibujos adjuntos solo ilustran realizaciones habituales y, por lo tanto, no han de considerarse limitantes del alcance de todas las realizaciones.
La Figura 1 es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento;
las Figuras 2A-2D ilustran componentes de procesador paralelo, de acuerdo con una realización;
Las Figuras 3A-3B son diagramas de bloques de multiprocesadores de gráficos, de acuerdo con realizaciones;
las Figuras 4A-4F ilustran una arquitectura ilustrativa en la que una pluralidad de GPU están acopladas de manera comunicativa a una pluralidad de procesadores de múltiples núcleos;
la Figura 5 ilustra una canalización de procesamiento de gráficos, de acuerdo con una realización;
la Figura 6A es un diagrama de bloques de un sistema de procesamiento de datos, de acuerdo con una realización;
la Figura 6B ilustra una lógica que proporciona técnicas para el aplastamiento de cero de una instrucción tras una carga de operando;
la Figura 6C ilustra una lógica para la reducción de pasadas mediante aplastamiento de cero;
la Figura 6D ilustra una compactación de pasadas de una instrucción compuesta o de múltiples pasadas, de acuerdo con una realización. En una realización,
la Figura 6E ilustra una lógica de hardware para habilitar técnicas de aplastamiento de cero descritas en el presente documento;
la Figura 6F ilustra hardware para aplastamiento de cero dentro de una unidad de cómputo, de acuerdo con una realización;
la Figura 7A ilustra una lógica que proporciona técnicas para una multiplicación de enteros de baja precisión, de acuerdo con una realización;
la Figura 7B ilustra una unidad de lógica para una multiplicación de enteros de baja precisión para evitar el desbordamiento de registro de acumulador, de acuerdo con una realización
la Figura 7C ilustra una lógica para implementar un procesamiento paralelo de longitud en bits desigual, de acuerdo con una realización;
la Figura 7D ilustra una arquitectura de instrucciones ilustrativa para realizar un procesamiento paralelo de longitud en bits desigual, de acuerdo con una realización;
la Figura 7E ilustra una lógica de ejecución de precisión variable que puede usarse para implementar un procesamiento paralelo de longitud en bits desigual, de acuerdo con una realización;
la Figura 8 ilustra una pila de software de aprendizaje automático, de acuerdo con una realización.
La Figura 9 ilustra una unidad de procesamiento de gráficos de propósito general altamente paralela, de acuerdo con una realización.
La Figura 10 ilustra un sistema informático de múltiples GPU, de acuerdo con una realización.
Las Figuras 11A-11B ilustran capas de redes neuronales profundas ilustrativas.
La Figura 12 ilustra una red neuronal recurrente ilustrativa.
La Figura 13 ilustra el entrenamiento y despliegue de una red neuronal profunda.
La Figura 14 es un diagrama de bloques que ilustra un aprendizaje distribuido.
La Figura 15 ilustra un sistema en un chip (SOC) de inferenciación ilustrativo adecuado para realizar una inferenciación usando un modelo entrenado.
La Figura 16 es un diagrama de bloques de un sistema de procesamiento, de acuerdo con una realización. La Figura 17 es un diagrama de bloques de un procesador de acuerdo con una realización.
La Figura 18 es un diagrama de bloques de un procesador de gráficos, de acuerdo con una realización. La Figura 19 es un diagrama de bloques de un motor de procesamiento de gráficos de un procesador de gráficos de acuerdo con algunas realizaciones.
La Figura 20 es un diagrama de bloques de un procesador de gráficos proporcionado por una realización adicional.
La Figura 21 ilustra una lógica de ejecución de hilos que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones.
La Figura 22 es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos de acuerdo con algunas realizaciones.
La Figura 23 es un diagrama de bloques de un procesador de gráficos de acuerdo con otra realización.
Las Figuras 24A-24B ilustran un formato de comando de procesador de gráficos y una secuencia de comandos, de acuerdo con algunas realizaciones.
La Figura 25 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos de acuerdo con algunas realizaciones.
La Figura 26 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP, de acuerdo con una realización.
La Figura 27 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo, de acuerdo con una realización.
La Figura 28 es un diagrama de bloques que ilustra un procesador de gráficos ilustrativo adicional.
La Figura 29 es un diagrama de bloques que ilustra un procesador de gráficos ilustrativo adicional de un circuito integrado de sistema en un chip, de acuerdo con una realización.
Descripción detallada
En algunas realizaciones, una unidad de procesamiento de gráficos (GPU) está acoplada 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 estar acoplada 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 de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU usa entonces circuitería/lógica dedicada para procesar de manera eficiente estos comandos/instrucciones.
En la descripción siguiente, se exponen numerosos detalles específicos para proporcionar un entendimiento más minucioso. Sin embargo, será evidente para un experto en la materia que las realizaciones descritas en el presente documento pueden ponerse en práctica sin uno o más de estos detalles específicos. En otras instancias, no se han descrito características bien conocidas para evitar complicar los detalles de las presentes realizaciones.
Vista global de sistema
La Figura 1 es un diagrama de bloques que ilustra un sistema informático 100 configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento. El sistema informático 100 incluye un subsistema de procesamiento 101 que tiene uno o más procesadores 102 y una memoria de sistema 104 que se comunica mediante una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente separado dentro de un componente de conjunto de chips o puede integrarse dentro de los uno o más procesadores 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 mediante un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede habilitar al sistema informático 100 para que reciba una entrada desde uno o más dispositivos de entrada 108. Adicionalmente, el concentrador de E/S 107 puede habilitar a un controlador de visualización, que puede incluirse en los uno o más procesadores 102, para que proporcione salidas a uno o más dispositivos de visualización 110A. En una realización, los uno o más dispositivos de visualización 110A acoplados con el concentrador de E/S 107 pueden incluir un dispositivo de visualización local, interno o embebido.
En una realización, el subsistema de procesamiento 101 incluye uno o más procesadores paralelos 112 acoplados al concentrador de memoria 105 mediante un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser uno de cualquier número de tecnologías o protocolos de enlace de comunicación basados en normas, tales como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones o tejido de comunicaciones específico de distribuidor. En una realización, los uno o más procesadores paralelos 112 forman un sistema de procesamiento paralelo o vectorial de enfoque computacional 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, los uno o más procesadores paralelos 112 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno de los uno o más o dispositivos de visualización 110A acoplados mediante el concentrador de E/S 107. Los uno o más procesadores paralelos 112 pueden incluir también un controlador de visualización y una
interfaz de visualización (no mostrados) para habilitar una conexión directa a uno o más dispositivos de visualización 110B.
Dentro del subsistema de E/S 111, una unidad de almacenamiento de sistema 114 puede conectarse al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Puede usarse un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para habilitar conexiones entre el concentrador de E/S 107 y otros componentes, tales como un adaptador de red 118 y/o un adaptador de red inalámbrico 119 que pueden integrarse en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivos de complemento 120. El adaptador de red 118 puede ser un adaptador de Ethernet u otro adaptador de red cableado. El adaptador de red inalámbrico 119 puede incluir uno o más de un dispositivo de red de Wi-Fi, de Bluetooth, de comunicación de campo cercano (NFC) o de otro tipo que incluya una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes no explícitamente mostrados, incluyendo USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo, y similares, también puede conectarse al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes de la Figura 1 pueden implementarse usando cualquier protocolo adecuado, tal como protocolos basados en PCI (Interconexión de Componentes Periféricos) (por ejemplo, PCI-Express), o cualesquiera otras interfaces y/o protocolo o protocolos de comunicación de bus o de punto a punto, tales como la interconexión de alta velocidad NV-Link, o protocolos de interconexión conocidos en la técnica.
En una realización, los uno o más procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de gráficos y de vídeo, incluyendo, por ejemplo, circuitería de salida de vídeo, y constituye una unidad de procesamiento de gráficos (GPU). En otra realización, los uno o más procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de propósito general, mientras conservan la arquitectura computacional subyacente, descrita en mayor detalle en el presente documento. En otra realización más, componentes del sistema informático 100 pueden integrarse con otros uno o más elementos de sistema en un único circuito integrado. Por ejemplo, los uno o más procesadores paralelos 112, el concentrador de memoria 105, el procesador o procesadores 102 y el concentrador de E/S 107 pueden integrarse en un circuito integrado de sistema en chip (SoC). Como alternativa, los componentes del sistema informático 100 pueden integrarse en un único paquete para formar una configuración de sistema en paquete (SIP). En una realización, al menos una porción de los componentes del sistema informático 100 puede integrarse en un módulo de múltiples chips (MCM), que puede interconectarse con otros módulos de múltiples chips en un sistema informático modular.
Se apreciará que el sistema informático 100 mostrado en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, incluyendo el número y disposición de puentes, el número de procesadores 102, y el número de procesadores paralelos 112, puede modificarse como se desee. Por ejemplo, en algunas realizaciones, la memoria de sistema 104 está conectada al procesador o procesadores 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 104 mediante el concentrador de memoria 105 y el procesador o procesadores 102. En otras topologías alternativas, el procesador o procesadores paralelos 112 están conectados al concentrador de E/S 107 o directamente a uno de los uno o más procesadores 102, en lugar de al concentrador de memoria 105. En otras realizaciones, el concentrador de E/S 107 y el concentrador de memoria 105 pueden integrarse en un único chip. Algunas realizaciones pueden incluir dos o más conjuntos de procesadores 102 anexados mediante múltiples zócalos, que pueden acoplarse con dos o más instancias del procesador o procesadores paralelos 112.
Algunos de los componentes particulares mostrados en el presente documento son opcionales y pueden no incluirse en todas las implementaciones del sistema informático 100. Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos de complemento, o pueden eliminarse algunos componentes. Además, algunas arquitecturas pueden usar terminología diferente para componentes similares a los ilustrados en la Figura 1. Por ejemplo, el concentrador de memoria 105 puede denominarse puente norte en algunas arquitecturas, mientas que el concentrador de E/S 107 puede denominarse puente sur.
La Figura 2A ilustra un procesador paralelo 200, de acuerdo con una realización. Los diversos componentes del procesador paralelo 200 pueden implementarse usando uno o más dispositivos de circuito integrado, tales como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o matrices de puertas programables en campo (FPGA). El procesador paralelo 200 ilustrado es una variante del uno o más procesadores paralelos 112 mostrados en la Figura 1, de acuerdo con una realización.
En una realización, el procesador paralelo 200 incluye una unidad de procesamiento paralelo 202. La unidad de procesamiento paralelo incluye una unidad de E/S 204 que habilita la comunicación con otros dispositivos, incluyendo otras instancias de la unidad de procesamiento paralelo 202. La unidad de E/S 204 puede conectarse directamente a otros dispositivos. En una realización, la unidad de E/S 204 se conecta con otros dispositivos mediante el uso de una interfaz de concentrador o de conmutador, tal como un concentrador de memoria 105. Las conexiones entre el concentrador de memoria 105 y la unidad de E/S 204 forman un enlace de comunicación 113. Dentro de la unidad de procesamiento paralelo 202, la unidad de E/S 204 se conecta con una interfaz de anfitrión 206 y una barra transversal
de memoria 216, donde la interfaz de anfitrión 206 recibe comandos dirigidos a realizar operaciones de procesamiento y la barra transversal de memoria 216 recibe comandos dirigidos a realizar operaciones de memoria.
Cuando la interfaz de anfitrión 206 recibe una memoria intermedia de comandos mediante la unidad de E/S 204, la interfaz de anfitrión 206 puede dirigir operaciones de trabajo para realizar esos comandos a un extremo frontal 208. En una realización, el extremo frontal 208 se acopla con un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupaciones de procesamiento 212. En una realización, el planificador 210 garantiza que la matriz de agrupaciones de procesamiento 212 está configurada apropiadamente y en un estado válido antes de que las tareas se distribuyan a las agrupaciones de procesamiento de la matriz de agrupaciones de procesamiento 212. En una realización, el planificador 210 se implementa mediante una lógica de firmware que se ejecuta en un microcontrolador. El planificador implementado por el microcontrolador 210 puede configurarse para realizar operaciones de planificación y de distribución de trabajo complejas con granularidad gruesa y fina, lo que habilita un rápido otorgamiento de prioridad y conmutación de contexto de hilos que se ejecutan en la matriz de procesamiento 212. En una realización, el software de anfitrión puede probar cargas de trabajo para su planificación en la matriz de procesamiento 212 mediante uno de múltiples llamadores de procesamiento de gráficos. Las cargas de trabajo pueden entonces ser automáticamente distribuidas a lo largo de la matriz de procesamiento 212 por la lógica del planificador 210 dentro del microcontrolador planificador.
La matriz de agrupaciones de procesamiento 212 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, de la agrupación 214A, la agrupación 214B a la agrupación 214N). Cada agrupación 214A-214N de la matriz de agrupaciones de procesamiento 212 puede ejecutar un gran número de hilos concurrentes. El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 usando diversos algoritmos de planificación y/o de distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cómputo. La planificación puede ser manejada dinámicamente por el planificador 210, o puede estar asistida, en parte, por una lógica de compilador durante la compilación de lógica de programa configurada para su ejecución por la matriz de agrupaciones de procesamiento 212. En una realización, pueden asignarse diferentes agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cómputos.
La matriz de agrupaciones de procesamiento 212 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. En una realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de cómputo paralelo de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, incluyendo filtración de datos de vídeo y/o de audio, realizar operaciones de modelado, incluyendo operaciones de física y realizar transformaciones de datos.
En una realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos paralelo. En realizaciones en las que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 212 puede incluir una lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, incluyendo, pero sin limitación, una lógica de muestreo de textura para realizar operaciones de textura, así como una lógica de teselación y otra lógica de procesamiento de vértices. Adicionalmente, la matriz de agrupaciones de procesamiento 212 puede configurarse para ejecutar programas de sombreado relacionados con el procesamiento de gráficos tales como, pero sin limitación, sombreadores de vértices, sombreadores de teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento paralelo 202 puede transferir datos desde la memoria de sistema mediante la unidad de E/S 204 para su procesamiento. Durante el procesamiento, los datos transferidos pueden almacenarse en una memoria en chip (por ejemplo, la memoria de procesador paralelo 222) durante el procesamiento y, entonces, escribirse en diferido en la memoria de sistema.
En una realización, cuando se usa la unidad de procesamiento paralelo 202 para realizar un procesamiento de gráficos, el planificador 210 puede configurarse para dividir la carga de trabajo de procesamiento en tareas de aproximadamente un mismo tamaño, para habilitar una mejor distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212. En algunas realizaciones, porciones de la matriz de agrupaciones de procesamiento 212 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. Datos intermedios producidos por una o más de las agrupaciones 214A-214N pueden almacenarse en memorias intermedias para permitir que los datos intermedios se transmitan entre las agrupaciones 214A-214N para su procesamiento adicional.
Durante el funcionamiento, la matriz de agrupaciones de procesamiento 212 puede recibir tareas de procesamiento que hay que ejecutar mediante el planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos que hay que procesar, por ejemplo, datos de superficie (parche), datos de primitiva, datos de vértice y/o datos de píxel, así como parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa ha de ejecutarse). El planificador 210 puede configurarse para extraer los índices que
corresponden a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede configurarse para garantizar que la matriz de agrupaciones de procesamiento 212 está configurada en un estado válido antes de que se inicie la carga de trabajo especificada por las memorias intermedias de comando de entrada (por ejemplo, memorias intermedias de lotes, memorias intermedias de inserción, etc.).
Cada una de las una o más instancias de la unidad de procesamiento paralelo 202 puede acoplarse con la memoria de procesador paralelo 222. Puede accederse a la memoria de procesador paralelo 222 mediante la barra transversal de memoria 216, que puede recibir solicitudes de memoria desde la matriz de agrupaciones de procesamiento 212, así como la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria de procesador paralelo 222 mediante una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de subdivisión (por ejemplo, de la unidad de subdivisión 220A, la unidad de subdivisión 220B a la unidad de subdivisión 220N), cada una de las cuales puede acoplarse a una porción (por ejemplo, unidad de memoria) de la memoria de procesador paralelo 222. En una implementación, el número de unidades de subdivisión 220A-220N está configurado para que sea igual al número de unidades de memoria, de manera que una primera unidad de subdivisión 220A tiene una primera unidad de memoria 224A correspondiente, una segunda unidad de subdivisión 220B tiene una unidad de memoria 224B correspondiente y una N-ésima unidad de subdivisión 220N tiene una N-ésima unidad de memoria 224N correspondiente. En otras realizaciones, el número de unidades de subdivisión 220A-220N puede no ser igual al número de dispositivos de memoria.
En diversas realizaciones, las unidades de memoria 224A-224N pueden incluir diversos tipos de dispositivos de memoria, 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 224A-224N pueden incluir también una memoria apilada 3D, incluyendo, pero sin limitación, una 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 224A-224N puede variar, y puede seleccionarse de uno de los diversos diseños convencionales. Pueden almacenarse objetivos de representación, tales como memorias intermedias de tramas o correlaciones de textura a lo largo de las unidades de memoria 224A-224N, permitiendo que las unidades de subdivisión 220A-220N 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 222. En algunas realizaciones, puede excluirse una instancia local de la memoria de procesador paralelo 222 en favor de un diseño de memoria unificado que utiliza una memoria de sistema junto con una memoria caché local.
En una realización, una cualquiera de las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 puede procesar datos que se escribirán en cualquiera de las unidades de memoria 224A-224N dentro de la memoria de procesador paralelo 222. La barra transversal de memoria 216 puede configurarse para transferir la salida de cada agrupación 214A-214N a cualquier unidad de subdivisión 220A-220N o a otra agrupación 214A-214N, que puede realizar operaciones de procesamiento adicionales sobre la salida. Cada agrupación 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para leer desde o escribir en diversos dispositivos de memoria externos. En una realización, la barra transversal de memoria 216 tiene una conexión a la interfaz de memoria 218 para comunicarse con la unidad de E/S 204, así como una conexión a una instancia local de la memoria de procesador paralelo 222, lo que permite que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 214A-214N se comuniquen con la memoria de sistema u otra memoria que no sea local a la unidad de procesamiento paralelo 202. En una realización, la barra transversal de memoria 216 puede usar canales virtuales para separar flujos de tráfico entre las agrupaciones 214A-214N y las unidades de subdivisión 220A-220N.
Aunque se ilustra una única instancia de la unidad de procesamiento paralelo 202 dentro del procesador paralelo 200, puede incluirse cualquier número de instancias de la unidad de procesamiento paralelo 202. Por ejemplo, pueden proporcionarse múltiples instancias de la unidad de procesamiento paralelo 202 en una única tarjeta de complemento, o pueden interconectarse múltiples tarjetas de complemento. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden configurarse para interoperar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria de procesador paralelo local y/u otras diferencias de configuración. Por ejemplo, y en una realización, algunas instancias de la unidad de procesamiento paralelo 202 pueden incluir unidades de coma flotante de precisión superior en relación con otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento paralelo 202 o el procesador paralelo 200 pueden implementarse en una diversidad de configuraciones y factores de forma, incluyendo, pero sin limitación, ordenadores personales de sobremesa, portátiles o de mano, servidores, estaciones de trabajo, consolas de juegos y/o sistemas integrados.
La Figura 2B es un diagrama de bloques de una unidad de subdivisión 220, de acuerdo con una realización. En una realización, la unidad de subdivisión 220 es una instancia de una de las unidades de subdivisión 220A-220N de la Figura 2A. Como se ha ilustrado, la unidad de subdivisión 220 incluye una caché de L2221, una interfaz de memoria intermedia de tramas 225 y una ROP 226 (unidad de operaciones de rasterización). La caché de L2221 es una caché de lectura/escritura que está configurada para realizar operaciones de carga y de almacenamiento recibidas desde la barra transversal de memoria 216 y la ROP 226. Los desaciertos de lectura y las solicitudes de escritura diferida urgente son emitidas por la caché de L2221 a la interfaz de memoria intermedia de tramas 225 para su procesamiento.
También pueden enviarse actualizaciones a la memoria intermedia de tramas mediante la interfaz de memoria intermedia de tramas 225 para su procesamiento. En una realización, la interfaz de memoria intermedia de tramas 225 interacciona con una de las unidades de memoria en una memoria de procesador paralelo, tales como las unidades de memoria 224A-224N de la Figura 2 (por ejemplo, dentro de la memoria de procesador paralelo 222).
En aplicaciones de gráficos, la ROP 226 es una unidad de procesamiento que realiza operaciones de rasterización tales como estarcido, prueba z, mezcla y similares. La ROP 226 emite entonces datos de gráficos procesados que se almacenan en una memoria de gráficos. En algunas realizaciones, la ROP 226 incluye una lógica de compresión para comprimir datos de profundidad o de color que se escriben en la 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 es realizado por la ROP 226 puede variar basándose en las características estadísticas de los datos que hay que comprimir. 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 226 se incluye dentro de cada agrupación de procesamiento (por ejemplo, la agrupación 214A-214N de la Figura 2) en lugar de dentro de la unidad de subdivisión 220. 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 216 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 de los uno o más dispositivos de visualización 110 de la Figura 1, encaminarse para su procesamiento adicional por medio del procesador o procesadores 102, o encaminarse para su procesamiento adicional por medio de una de las entidades de procesamiento dentro del procesador paralelo 200 de la Figura 2A.
La Figura 2C es un diagrama de bloques de una agrupación de procesamiento 214 dentro de una unidad de procesamiento paralelo, de acuerdo con una realización. En una realización, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 214A-214N de la Figura 2. La agrupación de procesamiento 214 puede 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 de múltiples hilos (SIMT) para soportar la ejecución paralela de un gran número de hilos generalmente sincronizados, usando una unidad de instrucción común configurada para emitir instrucciones en un conjunto de motores de procesamiento dentro de cada una de las agrupaciones de procesamiento. A diferencia del régimen de ejecución de SIMD, donde todos los motores de procesamiento ejecutan habitualmente instrucciones idénticas, la ejecución de SIMT permite que diferentes 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.
El funcionamiento de la agrupación de procesamiento 214 puede controlarse mediante un gestor de canalizaciones 232 que distribuye tareas de procesamiento a procesadores paralelos de SIMT. El gestor de canalizaciones 232 recibe instrucciones desde el planificador 210 de la Figura 2 y gestiona la ejecución de esas instrucciones mediante un multiprocesador de gráficos 234 y/o una unidad de textura 236. El multiprocesador de gráficos 234 ilustrado es una instancia ilustrativa de un procesador paralelo de SIMT. Sin embargo, pueden incluirse diversos tipos de procesadores paralelos de SIMT de arquitecturas diferentes dentro de la agrupación de procesamiento 214. Pueden incluirse una o más instancias del multiprocesador de gráficos 234 dentro de una agrupación de procesamiento 214. El multiprocesador de gráficos 234 puede procesar datos y puede usarse una barra transversal de datos 240 para distribuir los datos procesados a uno de múltiples destinos posibles, incluyendo otras unidades sombreadoras. El gestor de canalizaciones 232 puede facilitar la distribución de datos procesados especificando destinos para que se distribuyan datos procesados mediante la barra transversal de datos 240.
Cada multiprocesador de gráficos 234 dentro de la agrupación de procesamiento 214 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades aritmético-lógicas, unidades de carga-almacenamiento, etc.). La lógica de ejecución funcional puede configurarse de una manera canalizada en la que pueden emitirse instrucciones nuevas antes de que se hayan completado instrucciones previas. La lógica de ejecución funcional soporta una diversidad de operaciones, incluyendo una aritmética de números enteros y de coma flotante, operaciones de comparación, operaciones booleanas, desplazamiento de bits y cómputo 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 214 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 sobre 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 234. Un grupo de hilos puede incluir menos hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. 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 encontrarse 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
234. Cuando el grupo de hilos incluye más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, puede realizarse un procesamiento a lo largo de ciclos de reloj consecutivos. En una realización, múltiples grupos de hilos pueden ejecutarse concurrentemente en un multiprocesador de gráficos 234.
En una realización, el multiprocesador de gráficos 234 incluye una memoria caché interna para realizar operaciones de carga y de almacenamiento. En una realización, el multiprocesador de gráficos 234 puede renunciar a una caché interna y usar una memoria caché (por ejemplo, la caché de L1 308) dentro de la agrupación de procesamiento 214. Cada multiprocesador de gráficos 234 también tiene acceso a cachés de nivel L2 dentro de las unidades de subdivisión (por ejemplo, las unidades de subdivisión 220A-220N de la Figura 2) que se comparten entre todas las agrupaciones de procesamiento 214 y pueden usarse para transferir datos entre hilos. El multiprocesador de gráficos 234 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. Cualquier memoria externa a la unidad de procesamiento paralelo 202 puede usarse como memoria global. Las realizaciones en las que la agrupación de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la caché de L1 308.
Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para correlacionar direcciones virtuales en direcciones físicas. En otras realizaciones, una o más instancias de la MMU 245 pueden residir dentro de la interfaz de memoria 218 de la Figura 2. La MMU 245 incluye un conjunto de entradas de tabla de página (PTE) usadas para correlacionar una dirección virtual con una dirección física de una tesela y, opcionalmente, un índice de líneas de caché. La MMU 245 puede incluir memorias intermedias de traducción adelantada (TLB) de direcciones o cachés que pueden residir dentro del multiprocesador de gráficos 234 o la caché de L1 o la agrupación de procesamiento 214. La dirección física se procesa para distribuir la localidad de acceso de datos de superficie para permitir una intercalación de solicitud eficiente entre unidades de subdivisión. El índice de líneas de caché puede usarse para determinar si una solicitud de una línea de caché es un acierto o un desacierto.
En aplicaciones de gráficos e informáticas, una agrupación de procesamiento 214 puede configurarse de manera que cada multiprocesador de gráficos 234 está acoplado a una unidad de textura 236 para realizar operaciones de correlación de textura, por ejemplo, determinar posiciones de muestra de textura, leer datos de textura y filtrar los datos de textura. Se leen datos de textura desde una caché de L1 de textura interna (no mostrada) o, en algunas realizaciones, desde la caché de L1 dentro del multiprocesador de gráficos 234 y se extraen desde una caché de L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador de gráficos 234 emite tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su procesamiento adicional o para almacenar la tarea procesada en una caché de L2, una memoria de procesador paralelo local o una memoria de sistema mediante la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones prerrasterización) está configurada para recibir datos desde el multiprocesador de gráficos 234, dirigir datos a unidades de ROP, que pueden ubicarse con unidades de subdivisión, como se describe en el presente documento (por ejemplo, las unidades de subdivisión 220A-220N de la Figura 2). La unidad de preROP 242 puede realizar optimizaciones para la mezcla de color, organizar datos de color de píxel y realizar traducciones de dirección.
Se apreciará que la arquitectura de núcleo descrita en el presente documento es ilustrativa y que son posibles variaciones y modificaciones. Puede incluirse cualquier número de unidades de procesamiento, por ejemplo, el multiprocesador de gráficos 234, las unidades de textura 236, las preROP 242, etc., dentro de una agrupación de procesamiento 214. Además, aunque solo se muestra una agrupación de procesamiento 214, una unidad de procesamiento paralelo, como se describe en el presente documento, puede incluir cualquier número de instancias de la agrupación de procesamiento 214. En una realización, cada agrupación de procesamiento 214 puede configurarse para funcionar independientemente de otras agrupaciones de procesamiento 214 usando unidades de procesamiento, cachés de L1, etc., separadas y distintas.
La Figura 2D muestra un multiprocesador de gráficos 234, de acuerdo con una realización. En tal realización, el multiprocesador de gráficos 234 se acopla con el gestor de canalizaciones 232 de la agrupación de procesamiento 214. El multiprocesador de gráficos 234 tiene una canalización de ejecución que incluye, pero sin limitación, una caché de instrucciones 252, una unidad de instrucción 254, una unidad de correlación de direcciones 256, un archivo de registro 258, uno o más núcleos de unidad de procesamiento de gráficos de propósito general (GPGPU) 262 y una o más unidades de carga/almacenamiento 266. Los núcleos de GPGPU 262 y las unidades de carga/almacenamiento 266 están acoplados con la memoria caché 272 y la memoria compartida 270 mediante una interconexión de memoria y de caché 268.
En una realización, la caché de instrucciones 252 recibe un flujo de instrucciones para ejecutarse desde el gestor de canalizaciones 232. Las instrucciones se almacenan en caché en la caché de instrucciones 252 y son despachadas para su ejecución por la unidad de instrucción 254. La unidad de instrucción 254 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 de GPGPU 262. Una instrucción puede acceder a cualquiera del espacio de direcciones local, compartido o global especificando una dirección dentro de un espacio de direcciones unificado. La unidad de
correlación de direcciones 256 puede usarse para traducir direcciones en el espacio de direcciones unificado a una dirección de memoria distinta a la que pueden acceder las unidades de carga/almacenamiento 266.
El archivo de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 234. El archivo de registro 258 proporciona almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, los núcleos de GPGPU 262, las unidades de carga/almacenamiento 266) del multiprocesador de gráficos 234. En una realización, el archivo de registro 258 se divide entre cada una de las unidades funcionales de manera que cada unidad funcional está asignada a una porción dedicada del archivo de registro 258. En una realización, el archivo de registro 258 se divide entre las diferentes urdimbres que son ejecutadas por el multiprocesador de gráficos 234.
Cada uno de los núcleos de GPGPU 262 puede incluir unidades de coma flotante (FPU) y/o unidades aritméticas lógicas (ALU) de números enteros que se usan para ejecutar instrucciones del multiprocesador de gráficos 234. Los núcleos de GPGPU 262 pueden ser similares en cuanto a su arquitectura o pueden diferir en cuanto a su arquitectura, de acuerdo con las realizaciones. Por ejemplo, en una realización, una primera porción de los núcleos de GPGPU 262 incluye una FPU de precisión sencilla y una ALU de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. En una realización, las FPU pueden implementar la norma IEEE 754-2008 para una aritmética de coma flotante o habilitar una aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 234 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 pueden incluir también una lógica de función fija o especial.
En una realización, los núcleos de GPGPU 262 incluyen una lógica de SIMD capaz de realizar una única instrucción sobre múltiples conjuntos de datos. En una realización, los núcleos de GPGPU 262 pueden ejecutar físicamente instrucciones de SIMD4, de SIMD8 y de SIMD16 y ejecutar lógicamente instrucciones de SIMD1, de SIMD2 y de SIMD32. Las instrucciones de SIMD para los núcleos de GPGPU pueden ser generadas en tiempo de compilación por un compilador sombreador o pueden generarse automáticamente cuando se ejecutan programas escritos y compilados para arquitecturas de único programa - múltiples datos (SPMD) o de SIMT. Múltiples hilos de un programa configurado para el modelo de ejecución de SIMT pueden ejecutarse mediante una única instrucción de SIMD. Por ejemplo, y en una realización, ocho hilos de SIMT que realizan las mismas operaciones, o unas similares, pueden ejecutarse en paralelo mediante una única unidad de lógica de SIMD8.
La interconexión de memoria y de caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 234 al archivo de registro 258 y a la memoria compartida 270. En una realización, la interconexión de memoria y de caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacenamiento 266 implemente operaciones de carga y de almacenamiento entre la memoria compartida 270 y el archivo de registro 258. El archivo de registro 258 puede funcionar a la misma frecuencia que los núcleos de GPGPU 262, por lo tanto, la transferencia de datos entre los núcleos de GPGPU 262 y el archivo de registro 258 tiene una latencia muy baja. La memoria compartida 270 puede usarse para habilitar la comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234. La memoria caché 272 puede usarse como una caché de datos, por ejemplo, para almacenar en caché datos de textura comunicados entre las unidades funcionales y la unidad de textura 236. La memoria compartida 270 puede usarse también como una caché gestionada por programa. Los hilos que se ejecutan en los núcleos de GPGPU 262 pueden almacenar, de manera programática, datos dentro de la memoria compartida además de los datos almacenados automáticamente en caché que se almacenan dentro de la memoria caché 272.
Las Figuras 3A-3B ilustran multiprocesadores de gráficos adicionales, de acuerdo con realizaciones. Los multiprocesadores de gráficos 325, 350 ilustrados son variantes del multiprocesador de gráficos 234 de la Figura 2C. Los multiprocesadores de gráficos 325, 350 ilustrados pueden configurarse como un multiprocesador de transmisión por flujo continuo (SM) que puede realizar la ejecución simultánea de un gran número de hilos de ejecución.
La Figura 3A muestra un multiprocesador de gráficos 325 de acuerdo con una realización adicional. El multiprocesador de gráficos 325 incluye múltiples instancias adicionales de unidades de recurso de ejecución relativas al multiprocesador de gráficos 234 de la Figura 2D. Por ejemplo, el multiprocesador de gráficos 325 puede incluir múltiples instancias de la unidad de instrucción 332A-332B, del archivo de registro 334A-334B y de la unidad o unidades de textura 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de unidades de ejecución de cómputo o de gráficos (por ejemplo, el núcleo de GPGPU 336A-336B, el núcleo de GPGPU 337A-337B, el núcleo de GPGPU 338A-338B) y múltiples conjuntos de unidades de carga/almacenamiento 340A-340B. En una realización, las unidades de recurso de ejecución tienen una caché de instrucciones común 330, una memoria caché de textura y/o de datos 342 y una memoria compartida 346.
Los diversos componentes pueden comunicarse mediante un tejido de interconexión 327. En una realización, el tejido de interconexión 327 incluye uno o más conmutadores de barra transversal para habilitar la comunicación entre los diversos componentes del multiprocesador de gráficos 325. En una realización, el tejido de interconexión 327 es una capa de tejido de red de alta velocidad separada sobre la que se apila cada componente del multiprocesador de gráficos 325. Los componentes del multiprocesador de gráficos 325 se comunican con componentes remotos mediante
el tejido de interconexión 327. Por ejemplo, cada uno de los núcleos de GPGPU 336A-336B, 337A-337B y 3378A-338B puede comunicarse con la memoria compartida 346 mediante el tejido de interconexión 327. El tejido de interconexión 327 puede arbitrar la comunicación dentro del multiprocesador de gráficos 325 para garantizar una asignación de ancho de banda equitativa entre componentes.
La Figura 3B muestra un multiprocesador de gráficos 350 de acuerdo con una realización adicional. El procesador de gráficos incluye múltiples conjuntos de recursos de ejecución 356A-356D, donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucción, archivos de registro, núcleos de GPGPU y unidades de cargaalmacenamiento, como se ha ilustrado en la Figura 2D y en la Figura 3A. Los recursos de ejecución 356A-356D pueden funcionar en conjunto con la unidad o unidades de textura 360A-360D para operaciones de textura, mientras comparten una caché de instrucciones 354 y una memoria compartida 362. En una realización, los recursos de ejecución 356A-356D pueden compartir una caché de instrucciones 354 y una memoria compartida 362, así como múltiples instancias de una memoria de textura y/o de caché de datos 358A-358B. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 352 similar al tejido de interconexión 327 de la Figura 3A.
Los expertos en la materia entenderán que la arquitectura descrita en las Figuras 1, 2A-2D y 3A-3B es descriptiva y no limitante en cuanto al alcance de las presentes realizaciones. Por 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 202 de la Figura 2, 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 estar acoplada 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 de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU usa entonces circuitería/lógica dedicada para procesar de manera eficiente estos comandos/instrucciones.
Técnicas para interconexión de GPU a procesador de anfitrión
La Figura 4A ilustra una arquitectura ilustrativa en la que una pluralidad de GPU 410-413 está acoplada de manera comunicativa a una pluralidad de procesadores de múltiples núcleos 405-406 a través de los enlaces de alta velocidad 440-443 (por ejemplo, buses, interconexiones de punto a punto, etc.). En una realización, los enlaces de alta velocidad 440-443 soportan un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o superior, dependiendo de la implementación. Pueden usarse 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 o caudal de comunicación particular.
Además, en una realización, dos o más de las GPU 410-413 están interconectadas a través de los enlaces de alta velocidad 444-445, que pueden implementarse usando los mismos protocolos/enlaces que, o unos diferentes, los usados para los enlaces de alta velocidad 440-443. De manera similar, dos o más de los procesadores de múltiples núcleos 405-406 pueden conectarse a través del enlace de alta velocidad 433, que pueden ser buses de multiprocesador simétrico (SMP) que operan a 20 GB/s, 30 GB/s, 120 GB/s o superior. Como alternativa, toda la comunicación entre los diversos componentes de sistema mostrados en la Figura 4A puede conseguirse usando los mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, como se ha mencionado, 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 405-406 está acoplado de manera comunicativa a una memoria de procesador 401 -402, mediante las interconexiones de memoria 430-431, respectivamente, y cada GPU 410-413 está acoplada de manera comunicativa a la memoria de GPU 420-423 a través de las interconexiones de memoria de GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar las mismas tecnologías de acceso de memoria, o unas diferentes. A modo de ejemplo, y no de limitación, las memorias de procesador 401-402 y las memorias de GPU 420-423 pueden ser memorias volátiles, tal como memorias de acceso aleatorio dinámicas (DRAM) (incluyendo DRAM apiladas), SDRAM DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6), o Memoria de Alto Ancho de Banda (HBM) y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram. En una realización, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
Como se describe a continuación, aunque los diversos procesadores 405-406 y las diversas GPU 410-413 pueden acoplarse físicamente a una memoria 401-402, 420-423 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, cada una de las memorias de procesador 401 -402 puede comprender 64 GB del espacio de direcciones de memoria de sistema y cada una de las memorias de GPU 420-423 puede comprender 32 GB del espacio de direcciones de memoria de sistema (dando como resultado un total de memoria direccionable de 256 GB en este ejemplo).
La Figura 4B ilustra detalles adicionales para una interconexión entre un procesador de múltiples núcleos 407 y un módulo de aceleración de gráficos 446 de acuerdo con una realización. El módulo de aceleración de gráficos 446 puede incluir uno o más chips de GPU integrados en una tarjeta de línea que está acoplada al procesador 407 mediante el enlace de alta velocidad 440. Como alternativa, el módulo de aceleración de gráficos 446 puede integrarse en el mismo paquete o chip que el procesador 407.
El procesador 407 ilustrado incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de traducción adelantada 461A-461D y una o más cachés 462A-462D. Los núcleos pueden incluir diversos otros componentes para ejecutar instrucciones y procesar datos, que no se han ilustrado para evitar complicar los principios subyacentes de la invención, (por ejemplo, unidades de extracción de instrucción, unidades de predicción de bifurcaciones, descodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y de nivel 2 (L2). Además, una o más cachés compartidas 426 pueden incluirse en la jerarquía de almacenamiento en caché y pueden ser compartidas por conjuntos de los núcleos 460A-460D. Por ejemplo, una realización del procesador 407 incluye 24 núcleos, cada uno con su propia caché de L1, doce cachés de L2 compartidas y doce cachés de L3 compartidas. En esta realización, una de las cachés de L2 y de L3 está compartida por dos núcleos adyacentes. El procesador 407 y el módulo de integración de acelerador de gráficos 446 se conectan con la memoria de sistema 441, que puede incluir las memorias de procesador 401 -402
Se mantiene la coherencia para datos e instrucciones almacenados en las diversas cachés 462A-462D, 456 y la memoria de sistema 441 mediante una comunicación entre núcleos a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener una lógica/circuitería de coherencia de caché asociada con la misma con la que comunicarse a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de fisgoneo de caché a través del bus de coherencia 464 para fisgar accesos de caché. Las técnicas de fisgoneo/coherencia de caché son bien conocidas por los expertos en la materia y no se describirán en detalle en el presente caso para evitar complicar los principios subyacentes de la invención.
En una realización, un circuito intermediario 425 acopla de manera comunicativa el módulo de aceleración de gráficos 446 al bus de coherencia 464, permitiendo que el módulo de aceleración de gráficos 446 participe en el protocolo de coherencia de caché como un homólogo de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito intermediario 425 a través del enlace de alta velocidad 440 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 437 conecta el módulo de aceleración de gráficos 446 al enlace 440.
En una implementación, un circuito de integración de acelerador 436 proporciona servicios de gestión de caché, de acceso de memoria, de gestión de contexto y de gestión de interrupciones en beneficio de una pluralidad de motores de procesamiento de gráficos 431, 432, N del módulo de aceleración de gráficos 446. Cada uno de los motores de procesamiento de gráficos 431,432, N puede comprender una unidad de procesamiento de gráficos (GPU) separada. Como alternativa, los motores de procesamiento de gráficos 431, 432, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tales como unidades de ejecución de gráficos, motores de procesamiento de medios (por ejemplo, codificadores/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 431 -432, N, o los motores de procesamiento de gráficos 431 -432, N pueden ser unas 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 436 incluye una unidad de gestión de memoria (MMU) 439 para realizar diversas funciones de gestión de memoria tales como traducciones de memoria virtual a física (también denominadas traducciones de memoria eficaz a real) y protocolos de acceso de memoria para acceder a la memoria de sistema 441. La MMU 439 puede incluir también una memoria intermedia de traducción adelantada (TLB) (no mostrada) para almacenar en caché las traducciones de dirección virtual/eficaz a física/real. En una realización, el circuito de integración de acelerador 436 incluye una unidad de extracción 491 para extraer comandos, instrucciones, descriptores de trabajo, etc., que definen operaciones que hay que realizar. En una implementación, una caché 438 almacena comandos y datos para un acceso eficiente por parte de los motores de procesamiento de gráficos 431 -432, N. En una realización, los datos almacenados en la caché 438 y en las memorias de gráficos 433-434, N se mantienen coherentes con las cachés de núcleo 462A-462D, 456 y la memoria de sistema 411. Como se ha mencionado, esto puede conseguirse mediante el circuito intermediario 425 que toma parte en el mecanismo de coherencia de caché en beneficio de la caché 438 y las memorias 433-434, N (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con modificaciones/accesos de líneas de caché en las cachés de procesador 462A-462D, 456 y recibiendo actualizaciones desde la caché 438).
Un conjunto de registros 449 almacenan datos de contexto para hilos ejecutados por los motores de procesamiento de gráficos 431 -432, N y un circuito de gestión de contexto 448 gestiona los contextos de hilo. Por ejemplo, el circuito de gestión de contexto 448 puede realizar operaciones de guardado y de restablecimiento para guardar y restablecer contextos de los diversos hilos durante conmutaciones de contexto (por ejemplo, en donde 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 448 puede almacenar valores de registro actuales en una región designada en memoria (por ejemplo, identificada por un puntero de contexto). Este puede restablecer entonces los valores de registro cuando se vuelve al contexto. En una realización, un circuito de gestión de interrupciones 447 recibe y procesa interrupciones recibidas desde dispositivos de sistema.
En una implementación, direcciones virtuales/eficaces desde un motor de procesamiento de gráficos 431 son traducidas, por la MMU 439, a direcciones reales/físicas en la memoria de sistema 411. Una realización del circuito de integración de acelerador 436 soporta múltiples (por ejemplo, 4, 8, 16) módulos de acelerador de gráficos 446 y/u otros dispositivos aceleradores. El módulo acelerador de gráficos 446 puede dedicarse a una única aplicación ejecutada en el procesador 407 o puede compartirse entre múltiples aplicaciones. En una realización, se presenta un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 431-432, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos pueden subdividirse en "cortes" que se asignan a diferentes VM y/o aplicaciones basándose en los requisitos de procesamiento y prioridades asociados con las VM y/o las aplicaciones.
Por lo tanto, el circuito de integración de acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona servicios de traducción de direcciones y de caché de memoria de sistema. Además, el circuito de integración de acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador de anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de memoria.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se correlacionan explícitamente con el espacio de direcciones real observado por el procesador de anfitrión 407, cualquier procesador de anfitrión puede dirigir estos recursos directamente usando un valor de dirección eficaz. Una función del circuito de integración de acelerador 436, en una realización, es la separación física de los motores de procesamiento de gráficos 431-432, N de modo que aparecen ante el sistema como unidades independientes.
Como se ha mencionado, en la realización ilustrada, una o más memorias de gráficos 433-434, M están acopladas a cada uno de los motores de procesamiento de gráficos 431-432, N, respectivamente. Las memorias de gráficos 433 434, M almacenan instrucciones y datos que son procesados por cada uno de los motores de procesamiento de gráficos 431-432, N. Las memorias de gráficos 433-434, M pueden ser memorias volátiles, tales como DRAM (incluyendo DRAM apiladas), memoria de GDDR (por ejemplo, GDDR5, GDDR6), o HBM, y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram.
En una realización, para reducir el tráfico de datos a través del enlace 440, se usan técnicas de desvío para garantizar que los datos almacenados en las memorias de gráficos 433-434, M son datos que serán usados de la manera más frecuente por los motores de procesamiento de gráficos 431 -432, N y preferiblemente no serán usados por los núcleos 460A-460D (al menos, no con frecuencia). De manera similar, el mecanismo de desvío intenta mantener datos que necesitan los núcleos (y, preferiblemente, no los motores de procesamiento de gráficos 431-432, N) dentro de las cachés 462A-462D, 456 de los núcleos y la memoria de sistema 411.
La Figura 4C ilustra otra realización en la que el circuito de integración de acelerador 436 está integrado dentro del procesador 407. En esta realización, los motores de procesamiento de gráficos 431 -432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración de acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, puede utilizar cualquier forma de protocolo de interfaz o bus). El circuito de integración de acelerador 436 puede realizar las mismas operaciones que las descritas con respecto a la Figura 4B, pero potencialmente a un caudal superior dada su proximidad estrecha al bus de coherencia 462 y a las cachés 462A-462D, 426.
Una realización soporta diferentes modelos de programación que incluyen un modelo de programación de proceso dedicado (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 436 y modelos de programación que son controlados por el módulo de aceleración de gráficos 446.
En una realización del modelo de proceso dedicado, los motores de procesamiento de gráficos 431-432, N están dedicados a una única aplicación o proceso bajo un único sistema operativo. La única aplicación puede encauzar otras solicitudes de aplicación a los motores de gráficos 431-432, N, proporcionando virtualización dentro de una VM/subdivisión.
En los modelos de programación de proceso dedicado, los motores de procesamiento de gráficos 431-432, N, pueden estar compartidos por múltiples subdivisiones de aplicación/VM. Los modelos compartidos requieren que un hipervisor de sistema virtualice los motores de procesamiento de gráficos 431-432, N para permitir el acceso de cada sistema operativo. Para sistemas de subdivisión única sin un hipervisor, los motores de procesamiento de gráficos 431-432, N son propiedad del sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 431-432, N para proporcionar acceso a cada proceso o aplicación.
Para el modelo de programación compartida, el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos 431-432, N individual selecciona un elemento de proceso usando un manejador de proceso. En una realización, se almacenan elementos de proceso en la memoria de sistema 411, y estos son direccionables usando las técnicas de traducción de dirección eficaz a dirección real descritas en el presente documento. El manejador de proceso puede ser un valor específico de la implementación proporcionado al proceso de anfitrión cuando se registra su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, llamando al software de sistema para añadir el elemento de proceso a la lista vinculada de elementos de proceso). Los 16 bits inferiores del manejador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista vinculada de elementos de proceso.
La Figura 4D ilustra un corte de integración de acelerador 490 ilustrativo. Tal y como se usa en el presente documento, un "corte" comprende una porción especificada de los recursos de procesamiento del circuito de integración de acelerador 436. El espacio de direcciones eficaces de aplicación 482 dentro de la memoria de sistema 411 almacena los elementos de proceso 483. En una realización, los elementos de proceso 483 se almacenan en respuesta a las invocaciones de GPU 481 desde las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado de proceso para la aplicación 480 correspondiente. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En este último caso, el WD 484 es un puntero a la cola de solicitudes de trabajo en el espacio de direcciones 482 de la aplicación.
El módulo de aceleración de gráficos 446 y/o los motores de procesamiento de gráficos 431 -432, N individuales pueden ser compartidos por todos o por un subconjunto de los procesos en el sistema. Las realizaciones de la invención incluyen una infraestructura para establecer el estado de proceso y enviar un WD 484 a un módulo de aceleración de gráficos 446 para empezar un trabajo en un entorno virtualizado.
En una implementación, el modelo de programación de proceso dedicado es específico de la implementación. En este modelo, un único proceso es propietario del módulo de aceleración de gráficos 446 o de un motor de procesamiento de gráficos 431 individual. Debido a que el módulo de aceleración de gráficos 446 es propiedad de un único proceso, el hipervisor inicializa el circuito de integración de acelerador 436 para la subdivisión propietaria y el sistema operativo inicializa el circuito de integración de acelerador 436 para el proceso propietario en el momento en el que se asigna el módulo de aceleración de gráficos 446.
Durante el funcionamiento, una unidad de extracción de WD 491 en el corte de integración de acelerador 490 extrae el WD 484 siguiente que incluye una indicación del trabajo que debe hacer uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Los datos del WD 484 pueden almacenarse en los registros 449 y ser usados por la MMU 439, el circuito de gestión de interrupciones 447 y/o el circuito de gestión de contexto 446 como se ha ilustrado. Por ejemplo, una realización de la MMU 439 incluye circuitería de recorrido de segmentos/páginas para acceder a las tablas de segmentos/páginas 486 dentro del espacio de direcciones virtuales de SO 485. El circuito de gestión de interrupciones 447 puede procesar los eventos de interrupción 492 recibidos desde el módulo de aceleración de gráficos 446. Cuando se realizan operaciones de gráficos, una dirección eficaz 493 generada por un motor de procesamiento de gráficos 431-432, N es traducida a una dirección real por la MMU 439.
En una realización, el mismo conjunto de registros 449 se duplica para cada motor de procesamiento de gráficos 431 432, N y/o módulo de aceleración de gráficos 446, y puede ser inicializado por el hipervisor o el sistema operativo. Cada uno de estos registros duplicados puede incluirse en un corte de integración de acelerador 490. En la Tabla 1 se muestran registros ilustrativos que pueden ser inicializados por el hipervisor.
Tabla 1 - Registros inicializados por hipervisor
En la Tabla 2 se muestran registros ilustrativos que pueden ser inicializados por el sistema operativo.
Tabla 2 - Registros inicializados por sistema operativo
En una realización, cada WD 484 es específico de un módulo de aceleración de gráficos 446 y/o de un motor de procesamiento de gráficos 431-432, N particular. Este contiene toda la información que requiere un motor de procesamiento de gráficos 431-432, 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.
La Figura 4E ilustra detalles adicionales para una realización de un modelo compartido. Esta realización incluye un espacio de direcciones real de hipervisor 498 en el que se almacena una lista de elementos de proceso 499. El espacio de direcciones real de hipervisor 498 es accesible mediante un hipervisor 496 que virtualiza los motores de módulo de aceleración de gráficos para el sistema operativo 495.
Los modelos de programación compartida prevén que todos los procesos, o un subconjunto de los mismos, de todas las subdivisiones en el sistema, o de un subconjunto de las mismas, usen un módulo de aceleración de gráficos 446. Hay dos modelos de programación en los que el módulo de aceleración de gráficos 446 está compartido por múltiples procesos y particiones: compartido en cortes de tiempo y compartido dirigido a gráficos.
En este modelo, el hipervisor de sistema 496 es propietario del módulo de aceleración de gráficos 446 y hace que su función esté disponible para todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte una virtualización por el hipervisor de sistema 496, el módulo de aceleración de gráficos 446 puede satisfacer los siguientes requisitos: 1) La solicitud de trabajo de una aplicación ha de ser autónoma (es decir, no es necesario mantener el estado entre trabajos) o el módulo de aceleración de gráficos 446 ha de proporcionar un mecanismo de guardado y de restablecimiento de contexto. 2) Se garantiza, por medio del módulo de aceleración de gráficos 446, que la solicitud de trabajo de una aplicación se completa en una cantidad de tiempo especificada, incluyendo cualquier fallo de traducción o el módulo de aceleración de gráficos 446 proporciona la capacidad de dar prioridad al procesamiento del trabajo. 3) Se ha de garantizar al módulo de aceleración de gráficos 446 la equidad entre procesos cuando se opera en el modelo de programación compartido dirigido.
En una realización, para el modelo compartido, se requiere que la aplicación 480 haga una llamada de sistema al sistema operativo 495 con un tipo de módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de área de guardado/restablecimiento de contexto (CSRP). El tipo del módulo de aceleración de gráficos 446 describe la función de aceleración seleccionada como objetivo para la llamada de sistema. El tipo del módulo de aceleración de gráficos 446 puede ser un valor específico del sistema. Al WD se le da formato específicamente para el módulo de aceleración de gráficos 446 y puede estar en forma de un comando del módulo de aceleración de gráficos 446, un puntero de dirección eficaz a una estructura definida por el usuario, un puntero de dirección eficaz a una cola de comandos o cualquier otra estructura de datos para describir el trabajo que debe hacer el módulo de aceleración de gráficos 446. En una realización, el valor de AMR es el estado de AMR que hay que usar para el proceso actual. El valor pasado al sistema operativo es similar a que una aplicación establezca el AMR. Si las implementaciones del circuito de integración de acelerador 436 y del módulo de aceleración de gráficos 446 no soportan un Registro de Anulación de Máscara de Autoridad de Usuario (UAMOR), el sistema operativo puede aplicar el valor de UAMOR actual al valor de AMR antes de pasar el AMR en la llamada de hipervisor. Opcionalmente, el hipervisor 496 puede aplicar el valor de registro de anulación de máscara de autoridad (AMOR) actual antes de colocar el AMR en el elemento de proceso 483. En una realización, el CSRP es uno de los registros 449 que contienen la dirección eficaz de un área en el espacio de direcciones 482 de la aplicación para que el módulo de aceleración de gráficos 446 guarde y restablezca el estado de contexto. Este puntero es opcional si no se requiere que se guarde estado alguno entre trabajos o cuando se da prioridad a un trabajo. El área de guardado/restablecimiento de contexto puede ser una memoria de sistema anclada.
Tras recibir la llamada de sistema, el sistema operativo 495 puede verificar que la aplicación 480 se ha registrado y que se le ha dado la autoridad para usar el módulo de aceleración de gráficos 446. El sistema operativo 495 llama entonces al hipervisor 496 con la información mostrada en la Tabla 3.
Tabla 3 - Parámetros de llamada de SO a hipervisor
T ras recibir la llamada de hipervisor, el hipervisor 496 verifica que el sistema operativo 495 se ha registrado y que se le ha dado la autoridad para usar el módulo de aceleración de gráficos 446. El hipervisor 496 pone entonces el elemento de proceso 483 en la lista vinculada de elementos de proceso para el tipo del módulo de aceleración de gráficos 446 correspondiente. El elemento de proceso puede incluir la información mostrada en la Tabla 4.
Tabla 4 - Información de elemento de proceso
En una realización, el hipervisor inicializa una pluralidad de registros 449 del corte de integración de acelerador 490.
Como se ha ilustrado en la Figura 4F, una realización de la invención emplea una memoria unificada direccionable mediante un espacio de direcciones de memoria virtual común usado para acceder a las memorias de procesador físico 401-402 y a las memorias de GPU 420-423. En esta implementación, las operaciones ejecutadas en las GPU 410-413 utilizan el mismo espacio de direcciones de memoria virtual/eficaz para acceder a las memorias de procesadores 401-402, y viceversa, simplificando de ese modo la programabilidad. En una realización, una primera porción del espacio de direcciones virtual/eficaz está asignada a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420, y así sucesivamente. El espacio de memoria virtual/eficaz total (denominado, en ocasiones, el espacio de direcciones eficaces) está distribuido, por lo tanto, a lo largo de cada una de las memorias de procesador 401-402 y de las memorias de GPU 420-423, permitiendo que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual correlacionada con esa memoria.
En una realización, la circuitería de gestión de desvío/coherencia 494A-494E dentro de una o más de las MMU 439A-439E garantiza la coherencia de caché entre las cachés de los procesadores de anfitrión (por ejemplo, 405) y las GPU 410-413 e implementa técnicas de desvío que indican las memorias físicas en las que deberían almacenarse ciertos
tipos de datos. Aunque se ilustran múltiples instancias de la circuitería de gestión de desvío/coherencia 494A-494E en la Figura 4F, la circuitería de desvío/coherencia puede implementarse dentro de la MMU de uno o más procesadores de anfitrión 405 y/o dentro del circuito de integración de acelerador 436.
Una realización permite que la memoria anexada a GPU 420-423 se correlacione como parte de la memoria de sistema, y que se acceda a la misma usando tecnología de memoria virtual compartida (SVM), pero sin adolecer de las desventajas de rendimiento habituales asociadas con la coherencia de caché de sistema completa. La capacidad para acceder a la memoria anexada a GPU 420-423 como memoria de sistema sin una onerosa sobrecarga de coherencia de la caché proporciona un entorno de operación beneficioso para la descarga de GPU. Esta disposición permite que el software del procesador de anfitrión 405 establezca operandos y acceda a resultados de cómputo, sin la sobrecarga de las copias de datos de DMA de E/S tradicionales. Tales copias tradicionales implican llamadas de controlador, interrupciones y accesos de E/S correlacionados con 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 GPU 420 423 sin sobrecargas de coherencia de la caché puede ser crítica para el tiempo de ejecución de un cómputo descargado. En casos con tráfico sustancial de memoria de escritura de transmisión por flujo continuo, por ejemplo, la sobrecarga de coherencia de la caché puede reducir significativamente el ancho de banda de escritura eficaz observado por una GPU 410-413. La eficiencia del establecimiento de operandos, la eficiencia del acceso a resultados y la eficiencia del cómputo de GPU desempeñan, todas ellas, un papel en la determinación de la eficacia de la descarga de GPU.
En una implementación, la selección entre el desvío de GPU y el desvío de procesador de anfitrión es controlada por una estructura de datos de rastreador de desvío. Puede usarse una tabla de desvíos, por ejemplo, que puede ser una estructura granular a nivel de página (es decir, controlada con la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria anexada a GPU. La tabla de desvíos puede implementarse en un rango de memoria robado de una o más memorias anexadas a GPU 420-423, con o sin una caché de desvío en la GPU 410-413 (por ejemplo, para almacenar en caché entradas usadas de manera frecuente/reciente de la tabla de desvíos). Como alternativa, toda la tabla de desvíos puede mantenerse dentro de la GPU.
En una implementación, se accede a la entrada de tabla de desvíos asociada con cada acceso a la memoria anexada a GPU 420-423 antes del acceso real a la memoria de GPU, provocando las siguientes operaciones. En primer lugar, solicitudes locales desde la GPU 410-413 que encuentran su página en el desvío de GPU se reenvían directamente a una memoria de GPU 420-423 correspondiente. Las solicitudes locales de la GPU que encuentran su página en el desvío del anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). En una realización, las solicitudes del procesador 405 que encuentran la página solicitada en un desvío de procesador de anfitrión completan la solicitud como una lectura de memoria normal. Como alternativa, solicitudes dirigidas a una página con desvío de GPU pueden redirigirse a la GPU 410-413. La GPU puede hacer entonces que la página realice una transición a un desvío de procesador de anfitrión si no está usando actualmente la página.
El estado de desvío de una página puede cambiarse o bien mediante un mecanismo basado en software, o bien mediante un mecanismo basado en software asistido por hardware, o bien, para un conjunto limitado de casos, mediante un mecanismo basado puramente en hardware.
Un mecanismo para cambiar el estado de desvío emplea una llamada de API (por ejemplo, OpenCL), que, a su vez, llama al controlador de dispositivos de la GPU que, a su vez, envía un mensaje a (o pone en cola un descriptor de comandos para) la GPU que le indica que cambie el estado de desvío y, para algunas transiciones, que realice una operación de vaciado de caché en el anfitrión. Se requiere la operación de vaciado de caché para una transición desde un desvío del procesador de anfitrión 405 a un desvío de GPU, pero no se requiere para la transacción opuesta.
En una realización, la coherencia de caché se mantiene haciendo temporalmente que las páginas con desvío de GPU no puedan ser almacenadas en caché por el procesador de anfitrión 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso desde la GPU 410 que puede conceder, o no, acceso de manera inmediata, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410, es beneficioso garantizar que las páginas con desvío de GPU son aquellas que son requeridas por la GPU, pero no por el procesador de anfitrión 405, y viceversa.
Canalización de procesamiento de gráficos
La Figura 5 ilustra una canalización de procesamiento de gráficos 500, de acuerdo con una realización. En una realización, un procesador de gráficos puede implementar la canalización de procesamiento de gráficos 500 ilustrada. El procesador de gráficos puede incluirse dentro de los subsistemas de procesamiento paralelo como se describe en el presente documento, tal como el procesador paralelo 200 de la Figura 2, que, en una realización, es una variante del procesador o procesadores paralelos 112 de la Figura 1. Los diversos sistemas de procesamiento paralelo pueden implementar la canalización de procesamiento de gráficos 500 mediante una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 202 de la Figura 2) como se describe en el presente documento. Por ejemplo, una unidad sombreadora (por ejemplo, el multiprocesador de gráficos 234 de la
Figura 3) puede configurarse para realizar las funciones de una o más de una unidad de procesamiento de vértices 504, una unidad de control de proceso de teselación 508, una unidad de procesamiento de evaluación de teselación 512, una unidad de procesamiento de geometría 516 y una unidad de procesamiento de fragmentos/píxeles 524. Las funciones del ensamblador de datos 502, los ensambladores de primitivas 506, 514, 518, la unidad de teselación 510, el rasterizador 522 y la unidad de operaciones de rasterización 526 también pueden ser realizadas por otros motores de procesamiento dentro de una agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 214 de la Figura 3) y una unidad de subdivisión correspondiente (por ejemplo, la unidad de subdivisión 220A-220N de la Figura 2). La canalización de procesamiento de gráficos 500 también puede implementarse usando unidades de procesamiento dedicadas para una o más funciones. En una realización, una o más porciones de la canalización de procesamiento de gráficos 500 pueden realizarse mediante una lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, una CPU). En una realización, una o más porciones de la canalización de procesamiento de gráficos 500 pueden acceder a una memoria en chip (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2) mediante una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de la Figura 2.
En una realización, el ensamblador de datos 502 es una unidad de procesamiento que recopila datos de vértice para superficies y primitivas. El ensamblador de datos 502 emite entonces los datos de vértice, incluyendo los atributos de vértice, a la unidad de procesamiento de vértices 504. La unidad de procesamiento de vértices 504 es una unidad de ejecución programable que ejecuta programas de sombreado de vértices, iluminando y transformando datos de vértice según lo especificado por los programas de sombreado de vértices. La unidad de procesamiento de vértices 504 lee datos que se almacenan en memoria caché, local o de sistema para su uso en el procesamiento de los datos de vértice y puede programarse para transformar los datos de vértice desde una representación de coordenadas basada en objetos hasta un espacio de coordenadas de espacio mundial o un espacio de coordenadas de dispositivo normalizado.
Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértice desde la unidad de procesamiento de vértices 50. El ensamblador de primitivas 506 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 508. Las primitivas de gráficos incluyen triángulos, segmentos de línea, puntos, parches y así sucesivamente, según sea soportado por diversas interfaces de programación de aplicaciones (API) de procesamiento de gráficos.
La unidad de procesamiento de control de teselación 508 trata los vértices de entrada como puntos de control para un parche geométrico. Los puntos de control se transforman de una representación de entrada a partir del parche (por ejemplo, las bases del parche) a una representación que es adecuada para su uso en una evaluación superficial por la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también puede computar factores de teselación para bordes de parches geométricos. Un factor de teselación se aplica a un único borde y cuantifica un nivel de detalle, dependiente de la vista, asociado con el borde. Una unidad de teselación 510 está configurada para recibir los factores de teselación para 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 512. La unidad de procesamiento de evaluación de teselación 512 opera sobre 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 514 recibe atributos de vértices desde la unidad de procesamiento de evaluación de teselación 512, leyendo atributos de vértice almacenados según sea necesario, y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de geometría 516. La unidad de procesamiento de geometría 516 es una unidad de ejecución programable que ejecuta programas de sombreado de geometría para transformar primitivas de gráficos recibidas desde el ensamblador de primitivas 514 según lo especificado por los programas de sombreado de geometría. En una realización, la unidad de procesamiento de geometría 516 está programada para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
En algunas realizaciones, la unidad de procesamiento de geometría 516 puede añadir o borrar elementos en el flujo de geometría. La unidad de procesamiento de geometría 516 emite los parámetros y vértices que especifican primitivas de gráficos nuevas al ensamblador de primitivas 518. El ensamblador de primitivas 518 recibe los parámetros y vértices desde la unidad de procesamiento de geometría 516 y construye primitivas de gráficos para su procesamiento por una unidad de escalado, selección y recorte de ventana gráfica 520. La unidad de procesamiento de geometría 516 lee datos que están almacenados en la memoria de procesador paralelo o en la memoria de sistema para su uso en el procesamiento de los datos de geometría. La unidad de escalado, selección y recorte de ventana gráfica 520 realiza el recorte, la selección y el ajuste a escala de la ventana gráfica y emite primitivas de gráficos procesadas a un rasterizador 522.
El rasterizador 522 puede realizar optimizaciones de selección de profundidad y otras basadas en profundidad. El rasterizador 522 también realiza una conversión de exploración sobre 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 524. La unidad de procesamiento de fragmentos/píxeles 524 es una unidad de ejecución
programable que está configurada para ejecutar programas de sombreado de fragmentos o programas de sombreado de píxeles. Transformando, la unidad de procesamiento de fragmentos/píxeles 524, fragmentos o píxeles recibidos desde el rasterizador 522, según lo especificado por los programas de sombreado de fragmentos o de píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede programarse para realizar operaciones que incluyen, pero sin limitación, correlación de textura, sombreado, mezcla, corrección de textura y corrección de perspectiva para producir fragmentos o píxeles sombreados que se emiten a una unidad de operaciones de rasterización 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer datos que se almacenan 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. Pueden configurarse programas de sombreado de fragmentos o de píxeles para sombrear con granularidades de muestra, de píxel, de tesela u otras dependiendo de las tasas de muestreo configuradas para las unidades de procesamiento.
La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de rasterización que incluyen, pero sin limitación estarcido, prueba z, mezcla y similares, y emite datos de píxel como datos de gráficos procesados que hay que almacenar en una memoria de gráficos (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2, y/o la memoria de sistema 104 como en la Figura 1, para visualizarse en los uno o más dispositivos de visualización 110 o para su procesamiento adicional por uno de los uno o más procesadores 102 o procesador o procesadores paralelos 112. En algunas realizaciones, la unidad de operaciones de rasterización 526 está configurada para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde la memoria.
Hardware de cómputo optimizado para operaciones de aprendizaje automático
Las redes neuronales profundas (DNN) son una bifurcación de rápido crecimiento del aprendizaje automático que se basa en un conjunto de algoritmos que intentan modelar abstracciones de alto nivel en datos usando arquitecturas de modelo compuestas por múltiples transformaciones no lineales.
Debido a operaciones no lineales y de generación de dispersión dentro de DNN, tales como ReLU, Agrupamiento Máximo y Retirada, muchos cómputos de Redes Neuronales (NN), así como otros cómputos de aprendizaje automático, a menudo tienden a estar levemente dispersos (con una dispersión de hasta el 50 % - 80 % para diferentes operaciones) para las operaciones de cómputo clave -- xGEMM y circunvoluciones nativas (que tiene una secuencia de instrucciones de bucle interno similar a xGEMM). En el presente caso, "x" representa diferentes tipos de datos usados en estos algoritmos. Esta baja cantidad de dispersión significa que técnicas diseñadas específicamente para operaciones dispersas como SpMV, SpMSpV y SpGEMM no producen ganancias de rendimiento, debido a que la generación de dispersión introduce unas sobrecargas sustanciales que limitan el rendimiento a 1/10 del pico en el mejor de los casos (y, a menudo, mucho peor). Por lo tanto, el software de red neuronal del estado de la técnica usa un cómputo denso para operaciones de red neuronal, incluso si una porción significativa de la computación se desperdicia en una multiplicación por ceros. La secuencia de instrucciones generada por tal software es una secuencia de instrucciones de multiplicación y suma fusionada (FMADD) usando tipos de datos fpl6, fp32 o de coma fija.
Las realizaciones descritas en el presente documento proporcionan múltiples optimizaciones de hardware para aumentar la eficiencia de los cómputos de aprendizaje automático en una unidad de procesamiento de gráficos de propósito general. Una realización proporciona técnicas para el aplastamiento de cero de una instrucción tras una carga de operando. Cuando se carga un operando para una instrucción en la que un operando cero puede forzar una salida de valor cero (por ejemplo, una multiplicación), la instrucción se etiqueta como una no-op y se sortean las operaciones de cómputo para la instrucción. Una realización prevé técnicas para habilitar una multiplicación de enteros de baja precisión para evitar el desbordamiento de registro de acumulador cuando se realiza una cadena de operaciones de multiplicación - acumulación fusionada o de números enteros. Una realización proporciona una lógica de hardware para realizar operaciones de cómputo con operandos de entrada de longitud en bits desigual en proporción al tamaño de tipo de datos, y realizando tantas operaciones de multiplicación - suma fusionada u operaciones binarias o productos escalares adecuados como el tipo de datos del tamaño más bajo.
La Figura 6A es un diagrama de bloques de un sistema de procesamiento de datos 600, de acuerdo con una realización. El sistema de procesamiento de datos 600 es un sistema de procesamiento heterogéneo que tiene un procesador 602, una memoria unificada 610 y una GPGPU 620 que incluye una lógica de aceleración de aprendizaje automático. El procesador 602 y la GPGPU 620 pueden ser cualquiera de los procesadores y GPGPU/procesadores paralelos, como se describe en el presente documento. El procesador 602 puede ejecutar instrucciones para un compilador 615 almacenado en la memoria de sistema 612. El compilador 615 se ejecuta en el procesador 602 para compilar el código fuente 614A para dar el código compilado 614B. El código compilado 614B puede incluir código que puede ser ejecutado por el procesador 602 y/o código que puede ser ejecutado por la GPGPU 620. Durante la compilación, el compilador 615 puede realizar operaciones para insertar metadatos, incluyendo sugerencias en cuanto al nivel de paralelismo de datos presente en el código compilado 614B y/o sugerencias con respecto a la localidad de datos asociada con hilos que hay que despachar basándose en el código compilado 614B. El compilador 615 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 616. La biblioteca de tiempo de ejecución 616 también puede facilitar al compilador 615 la compilación del código fuente 614A y también puede incluir instrucciones que están vinculadas en
tiempo de ejecución con el código compilado 614B para facilitar la ejecución de las instrucciones compiladas en la GPGPU 620.
La memoria unificada 610 representa un espacio de direcciones unificado al que pueden acceder el procesador 602 y la GPGPU 620. La memoria unificada incluye la memoria de sistema 612, así como la memoria de GPGPU 618. La memoria de GPGPU 618 incluye la memoria local de GPGPU 628 dentro de la GPGPU 620 y también puede incluir parte o toda la memoria de sistema 612. Por ejemplo, el código compilado 614B almacenado en la memoria de sistema 612 también puede correlacionarse en la memoria de GPGPU 618 para el acceso por la GPGPU 620.
La GPGPU 620 incluye múltiples bloques de cómputo 624A-624N, que pueden ser instancias de las agrupaciones de cómputo 214A-214N de la Figura 2A, o la agrupación de procesamiento 214 ilustrativa de la Figura 2C. Cada uno de los múltiples bloques de cómputo 624A-624N puede incluir múltiples unidades de cómputo, que pueden ser un grupo de núcleos, multiprocesadores, unidades de ejecución u otros recursos de ejecución que pueden ejecutar hilos de un grupo de hilos. La GPGPU 620 también incluye un conjunto de registros 625, una memoria caché 627 y un módulo de potencia y de rendimiento 626 que pueden usarse como recursos compartidos para los bloques de cómputo 624A-624N. El módulo de potencia y de rendimiento 626 puede configurarse para ajustar el suministro de potencia y las frecuencias de reloj para los bloques de cómputo 624A-624N para controlar por alimentación componentes en espera dentro de los bloques de cómputo 624A-624N bajo cargas de trabajo intensas. La GPGPU 620 incluye la memoria local de GPGPU 628, que es una memoria física que comparte una tarjeta de gráficos o un módulo de múltiples chips con la GPGPU 620.
En una realización, la GPGPU 620 incluye una lógica de cómputo optimizada para acelerar operaciones de aprendizaje automático. La lógica de cómputo incluye una unidad de instrucción 621, una unidad de planificación 622 y un módulo de precisión variable 623. La unidad de instrucción 621 incluye una lógica para extraer, descodificar y preprocesar instrucciones que definen un comportamiento de canalización de cómputo complejo. El comportamiento de canalización complejo especificado por una instrucción se puede secuenciar y/o serializar mediante la unidad de planificación 622, que puede planificar múltiples operaciones por instrucciones a un bloque de cómputo 624A-624N que incluye múltiples unidades de procesador paralelo agrupadas. El módulo de precisión variable 623 incluye una lógica adicional para proporcionar o potenciar el soporte para operaciones de precisión variable y dinámica, como se describe en el presente documento. El módulo de precisión variable 623 puede habilitar tal funcionalidad proporcionando una lógica adicional que funciona junto con la unidad de instrucción 621, la unidad de planificación 622 y los bloques de cómputo 624A-624N para habilitar la ejecución de instrucciones de precisión variable. En las Figuras 7C-7D se describen con más detalle las operaciones facilitadas por el módulo de precisión variable 623.
Aplastamiento de cero para instrucciones de multiplicación
La entrada de activaciones a menudo son ceros que conducen a operaciones de FMA falsas. Las realizaciones descritas en el presente documento proporcionan técnicas de hardware que aprovechan la estructura dispersa de los cómputos de aprendizaje automático y de red neuronal para omitir una o más fases de una instrucción de multiplicación o de multiplicación-suma cuando uno de los multiplicandos es cero, convirtiendo la porción de multiplicación de la instrucción en una "NOP". En diversas realizaciones, las técnicas descritas en el presente documento pueden implementarse en hardware, software o firmware. Cuando se detectan operandos cero para una instrucción, se pueden sortear una o más porciones de la instrucción. En una realización, se proporciona una implementación de software en la que una lógica de software realiza periódicamente una comprobación en busca de operandos de valor cero. Si se detectan operandos cero, la lógica puede omitir una o más instrucciones que dependen de los operandos de valor cero detectados.
Una realización hace uso de una propiedad de cómputo de redes neuronales en la que un elemento se radiodifunde y entonces es multiplicado por un vector de entrada. A continuación, el resultado se acumula en un elemento de salida. Se añade soporte de hardware en la unidad de radiodifusión de una unidad de procesador en la que la unidad de radiodifusión determina si un elemento que se radiodifunde es cero. Si el elemento que se radiodifunde es cero, la unidad de radiodifusión puede etiquetar el registro de destino para la operación de radiodifusión. Los elementos de procesamiento pueden determinar entonces si la etiqueta cero está presente y aplastar la instrucción cuando la salida de la instrucción vaya a ser cero. En una realización, un procesador que tiene soporte para una ejecución de instrucción fuera de orden puede implementar tales técnicas dentro de la lógica de ejecución fuera de orden. Sin embargo, tales técnicas también pueden implementarse dentro de un procesador, tal como una GPGPU, que está configurada para una ejecución en orden. En algunas realizaciones, una GPGPU puede configurarse para soportar, al menos parcialmente, una ejecución fuera de orden, al menos con respecto a instrucciones sometidas a aplastamiento de cero. Tales instrucciones se pueden completar fuera de orden como instrucciones NOP antes de que se procesen o se completen otras instrucciones de GPGPU. Para procesadores al menos parcialmente fuera de orden, el aplastamiento de instrucciones se puede realizar basándose en una etiqueta aplicada por una unidad de radiodifusión que está configurada para radiodifundir un vector de entrada o elementos de vector de entrada a unidades funcionales (por ejemplo, unidades de cómputo) dentro de la GPGPU u otro procesador descrito en el presente documento. La lógica de hardware para realizar tales operaciones se ilustra con mayor detalle en las Figuras 6D-6F.
La Figura 6B ilustra la lógica 630 que proporciona técnicas para el aplastamiento de cero de una instrucción. La lógica 630 puede configurar la GPGPU para realizar operaciones, incluyendo la extracción de una instrucción que hay que ejecutar dentro de la GPGPU en el bloque 632 y descodificar una instrucción para determinar un tipo para la instrucción en el bloque 634. Determinar un tipo para la instrucción puede incluir determinar una clasificación para la instrucción y/o el tipo de operaciones que hay que realizar durante la ejecución de la instrucción. Si la lógica 630 determina que la instrucción es una operación de multiplicación en el bloque 635, la lógica 630 puede determinar entonces si la instrucción tiene cualquier valor de operando que sea cero en el bloque 636. Una instrucción incluye una operación de multiplicación si una porción de la instrucción incluye la multiplicación de operandos de entrada. Por ejemplo, una instrucción de multiplicación-suma fusionada o de multiplicación-acumulación fusionada incluye una operación de suma y una operación de multiplicación. Si la instrucción no es una instrucción de multiplicación o no tiene operando cero alguno, la lógica 630 puede planificar operaciones de instrucción para su ejecución en el bloque 638. Si cualesquiera operandos de la operación de multiplicación son cero, la lógica 630 puede etiquetar la operación como una NOP en el bloque 639. Durante una ejecución de instrucción, la lógica de ejecución puede sortear por completo la planificación de la instrucción de multiplicación si está garantizado que la salida de la instrucción vaya a ser cero, por ejemplo, para una instrucción de multiplicación de matrices o de vectores en la que cada operación de multiplicación incluye un operando cero. En una realización, un subconjunto de la salida de operación para la instrucción será cero, mientras que una porción de la salida será distinta de cero. Por ejemplo, una operación de multiplicación-suma fusionada que tiene un operando cero en la porción de multiplicación de la instrucción puede simplemente escribir el operando sumador en el registro de destino. Una operación de multiplicación-acumulación fusionada puede emitir un valor de acumulador existente. En una realización, una instrucción de multiplicación de vectores o de matrices puede tener una o más entradas distintas de cero para algunos elementos de la instrucción. Durante la ejecución de tales instrucciones, como se muestra en la Figura 6E, se pueden sortear una o más operaciones de multiplicación dentro de una unidad de cómputo al nivel de la unidad funcional.
Se aplica una técnica adicional en el contexto de implementaciones de múltiples pasadas de operaciones compuestas, cuando cuatro u ocho operaciones se realizan en múltiples pasadas. Ejemplos de instrucciones de este tipo incluyen una instrucción de multiplicación-suma fusionada cuádruple (QFMA) o una instrucción de red neuronal de vector cuádruple (QVNNI). Durante la ejecución de tal instrucción, se realizan múltiples pasadas a través de una unidad de cómputo, donde se realiza un subconjunto de las operaciones en cada pasada. Algunas realizaciones descritas en el presente documento proporcionan un método para identificar y empaquetar valores de entrada distintos de cero (por ejemplo, retirar operandos de entrada cero), de modo que, si el número de valores distintos de cero es < 50 %, la operación puede completarse en un número reducido de pasadas. Por ejemplo, una operación de dos pasadas se puede realizar en una única pasada. Cuando se compactan operandos de entrada, en una realización se puede mantener una correlación entre la operación original y la compactada mediante una lógica de reordenación o planificación de instrucciones.
La Figura 6C ilustra la lógica 640 para la reducción de pasadas mediante aplastamiento de cero. La lógica 640 puede configurar una GPGPU para realizar operaciones, incluyendo la extracción de una instrucción que hay que ejecutar dentro de la GPGPU en el bloque 642 y descodificar una instrucción para determinar un tipo de instrucción en el bloque 644. Si la lógica 640 determina que la instrucción es una instrucción de multiplicación de vectores o de matrices de dos pasadas en el bloque 645, la lógica 640 puede determinar entonces si una cantidad mayor que o igual al 50 % (por ejemplo, la mitad o más de la mitad) de las operaciones de elementos tienen operandos cero en el bloque 646. Si una u otra de las determinaciones en el bloque 645 y el bloque 646 es negativa, la lógica 640 puede ejecutar operaciones de instrucción de manera normal en el bloque 648. Si la instrucción es una instrucción de multiplicación de matrices o de vectores de dos pasadas y más del 50 % de las operaciones de elementos tienen operandos cero, la lógica 640 puede compactar elementos con operandos distintos de cero en el bloque 647. Compactar los elementos con operandos distintos de cero puede incluir sortear la ejecución de los elementos que tienen operandos cero, habilitando la ejecución de la instrucción en un número reducido de pasadas. La compactación se puede realizar para instrucciones que incluyen dos o más pasadas, con el grado y el umbral de compactación determinados basándose en el porcentaje de operaciones cero conocidas. Una operación de cuatro pasadas se puede compactar en dos pasadas si al menos el 50 % de las operaciones van a ser cero, se puede compactar en una pasada cuando al menos el 75 % de las operaciones van a ser cero y se puede compactar en tres pasadas cuando al menos el 25 % de las operaciones van a ser cero. En el caso de una operación de dos pasadas cuando al menos el 50 % de las operaciones de elementos tienen uno o más operandos de entrada cero, la lógica 640 puede realizar la operación de multiplicación de dos pasadas en una única pasada, como se muestra en el bloque 649.
la Figura 6D ilustra una compactación de pasadas de una instrucción compuesta o de múltiples pasadas, de acuerdo con una realización. En una realización, se puede usar una unidad de cómputo 660 que incluye un conjunto de unidades funcionales 662 para ejecutar múltiples operaciones asociadas a una instrucción, tal como una instrucción de multiplicación de matrices o vectores. La unidad de cómputo 660 puede ser una unidad de cómputo dentro de un bloque de cómputo 624A-624N, como en la Figura 6A, u otra unidad de ejecución o multiprocesador, como se describe en el presente documento. El conjunto de unidades funcionales 662 incluye unidades enteras o de coma flotante como se describe en el presente documento. En una realización, la unidad de cómputo 660 puede configurarse para ejecutar un hilo de hardware interno para cada operación. Si, por ejemplo, una unidad de cómputo 660 puede ejecutar cuatro hilos en un ciclo, se puede realizar una instrucción de ocho operaciones en una única unidad de cómputo como una
operación de dos pasadas o de dos ciclos, mientras que una instrucción de dieciséis operaciones se puede realizar en cuatro pasadas o ciclos.
Por ejemplo, se puede realizar una instrucción de ocho operaciones donde un primer registro de entrada 651 puede almacenar un primer vector de ocho valores de entrada empaquetados y un segundo registro de entrada 652 puede almacenar un segundo vector de ocho valores de entrada empaquetados para una operación. Los valores de entrada empaquetados ilustrativos pueden ser distintos de cero (por ejemplo, la entrada 651C, la entrada 652C, la entrada 652F) o cero (por ejemplo, la entrada 651F). En una realización, una unidad de correlación y de filtrado de entrada 656 se acopla con los registros de entrada 651,652 mediante uno o más buses 653, 655. La unidad de correlación y de filtrado de entrada 656, en diversas realizaciones, se puede realizar mediante una lógica de hardware o de firmware dentro de una unidad de instrucción o unidad de planificación, como se describe en el presente documento (por ejemplo, la unidad de instrucción 621, la unidad de planificación 622, como en la Figura 6A). La unidad de correlación y de filtrado de entrada 656 incluye comparadores para determinar qué operaciones de multiplicación que van a ser realizadas por la unidad de cómputo 660 tienen uno o más valores de entrada cero. Tales operaciones se pueden etiquetar como cero para indicar que se sabe que la salida de la operación es cero. La entrada para operaciones de multiplicación que tienen valores de salida desconocidos (por ejemplo, sin operandos cero) se puede proporcionar a través de un bus 657 a la unidad de cómputo, que puede realizar las operaciones sobre el conjunto de unidades funcionales 662 y emitir los resultados a través de un bus 663 a una unidad de correlación de salida 665. La unidad de correlación de salida 665 emite entonces valores distintos de cero a un registro de salida 668.
Por ejemplo, se puede realizar una operación para generar un tercer valor de salida 668C basándose en una tercera entrada 651C empaquetada en un vector almacenado en el primer registro de entrada 651 y una sexta entrada empaquetada en empaquetada en un vector almacenado en el segundo registro de entrada 652. Debido a que ambos valores de entrada para la operación o hilo son distintos de cero, la operación de multiplicación es realizada por la unidad de cómputo 660 y se emite un valor distinto de cero. Se puede sortear una operación para generar un sexto valor de salida 668F y el valor de salida para la sexta salida puede ser un valor inicializado o preexistente del registro de salida 668. Dependiendo del número de pasadas operativas que se vayan a realizar para una instrucción y, basándose en los valores de entrada, el porcentaje de operaciones que son operaciones cero conocidas, puede reducirse el número de pasadas para realizar la instrucción.
La Figura 6E ilustra una lógica de hardware para habilitar técnicas de aplastamiento de cero descritas en el presente documento. En una realización, la unidad de instrucción 621, la unidad de planificación 622 y los bloques de cómputo 624A-624N, que también se ilustran en la Figura 6A, pueden potenciar la eficiencia energética y/o aumentar el caudal al sortear o combinar operaciones para instrucciones paralelas o de vectores. Pueden implementarse realizaciones de la lógica ilustrada en procesadores paralelos y/o GPGPU configurados para una operación de SIMD o de SIMT.
En una realización, una caché de instrucciones 670 incluye instrucciones que han de ser ejecutadas por los bloques de cómputo 624A-624N, mientras que una caché de datos 671 puede incluir valores asociados con los operandos de las instrucciones que hay que ejecutar. Una unidad de extracción de instrucciones 672 puede extraer instrucciones para su ejecución desde la caché de instrucciones 670 y proporcionar esas instrucciones a una unidad de descodificación de instrucciones 673 para que se descodifiquen. Basándose en la instrucción descodificada, una unidad de extracción de operandos 674 puede recuperar los operandos para una instrucción desde la caché de datos 671. En algunas realizaciones, al menos una porción de las operaciones de la unidad de correlación y de filtrado de entrada 656 de la Figura 6D son realizadas por la unidad de instrucción 621. Por ejemplo, y en una realización, una unidad de radiodifusión de operandos 676 reside dentro de la unidad de instrucción 621 y está configurada para radiodifundir instrucciones y/o datos de operandos al consumidor de datos apropiado dentro de la GPGPU. La unidad de radiodifusión 676, en diversas realizaciones, incluye diversos comparadores para habilitar operaciones condicionales basándose en los datos que hay que radiodifundir. En una realización, la unidad de radiodifusión 676 incluye un comparador de operandos 677. El comparador de operandos 677 puede configurarse para realizar comparaciones sobre el valor de un operando recuperado. En el caso de una instrucción de multiplicación, o una instrucción que incluye una operación de multiplicación (por ejemplo, FMADD, FMAC, etc.), u operaciones binarias (por ejemplo, XNOR), u operaciones de producto escalar, el comparador de operandos 677 puede comparar valores de operando con cero y, si cualquiera de los operandos de una operación de multiplicación es cero, la unidad de radiodifusión 676 puede establecer un valor en una unidad de etiqueta de registro 675 asociada con la operación. La etiqueta cero se puede asociar con la operación de una diversidad de formas. En una realización, la etiqueta cero se puede asociar con el registro de destino de la operación.
En una realización, cuando es seguro que el resultado de una instrucción de multiplicación es un valor cero, la unidad de planificación 622 puede sortear la planificación de la instrucción y emitir el resultado de la operación como cero. Cuando se van a realizar operaciones de vectores o paralelas y un subconjunto de los elementos de la operación va a ser cero, en una realización, la operación puede ser planificada en los bloques de cómputo 624A-624N por la unidad de planificación 622 y las unidades de cómputo dentro de los bloques de cómputo pueden sortear operaciones individuales, permitiendo un cómputo de potencia reducida. En realizaciones que soportan un cómputo paralelo de SIMT, hilos que tienen operaciones con un resultado cero conocido se pueden sortear o enmascarar en la unidad de planificación 622.
En una realización, la unidad de planificación 622 incluye un controlador 678, que puede ser un microcontrolador, y una lógica de condensador de múltiples pasadas 679, que puede funcionar junto con o incluir una lógica que se ejecuta mediante el controlador 678. En tal realización, una porción de las operaciones de la unidad de correlación y de filtrado de entrada 656 son realizadas por el condensador de múltiples pasadas 669 y/o el controlador 678. La lógica ilustrada dentro de la unidad de planificación 622 se puede combinar en cuanto a su funcionalidad con la unidad de instrucción para realizar las operaciones de la lógica 640 ilustrada en la Figura 6C, y la compactación de pasadas de la Figura 6D.
La Figura 6F ilustra hardware para habilitar un aplastamiento de cero dentro de una unidad de cómputo, de acuerdo con una realización. Además de sortear una instrucción de resultado cero durante la planificación, instrucciones paralelas con resultados cero parciales se pueden manejar dentro de una unidad de cómputo 681 al nivel de una unidad funcional 687. La unidad de cómputo 681 puede incluir múltiples unidades funcionales 687, donde cada unidad funcional es configurable para realizar una operación sobre un elemento de entrada de vector. Se ilustran cuatro unidades funcionales 687 de la unidad de cómputo 681. Sin embargo, una unidad de cómputo 681 no se limita a cuatro unidades funcionales 687. El conjunto de unidades funcionales dentro de una unidad de cómputo 6811 se puede configurar para realizar una operación con la precisión y el tipo de datos de los operandos 684 (por ejemplo, tipos de datos de coma flotante o enteros con una precisión de 8 bits, de 16 bits o de 32 bits). En una realización, las unidades funcionales 687 pueden realizar operaciones de coma flotante de 64 bits.
En una realización, la unidad de etiqueta de registro 675 incluye una etiqueta de vector para una instrucción que indica si cualquiera de las operaciones que emiten a un registro de destino de vector está etiquetada como salida cero. Cada unidad funcional 687 está asociada con un multiplexor 686. El multiplexor 686 puede usar un elemento de la etiqueta de vector a partir de la unidad de etiqueta de registro 675 para seleccionar entre una operación original 682 (por ejemplo, multiplicación, etc.) y una no-operación (NOP 683). La operación seleccionada 688 para cada unidad funcional 687 se realiza entonces sobre el elemento de vector de los operandos 684 que está asociado con la unidad funcional 687.
Multiplicación de enteros de baja precisión para evitar el desbordamiento de registro de acumulador
En el aprendizaje profundo, se estima ampliamente que la precisión INT16-INT32 es una precisión óptima para el aprendizaje profundo. Cuando se realizan operaciones de 16 bits que se acumulan en un acumulador de 32 bits, es posible una condición de desbordamiento, debido a que el acumulador puede no tener una anchura de bits suficiente para acumular una cadena larga de multiplicaciones de 16 bits. Una solución es multiplicar INT16-INT16 y desplazar a la derecha el resultado INT32 intermedio antes de la acumulación.
La Figura 7A ilustra la lógica 710 que proporciona técnicas para la multiplicación de enteros de baja precisión, de acuerdo con una realización. La lógica 710 realiza operaciones que incluyen descodificar una instrucción que especifica una operación de multiplicación-acumulación, como se muestra en el bloque 711. La lógica 710 realiza entonces una operación de multiplicación para generar un producto que tiene una precisión superior a la de la entrada a la operación de multiplicación, como se muestra en el bloque 712. Por ejemplo, se pueden multiplicar operandos de 16 bits para generar un valor intermedio de 32 bits. La lógica 710 puede determinar entonces si la operación de acumulación desbordará el acumulador, como se muestra en el bloque 714. Como se muestra en el bloque 715, la lógica 710 determina que la operación provocará desbordamiento, la lógica puede desplazar a la derecha el valor de producto y de acumulador, como se muestra en el bloque 716 y añadir valores desplazados en el bloque 718. El número de posiciones desplazadas se puede almacenar en un registro de factor de escala. Antes de la salida, por ejemplo, después de una cadena de operaciones de acumulador, el valor acumulado se puede desplazar a la izquierda antes de la salida basándose en el número de desplazamientos a la derecha realizados durante la acumulación, como se muestra en el bloque 719. Si no va a tener lugar desbordamiento alguno en el bloque 715, la lógica 710 puede simplemente añadir los valores desplazados en el bloque 717.
La Figura 7B ilustra una unidad de lógica 720 configurada para la multiplicación de enteros de baja precisión para evitar el desbordamiento de registro de acumulador, de acuerdo con una realización. La unidad de lógica 720 acepta dos o más entradas 721 (por ejemplo, entradas a, b) para realizar una operación de multiplicación-acumulación. En una realización, las entradas 721 se proporcionan a una unidad de multiplicación-suma de 16 bits 722 que incluye un multiplicador de 16 bits x 16 bits 724 y un sumador de 32 bits 726. Las entradas 721 son multiplicadas por el multiplicador 724 para producir un producto 725. El producto puede ser un producto de 16 bits o puede tener una anchura mayor dependiendo de la configuración de salida del multiplicador 724. Por ejemplo, el producto 725 puede ser un producto de 32 bits. El sumador de 32 bits 726 suma el producto 725 a un valor de entrada de acumulador 723 (por ejemplo, la entrada c) desde un acumulador 732 cuando la acumulación está habilitada. Aunque se ilustra un sumador de 32 bits 726, en una realización, se puede usar un sumador de precisión de bits superior, tal como un sumador de 40 bits. El producto 725 puede ser evaluado por la lógica de desplazamiento 727 para determinar si se puede producir un desbordamiento cuando se acumula el producto 725 con el valor de entrada de acumulador 723. En una realización, la lógica de desplazamiento 727 también puede evaluar el valor en el acumulador 732 o el valor de entrada de acumulador 723. Si se produjera un desbordamiento, la lógica de desplazamiento 727 puede desplazar a la derecha el producto 725 y la entrada de acumulador 723 antes de sumar los valores mediante el sumador de 32 bits 726. La suma de enteros 728 se puede sumar entonces al registro de acumulador 732. Una vez que se ha
completado la cadena de acumulación, el valor acumulado puede ser desplazado a la izquierda por la lógica de desplazamiento 734. El grado de desplazamiento a la derecha puede ser rastreado por un registro de factor de escala 730 que rastrea el grado de reducción de escala que se ha realizado durante la cadena de acumulación. Basándose en el grado de desplazamiento a la derecha, el ajuste a escala se puede deshacer mediante la lógica de desplazamiento 734 mediante una operación de desplazamiento a la izquierda. Por ejemplo, cuando el resultado de salida se va a almacenar en un registro de tamaño suficiente para almacenar el valor completo, la lógica de desplazamiento 734 puede ajustar a escala el valor en el acumulador 732 antes de la salida. En una realización, se puede generar un valor sometido a reducción de escala y los consumidores del valor sometido a reducción de escala pueden almacenar el factor de escala a partir del registro de factor de escala junto con el valor de salida para su uso cuando se realizan las operaciones subsiguientes usando valores ajustados a escala.
En una realización, la unidad de lógica 720 está configurada adicionalmente con una configuración de precisión 731 que puede usarse para ajustar la precisión del multiplicador de 16 bits x 16 bits 724 y/o el sumador de 32 bits 726. En una realización, la configuración de precisión 731 puede ser una señal de entrada de dos bits, usándose el primer bit para seleccionar entre dos configuraciones de multiplicador y un segundo bit para seleccionar entre dos configuraciones de sumador. Las configuraciones de multiplicación pueden ser una configuración de multiplicación de 16 bits x 16 bits y una configuración de multiplicación de 8 bits x 8 bits. La configuración de sumador puede ser una configuración de sumador de 32 bits y una configuración de sumador de 20 bits. Los bits no usados de la configuración de precisión inferior se pueden controlar por alimentación para reducir el consumo de energía de la unidad de lógica 720, habilitando potencialmente el uso de un número adicional de unidades de lógica bajo un presupuesto de energía dado.
Procesamiento paralelo de longitud en bits desigual para operandos de entrada de precisión variable
La inferencia y el entrenamiento de aprendizaje profundo se encaminan rápidamente hacia una aritmética de baja precisión, operando la inferenciación del estado de la técnica con una precisión de 8 bits. Se puede tener un rendimiento de inferenciación mayor en relación con el estado de la técnica habilitando una inferenciación de precisión inferior. Sin embargo, las operaciones de precisión extremadamente baja, en particular las operaciones simétricas de baja precisión, no producen resultados precisos en las aplicaciones del mundo real. Por ejemplo, se muestra que la inferencia produce resultados aceptablemente precisos usando entradas de 2 bits y activaciones de 32 bits, mientras que la activación y los pesos de 2 bits no son conocidos por producir buenos resultados. Sin embargo, el uso de activaciones de 32 bits puede dificultar los resultados debido al tamaño relativamente mayor del operando, dando como resultado una mayor presión en la caché dentro de la unidad de procesamiento.
Las realizaciones descritas en el presente documento proporcionan instrucciones y una lógica asociada para habilitar un método genérico de cómputo de operandos de entrada de longitud en bits desigual en proporción al tamaño de tipo de datos. En tales realizaciones, se usan múltiples carriles de 32 bits para una alta precisión, mientras que se usa un carril de 32 bits para operandos de baja precisión. Los operandos de baja precisión se pueden empaquetar en el carril de 32 bits, y se realizan operaciones paralelas de longitud en bits desigual dentro de las unidades de cómputo. Una realización habilita el uso de activaciones de 8 bits con pesos de 2 bits. Una realización habilita el uso de activaciones de 8 bits con pesos de 4 bits. Tales realizaciones habilitan un rendimiento aumentado mientras mantienen resultados de inferencia precisos.
En algunas realizaciones, el conjunto de instrucciones de procesadores descritos en el presente documento se amplía para incluir instrucciones de operandos de entrada de precisión variable y de longitud en bits desigual. Diversas operaciones de procesamiento paralelo para el aprendizaje automático de precisión variable son habilitadas por tales instrucciones. En una realización, una unidad de cómputo está configurada para realizar una operación sobre un primer valor de entrada que abarca múltiples carriles de entrada de 32 bits y un segundo valor de entrada que se empaqueta dentro de un único carril de entrada de 32 bits. A continuación, los valores de salida se empaquetan en un único carril de salida de 32 bits. Por ejemplo, una realización proporciona un conjunto de instrucciones que consume una entrada de 16 bytes (entrada1) y una entrada de 4 bytes (entrada2) para producir una salida de 4 bytes (salida). Por ejemplo, se puede proporcionar una instrucción dp_8_2_4a, que realiza una operación, como la que se muestra en la ecuación (1).
sallda[31...0] = sumaj = 1..16} entradalp * 8-1 ... (i -1) * 8] * entrada2[i * 2 -1 ... (i -1) * 2]}. (1)
La entrada de 16 bytes es una entrada de 128 bits que puede contener dieciséis valores de entrada de 8 bits, que pueden ser, por ejemplo, valores de entrada para su uso en una operación de convolución. La entrada de 4 bytes es una entrada de 32 bits que puede contener dieciséis entradas de 2 bits, que pueden ser, por ejemplo, pesos ternarios para su uso en una operación de convolución. Las instrucciones de este tipo pueden realizar un número variable de multiplicación-suma fusionada (FMADD), operaciones binarias (por ejemplo, XNOR) o algunas operaciones matriciales, tales como un producto escalar. El número de operaciones realizadas en un ciclo se puede determinar basándose en el tamaño del tipo de datos de tamaño más bajo en relación con un carril de entrada de 32 bits. Por ejemplo, cuando la instrucción opera sobre un segundo valor que incluye un vector de dieciséis entradas de 2 bits, se realizan dieciséis
operaciones. Cuando la instrucción opera sobre una segunda entrada que incluye un vector de ocho valores de cuatro bits, se pueden realizar ocho operaciones.
La Figura 7C ilustra una lógica 740 para implementar un procesamiento paralelo de longitud en bits desigual, de acuerdo con una realización. La lógica 740 puede extraer una única instrucción que tiene múltiples operandos de entrada con una longitud en bits desigual, incluyendo los múltiples operandos una primera entrada que tiene una primera longitud en bits y una segunda entrada que tiene una segunda longitud en bits, como se muestra en el bloque 742. La lógica 740 puede descodificar entonces la única instrucción en una instrucción descodificada y determinar una longitud en bits más pequeña de la primera longitud en bits y la segunda longitud en bits, como se muestra en el bloque 744. La lógica 740 puede realizar entonces una operación matricial sobre los múltiples operandos para generar un valor de salida que tiene una longitud en bits de la longitud en bits más pequeña, como se muestra en el bloque 746. La Figura 7D ilustra una arquitectura de instrucciones 750 ilustrativa para realizar un procesamiento paralelo de longitud en bits desigual, de acuerdo con una realización. En una realización, una instrucción acepta un operando de la entrada de 128 bits 751 que está empaquetado con 16 entradas, estando las 16 entradas agrupadas en cuatro bloques de 32 bits 752. La entrada de 128 bits 751 puede representar un tensor de activaciones de 8 bits. La entrada de 128 bits 751 se puede procesar en una operación de dos pasadas contra una entrada de pesos 753 que incluye múltiples conjuntos de pesos de 2 bits, incluyendo cada conjunto dieciséis pesos de 2 bits empaquetados en un bloque de 32 bits 754 (por ejemplo, W00-W0F) dentro de un operando de pesos de 64 bits 753. Se puede realizar una operación de multiplicación-suma fusionada (FMADD) usando la entrada de 128 bits 751 y el bloque de 32 bits 754 de la entrada de pesos 753 para generar una salida de 32 bits 756. Los 32 bits restantes de la salida 755 se pueden generar realizando una segunda operación de FMA usando la entrada de 128 bits 751 y los 32 bits restantes del operando de pesos 753.
La arquitectura de instrucciones 750 ilustrativa de la Figura 7D se puede usar como una arquitectura genérica para múltiples operaciones de aprendizaje automático, incluyendo operaciones de multiplicación-suma o multiplicaciónacumulación fusionada, operaciones XNOR u operaciones de productos escalares tales como la dp_8_2_4a descritas anteriormente. Las operaciones ilustrativas adicionales incluyen una instrucción QVNNI-8-2 o QVNNI-8-4 como se muestra en la Tabla 5 y en la Tabla 6.
Tabla 5 - Instrucción QVNNI-8-2
QVNNI-8-2(vsalida,entrada,vwt)
1 Para (q = 0 ... 3) // Cuádruple
2 Para (o = 0 ... 15) // carriles de SIMD de la salida (en un número de 16)
3 Para (i = 0... 15) //16 operaciones de FMADD por salida (256 en total)
4 vsalida[o * 32:31-0] // entrada[q * 128 i * 8:7-0] * vwt[q][o * 32 i * 2:1-0];
Tabla 6 - Instrucción QVNNI-8-4
QVNNI-8-4(vsalida,entrada, vwt)
1 Para (q = 0 ... 3) // Cuádruple
2 Para (o = 0 ... 15) // carriles de SIMD de la salida (en un número de 16)
3 Para (i = 0 ... 7) // 8 operaciones de FMADD por salida (128 en total)
4 vsalida[o * 32:31-0] // entrada[q * 64 i * 8:7-0] * vwt[q][o * 32 i * 4:3-0];
La instrucción QVNNI-8-2 que se muestra en la Tabla 5 prevé 4 * 16 * 16 = 1024 operaciones de multiplicación-suma fusionada por ciclo, lo que produce un aumento de caudal de 4 veces en relación con una instrucción QVNNI-8, lo que
prevé un caudal de 4 * 16 * 4 = 256 instrucciones de multiplicación-suma fusionada por ciclo. Se pueden definir instrucciones similares para QVNNI-4-2, QVNNI-4-1, QVNNI-2-1 y QVNNI-8-1 siguiendo la plantilla descrita anteriormente.
Todas y cada una de las realizaciones descritas en el presente documento pueden combinarse para generar realizaciones más complejas. Por ejemplo, el aplastamiento de cero se puede combinar con operaciones de precisión variable o de longitud en bits desigual y/o de multiplicación de enteros de baja precisión. Las operaciones de multiplicación-suma de las instrucciones QVNNI se pueden realizar usando una unidad de lógica similar a la unidad de lógica 720 ilustrada en la Figura 7B, y pueden contener una lógica de protección contra desbordamiento.
La Figura 7E ilustra una lógica de ejecución de precisión variable 760 que puede usarse para implementar un procesamiento paralelo de longitud en bits desigual, de acuerdo con una realización. En algunas realizaciones, la lógica de precisión variable 760 incluye una unidad de cómputo 770 acoplada con o que incluye un módulo de precisión variable 623. El módulo de precisión variable 623 puede ser o incluir una lógica del módulo de precisión variable 623 de la Figura 6A. La unidad de cómputo 770 puede ser una unidad de cómputo de uno de los múltiples bloques de cómputo 624A-624N de la Figura 6A. En una realización, el módulo de precisión variable 623 incluye una unidad de longitud de operando 764 y una unidad de configuración de precisión 766. La unidad de longitud de operando 765 se puede usar para comparar las longitudes en bits de los operandos de entrada (por ejemplo, el operando 761, el operando 762) para determinar una longitud en bits más pequeña. La unidad de configuración de precisión 766 puede proporcionar entonces una configuración de precisión 768 a cada unidad funcional en un conjunto de unidades funcionales 767 dentro del bloque de cómputo 624. La configuración de precisión 768, en una realización, configura una precisión operativa para uno o más componentes de cada una del conjunto de unidades funcionales 767 Por ejemplo, cuando el primer operando de entrada 761 es un operando de 128 bits y un segundo operando de entrada 762 es un operando de 32 bits, la configuración de precisión 768 puede especificar una salida de 32 bits 769. En una realización, el conjunto de unidades funcionales 767 puede incluir una o más unidades de lógica de coma flotante y/o de enteros como se describe en el presente documento, tales como la unidad de lógica 720 de la Figura 7B. En tal realización, la configuración de precisión 768 puede configurar múltiples elementos de una unidad funcional, tales como una precisión asociada con un multiplicador o un sumador dentro de la unidad funcional. El conjunto de unidades funcionales 767 en cada unidad de cómputo 770 se puede configurar para incluir diversos números de unidades funcionales (por ejemplo, 4, 8, 16, 32, 64, etc.), y las unidades funcionales pueden controlarse por alimentación cuando no están en uso, habilitando una variación del número de unidades funcionales activas basándose en un consumo de energía actual y un presupuesto de energía disponible para la unidad de cómputo 770.
Los operandos de entrada 761,762 pueden ser operandos de entrada de vector que almacenan múltiples valores de entrada empaquetados. Por ejemplo, un primer operando de entrada 761 puede ser un vector de 128 bits que almacena cuatro valores de entrada de 32 bits empaquetados. Un segundo operando de entrada 762 puede ser un vector de 32 bits que almacena cuatro valores de 8 bits empaquetados. En una realización, los cuatro valores de entrada de 32 bits empaquetados y los cuatro valores de 8 bits empaquetados pueden ser vectores empaquetados que almacenan una subdivisión adicional de valores. Por ejemplo, el primer operando de entrada 761 puede ser la entrada de 128 bits 751 como en la Figura 7D, que almacena múltiples bloques de 32 bits empaquetados 752. El segundo operando de entrada 762 pueden ser los primeros 32 bits 752 de la entrada de pesos de 64 bits 753. La configuración de precisión 768 para las unidades funcionales 767 incluye entonces datos para configurar los tamaños de elemento dentro de cada unidad de función 767.
En diversas realizaciones, la arquitectura de conjunto de instrucciones de procesadores descrita en el presente documento es ampliable. En tales realizaciones, las arquitecturas del conjunto de instrucciones se amplían para incluir instrucciones que soportan tal combinación de características. Adicionalmente, las técnicas descritas en el presente documento pueden implementarse dentro de procesadores de propósito general de enfoque paralelo, procesadores de gráficos de propósito general o procesadores paralelos optimizados para realizar operaciones vectoriales a gran escala.
Vista global de aprendizaje automático
Un algoritmo de aprendizaje automático es un algoritmo que puede aprender basándose en un conjunto de datos. Las realizaciones de algoritmos de aprendizaje automático pueden diseñarse para modelar abstracciones de alto nivel dentro de un conjunto de datos. Por ejemplo, pueden usarse algoritmos de reconocimiento de imágenes para determinar a cuál de varias categorías pertenece una entrada dada; los algoritmos de regresión pueden emitir un valor numérico dada una entrada; y pueden usarse los algoritmos de reconocimiento de patrones para generar texto traducido o para convertir texto en habla y/o reconocimiento de habla.
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 están dispuestos en capas. Habitualmente, 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 especificado que está siendo representado por el algoritmo que se está ejecutando, la salida del algoritmo de la red neuronal puede adoptar diversas 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 intensivo desde el punto de vista computacional 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, debido a que los cómputos realizados en el ajuste de los coeficientes en 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.
La Figura 8 es un diagrama generalizado de una pila de software de aprendizaje automático 800. Una aplicación de aprendizaje automático 802 puede configurarse para entrenar una red neuronal usando un conjunto de datos de entrenamiento o para usar una red neuronal profunda entrenada para implementar una inteligencia automática. La aplicación de aprendizaje automático 802 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 802 puede implementar cualquier tipo de inteligencia automática incluyendo, pero sin limitación, reconocimiento de imágenes, correlación y localización, navegación autónoma, síntesis de habla, formación de imágenes médicas o traducción de idioma.
Puede habilitarse una aceleración de hardware para la aplicación de aprendizaje automático 802 mediante una estructura de aprendizaje automático 804. La estructura de aprendizaje automático 804 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 804, 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 reoptimizaran entonces 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ómputos necesarios usando las primitivas proporcionadas por la estructura de aprendizaje automático 804. Las primitivas ilustrativas incluyen convoluciones tensoriales, 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 804 también puede proporcionar 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 804 puede procesar datos de entrada recibidos desde la aplicación de aprendizaje automático 802 y generar la entrada apropiada en una estructura de cómputo 806. La estructura de cómputo 806 puede abstraer las instrucciones subyacentes proporcionadas al controlador de GPGPU 808 para permitir que la estructura de aprendizaje automático 804 se aproveche de la aceleración de hardware mediante el hardware de GPGPU 810 sin requerir que la estructura de aprendizaje automático 804 tenga un conocimiento íntimo de la arquitectura del hardware de GPGPU 810. Adicionalmente, la estructura de cómputo 806 puede habilitar la aceleración de hardware para la estructura de aprendizaje automático 804 a lo largo de una diversidad de tipos y generaciones del hardware de GPGPU 810.
Aceleración de aprendizaje automático de GPGPU
La Figura 9 ilustra una unidad de procesamiento de gráficos de propósito general altamente paralela 900, de acuerdo con una realización. En una realización la unidad de procesamiento de propósito general (GPGPU) 900 puede
configurarse para ser particularmente eficiente en el procesamiento del tipo de cargas de trabajo computacionales asociadas con el entrenamiento de redes neuronales profundas. Adicionalmente, la GPGPU 900 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 900 incluye una interfaz de anfitrión 902 para habilitar una conexión con un procesador de anfitrión. En una realización, la interfaz de anfitrión 902 es una interfaz PCI Express. Sin embargo, la interfaz de anfitrión puede ser también una interfaz de comunicaciones o tejido de comunicaciones específico de proveedor. La GPGPU 900 recibe comandos desde el procesador de anfitrión y usa un planificador global 904 para distribuir hilos de ejecución asociados con esos comandos a un conjunto de agrupaciones de cómputo 906A-906H. Las agrupaciones de cómputo 906A-H comparten una memoria caché 908. La memoria caché 908 puede servir como una caché de nivel superior para memorias caché dentro de las agrupaciones de cómputo 906A-906H.
La GPGPU 900 incluye la memoria 914A-B acoplada con las agrupaciones de cómputo 906A-906H mediante un conjunto de controladores de memoria 912A-912B. En diversas realizaciones, la memoria 914A-914B puede incluir diversos tipos de dispositivos de memoria, incluyendo una memoria de acceso aleatorio dinámica (DRAM) o una memoria de acceso aleatorio de gráficos, tal como una memoria de acceso aleatorio de gráficos sincrónica (SGRAM), incluyendo memoria de tasa de datos doble de gráficos (GDDR), y también puede incluir una memoria apilada 3D incluyendo, pero sin limitación, una memoria de alto ancho de banda (HBM).
En una realización, cada agrupación de cómputo 906A-906H incluye un conjunto de multiprocesadores de gráficos, tales como el multiprocesador de gráficos 400 de la Figura 4A. Los multiprocesadores de gráficos de la agrupación de cómputo agrupan múltiples tipos de unidades de lógica de enteros y de coma flotante que pueden realizar operaciones computacionales con un rango de precisiones que incluyen unas adecuadas para cómputos 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ómputo 906A-906H puede configurarse 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 configurarse para realizar operaciones de coma flotante de 64 bits.
Múltiples instancias de la GPGPU 900 pueden configurarse para funcionar como una agrupación de cómputo. El mecanismo de comunicación usado por la agrupación de cómputo 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 900 se comunican a través de la interfaz de anfitrión 902. En una realización, la GPGPU 900 incluye un concentrador de E/S 909 que acopla la GPGPU 900 con un enlace de GPU 910 que habilita una conexión directa a otras instancias de la GPGPU. En una realización, el enlace de GPU 910 está acoplado a un puente de GPU a GPU dedicado que habilita la comunicación y la sincronización entre múltiples instancias de la GPGPU 900. En una realización, el enlace de GPU 910 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 900 están ubicadas en sistemas de procesamiento de datos separados y se comunican mediante un dispositivo de red que es accesible mediante la interfaz de anfitrión 902. En una realización, el enlace de GPU 910 puede configurarse para habilitar una conexión a un procesador de anfitrión además de o como una alternativa a la interfaz de anfitrión 902.
Aunque la configuración ilustrada de la GPGPU 900 puede configurarse para entrenar redes neuronales, una realización proporciona una configuración alternativa de la GPGPU 900, que puede configurarse para el despliegue dentro de una plataforma de inferenciación de alto rendimiento o de baja potencia. En una configuración de inferenciación, la GPGPU 900 incluye menos de las agrupaciones de cómputo de las agrupaciones de cómputo 906A-906H en relación con la configuración de entrenamiento. Adicionalmente, una tecnología de memoria asociada con la memoria 914A-914B puede diferir entre las configuraciones de inferenciación y de entrenamiento. En una realización, la configuración de inferenciación de la GPGPU 900 puede soportar instrucciones específicas de inferenciación. Por ejemplo, una configuración de inferenciación 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 las operaciones de inferenciación para redes neuronales desplegadas.
La Figura 10 ilustra un sistema informático de múltiples GPU 1000, de acuerdo con una realización. El sistema informático de múltiples GPU 1000 puede incluir un procesador 1002 acoplado a múltiples GPGPU 1006A-1006D mediante un conmutador de interfaz de anfitrión 1004. El conmutador de interfaz de anfitrión 1004, en una realización, es un dispositivo de conmutador de PCI express que acopla el procesador 1002 a un bus de PCI express a través del cual el procesador 1002 puede comunicarse con el conjunto de GPGPU 1006A-1006D. Cada una de las múltiples GPGPU 1006A-1006D puede ser una instancia de la GPGPU 900 de la Figura 9. Las GPGPU 1006A-D pueden interconectarse mediante un conjunto de enlaces de GPU a GPU de punto a punto de alta velocidad 1016. Los enlaces de GPU a GPU de alta velocidad pueden conectarse a cada una de las GPGPU 1006A-1006D mediante un enlace de GPU dedicado, tal como el enlace de GPU 910 como en la Figura 9. Los enlaces de GPU de P2P 1016 habilitan una comunicación directa entre cada una de las GPGPU 1006A-1006D sin requerir una comunicación a través del bus de interfaz de anfitrión al que está conectado el procesador 1002. 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 1000, por ejemplo, mediante uno o más
dispositivos de red. Aunque, en la realización ilustrada, las GPGPU 1006A-1006D se conectan al procesador 1002 mediante el conmutador de interfaz de anfitrión 1004, en una realización, el procesador 1002 incluye un soporte directo para los enlaces de GPU de P2P 1016 y puede conectarse directamente a las GPGPU 1006A-1006D.
Implementaciones de red neuronal de aprendizaje automático
La arquitectura informática proporcionada por las 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 bien conocido en la técnica, en el aprendizaje automático se usa una diversidad de tipos de implementaciones de red neuronal. 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 de tipo cuadrícula conocida, tales 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ómputo, 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 unos nodos en capas sucesivas de la red. Los cómputos para una CNN incluyen aplicar la operación matemática de convolución a cada filtro para producir la salida de ese filtro. La convolución es un tipo especializado de operación matemática realizada por dos funciones para producir una tercera función que es una versión modificada de una de las dos funciones originales. En la terminología de 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 correlación 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 realimentación prospectiva que incluyen conexiones de realimentación entre capas. Las RNN habilitan 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 porción de los datos de salida desde la RNN se usa como realimentación para procesar una entrada subsiguiente en una secuencia. Esta característica hace que las RNN sean particularmente útiles para el procesamiento de idioma debido a la naturaleza variable en la que pueden componerse los datos de idioma.
Las figuras descritas a continuación presentan redes de realimentación prospectiva, CNN y RNN ilustrativas, así como describen un proceso general para entregar y desplegar, 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, de manera 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 solo incluyen una única capa oculta. El entrenamiento de redes neuronales más profundas es, en general, más intensivo desde el punto de vista computacional. Sin embargo, las capas ocultas adicionales de la red habilitan un reconocimiento de patrones de múltiples etapas que da como resultado un error de salida reducido en relación con técnicas de aprendizaje automático poco profundo.
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 trasero 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 habilita la realización de 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 pueden proporcionarse a un modelo matemático que puede correlacionar características detectadas con una salida. El modelo matemático usado por la red está especializado, en general, para la tarea específica que hay que 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 usado 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érdida y se calcula un valor de error para cada una de las neuronas en la capa de salida. Los valores de error se retropropagan entonces, hasta que cada neurona tiene un valor de error asociado que representa aproximadamente su contribución a la salida original. La red puede aprender entonces de esos errores usando un algoritmo, tal como el algoritmo de descenso de gradiente estocástico, para actualizar los pesos de la red neuronal.
Las Figuras 11A-11B ilustran una red neuronal convolucional ilustrativa. La Figura 11A ilustra diversas capas dentro de una CNN. Como se muestra en la Figura 11A, una CNN ilustrativa usada para modelar el procesamiento de imagen puede recibir la entrada 1102 que describe los componentes rojo, verde y azul (RGB) de una imagen de entrada. La entrada 1102 puede ser procesada por múltiples capas convolucionales (por ejemplo, la capa convolucional 1104, la capa convolucional 1106). La salida desde las múltiples capas convolucionales opcionalmente puede ser procesada por un conjunto de capas completamente conectadas 1108. 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 desde las capas completamente conectadas 1108 puede usarse para generar un resultado de salida a partir de la red. Las activaciones dentro de las capas completamente conectadas 1108 pueden computarse usando una multiplicación matricial en lugar de una convolución. No todas las implementaciones de CNN hacen uso de las capas completamente conectadas 1108. Por ejemplo, en algunas implementaciones, la capa convolucional 1106 puede generar una salida para la CNN.
Las capas convolucionales están conectadas de manera dispersa, lo que difiere de la configuración de red neuronal tradicional encontrada en las capas completamente conectadas 1108. 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 conectadas de manera dispersa debido a que se introduce la salida de la convolución de un campo (en lugar del valor de estado respectivo de cada uno de los nodos en el campo) en los nodos de la capa subsiguiente, como se ha ilustrado. Los núcleos asociados con las capas convolucionales realizan operaciones de convolución, cuya salida se envía a la capa siguiente. La reducción de dimensionalidad realizada dentro de las capas convolucionales es un aspecto que habilita a la CNN para que realice un ajuste a escala para procesar imágenes grandes.
La Figura 11B ilustra fases de cómputo ilustrativas dentro de una capa convolucional de una CNN. La entrada a una capa convolucional 1112 de una CNN puede procesarse en tres fases de una capa convolucional 1114. Las tres fases pueden incluir una fase de convolución 1116, una fase de detección 1118 y una fase de agrupamiento 1120. La capa de convolución 1114 puede emitir entonces datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de correlación de características de salida o proporcionar una 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 1116 se realizan varias convoluciones en paralelo para producir un conjunto de activaciones lineales. La fase de convolución 1116 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 fase de convolución computa la salida de funciones (por ejemplo, neuronas) que están conectadas a regiones específicas en la entrada, lo que puede determinarse como la región local asociada con la neurona. Las neuronas computan 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 desde la fase de convolución 1116 define un conjunto de activaciones lineales que son procesadas por fases sucesivas de la capa convolucional 1114.
Las activaciones lineales pueden ser procesadas por una fase de detección 1118. En la fase de detección 1118, cada activación lineal es procesada 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 fase de agrupamiento 1120 usa una función de agrupamiento que sustituye la salida de la capa convolucional 1106 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 en 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 fase de agrupamiento 1120, incluyendo agrupamiento máximo, agrupamiento promedio y agrupamiento de normas 12. Adicionalmente, algunas implementaciones de CNN no incluyen una fase de agrupamiento. En su lugar, tales implementaciones sustituyen una etapa de convolución adicional que tiene un paso aumentado en relación con etapas de convolución previas.
La salida desde la capa convolucional 1114 puede ser procesada entonces por la siguiente capa 1122. La siguiente capa 1122 puede ser una capa convolucional adicional o una de las capas completamente conectadas 1108. Por ejemplo, la primera capa convolucional 1104 de la Figura 11A puede emitir a la segunda capa convolucional 1106,
mientras que la segunda capa convolucional puede emitir a una primera capa de las capas completamente conectadas 1108.
La Figura 12 ilustra una red neuronal recurrente 1200 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 construirse de una diversidad de maneras usando una diversidad de funciones. El uso de las RNN pivota, en general, alrededor del uso de modelos matemáticos para predecir el futuro basándose en una secuencia anterior 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 1200 ilustrada puede describirse como una que tiene una capa de entrada 1202 que recibe un vector de entrada, capas ocultas 1204 para implementar una función recurrente, un mecanismo de realimentación 1205 para habilitar una 'memoria' de estados previos y una capa de salida 1206 para emitir un resultado. La RNN 1200 opera basándose en escalones de tiempo. El estado de la RNN en un escalón de tiempo dado se ve influenciado basándose en el escalón de tiempo previo mediante el mecanismo de realimentación 1205. Para un escalón de tiempo dado, el estado de las capas ocultas 1204 está definido por el estado anterior y la entrada en el escalón de tiempo actual. Una entrada inicial (x1) en un primer escalón de tiempo puede ser procesada por la capa oculta 1204. Una segunda entrada (x2) puede ser procesada por la capa oculta 1204 usando información de estado que se determina durante el procesamiento de la entrada inicial (x1). Un estado dado puede computarse como st = f(Uxt + Wst-1), donde U y W son matrices de parámetros. La función f es, en general, 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 1204 puede variar dependiendo de los detalles de implementación específicos de la RNN 1200.
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 larga a corto plazo (LSTM). Las RNN de LSTM son capaces de aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias de idioma más largas. Una variante de 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 por múltiples capas de variables estocásticas (aleatorias). Las DBN pueden entrenarse capa a capa usando aprendizaje no supervisado voraz. Los pesos aprendidos de la DBN pueden usarse entonces para proporcionar redes neuronales de preentrenamiento determinando un conjunto inicial óptimo de pesos para la red neuronal.
La Figura 13 ilustra el entrenamiento y despliegue de una red neuronal profunda. Una vez que se ha estructurado una red dada para una tarea, la red neuronal se entrena usando un conjunto de datos de entrenamiento 1302. 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 804 de la Figura 8 puede configurarse como una estructura de entrenamiento 1304. La estructura de entrenamiento 1304 puede engancharse a una red neuronal no entrenada 1306 y habilitar el entrenamiento de la red neuronal no entrenada usando los recursos de procesamiento paralelo descritos en el presente documento para generar una red neuronal entrenada 1308.
Para iniciar el proceso de entrenamiento, los pesos iniciales pueden elegirse aleatoriamente o mediante preentrenamiento usando una red de creencia profunda. El ciclo de entrenamiento puede realizarse entonces de una manera o bien supervisada o bien no supervisada.
El aprendizaje supervisado es un método de aprendizaje en el que un entrenamiento se realiza como una operación mediada, tal como cuando el conjunto de datos de entrenamiento 1302 incluye una entrada emparejada con la salida deseada para la entrada, o donde el conjunto de datos de entrenamiento incluye una entrada que tiene una salida conocida, y la salida de la red neuronal se califica manualmente. La red procesa las entradas y compara las salidas resultantes contra un conjunto de salidas esperadas o deseadas. Los errores se retropropagan entonces a través del sistema. La estructura de entrenamiento 1304 puede ajustarse para ajustar los pesos que controlan la red neuronal no entrenada 1306. La estructura de entrenamiento 1304 puede proporcionar herramientas para supervisar cómo de bien está convergiendo la red neuronal no entrenada 1306 hacia un modelo adecuado para generar respuestas correctas basándose 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 1308. La red neuronal entrenada 1308 puede desplegarse entonces para implementar cualquier número de operaciones de aprendizaje automático.
El aprendizaje no supervisado es un método automático 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 1302 incluirá datos de entrada sin ningún dato de salida asociado. La red neuronal no entrenada 1306 puede aprender agrupaciones 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 una correlación de autoorganización, que es un tipo de red neuronal entrenada 1307 que puede realizar operaciones útiles en cuanto a la reducción de la dimensionalidad de los datos. El entrenamiento no supervisado también puede usarse 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 1302 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 1308 a los datos nuevos 1312 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 de cómputo. En lugar de usar un único nodo de cómputo, puede usarse una red distribuida de nodos computacionales para acelerar el proceso de entrenamiento.
La Figura 14 es 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, tales como la unidad de procesamiento de gráficos de propósito general altamente paralela 900, como en la Figura 900. Como se ha ilustrado, un aprendizaje distribuido puede realizarse con el paralelismo de modelo 1402, el paralelismo de datos 1404 o una combinación del paralelismo de modelo y de datos 1404.
En el paralelismo de modelo 1402, diferentes nodos computacionales en un sistema distribuido pueden realizar cómputos de entrenamiento para diferentes partes de una única red. Por ejemplo, cada capa de una red neuronal puede ser entrenada 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ómputos asociados con diferentes capas de la red neuronal habilita 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 algunas instancias, el paralelismo de modelo puede ser particularmente útil en la ejecución de un entrenamiento no supervisado de redes neuronales grandes.
En el paralelismo de datos 1404, 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 desde los diferentes nodos se combinan entonces. Aunque son posibles diferentes enfoques al paralelismo de datos, los enfoques de entrenamiento de datos paralelos 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 de la combinación de datos incluyen el promediado de parámetros y el 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ámetro. 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.
Una técnica de paralelismo híbrido del paralelismo de modelo y de datos 1406 combinado 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 descritas en el presente documento pueden implementar diversas técnicas para reducir la sobrecarga del entrenamiento distribuido, incluyendo técnicas para habilitar una transferencia de datos de GPU a GPU de alto ancho de banda y una sincronización de datos remota acelerada.
Aplicaciones ilustrativas del aprendizaje automático
El aprendizaje automático puede aplicarse para 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 desde la reproducción de capacidades visuales humanas, tales como el reconocimiento de caras, hasta la creación de 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 una 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 habilitado enfoques de aprendizaje automático para un reconocimiento de habla automático (ASR). El ASR incluye la creación de una función que, dada una secuencia acústica de entrada, computa la secuencia lingüística más probable. El aprendizaje automático acelerado usando redes neuronales profundas ha habilitado 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 extraña. Las aplicaciones de procesador de lenguaje natural ilustrativas incluyen la traducción mecánica 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. Los procesadores paralelos ilustrativos adecuados para el entrenamiento incluyen la unidad de procesamiento de gráficos de propósito general altamente paralela 900 de la Figura 900 y el sistema informático de múltiples GPU 1000 de la Figura 1000. Por el contrario, las plataformas de aprendizaje automático desplegadas 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.
La Figura 15 ilustra un sistema en un chip (SOC) de inferenciación 1500 ilustrativo adecuado para realizar una inferenciación usando un modelo entrenado. El SOC 1500 puede integrar componentes de procesamiento que incluyen un procesador de medios 1502, un procesador de visión 1504, una GPGPU 1506 y un procesador de múltiples núcleos 1508. El SOC 1500 puede incluir adicionalmente una memoria en chip 1505 que puede habilitar un agrupamiento de datos en chip compartida que es accesible por cada uno de los componentes de procesamiento. Los componentes de procesamiento se pueden optimizar para un funcionamiento de baja potencia para habilitar el despliegue en una diversidad de plataformas de aprendizaje automático, incluyendo vehículos autónomos y robots autónomos. Por ejemplo, una implementación del SOC 1500 puede usarse como una porción del sistema de control principal para un vehículo autónomo. Cuando el SOC 1500 está configurado para su uso en vehículos autónomos, el SOC está diseñado y configurado para cumplir con las normas de seguridad funcional relevantes de la jurisdicción de despliegue.
Durante el funcionamiento, el procesador de medios 1502 y el procesador de visión 1504 pueden trabajar conjuntamente para acelerar las operaciones de visión por ordenador. El procesador de medios 1502 puede habilitar la descodificación de latencia baja de múltiples flujos de vídeo de alta resolución (por ejemplo, 4K, 8 K). Los flujos de vídeo descodificados se pueden escribir en una memoria intermedia en la memoria en chip 1505. El procesador de visión 1504 puede analizar entonces el vídeo descodificado y realizar operaciones de procesamiento preliminares sobre las tramas del vídeo descodificado como preparación al procesamiento de las tramas usando un modelo de reconocimiento de imágenes entrenado. Por ejemplo, el procesador de visión 1504 puede acelerar las operaciones de convolución para una CNN que se usa para realizar un reconocimiento de imágenes sobre los datos de vídeo de alta resolución, mientras que los cómputos de modelo de extremo trasero son realizados por la GPGPU 1506.
El procesador de múltiples núcleos 1508 puede incluir una lógica de control de asistencia en la secuenciación y la sincronización de transferencias de datos y operaciones de memoria compartida realizadas por el procesador de medios 1502 y el procesador de visión 1504. El procesador de múltiples núcleos 1508 también puede funcionar como un procesador de aplicaciones para ejecutar aplicaciones de software que pueden hacer uso de la capacidad de cómputo de inferenciación de la GPGPU 1506. Por ejemplo, al menos una porción de la lógica de navegación y de conducción se puede implementar en software que se ejecuta en el procesador de múltiples núcleos 1508. Tal software puede emitir directamente cargas de trabajo computacionales a la GPGPU 1506 o las cargas de trabajo computacionales pueden emitirse al procesador de múltiples núcleos 1508, que puede descargar al menos una porción de esas operaciones a la GPGPU 1506.
La GPGPU 1506 puede incluir agrupaciones de cómputo, tales como una configuración de baja potencia de las agrupaciones de cómputo 906A-906H dentro de la unidad de procesamiento de gráficos de propósito general
altamente paralela 900. Las agrupaciones de cómputo dentro de la GPGPU 1506 pueden soportar instrucciones que están optimizadas específicamente para realizar cómputos de inferenciación sobre una red neuronal entrenada. Por ejemplo, la GPGPU 1506 puede soportar instrucciones para realizar cómputos de baja precisión, tales como operaciones vectoriales de números enteros de 8 bits y de 4 bits.
Sistema de procesamiento de gráficos ilustrativo adicional
Los detalles de las realizaciones descritas anteriormente pueden incorporarse dentro de los sistemas y dispositivos de procesamiento de gráficos descritos a continuación. Los dispositivos y el sistema de procesamiento de gráficos de las Figuras 21-34 ilustran hardware de procesamiento de gráficos y sistemas alternativos que pueden implementar todas y cada una de las técnicas descritas anteriormente.
Vista global del sistema de procesamiento de gráficos ilustrativa adicional
La Figura 16 es un diagrama de bloques de un sistema de procesamiento 1600, de acuerdo con una realización. En diversas realizaciones, el sistema 1 60 0 incluye uno o más procesadores 1602 y uno o más procesadores de gráficos 1608, 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 1602 o núcleos de procesador 1607. En una realización, el sistema 1600 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, de mano o integrados.
Una realización del sistema 1600 puede incluir, o incorporarse dentro de, una plataforma de juegos basada en servidor, una consola de juegos, incluyendo una consola de juegos y de medios, una consola de juegos móvil, una consola de juegos de mano o una consola de juegos en línea. En algunas realizaciones, el sistema 1600 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tipo tableta o un dispositivo de Internet móvil. El sistema de procesamiento de datos 1600 también puede incluir, acoplarse con o integrarse dentro de un dispositivo ponible, tal como un dispositivo ponible de reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento de datos 1600 es un dispositivo de televisión o de descodificador de salón que tiene uno o más procesadores 1602 y una interfaz gráfica generada por uno o más procesadores de gráficos 1608.
En algunas realizaciones, cada uno de los uno o más procesadores 1602 incluye uno o más núcleos de procesador 1607 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para software de usuario y sistema. En algunas realizaciones, cada uno de los uno o más núcleos de procesador 1607 está configurado para procesar un conjunto de instrucciones 1609 específico. En algunas realizaciones, el conjunto de instrucciones 1609 puede facilitar el cómputo de un conjunto de instrucciones complejo (CISC), el cómputo de un conjunto de instrucciones reducido (RISC) o el cómputo mediante una palabra de instrucción muy larga (VLIW). Múltiples núcleos de procesador 1607 pueden procesar, cada uno, un conjunto de instrucciones 1609 diferente, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo de procesador 1607 también puede incluir otros dispositivos de procesamiento, tales como un procesador de señales digitales (DSP).
En algunas realizaciones, el procesador 1602 incluye la memoria caché 1604. Dependiendo de la arquitectura, el procesador 1602 puede tener una única caché interna o múltiples niveles de caché interna. En algunas realizaciones, la memoria caché se comparte entre diversos componentes del procesador 1602. En algunas realizaciones, el procesador 1602 también usa una caché externa (por ejemplo, una caché de nivel 3 (L3) o una caché de último nivel (LLC)) (no mostrada), que puede compartirse entre los núcleos de procesador 1607 usando técnicas de coherencia de caché conocidas. Se incluye adicionalmente, en el procesador 1602, un archivo de registro 1606 que puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de número entero, registros de coma flotante, registros de estado y un registro de puntero de instrucción). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos del diseño del procesador 1602.
En algunas realizaciones, el procesador 1602 está acoplado con un bus de procesador 1610 para transmitir señales de comunicación tales como señales de dirección, de datos o de control entre el procesador 1602 y otros componentes en el sistema 1600. En una realización, el sistema 1600 usa una arquitectura de sistema de 'concentrador' ilustrativa, incluyendo un concentrador de controlador de memoria 1616 y un concentrador de controlador de entrada-salida (E/S) 1630. Un concentrador de controlador de memoria 1616 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1600, mientras que un concentrador de controlador de E/S (ICH) 1630 proporciona conexiones a dispositivos de E/S mediante un bus de E/S local. En una realización, la lógica del concentrador de controlador de memoria 1616 está integrada dentro del procesador.
El dispositivo de memoria 1620 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 tenga un rendimiento adecuado para servir como memoria de proceso. En una realización, el dispositivo de memoria 1620 puede funcionar como una memoria de sistema para el sistema 1600, para almacenar los datos 1622 y las instrucciones 1621 para su uso cuando los uno o más procesadores 1602 ejecutan una aplicación o proceso. El concentrador de controlador de memoria 1616 también
se acopla con un procesador de gráficos externo 1612 opcional, que puede comunicarse con los uno o más procesadores de gráficos 1608 en los procesadores 1602 para realizar operaciones de gráficos y de medios.
En algunas realizaciones, el ICH 1630 habilita la conexión de los periféricos al dispositivo de memoria 1620 y al procesador 1602 mediante un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero sin limitación, un controlador de audio 1646, una interfaz de firmware 1628, un transceptor inalámbrico 1626 (por ejemplo, Wi-Fi, Bluetooth), un dispositivo de almacenamiento de datos 1624 (por ejemplo, unidad de disco duro, memoria flash, etc.) y un controlador de E/S heredado 1640 para acoplar dispositivos heredados (por ejemplo, de sistema personal 2 (PS/2)) al sistema. Uno o más controladores de bus serie universal (USB) 1642 conectan dispositivos de entrada, tales como combinaciones de teclado y de ratón 1644. Un controlador de red 1634 también puede acoplarse con el ICH 1630. En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de procesador 1610. Se apreciará que el sistema 1600 mostrado es ilustrativo y no limitante, debido a que también pueden usarse otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, el concentrador de controlador de E/S 1630 puede integrarse dentro de los uno o más procesadores 1602, o el concentrador de controlador de memoria 1616 y el concentrador de controlador de E/S 1630 pueden integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 1612.
La Figura 17 es un diagrama de bloques de una realización de un procesador 1700 que tiene uno o más núcleos de procesador 1702A-1702N, un controlador de memoria integrado 1714 y un procesador de gráficos integrado 1708. Aquellos elementos de la Figura 17 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero no se limitan a tal cosa. El procesador 1700 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 1702N representado por los recuadros en líneas discontinuas. Cada uno de los núcleos de procesador 1702A-1702N incluye una o más unidades de caché internas 1704A-1704N. En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades almacenadas en caché compartidas 1706.
Las unidades de caché internas 1704A-1704N y las unidades de caché compartidas 1706 representan una jerarquía de memoria caché dentro del procesador 1700. La jerarquía de memoria caché puede incluir al menos un nivel de caché de instrucciones y de datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartida, tal como una caché de Nivel 2 (L2), de Nivel 3 (L3), de Nivel 4 (L4) o de otros niveles, 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é 1706 y 1704A-1704N.
En algunas realizaciones, el procesador 1700 también puede incluir un conjunto de una o más unidades de controlador de bus 1716 y un núcleo de agente de sistema 1710. Las una o más unidades controladoras de bus 1716 gestionan un conjunto de buses de periféricos, tales como uno o más buses de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express). El núcleo de agente de sistema 1710 proporciona funcionalidad de gestión para los diversos componentes de procesador. En algunas realizaciones, el núcleo de agente de sistema 1710 incluye uno o más controladores de memoria integrados 1714 para gestionar el acceso a diversos dispositivos de memoria externos (no mostrados).
En algunas realizaciones, uno o más de los núcleos de procesador 1702A-1702N incluyen soporte para múltiples hilos simultáneos. En tal realización, el núcleo de agente de sistema 1710 incluye componentes para coordinar y hacer funcionar los núcleos de procesador 1702A-1702N durante un procesamiento de múltiples hilos. El núcleo de agente de sistema 1710 puede incluir adicionalmente una unidad de control de potencia (PCU), que incluye una lógica y componentes para regular el estado de potencia de los núcleos de procesador 1702A-1702N y el procesador de gráficos 1708.
En algunas realizaciones, el procesador 1700 incluye adicionalmente un procesador de gráficos 1708 para ejecutar operaciones de procesamiento de gráficos. En algunas realizaciones, el procesador de gráficos 1708 se acopla con el conjunto de unidades de caché compartidas 1706 y el núcleo de agente de sistema 1710, incluyendo los uno o más controladores de memoria integrados 1714. En algunas realizaciones, un controlador de visualización 1711 está acoplado con el procesador de gráficos 1708 para controlar una salida del procesador de gráficos a una o más pantallas acopladas. En algunas realizaciones, el controlador de visualización 1711 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 1708 o del núcleo de agente de sistema 1710.
En algunas realizaciones, se usa una unidad de interconexión basada en anillo 1712 para acoplar los componentes internos del procesador 1700. Sin embargo, se puede usar 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 1708 se acopla con la interconexión en anillo 1712 mediante un enlace de E/S 1713.
El enlace de E/S ilustrativo 1713 representa al menos una de múltiples variedades de interconexiones de E/S, incluyendo una interconexión de E/S en paquete que facilita la comunicación entre diversos componentes de
procesador y un módulo de memoria integrado de alto rendimiento 1718, tal como un módulo de eDRAM. En algunas realizaciones, cada uno de los núcleos de procesador 1702A-1702N y el procesador de gráficos 1708 usan módulos de memoria integrados 1718 como una caché de último nivel compartida.
En algunas realizaciones, los núcleos de procesador 1702A-1702N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra realización, los núcleos de procesador 1702A-1702N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 1702A-1702N 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 1702A-1702N son heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de energía relativamente superior se acoplan con uno o más núcleos de potencia que tienen un consumo de energía inferior. Adicionalmente, el procesador 1700 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.
La Figura 18 es un diagrama de bloques de un procesador de gráficos 1800, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento. En algunas realizaciones, el procesador de gráficos se comunica, mediante una interfaz de E/S correlacionada con la memoria, con registros en el procesador de gráficos y con comandos colocados en la memoria de procesador. En algunas realizaciones, el procesador de gráficos 1800 incluye una interfaz de memoria 1814 para acceder a la memoria. La interfaz de memoria 1814 puede ser una interfaz a una memoria local, una o más cachés internas, una o más cachés externas compartidas y/o a una memoria de sistema.
En algunas realizaciones, el procesador de gráficos 1800 también incluye un controlador de visualización 1802 para controlar los datos de salida de visualización a un dispositivo de visualización 1820. El controlador de visualización 1802 incluye hardware para uno o más planos de superposición para la visualización y composición de múltiples capas de elementos de interfaz de usuario o de vídeo. En algunas realizaciones, el procesador de gráficos 1800 incluye un motor de códec de vídeo 1806 para codificar, descodificar o transcodificar medios a, desde o entre uno o más formatos de codificación de medios, incluyendo, pero sin limitación, formatos del Grupo de Expertos en Imágenes en Movimiento (MPEG) tales como MPEG-2, formatos de Codificación de Vídeo Avanzada (AVC) tales como H.264/MPEG-4 AVC, así como de la Sociedad de Ingenieros de Imágenes en Movimiento y de Televisión (SMPTE) 421M/VC-1 y formatos del Grupo Conjunto de Expertos en Fotografía (JPEG) tales como los formatos JPEG y Motion JPEG (MJPEG).
En algunas realizaciones, el procesador de gráficos 1800 incluye un motor de transferencia de imágenes en bloque (BLIT) 1804 para realizar operaciones de rasterizador bidimensionales (2D), incluyendo, por ejemplo, transferencias de bloque de frontera de bits. Sin embargo, en una realización, se realizan operaciones de gráficos 2D usando uno o más componentes del motor de procesamiento de gráficos (GPE) 1810. En algunas realizaciones, el GPE 1810 es un motor de cómputo para realizar operaciones de gráficos, incluyendo operaciones de gráficos tridimensionales (3D) y operaciones de medios.
En algunas realizaciones, el GPE 1810 incluye una canalización de 3D 1812 para realizar operaciones 3D, tales como representar imágenes y escenas tridimensionales usando funciones de procesamiento que actúan sobre formas de primitivas 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización de 3D 1812 incluye elementos de función programable y fija que realizan diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema de 3D/de medios 1815. Aunque la canalización de 3D 1812 se puede usar para realizar operaciones de medios, una realización del GPE 1810 también incluye una canalización de medios 1816 que se usa específicamente para realizar operaciones de medios, tales como post-procesamiento de vídeo y potenciación de imagen.
En algunas realizaciones, la canalización de medios 1816 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 beneficio del motor de códec de vídeo 1806. En algunas realizaciones, la canalización de medios 1816 incluye adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema de 3D/de medios 1815. Los hilos generados realizan cómputos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema de 3D/de medios 1815.
En algunas realizaciones, el subsistema de 3D/de medios 1815 incluye una lógica para ejecutar hilos generados por la canalización de 3D 1812 y la canalización de medios 1816. En una realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema de 3D/de medios 1815, incluyendo una lógica de despacho de hilos para arbitrar y despachar las diversas solicitudes a recursos de ejecución de hilos disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los hilos de 3D y de medios. En algunas realizaciones, el subsistema de 3D/de medios 1815 incluye una o más cachés internas para datos e instrucciones de hilo. En algunas realizaciones, el subsistema también incluye memoria compartida, incluyendo registros y memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
Motor de procesamiento de gráficos
La Figura 19 es un diagrama de bloques de un motor de procesamiento de gráficos 1910 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 1910 es una versión del GPE 1810 mostrado en la Figura 18. Los elementos de la Figura 19 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte del presente documento, pero no se limitan a tal cosa. Por ejemplo, se ilustra la canalización de 3D 1812 y la canalización de medios 1816 de la Figura 18. La canalización de medios 1816 es opcional en algunas realizaciones del GPE 1910 y puede no estar explícitamente incluida dentro del GPE 1910. Por ejemplo, y en al menos una realización, un procesador de medios y/o de imágenes separado se acopla al GPE 1910.
En algunas realizaciones, el GPE 1910 se acopla con o incluye un transmisor por flujo continuo de comandos 1903, que proporciona un flujo de comandos a la canalización de 3D 1812 y/o a las canalizaciones de medios 1816. En algunas realizaciones, el transmisor por flujo continuo de comandos 1903 está acoplado con la memoria, que puede ser una memoria de sistema, o una o más de una memoria caché interna y una memoria caché compartida. En algunas realizaciones, el transmisor por flujo continuo de comandos 1903 recibe comandos desde la memoria y envía los comandos a la canalización de 3D 1812 y/o a la canalización de medios 1816. Los comandos son directivas extraídas de una memoria intermedia en anillo, que almacena comandos para la canalización de 3D 1812 y la canalización de medios 1816. En una realización, la memoria intermedia en anillo puede incluir adicionalmente memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización de 3D 1812 también pueden incluir referencias a datos almacenados en memoria, tales como, pero sin limitación, datos de vértice y de geometría para la canalización de 3D 1812 y/o datos de imagen y objetos de memoria para la canalización de medios 1816. La canalización de 3D 1812 y la canalización de medios 1 81 6 procesan los comandos y datos realizando operaciones mediante una lógica dentro de las canalizaciones respectivas o despachando uno o más hilos de ejecución a una matriz de núcleo de gráficos 1914.
En diversas realizaciones, la canalización de 3D 1812 puede ejecutar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cómputo u otros programas de sombreado, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleo de gráficos 1914. La matriz de núcleo de gráficos 1914 proporciona un bloque unificado de recursos de ejecución. La lógica de ejecución de múltiples propósitos (por ejemplo, unidades de ejecución) dentro de la matriz de núcleo de gráficos 1914 incluye un soporte para diversos lenguajes de sombreador 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 1914 también incluye una lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. En una realización, las unidades de ejecución incluyen adicionalmente una lógica de 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 junto con la lógica de propósito general dentro del núcleo o núcleos de procesador 1607 de la Figura 16 o del núcleo de procesador 1702A-1702N, como en la Figura 17.
Los datos de salida generados por hilos que se ejecutan en la matriz de núcleo de gráficos 1914 pueden emitir datos a la memoria en una memoria intermedia de retorno unificada (URB) 1918. La URB 1918 puede almacenar datos para múltiples hilos. En algunas realizaciones, la URB 1918 puede usarse para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleo de gráficos 1914. En algunas realizaciones, la URB 1918 se puede usar adicionalmente para la sincronización entre hilos en la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de funciones compartidas 1920.
En algunas realizaciones, la matriz de núcleos de gráficos 1914 es ajustable a escala, de modo que la matriz incluye un número variable de núcleos de gráficos, teniendo cada uno un número variable de unidades de ejecución basándose en la potencia objetivo y en el nivel de rendimiento del GPE 1910. En una realización, los recursos de ejecución son dinámicamente ajustables a escala, de manera que los recursos de ejecución pueden habilitarse o deshabilitarse según sea necesario.
La matriz de núcleo de gráficos 1914 se acopla con la lógica de funciones compartidas 1920 que incluye múltiples recursos que se comparten entre los núcleos de gráficos en la matriz de núcleo de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 1920 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleo de gráficos 1914. En diversas realizaciones, la lógica de funciones compartidas 1920 incluye, pero sin limitación, la lógica del muestreador 1921, del cálculo matemático 1922 y de la comunicación entre hilos (ITC) 1923. Adicionalmente, algunas realizaciones implementan una o más cachés 1925 dentro de la lógica de funciones compartidas 1920. 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 1914. En su lugar, una única instanciación de esa función especializada se implementa como una entidad autónoma en la lógica de funciones compartidas 1920 y se comparte entre los recursos de ejecución dentro de la matriz de
núcleo de gráficos 1914. El conjunto preciso de funciones que se comparten entre la matriz de núcleo de gráficos 1914 y se incluyen dentro de la matriz de núcleo de gráficos 1914 varía entre realizaciones.
La Figura 20 es un diagrama de bloques de otra realización de un procesador de gráficos 2000. Los elementos de la Figura 20 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte del presente documento, pero no se limitan a tal cosa.
En algunas realizaciones, el procesador de gráficos 2000 incluye una interconexión en anillo 2002, un extremo frontal de canalización 2004, un motor de medios 2037 y unos núcleos de gráficos 2080A-2080N. En algunas realizaciones, la interconexión en anillo 2 0 0 2 acopla el procesador de gráficos a otras unidades de procesamiento, incluyendo otros procesadores de gráficos o uno o más núcleos de procesador de propósito general. En algunas realizaciones, el procesador de gráficos es uno de muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
En algunas realizaciones, el procesador de gráficos 2000 recibe lotes de comandos mediante la interconexión en anillo 2002. Los comandos entrantes son interpretados por un transmisor por flujo continuo de comandos 2003 en el extremo frontal de canalización 2004. En algunas realizaciones, el procesador de gráficos 2000 incluye una lógica de ejecución ajustable a escala para realizar un procesamiento de geometría 3D y un procesamiento de medios mediante el núcleo o núcleos de gráficos 2080A-2080N. Para los comandos de procesamiento de geometría 3D, el transmisor por flujo continuo de comandos 2003 suministra comandos a la canalización de geometría 2036. Para al menos algunos comandos de procesamiento de medios, el transmisor por flujo continuo de comandos 2003 suministra los comandos a un extremo frontal de vídeo 2034, que se acopla con un motor de medios 2037. En algunas realizaciones, el motor de medios 2037 incluye un motor de calidad de vídeo (VQE) 2030 para el post-procesamiento de vídeo y de imagen y un motor de codificación/descodificación (MFX) de múltiples formatos 2033 para proporcionar una codificación y descodificación de datos de medios acelerada por hardware. En algunas realizaciones, la canalización de geometría 2036 y el motor de medios 2037 generan, cada uno, hilos de ejecución para los recursos de ejecución de hilos proporcionados por al menos un núcleo de gráficos 2080A.
En algunas realizaciones, el procesador de gráficos 2000 incluye recursos de ejecución de hilos ajustables a escala que cuentan con los núcleos modulares 2080A-2080N (denominados, en ocasiones, cortes de núcleo), teniendo cada uno múltiples subnúcleos 2050A-550N, 2060A-2060N (denominados, en ocasiones, subcortes de núcleo). En algunas realizaciones, el procesador de gráficos 2000 puede tener cualquier número de núcleos de gráficos 2080A a 2080N. En algunas realizaciones, el procesador de gráficos 2000 incluye un núcleo de gráficos 2080A que tiene al menos un primer subnúcleo 2050A y un segundo subnúcleo 2060A. En otras realizaciones, el procesador de gráficos es un procesador de baja potencia con un único subnúcleo (por ejemplo, 2050A). En algunas realizaciones, el procesador de gráficos 2000 incluye múltiples núcleos de gráficos 2080A-2080N, incluyendo cada uno un conjunto de primeros subnúcleos 2050A-2050N y un conjunto de segundos subnúcleos 2060A-2060N. Cada subnúcleo del conjunto de primeros subnúcleos 2050A-2050N incluye al menos un primer conjunto de unidades de ejecución 2052A-2052N y muestreadores de medios/texturas 2054A-2054N. Cada subnúcleo del conjunto de segundos subnúcleos 2060A-2060N incluye al menos un segundo conjunto de unidades de ejecución 2062A-2062N y muestreadores 2064A-2064N. En algunas realizaciones, cada subnúcleo 2050A-2050N, 2060A-2060N comparte un conjunto de recursos compartidos 2070A-2070N. En algunas realizaciones, los recursos compartidos incluyen una memoria caché compartida y una lógica de operación de píxel. También se pueden incluir otros recursos compartidos en las diversas realizaciones del procesador de gráficos.
Unidades de ejecución
La Figura 21 ilustra la lógica de ejecución de hilos 2100 que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones de un GPE. Los elementos de la Figura 21 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte del presente documento, pero no se limitan a tal cosa.
En algunas realizaciones, la lógica de ejecución de hilos 2100 incluye un procesador de sombreado 2102, un despachador de hilos 2104, una caché de instrucciones 2106, una matriz de unidades de ejecución ajustable a escala que incluye una pluralidad de unidades de ejecución 2108A-2108N, un muestreador 2110, una caché de datos 2112 y un puerto de datos 2114. 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 2108A, 2108B, 2108C, 2108D a 2108N-1 y 2108N) 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 2 1 0 0 incluye una o más conexiones a memoria, tales como una memoria de sistema o memoria caché, a través de una o más de la caché de instrucciones 2106, el puerto de datos 2114, el muestreador 2110 y las unidades de ejecución 2108A-2108N. En algunas realizaciones, cada unidad de ejecución (por ejemplo, 2108A) es una unidad computacional de propósito general programable autónoma que es capaz de 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 2108A-2108N es ajustable a escala para incluir cualquier número de unidades de ejecución individuales.
En algunas realizaciones, las unidades de ejecución 2108A-2108N se usan principalmente para ejecutar programas de sombreado. Un procesador de sombreado 2102 puede procesar los diversos programas de sombreado y despachar hilos de ejecución asociados con los programas de sombreado mediante un despachador de hilos 2104. En una realización, el despachador de hilos incluye una lógica para arbitrar solicitudes de iniciación de un 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 2108A-2108N. Por ejemplo, la canalización de geometría (por ejemplo, 2036 de la Figura 20) puede despachar sombreadores de vértices, de teselación o de geometría a la lógica de ejecución de hilos 2 1 0 0 (la Figura 21) para su procesamiento. En algunas realizaciones, el despachador de hilos 2104 también puede procesar solicitudes de generación de hilos en tiempo de ejecución desde los programas de sombreado en ejecución.
En algunas realizaciones, las unidades de ejecución 2108A-2108N 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 de sombreado desde bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traducción mínima. Las unidades de ejecución soportan un procesamiento de vértices y de geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), un procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y un procesamiento de propósito general (por ejemplo, sombreadores de cómputo y de medios). Cada una de las unidades de ejecución 2108A-2108N es capaz de múltiples emisiones de ejecución de múltiples datos de instrucción única (SIMD), y un funcionamiento de múltiples hilos habilita un entorno de ejecución eficiente frente a accesos de memoria de latencia superior. Cada hilo de hardware dentro de cada unidad de ejecución tiene un archivo de registro de alto ancho de banda dedicado y un estado de hilo independiente asociado. La ejecución es de múltiples emisiones por reloj a canalizaciones capaces de realizar operaciones de enteros, coma flotante de precisión sencilla y doble, capacidad de bifurcación de SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones misceláneas. Mientras se esperan datos desde la memoria o una de las funciones compartidas, una lógica de dependencia dentro de las unidades de ejecución 2108A-2108N 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 de sombreado, incluyendo un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 2108A-2108N opera sobre matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución" o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso, enmascaramiento y control de flujo de elementos de datos dentro de las instrucciones. El número de canales puede ser independiente del número de Unidades Aritméticas Lógicas (ALU) o Unidades de Coma Flotante (FPU) físicas para un procesador de gráficos particular. En algunas realizaciones, las unidades de ejecución 2108A-2108N soportan tipos de datos enteros y de coma flotante.
El conjunto de instrucciones de la unidad de ejecución incluye instrucciones de SIMD. Los diversos elementos de datos se pueden almacenar como un tipo de datos empaquetados en un registro y la unidad de ejecución procesará los diversos elementos basándose en el tamaño de datos de los elementos. Por ejemplo, cuando se opera sobre un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera sobre el vector como cuatro elementos de datos empaquetados de 64 bits separados (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados de 32 bits separados (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados de 16 bits separados (elementos de datos de tamaño de palabra (W)) o treinta y dos elementos de datos de 8 bits separados (elementos de datos de tamaño de byte (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
Una o más cachés de instrucciones internas (por ejemplo, 2106) se incluyen en la lógica de ejecución de hilos 2100 para almacenar en caché instrucciones de hilo para las unidades de ejecución. En algunas realizaciones, se incluyen una o más cachés de datos (por ejemplo, 2 1 1 2 ) para almacenar en caché datos de hilo durante la ejecución de hilo. En algunas realizaciones, se incluye un muestreador 2110 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunas realizaciones, el muestreador 2110 incluye una funcionalidad de muestreo de textura o de medios especializada para procesar datos de textura o de medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, las canalizaciones de gráficos y de medios envían solicitudes de iniciación de hilo a la lógica de ejecución de hilos 2100 mediante una lógica de generación y de despacho de hilos. Una vez que se ha procesado y rasterizado un grupo de objetos geométricos para obtener datos de píxel, se invoca una lógica de procesador de píxeles (por ejemplo, lógica de sombreado de píxeles, lógica de sombreado de fragmentos, etc.) dentro del procesador de sombreado 2 1 0 2 para computar adicionalmente información de salida y hacer que se escriban resultados para emitir superficies (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de estarcido, etc.). En algunas realizaciones, un sombreador de píxeles o un sombreador de fragmentos calcula los valores de los diversos atributos de vértice que se van a interpolar a lo largo del objeto rasterizado. En
algunas realizaciones, una lógica de procesador de píxeles dentro del procesador de sombreado 2 1 0 2 ejecuta entonces un programa de sombreado de píxeles o de fragmentos suministrado por una interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreado, el procesador de sombreado 2102 despacha hilos a una unidad de ejecución (por ejemplo, 2108A) mediante el despachador de hilos 2104. En algunas realizaciones, el sombreador de píxeles 2 1 0 2 usa una lógica de muestreo de textura en el muestreador 2 1 1 0 para acceder a datos de textura en correlaciones de textura almacenadas en memoria. Unas operaciones aritméticas sobre los datos de textura y los datos de geometría de entrada computan datos de color de píxel para cada fragmento geométrico, o descartan el procesamiento adicional de uno o más píxeles.
En algunas realizaciones, el puerto de datos 2114 proporciona un mecanismo de acceso de memoria para que la lógica de ejecución de hilos 2 1 0 0 emita datos procesados a la memoria para su procesamiento en una canalización de salida de procesador de gráficos. En algunas realizaciones, el puerto de datos 2114 incluye o se acopla a una o más memorias caché (por ejemplo, la caché de datos 2 1 1 2 ) para almacenar en caché datos para un acceso de memoria mediante el puerto de datos.
La Figura 22 es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos 2200 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 cuadros 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 2200 descrito e ilustrado son macro-instrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a 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 de procesador de gráficos soportan de manera nativa instrucciones en un formato de instrucción de 128 bits 2210. Un formato de instrucción compactado de 64 bits 2230 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 2210 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 2230. Las instrucciones nativas disponibles en el formato de 64 bits 2230 varían según la realización. En algunas realizaciones, la instrucción se compacta en parte usando un conjunto de valores de índice en un campo de índice 2213. El hardware de la unidad de ejecución consulta 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 2210.
Para cada formato, el código de operación de instrucción 2212 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 lo largo de los múltiples elementos de datos de cada operando. Por ejemplo, en respuesta a una instrucción de suma, la unidad de ejecución realiza una operación de suma simultánea a lo largo de cada canal de color que representa un elemento de textura o un 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 2214 habilita el control sobre ciertas opciones de ejecución, tales como la selección de canales (por ejemplo, predicación) y el orden de canal de datos (por ejemplo, referenciación). Para instrucciones en el formato de instrucción de 128 bits 2210, un campo de tamaño de ejecución 2216 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 2216 no está disponible para su uso en el formato de instrucción compacto de 64 bits 2230.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 2220, src1 2222 y un destino 2218. En algunas realizaciones, las unidades de ejecución soportan instrucciones de destino dual, donde uno de los destinos está implícito. Las instrucciones de manipulación de datos pueden tener un tercer operando de origen (por ejemplo, SRC22224), donde el código de operación de instrucción 2212 determina el número de operandos de origen. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de manera rígida) pasado con la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 2210 incluye un campo de modo de acceso/dirección 2226 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 es proporcionada directamente por bits en la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 2210 incluye un campo de modo de dirección/acceso 2226, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una realización, el modo de acceso se usa 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 usar un direccionamiento alineado por byte para los operandos de origen y de destino y, cuando está en un segundo modo, la instrucción puede usar un direccionamiento alineado por 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 2226 determina si la instrucción va a usar un direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, unos bits de la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se usa un modo de direccionamiento de registro indirecto, la dirección de registro de uno o más operandos se puede computar basándose en un valor de registro de dirección y un campo inmediato de dirección en la instrucción.
En algunas realizaciones, las instrucciones se agrupan basándose en los campos de bits del código de operación 2212 para simplificar la descodificación de código de operación 2240. 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 simplemente un ejemplo. En algunas realizaciones, un grupo de código de operación de movimiento y de lógica 2242 incluye instrucciones de movimiento y de lógica de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas realizaciones, el grupo de código de operación de movimiento y de lógica 2242 comparte los cinco bits más significativos (MSB), donde las instrucciones de movimiento (mov) están en forma de 0000xxxxb y las instrucciones de lógica están en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 2244 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 2246 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, espera, envío) en forma de 001 1 xxxxb (por ejemplo, 0x30). Un grupo de instrucciones de cálculo matemático paralelo 2248 incluye instrucciones aritméticas a nivel de componente (por ejemplo, suma, multiplicación (mult)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cálculo matemático paralelo 2248 realiza las operaciones aritméticas en paralelo a lo largo de canales de datos. El grupo de cálculo matemático vectorial 2250 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo de cálculo matemático vectorial realiza una aritmética tal como cálculos de producto escalar sobre operandos de vectores.
Canalización de gráficos
La Figura 23 es un diagrama de bloques de otra realización de un procesador de gráficos 2300. Los elementos de la Figura 23 que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte del presente documento, pero no se limitan a tal cosa.
En algunas realizaciones, el procesador de gráficos 2300 incluye una canalización de gráficos 2320, una canalización de medios 2330, un motor de visualización 2340, una lógica de ejecución de hilos 2350 y una canalización de salida de representación 2370. En algunas realizaciones, el procesador de gráficos 2300 es un procesador de gráficos dentro de un sistema de procesamiento de múltiples núcleos que incluye uno o más núcleos de procesamiento de propósito general. El procesador de gráficos es controlado por escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 2300 mediante una interconexión en anillo 2302. En algunas realizaciones, la interconexión en anillo 2302 acopla el procesador de gráficos 2300 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 2302 son interpretados por un transmisor por flujo continuo de comandos 2303, que suministra instrucciones a componentes individuales de la canalización de gráficos 2320 o la canalización de medios 2330.
En algunas realizaciones, el transmisor por flujo continuo de comandos 2303 dirige la operación de un extractor de vértices 2305 que lee datos de vértice desde memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor por flujo continuo de comandos 2303. En algunas realizaciones, el extractor de vértices 2305 proporciona datos de vértice a un sombreador de vértices 2307, que realiza operaciones de transformación y de iluminación de espacio de coordenadas en cada vértice. En algunas realizaciones, el extractor de vértices 2305 y el sombreador de vértices 2307 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a las unidades de ejecución 2352A-2352B mediante un despachador de hilos 2331.
En algunas realizaciones, las unidades de ejecución 2352A-2352B son una matriz de procesadores de vectores que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunas realizaciones, las unidades de ejecución 2352A-2352B tienen una caché de L12351 anexada que es específica para cada matriz o que se comparte entre las matrices. La caché se puede configurar como una caché de datos, una caché de instrucciones o una única caché que se subdivide para contener datos e instrucciones en diferentes subdivisiones.
En algunas realizaciones, la canalización de gráficos 2320 incluye componentes de teselado para realizar un teselado acelerado por hardware de objetos 3D. En algunas realizaciones, un sombreador de casco programable 811 configura las operaciones de teselado. Un sombreador de dominio programable 817 proporciona una evaluación de extremo trasero de la salida de teselado. Un teselador 2313 opera en la dirección del sombreador de casco 2311 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 gráficos 2320. En algunas realizaciones, si no se usa el teselado, pueden sortearse los componentes de teselado (por ejemplo, el sombreador de casco 2311, el teselador 2313 y el sombreador de dominio 2317).
En algunas realizaciones, unos objetos geométricos completos pueden ser procesados por un sombreador de geometría 2319 mediante uno o más hilos despachados a las unidades de ejecución 2352A-2352B, o puede avanzar directamente al recortador 2329. En algunas realizaciones, el sombreador de geometría opera sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en fases previas de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 2319 recibe una entrada desde el sombreador de vértices 2307. En algunas realizaciones, el sombreador de geometría 2319 se puede programar mediante un programa de sombreado de geometría para realizar un teselado de geometría si las unidades de teselado están deshabilitadas.
Antes de la rasterización, un recortador 2329 procesa datos de vértice. El recortador 2329 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y de sombreador de geometría. En algunas realizaciones, un componente de prueba de rasterizador y de profundidad 2373 en la canalización de salida de representación 2370 despacha sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxel. En algunas realizaciones, la lógica de sombreado de píxeles se incluye en la lógica de ejecución de hilos 2350. En algunas realizaciones, una aplicación puede sortear el componente de prueba de rasterizador y de profundidad 2373 y acceder a datos de vértice sin rasterizar mediante una unidad de salida de flujo 2323.
El procesador de gráficos 2300 tiene un bus de interconexión, un tejido de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y de mensajes entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 2352A-2352B y la caché o cachés 2351 asociadas, el muestreador de textura y de medios 2354 y la caché de textura/muestreador 2358 se interconectan mediante un puerto de datos 2356 para realizar un acceso de memoria y comunicarse con componentes de canalización de salida de representación del procesador. En algunas realizaciones, el muestreador 2354, las cachés 2351,2358 y las unidades de ejecución 2352A-2352B tienen, cada uno, rutas de acceso de memoria separadas.
En algunas realizaciones, la canalización de salida de representación 2370 contiene un componente de prueba de rasterizador y de profundidad 2373 que convierte objetos basados en vértices en una representación asociada basada en píxeles. En algunas realizaciones, la lógica de rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de líneas y de triángulos de función fija. Una caché de representación 2378 y una caché de profundidad 2379 asociadas también están disponibles en algunas realizaciones. Un componente de operaciones de píxel 2377 realiza operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxel asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) son realizadas por el motor 2D 2341, o son sustituidas en el momento de la visualización por el controlador de visualización 2343 usando planos de visualización de superposición. En algunas realizaciones, está disponible una caché de L3 compartida 2375 para todos los componentes de gráficos, permitiendo la compartición de datos sin el uso de memoria de sistema principal.
En algunas realizaciones, la canalización de medios de procesador de gráficos 2330 incluye un motor de medios 2337 y un extremo frontal de vídeo 2334. En algunas realizaciones, el extremo frontal de vídeo 2334 recibe comandos de canalización desde el transmisor por flujo continuo de comandos 2303. En algunas realizaciones, la canalización de medios 2330 incluye un transmisor por flujo continuo de comandos separado. En algunas realizaciones, el extremo frontal de vídeo 2334 procesa comandos de medios antes de enviar el comando al motor de medios 2337. En algunas realizaciones, el motor de medios 2337 incluye una funcionalidad de generación de hilos para generar hilos para despacharlos a la lógica de ejecución de hilos 2350 mediante el despachador de hilos 2331.
En algunas realizaciones, el procesador de gráficos 2300 incluye un motor de visualización 2340. En algunas realizaciones, el motor de visualización 2340 es externo al procesador 2300 y se acopla con el procesador de gráficos mediante la interconexión en anillo 2302, o algún otro bus o tejido de interconexión. En algunas realizaciones, el motor de visualización 2340 incluye un motor 2D 2341 y un controlador de visualización 2343. En algunas realizaciones, el motor de visualización 2340 contiene una lógica de propósito especial capaz de funcionar independientemente de la canalización de 3D. En algunas realizaciones, el controlador de visualización 2343 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en sistema, como en un ordenador portátil, o un dispositivo de visualización externo anexado mediante un conector de dispositivo de visualización.
En algunas realizaciones, la canalización de gráficos 2320 y la canalización de medios 2330 se pueden configurar para realizar operaciones basándose en múltiples interfaces de programación de gráficos y de medios y no son específicas de ninguna interfaz de programación de aplicaciones (API) concreta. En algunas realizaciones, el software de controlador para el procesador de gráficos traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. En algunas realizaciones, se proporciona soporte para la Biblioteca de Gráficos Abierta (OpenGL), Lenguaje Informático Abierto (OpenCL) y/o API de gráficos y de cómputo Vulkan, todas ellas del grupo Khronos. En algunas realizaciones, también se puede proporcionar soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas realizaciones, se puede soportar una combinación de estas bibliotecas. También se puede proporcionar 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 de 3D compatible si se puede hacer una correlación 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
La Figura 24A es un diagrama de bloques que ilustra un formato de orden de procesador de gráficos 2400 de acuerdo con algunas realizaciones. La Figura 24B es un diagrama de bloques que ilustra una secuencia de orden de procesador de gráficos 2410 de acuerdo con una realización. Los cuadros con línea continua en la Figura 24A ilustran los componentes que se incluyen, en general, en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de los comandos de gráficos. El formato de comando de procesador de gráficos 2400 ilustrativo de la Figura 24A incluye campos de datos para identificar un cliente objetivo 2402 del comando, un código de operación (código de op.) de comando 2404 y el campo de datos 2406 relevante para el comando. También se incluye un subcódigo de operación 2405 y un tamaño de comando 2408 en algunos comandos.
En algunas realizaciones, el cliente 2402 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 de cliente de procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad de representación, una unidad de 2D, una unidad de 3D y una unidad de medios. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que el comando ha sido recibido por la unidad de cliente, la unidad de cliente lee el código de operación 2404 y, si está presente, el subcódigo de operación 2405 para determinar la operación a realizar. La unidad de cliente realiza el comando usando información en el campo de datos 2406. Para algunos comandos, se espera que un tamaño de comando explícito 2408 especifique el tamaño del comando. En algunas realizaciones, el analizador de comandos determina automáticamente el tamaño de al menos algunos de los comandos basándose en el código de operación de comando. En algunas realizaciones, los comandos se alinean mediante múltiplos de una palabra doble.
El diagrama de flujo en la Figura 24B muestra una secuencia de comandos de procesador de gráficos 2410 ilustrativa. En algunas realizaciones, el software o firmware de un sistema de procesamiento de datos que cuenta con una realización de un procesador de gráficos usa una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra y se describe una secuencia de comandos de muestra solo a fines de ejemplo, debido a que las realizaciones no se limitan a estos comandos específicos o a esta secuencia de comandos. Además, los comandos pueden emitirse como un lote de comandos en una secuencia de comandos, de modo que el procesador de gráficos procesará la secuencia de comandos de manera al menos parcialmente concurrente.
En algunas realizaciones, la secuencia de comandos de procesador de gráficos 2410 puede comenzar con un comando de vaciado de canalización 2412 para hacer que cualquier canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización de 3D 2422 y la canalización de medios 2424 no funcionan de manera concurrente. El vaciado de canalización se realiza para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de canalización, el analizador de comandos para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las cachés de lectura relevantes. Opcionalmente, cualquier dato en la caché de representación que se marque como 'sucio' se puede vaciar a memoria. En algunas realizaciones, el comando de vaciado de canalización 2412 se puede usar para la sincronización de canalización o antes de poner el procesador de gráficos en un estado de baja potencia.
En algunas realizaciones, se usa un comando de selección de canalización 2413 cuando una secuencia de comandos requiere que el procesador de gráficos conmute explícitamente entre canalizaciones. En algunas realizaciones, se requiere un comando de selección de canalización 2413 solo 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 2412 inmediatamente antes de una conmutación de canalización mediante el comando de selección de canalización 2413.
En algunas realizaciones, un comando de control de canalización 2414 configura una canalización de gráficos para su funcionamiento y se usa para programar la canalización de 3D 2422 y la canalización de medios 2424. En algunas realizaciones, el comando de control de canalización 2414 configura el estado de canalización para la canalización activa. En una realización, el comando de control de canalización 2414 se usa para la sincronización de canalización y para borrar datos de una o más memorias caché dentro de la canalización activa antes de procesar un lote de comandos.
En algunas realizaciones, los comandos de estado de memoria intermedia de retorno 2416 se usan para configurar un conjunto de memorias intermedias de retorno para que las canalizaciones respectivas escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o más memorias intermedias de retorno en las que las operaciones escriben datos intermedios durante el procesamiento. En algunas realizaciones, el procesador de gráficos también usa una o más memorias intermedias de retorno para almacenar datos de salida y para realizar una comunicación a través de hilos. En algunas realizaciones, el estado de memoria intermedia de retorno
2416 incluye seleccionar el tamaño y el número de memorias intermedias de retorno que hay 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 2420, la secuencia de comandos se adapta a la canalización de 3D 2422 comenzando con el estado de canalización de 3D 2430, o a la canalización de medios 2424 comenzando en el estado de canalización de medios 2440.
Los comandos para configurar el estado de canalización de 3D 2430 incluyen comandos de ajuste de estado de 3D para el estado de memoria intermedia de vértice, 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 han de configurarse antes de que se procesen los comandos de primitiva 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en uso. En algunas realizaciones, los comandos del estado de canalización de 3D 2430 también son capaces de deshabilitar o sortear selectivamente ciertos elementos de canalización si esos elementos no se van a usar.
En algunas realizaciones, el comando de la primitiva 2432 3D se usa para enviar primitivas 3D para que sean procesadas por la canalización de 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos mediante el comando de la primitiva 24323D se reenvían a la función de extracción de vértices en la canalización de gráficos. La función de extracción de vértices usa los datos de comando de la primitiva 3D 2432 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. En algunas realizaciones, el comando de la primitiva 3D 2432 se usa para realizar operaciones de vértice sobre primitivas 3D mediante sombreadores de vértices. Para procesar sombreadores de vértices, la canalización de 3D 2422 despacha hilos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
En algunas realizaciones, la canalización de 3D 2422 se desencadena mediante un comando o evento de ejecución 2434. En algunas realizaciones, una escritura de registro desencadena una ejecución de comando. En algunas realizaciones, la ejecución se desencadena mediante un comando 'ir' o 'poner en marcha' en la secuencia de comandos. En una realización, la ejecución de comando se desencadena usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La canalización de 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez que se han completado las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles da color a los píxeles resultantes. También se pueden incluir 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 2410 sigue la ruta de la canalización de medios 2424 cuando se realizan operaciones de medios. En general, el uso específico y manera específicos de programación para la canalización de medios 2424 depende de las operaciones de medios o de cómputo a realizar. Se pueden descargar operaciones de descodificación de medios específicas a la canalización de medios durante la descodificación de medios. En algunas realizaciones, la canalización de medios también se puede sortear y la descodificación de medios se puede realizar, 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 operaciones de la unidad del procesador de gráficos de propósito general (GPGPU), donde el procesador de gráficos se usa para realizar operaciones vectoriales de SIMD usando programas de sombreado computacional que no están relacionados explícitamente con la representación de primitivas de gráficos.
En algunas realizaciones, la canalización de medios 2424 se configura de una manera similar a la de la canalización de 3D 2422. Un conjunto de comandos para configurar el estado de canalización de medios 2440 se despacha o se coloca en una cola de comandos antes de los comandos de objeto de medios 2442. En algunas realizaciones, los comandos para el estado de canalización de medios 2440 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 2440 habilitan que el uso de uno o más punteros sean soportados por elementos de estado "indirectos" que contienen un lote de ajustes de estado.
En algunas realizaciones, los comandos de objeto de medios 2442 suministran punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias de memoria que contienen datos de vídeo que hay que procesar. En algunas realizaciones, todos los estados de canalización de medios han de ser válidos antes de emitir un comando de objeto de medios 2442. Una vez que se ha configurado el estado de canalización y los comandos de objeto de medios 2442 se han puesto en cola, la canalización de medios 2424 se desencadena mediante un comando de ejecución 2444 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida desde la canalización de medios 2424 puede post-procesarse entonces mediante operaciones proporcionadas por la canalización de 3D 2422 o la canalización de medios 2424. 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
La Figura 25 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos 2500 de acuerdo con algunas realizaciones. En algunas realizaciones, la arquitectura de software incluye una aplicación de gráficos 3D 2510, un sistema operativo 2520 y al menos un procesador 2530. En algunas realizaciones, el procesador 2530 incluye un procesador de gráficos 2532 y uno o más núcleos de procesador de propósito general 2534. La aplicación de gráficos 2510 y el sistema operativo 2520 se ejecutan, cada uno, en la memoria de sistema 2550 del sistema de procesamiento de datos.
En algunas realizaciones, la aplicación de gráficos 3D 2510 contiene uno o más programas de sombreado que incluyen las instrucciones de sombreador 2512. 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 también incluye las instrucciones ejecutables 2514 en un lenguaje máquina adecuado para su ejecución por el núcleo o núcleos de procesador de propósito general 2534. La aplicación también incluye los objetos de gráficos 2516 definidos por datos de vértice.
En algunas realizaciones, el sistema operativo 2520 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo de tipo UNIX de propiedad exclusiva o un sistema operativo de tipo UNIX de código abierto que usa una variante del núcleo de Linux. El sistema operativo 2520 puede soportar una API de gráficos 2522 tal como la API de Direct3D, la API de OpenGL o la API de Vulkan. Cuando está en uso la API de Direct3D, el sistema operativo 2520 usa un compilador de sombreador de extremo frontal 2524 para compilar cualquier instrucción de sombreador 2512 en HLSL a un lenguaje de sombreador de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede realizar una precompilación de sombreador. En algunas realizaciones, los sombreadores de alto nivel se compilan a sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 2510. En algunas realizaciones, las instrucciones de sombreador 2512 se proporcionan en una forma intermedia, tal como una versión de la representación intermedia portátil convencional (SPIR) usada por la API de Vulkan.
En algunas realizaciones, el controlador de gráficos de modo de usuario 2526 contiene un compilador de sombreador de extremo trasero 2527 para convertir las instrucciones de sombreador 2512 en una representación específica de hardware. Cuando está en uso la API de OpenGL, las instrucciones de sombreador 2512 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 2526 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 2526 usa las funciones de modo de núcleo de sistema operativo 2528 para comunicarse con un controlador de gráficos de modo de núcleo 2529. En algunas realizaciones, el controlador de gráficos de modo de núcleo 2529 se comunica con el procesador de gráficos 2532 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 una lógica diversa 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 pueden almacenarse en un medio legible por máquina tangible como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que fabrican el circuito integrado. El circuito integrado se puede fabricar de manera que el circuito realiza operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
La Figura 26 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 2600 que puede usarse para fabricar un circuito integrado para realizar operaciones de acuerdo con una realización. El sistema de desarrollo de núcleo de IP 2600 se puede usar para generar diseños modulares reutilizables que pueden incorporarse en un diseño más grande o usarse para construir todo un circuito integrado (por ejemplo, un circuito integrado de SoC). Una instalación de diseño 2630 puede generar una simulación de software 2610 de un diseño de núcleo de IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). El software de simulación 2610 se puede usar para diseñar, someter a prueba y verificar el comportamiento del núcleo de IP usando un modelo de simulación 2612. El modelo de simulación 2612 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. Se puede crear o sintetizar entonces un diseño de nivel de transferencia de registro (RTL) 2615 a partir del modelo de simulación 2612. El diseño de RTL 2615 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registros de hardware, incluyendo la lógica asociada realizada usando las señales digitales modeladas. Además de un diseño de RTL 2615, también se pueden crear, diseñar o sintetizar diseños de nivel inferior a nivel de lógica o a nivel de transistores. Por lo tanto, los detalles particulares del diseño y simulación inicial pueden variar.
El diseño de RTL 2615, o un equivalente, puede ser sintetizado adicionalmente por la instalación de diseño para obtener un modelo de hardware 2620, 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 someter a prueba adicionalmente para verificar el diseño de núcleo de IP. El diseño de núcleo de IP se puede almacenar para su entrega a una instalación de fabricación de terceros 2665 usando la memoria no volátil 2640 (por ejemplo, disco duro, memoria flash o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo de IP se puede transmitir (por ejemplo, por Internet) a través de una conexión cableada 2650 o una conexión inalámbrica 2660. La instalación de fabricación 2665 puede fabricar entonces un circuito integrado que se basa, al menos en parte, en el diseño de núcleo de IP. El circuito integrado fabricado puede configurarse para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
Circuito integrado de sistema en un chip ilustrativo
Las Figuras 27-29 ilustran circuitos integrados ilustrativos y procesadores de gráficos asociados que pueden fabricarse usando uno o más núcleos de IP, de acuerdo con diversas realizaciones descritas en el presente documento. Además de lo que se ilustra, se pueden incluir otros circuitos y lógica, incluyendo procesadores/núcleos de gráficos adicionales, controladores de interfaz de periféricos o núcleos de procesador de propósito general.
La Figura 27 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo 2700 que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El circuito integrado 2700 ilustrativo incluye uno o más procesador o procesadores de aplicaciones 2705 (por ejemplo, unas CPU), al menos un procesador de gráficos 2710, y puede incluir adicionalmente un procesador de imágenes 2715 y/o un procesador de vídeo 2720, 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 2700 incluye una lógica de bus o de periféricos que incluye un controlador de USB 2725, un controlador de UART 2730, un controlador de SPI/SDIO 2735 y un controlador de I2S/I2C 2740. Adicionalmente, el circuito integrado puede incluir un dispositivo de visualización 2745 acoplado a uno o más de un controlador de interfaz multimedios de alta definición (HDMI) 2750 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 2755. El almacenamiento puede ser proporcionado por un subsistema de memoria flash 2760 que incluye una memoria flash y un controlador de memoria flash. La interfaz de memoria se puede proporcionar mediante un controlador de memoria 2765 para el acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 2770.
La Figura 28 es un diagrama de bloques que ilustra un procesador de gráficos 2810 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. El procesador de gráficos 2810 puede ser una variante del procesador de gráficos 2710 de la Figura 27. El procesador de gráficos 2810 incluye un procesador de vértices 2805 y uno o más procesadores de fragmentos 2815A-2815N (por ejemplo, 2815A, 2815B, 2815C, 2815D a 2815N-1 y 2815N). El procesador de gráficos 2810 puede ejecutar diferentes programas de sombreado mediante una lógica separada, de modo que el procesador de vértices 2805 está optimizado para ejecutar operaciones para programas de sombreado de vértices, mientras que los uno o más procesadores de fragmentos 2815A-2815N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreado de fragmentos o de píxeles. El procesador de vértices 2805 realiza la fase de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértice. El procesador o procesadores de fragmentos 2815A-2815N usan los datos de primitiva y de vértice generados por el procesador de vértices 2805 para producir una memoria intermedia de tramas que se visualiza en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 2815A-2815N están optimizados para ejecutar programas de sombreado de fragmentos según lo previsto en la API de OpenGL, que se pueden usar para realizar operaciones similares como un programa de sombreado de píxeles según lo previsto en la API de Direct 3D.
El procesador de gráficos 2810 incluye adicionalmente una o más unidades de gestión de memoria (MMU) 2820A-2820B, caché o cachés 2825A-2825B e interconexión o interconexiones de circuito 2830A-2830B. Las una o más MMU 2820A-2820B prevén una correlación de dirección virtual a física para el procesador de gráficos 2810, incluso para el procesador de vértices 2805 y/o el procesador o procesadores de fragmentos 2815A-2815N, 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 las una o más o cachés 2825A-2825B. En una realización, la una o más MMU 2820A-2820B pueden sincronizarse con otras MMU dentro del sistema, incluyendo una o más MMU asociadas con el uno o más procesadores de aplicaciones 2705, procesadores de imágenes 2715 y/o procesador de vídeo 2720 de la Figura 27, de modo que cada procesador 2705-2720 puede participar en un sistema de memoria virtual compartida o unificada. Las una o más interconexiones de circuito 2830A-2830B habilitan la interacción del procesador de gráficos 2810 con otros núcleos de IP dentro del SoC, o bien mediante un bus interno del SoC o bien mediante una conexión directa, de acuerdo con unas realizaciones.
La Figura 29 es un diagrama de bloques que ilustra un procesador de gráficos 2910 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 2910 puede ser una variante del procesador de gráficos 2710 de la Figura 27. El procesador
de gráficos 2910 incluye las una o más MMU 2820A-2820B, caché o cachés 2825A-2825B e interconexión o interconexiones de circuito 2830A-2830B del circuito integrado 2800 de la Figura 28.
El procesador de gráficos 2910 incluye uno o más núcleos de sombreador 2915A-2915N (por ejemplo, 2915A, 2915B, 2915C, 2915D, 2915E, 2915F a 2915n -1 y 2915N), lo que prevé una arquitectura de núcleo de sombreador unificada en la que un único núcleo o tipo o núcleo puede ejecutar todos los tipos de código de sombreado programable, incluyendo un código de programa de sombreado para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cómputo. El número exacto de núcleos de sombreador presentes puede variar entre realizaciones e implementaciones. Adicionalmente, el procesador de gráficos 2910 incluye un gestor de tareas entre núcleos 2905, que actúa como un despachador de hilos para despachar hilos de ejecución a uno o más núcleos de sombreador 2915A-2915N y una unidad de teselado 2918 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.
Las siguientes cláusulas y/o ejemplos se refieren a realizaciones específicas o a ejemplos de las mismas. Los detalles específicos de los ejemplos se pueden usar en cualquier lugar de una o más realizaciones. Las diversas características de las diferentes realizaciones o ejemplos pueden combinarse de manera diversa con algunas características incluidas y otras excluidas para adecuarse a una diversidad de aplicaciones diferentes. Los ejemplos pueden incluir 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 son realizadas por una máquina, hacen que la máquina realice actos del método, o de un aparato o sistema de acuerdo con realizaciones y ejemplos descritos en el presente documento. Diversos componentes pueden ser un medio para realizar las operaciones o funciones descritas.
Una realización prevé un aparato de cómputo para realizar operaciones de aprendizaje automático, comprendiendo el aparato de cómputo una unidad de extracción para extraer una única instrucción que tiene múltiples operandos de entrada, teniendo los múltiples operandos una longitud en bits desigual, incluyendo los múltiples operandos una primera entrada que tiene una primera longitud en bits y una segunda entrada que tiene una segunda longitud en bits; una unidad de descodificación para descodificar la única instrucción en una instrucción descodificada; una unidad de longitud de operando para determinar una longitud en bits más pequeña de la primera longitud en bits y la segunda longitud en bits; y una unidad de cómputo para realizar una operación matricial sobre los múltiples operandos para generar un valor de salida que tenga una longitud en bits igual a la longitud en bits más pequeña.
Las realizaciones descritas en el presente documento se refieren a configuraciones específicas de hardware, tales como circuitos integrados específicos de la aplicación (ASIC), configuradas para realizar ciertas operaciones o que tienen una funcionalidad predeterminada. Tales dispositivos electrónicos habitualmente incluyen un conjunto de uno o más procesadores acoplados a uno o más de otros componentes, tales como uno o más dispositivos de almacenamiento (medios de almacenamiento legibles por máquina no transitorios), dispositivos de entrada/salida de usuario (por ejemplo, un teclado, una pantalla táctil y/o una pantalla) y conexiones de red. El acoplamiento del conjunto de procesadores y otros componentes habitualmente se produce a través de uno o más buses y puentes (también denominados controladores de bus). El dispositivo de almacenamiento y las señales que portan el tráfico de red representan, respectivamente, uno o más medios de almacenamiento legibles por máquina y medios de comunicación legibles por máquina. Por tanto, los dispositivos de almacenamiento de un dispositivo electrónico dado habitualmente almacenan un código y/o datos para su ejecución en el conjunto de uno o más procesadores de ese dispositivo electrónico.
Por supuesto, una o más partes de una realización pueden implementarse usando diferentes combinaciones de software, firmware y/o hardware. A lo largo de toda esta descripción detallada, con fines explicativos, se expusieron numerosos detalles específicos para proporcionar un entendimiento completo de la presente invención. Sin embargo, será evidente para un experto en la materia que las realizaciones pueden ponerse en práctica sin algunos de estos detalles específicos. En ciertas instancias, no se han descrito estructuras y funciones bien conocidas con todo lujo de detalles para evitar complicar la materia objeto inventiva de las realizaciones. En consecuencia, el alcance de la invención debería evaluarse en términos de las reivindicaciones que se aportan a continuación.
Claims (9)
1. Un aparato de cómputo para realizar operaciones de aprendizaje automático, comprendiendo el aparato de cómputo: una unidad de extracción dispuesta para extraer (742) una única instrucción que tiene múltiples operandos de entrada, en donde los múltiples operandos de entrada tienen una longitud en bits desigual, teniendo un primer operando de entrada una primera longitud en bits y teniendo un segundo operando de entrada una segunda longitud en bits; una unidad de descodificación dispuesta para descodificar (744) la única instrucción en una instrucción descodificada; una unidad de longitud de operando para determinar (744) la longitud en bits más pequeña de la primera longitud en bits y la segunda longitud en bits; y
una unidad de cómputo dispuesta para realizar (746) una operación matricial sobre los múltiples operandos de entrada para generar un valor de salida que tiene una longitud en bits igual a la longitud en bits más pequeña, en donde la unidad de cómputo está dispuesta adicionalmente para:
determinar si una operación de multiplicación de la operación matricial tiene una entrada cero; y sortear la operación de multiplicación que tiene la entrada cero.
2. El aparato de cómputo según la reivindicación 1, en donde la única instrucción está dispuesta para hacer que la unidad de cómputo realice al menos una operación de multiplicación matricial bidimensional sobre los múltiples operandos.
3. El aparato de cómputo según la reivindicación 2, en donde la única instrucción está dispuesta para hacer que la unidad de cómputo realice al menos una operación de multiplicación-suma.
4. El aparato de cómputo según la reivindicación 2, en donde la única instrucción está dispuesta para hacer que la unidad de cómputo realice al menos una operación de multiplicación-acumulación.
5. El aparato de cómputo según la reivindicación 2, en donde la única instrucción está dispuesta para hacer que la unidad de cómputo realice al menos una operación de producto escalar matricial bidimensional.
6. El aparato de cómputo según la reivindicación 1, que incluye adicionalmente una unidad de configuración de precisión dispuesta
para proporcionar una configuración de precisión a la unidad de cómputo, estando dispuesta la unidad de configuración de precisión
para configurar una precisión operativa de una unidad funcional dentro de la unidad de cómputo.
7. El aparato de cómputo según la reivindicación 1, en donde para sortear la operación de multiplicación que tiene la entrada cero, la unidad de cómputo está dispuesta para:
sustituir un código de operación de no-operación por un código de operación de una operación de multiplicación para una unidad funcional asociada con la entrada cero.
8. Un método para realizar operaciones de aprendizaje automático que comprende:
extraer (742), por medio de una unidad de extracción, una única instrucción que tiene múltiples operandos de entrada, en donde los múltiples operandos de entrada tienen una longitud en bits desigual, teniendo un primer operando de entrada una primera longitud en bits y teniendo un segundo operando de entrada una segunda longitud en bits; descodificar (744), por medio de una unidad de descodificación, la única instrucción en una instrucción descodificada; determinar (744), por medio de una unidad de longitud de operando, la longitud en bits más pequeña de la primera longitud en bits y la segunda longitud en bits;
realizar (746), por medio de una unidad de cómputo, una operación matricial sobre los múltiples operandos de entrada para generar un valor de salida que tiene una longitud en bits igual a la longitud en bits más pequeña; determinar si una operación de multiplicación de la operación matricial tiene una entrada cero; y
sortear la operación de multiplicación que tiene la entrada cero.
9. Un programa informático que comprende instrucciones que, cuando el programa es ejecutado por un ordenador, hacen que el ordenador lleve a cabo el método de la reivindicación 8.
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| IN201741015868 | 2017-05-05 | ||
| US15/869,564 US10776699B2 (en) | 2017-05-05 | 2018-01-12 | Optimized compute hardware for machine learning operations |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2914299T3 true ES2914299T3 (es) | 2022-06-09 |
Family
ID=64015318
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES18170154T Active ES2914299T3 (es) | 2017-05-05 | 2018-04-30 | Hardware de cómputo optimizado para operaciones de aprendizaje automático |
| ES20200955T Active ES3041429T3 (en) | 2017-05-05 | 2018-04-30 | Optimized compute hardware for machine learning operations |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES20200955T Active ES3041429T3 (en) | 2017-05-05 | 2018-04-30 | Optimized compute hardware for machine learning operations |
Country Status (7)
| Country | Link |
|---|---|
| US (4) | US10776699B2 (es) |
| EP (2) | EP3783479B1 (es) |
| CN (4) | CN111932435B (es) |
| DK (1) | DK3783479T3 (es) |
| ES (2) | ES2914299T3 (es) |
| FI (1) | FI3783479T3 (es) |
| PL (2) | PL3783479T3 (es) |
Families Citing this family (88)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10635969B2 (en) | 2016-10-14 | 2020-04-28 | International Business Machines Corporation | Core utilization optimization by dividing computational blocks across cores |
| US10878310B2 (en) * | 2016-11-29 | 2020-12-29 | Mellanox Technologies, Ltd. | Accelerated convolution in convolutional neural networks |
| US10409614B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
| US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
| US10776699B2 (en) | 2017-05-05 | 2020-09-15 | Intel Corporation | Optimized compute hardware for machine learning operations |
| US11243880B1 (en) * | 2017-09-15 | 2022-02-08 | Groq, Inc. | Processor architecture |
| WO2019057281A1 (en) * | 2017-09-21 | 2019-03-28 | Huawei Technologies Co., Ltd. | MULTI-WIRE SYSTOLIC NETWORK |
| WO2019090325A1 (en) | 2017-11-06 | 2019-05-09 | Neuralmagic, Inc. | Methods and systems for improved transforms in convolutional neural networks |
| US11715287B2 (en) | 2017-11-18 | 2023-08-01 | Neuralmagic Inc. | Systems and methods for exchange of data in distributed training of machine learning algorithms |
| US11436525B2 (en) * | 2017-12-01 | 2022-09-06 | Deepwave Digital, Inc. | Artificial intelligence radio transceiver |
| CN108388446A (zh) * | 2018-02-05 | 2018-08-10 | 上海寒武纪信息科技有限公司 | 运算模块以及方法 |
| US10528346B2 (en) | 2018-03-29 | 2020-01-07 | Intel Corporation | Instructions for fused multiply-add operations with variable precision input operands |
| US11216732B2 (en) | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
| US11449363B2 (en) | 2018-05-31 | 2022-09-20 | Neuralmagic Inc. | Systems and methods for improved neural network execution |
| US10832133B2 (en) | 2018-05-31 | 2020-11-10 | Neuralmagic Inc. | System and method of executing neural networks |
| US10963787B2 (en) * | 2018-05-31 | 2021-03-30 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
| US20190378016A1 (en) * | 2018-06-07 | 2019-12-12 | International Business Machines Corporation | Distributed computing architecture for large model deep learning |
| US11275713B2 (en) * | 2018-06-09 | 2022-03-15 | International Business Machines Corporation | Bit-serial linear algebra processor |
| WO2020046859A1 (en) | 2018-08-27 | 2020-03-05 | Neuralmagic Inc. | Systems and methods for neural network convolutional layer matrix multiplication using cache memory |
| US20220075598A1 (en) * | 2018-09-23 | 2022-03-10 | Groq, Inc. | Systems and Methods for Numerical Precision in Digital Multiplier Circuitry |
| US11983616B2 (en) * | 2018-10-01 | 2024-05-14 | Expedera, Inc. | Methods and apparatus for constructing digital circuits for performing matrix operations |
| WO2020072274A1 (en) | 2018-10-01 | 2020-04-09 | Neuralmagic Inc. | Systems and methods for neural network pruning with accuracy preservation |
| CN111178491A (zh) * | 2018-11-09 | 2020-05-19 | 佳能株式会社 | 神经网络模型的训练和应用方法、装置、系统及存储介质 |
| KR102809535B1 (ko) * | 2018-11-13 | 2025-05-22 | 삼성전자주식회사 | 뉴럴 네트워크를 이용한 데이터 처리 방법 및 이를 지원하는 전자 장치 |
| US11544559B2 (en) | 2019-01-08 | 2023-01-03 | Neuralmagic Inc. | System and method for executing convolution in a neural network |
| US11550971B1 (en) | 2019-01-18 | 2023-01-10 | X Development Llc | Physics simulation on machine-learning accelerated hardware platforms |
| US11507662B2 (en) * | 2019-02-04 | 2022-11-22 | Sateesh Kumar Addepalli | Systems and methods of security for trusted artificial intelligence hardware processing |
| US11544525B2 (en) | 2019-02-04 | 2023-01-03 | Sateesh Kumar Addepalli | Systems and methods for artificial intelligence with a flexible hardware processing framework |
| US11150720B2 (en) | 2019-02-04 | 2021-10-19 | Sateesh Kumar Addepalli | Systems and methods for power management of hardware utilizing virtual multilane architecture |
| US11423454B2 (en) | 2019-02-15 | 2022-08-23 | Sateesh Kumar Addepalli | Real-time customizable AI model collaboration and marketplace service over a trusted AI model network |
| US11119674B2 (en) * | 2019-02-19 | 2021-09-14 | Macronix International Co., Ltd. | Memory devices and methods for operating the same |
| WO2020190807A1 (en) | 2019-03-15 | 2020-09-24 | Intel Corporation | Systolic disaggregation within a matrix accelerator architecture |
| US12182035B2 (en) | 2019-03-15 | 2024-12-31 | Intel Corporation | Systems and methods for cache optimization |
| PL3938914T3 (pl) | 2019-03-15 | 2025-03-31 | Intel Corporation | Dynamiczna rekonfiguracja pamięci |
| US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
| EP3948685A1 (en) * | 2019-03-26 | 2022-02-09 | Mipsology SAS | Accelerating neuron computations in artificial neural networks by skipping bits |
| US12205006B2 (en) | 2019-03-26 | 2025-01-21 | Mipsology SAS | Accelerating neuron computations in artificial neural networks by skipping bits |
| WO2020208396A1 (en) * | 2019-04-08 | 2020-10-15 | Mipsology SAS | Accelerating neuron computations in artificial neural networks by selecting input data |
| US11176493B2 (en) * | 2019-04-29 | 2021-11-16 | Google Llc | Virtualizing external memory as local to a machine learning accelerator |
| US11507349B2 (en) * | 2019-06-26 | 2022-11-22 | Microsoft Technology Licensing, Llc | Neural processing element with single instruction multiple data (SIMD) compute lanes |
| US11222092B2 (en) * | 2019-07-16 | 2022-01-11 | Facebook Technologies, Llc | Optimization for deconvolution |
| US11195095B2 (en) | 2019-08-08 | 2021-12-07 | Neuralmagic Inc. | System and method of accelerating execution of a neural network |
| WO2021035397A1 (en) * | 2019-08-23 | 2021-03-04 | Alibaba Group Holding Limited | Method and apparatus for data-move task optimizing |
| CN110661682B (zh) * | 2019-09-19 | 2021-05-25 | 上海天旦网络科技发展有限公司 | 通用互联数据自动分析系统、方法、设备 |
| US12443398B2 (en) * | 2019-10-02 | 2025-10-14 | Nvidia Corporation | Kernel fusion for machine learning |
| US11663746B2 (en) | 2019-11-15 | 2023-05-30 | Intel Corporation | Systolic arithmetic on sparse data |
| US11861761B2 (en) | 2019-11-15 | 2024-01-02 | Intel Corporation | Graphics processing unit processing and caching improvements |
| US11307860B1 (en) * | 2019-11-22 | 2022-04-19 | Blaize, Inc. | Iterating group sum of multiple accumulate operations |
| US11650819B2 (en) * | 2019-12-13 | 2023-05-16 | Intel Corporation | Apparatuses, methods, and systems for instructions to multiply floating-point values of about one |
| US12153920B2 (en) | 2019-12-13 | 2024-11-26 | Intel Corporation | Apparatuses, methods, and systems for instructions to multiply values of one |
| US11847450B2 (en) * | 2019-12-13 | 2023-12-19 | Intel Corporation | Apparatuses, methods, and systems for instructions to multiply values of zero |
| US11875154B2 (en) | 2019-12-13 | 2024-01-16 | Intel Corporation | Apparatuses, methods, and systems for instructions to multiply floating-point values of about zero |
| US11175338B2 (en) | 2019-12-31 | 2021-11-16 | Alibaba Group Holding Limited | System and method for compacting test data in many-core processors |
| US12566958B2 (en) | 2020-01-14 | 2026-03-03 | Red Hat, Inc. | System and method of training a neural network |
| US11561795B2 (en) * | 2020-03-30 | 2023-01-24 | Arm Limited | Accumulating data values and storing in first and second storage devices |
| US11500858B2 (en) * | 2020-04-08 | 2022-11-15 | International Business Machines Corporation | Generating three-dimensional spikes using low-power computing hardware |
| US12038823B2 (en) * | 2020-04-23 | 2024-07-16 | Intuit Inc. | Hierarchical attention time-series (HAT) model for behavior prediction |
| US11614920B2 (en) * | 2020-05-07 | 2023-03-28 | Meta Platforms, Inc. | Bypassing zero-value multiplications in a hardware multiplier |
| US12530573B1 (en) | 2020-05-19 | 2026-01-20 | Red Hat, Inc. | Efficient execution of group-sparsified neural networks |
| US20210389948A1 (en) * | 2020-06-10 | 2021-12-16 | Arm Limited | Mixed-element-size instruction |
| US11188329B1 (en) * | 2020-06-24 | 2021-11-30 | Micron Technology, Inc. | Dynamic precision bit string accumulation |
| US11610281B2 (en) | 2020-08-25 | 2023-03-21 | Samsung Electronics Co., Ltd. | Methods and apparatus for implementing cache policies in a graphics processing unit |
| CN112200310B (zh) * | 2020-08-28 | 2023-11-24 | 星宸科技股份有限公司 | 智能处理器、数据处理方法及存储介质 |
| US11175957B1 (en) * | 2020-09-22 | 2021-11-16 | International Business Machines Corporation | Hardware accelerator for executing a computation task |
| US12579611B2 (en) * | 2020-09-30 | 2026-03-17 | US Technology International Private Limited | Method and system for image processing through an artificial neural network implemented in an adapter card in a host-computing system |
| US11556757B1 (en) | 2020-12-10 | 2023-01-17 | Neuralmagic Ltd. | System and method of executing deep tensor columns in neural networks |
| US12197601B2 (en) * | 2020-12-26 | 2025-01-14 | Intel Corporation | Hardware offload circuitry |
| US20220269950A1 (en) * | 2021-02-25 | 2022-08-25 | Samsung Electronics Co., Ltd. | Neural network operation method and device |
| US11556337B2 (en) * | 2021-04-12 | 2023-01-17 | Analog Devices International Unlimited Company | Parallel matrix multiplication technique optimized for memory fetches |
| CN115249104A (zh) * | 2021-04-28 | 2022-10-28 | 中国移动通信集团上海有限公司 | 用于移动网络的功能特性模拟评估方法和装置 |
| US12141683B2 (en) * | 2021-04-30 | 2024-11-12 | Intel Corporation | Performance scaling for dataflow deep neural network hardware accelerators |
| US12282774B2 (en) * | 2021-06-25 | 2025-04-22 | Intel Corporation | Vector processor utilizing massively fused operations |
| CN113485844B (zh) * | 2021-07-30 | 2022-03-15 | 上海壁仞智能科技有限公司 | 云端服务系统及其操作方法 |
| CN113704689B (zh) * | 2021-08-25 | 2022-11-11 | 北京大学 | 一种基于昇腾ai处理器的矩阵乘算子的处理方法及装置 |
| US11979176B2 (en) | 2021-09-09 | 2024-05-07 | Hughes Network Systems, Llc | Configurable modem architecture for satellite communications |
| CN114168194B (zh) * | 2021-09-15 | 2025-04-22 | 上海自然而然信息科技有限公司 | 用于控制计算设备的方法、计算设备和计算机存储介质 |
| US11960982B1 (en) | 2021-10-21 | 2024-04-16 | Neuralmagic, Inc. | System and method of determining and executing deep tensor columns in neural networks |
| KR102548283B1 (ko) * | 2021-12-22 | 2023-06-27 | (주)뉴로컴즈 | 콘볼루션 신경망 컴퓨팅 장치 |
| JP7842968B2 (ja) * | 2022-04-14 | 2026-04-09 | ソニーグループ株式会社 | 送信装置、受信装置、送信方法および受信方法 |
| US12165041B2 (en) * | 2022-06-09 | 2024-12-10 | Recogni Inc. | Low power hardware architecture for handling accumulation overflows in a convolution operation |
| US12008472B2 (en) | 2022-06-29 | 2024-06-11 | David Cook | Apparatus and method for generating a compiled artificial intelligence (AI) model |
| US20230008622A1 (en) * | 2022-09-22 | 2023-01-12 | Richard Boyd | Kernel Decomposition and Activation Broadcasting in Deep Neural Networks (DNNs) |
| US20230097092A1 (en) * | 2022-11-01 | 2023-03-30 | Intel Corporation | Method and system of video coding with inline downscaling hardware |
| CN118276822A (zh) * | 2024-04-24 | 2024-07-02 | 北京地平线信息技术有限公司 | 多精度操作数计算方法、装置、设备和介质 |
| CN118364887B (zh) * | 2024-06-20 | 2024-09-06 | 广东阿尔派电力科技股份有限公司 | 一种能量管理监控的智能调度方法及系统 |
| EP4722917A1 (en) * | 2024-10-01 | 2026-04-08 | Nxp B.V. | Neural network processor and method |
| CN119201232B (zh) * | 2024-11-22 | 2025-04-11 | 芯来智融半导体科技(上海)有限公司 | 指令处理设备、系统和方法 |
| CN121210391B (zh) * | 2025-11-28 | 2026-04-07 | 上海壁仞科技股份有限公司 | 通用计算单元和指令调度方法 |
Family Cites Families (32)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5644524A (en) * | 1993-11-30 | 1997-07-01 | Texas Instruments Incorporated | Iterative division apparatus, system and method employing left most one's detection and left most one's detection with exclusive or |
| US5761103A (en) * | 1995-03-08 | 1998-06-02 | Texas Instruments Incorporated | Left and right justification of single precision mantissa in a double precision rounding unit |
| US6366998B1 (en) * | 1998-10-14 | 2002-04-02 | Conexant Systems, Inc. | Reconfigurable functional units for implementing a hybrid VLIW-SIMD programming model |
| JP2001042903A (ja) * | 1999-07-27 | 2001-02-16 | Toshiba Corp | 雨水排水制御装置 |
| US6675286B1 (en) * | 2000-04-27 | 2004-01-06 | University Of Washington | Multimedia instruction set for wide data paths |
| US7873812B1 (en) | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
| US7584237B1 (en) * | 2005-10-11 | 2009-09-01 | Advanced Micro Devices, Inc. | Fast hardware divider |
| CN101072349B (zh) * | 2006-06-08 | 2012-10-10 | 威盛电子股份有限公司 | 内容适应性可变长度编码的解码系统与方法 |
| US7921279B2 (en) * | 2008-03-19 | 2011-04-05 | International Business Machines Corporation | Operand and result forwarding between differently sized operands in a superscalar processor |
| GB2476800A (en) * | 2010-01-07 | 2011-07-13 | Linear Algebra Technologies Ltd | Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations |
| US8682639B2 (en) * | 2010-09-21 | 2014-03-25 | Texas Instruments Incorporated | Dedicated memory window for emulation address |
| GB2488985A (en) * | 2011-03-08 | 2012-09-19 | Advanced Risc Mach Ltd | Mixed size data processing operation with integrated operand conversion instructions |
| US20130054852A1 (en) * | 2011-08-24 | 2013-02-28 | Charles Fuoco | Deadlock Avoidance in a Multi-Node System |
| BR112014005794A2 (pt) * | 2011-09-15 | 2017-03-28 | Exxonmobil Upstream Res Co | operações matriciais e vetoriais otimizadas em algoritmos de instrução limitada que executam cálculos de equação de estado |
| US8984042B2 (en) * | 2012-02-09 | 2015-03-17 | International Business Machines Corporation | Mixed precision estimate instruction computing narrow precision result for wide precision inputs |
| US9355068B2 (en) * | 2012-06-29 | 2016-05-31 | Intel Corporation | Vector multiplication with operand base system conversion and re-conversion |
| US8874933B2 (en) * | 2012-09-28 | 2014-10-28 | Intel Corporation | Instruction set for SHA1 round processing on 128-bit data paths |
| US9990202B2 (en) * | 2013-06-28 | 2018-06-05 | Intel Corporation | Packed data element predication processors, methods, systems, and instructions |
| US9465578B2 (en) * | 2013-12-13 | 2016-10-11 | Nvidia Corporation | Logic circuitry configurable to perform 32-bit or dual 16-bit floating-point operations |
| US20150277904A1 (en) * | 2014-03-28 | 2015-10-01 | Roger Espasa | Method and apparatus for performing a plurality of multiplication operations |
| US10061592B2 (en) * | 2014-06-27 | 2018-08-28 | Samsung Electronics Co., Ltd. | Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices |
| US9785565B2 (en) * | 2014-06-30 | 2017-10-10 | Microunity Systems Engineering, Inc. | System and methods for expandably wide processor instructions |
| US10223333B2 (en) | 2014-08-29 | 2019-03-05 | Nvidia Corporation | Performing multi-convolution operations in a parallel processing system |
| US20160139919A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Machine Level Instructions to Compute a 3D Z-Curve Index from 3D Coordinates |
| US20160188327A1 (en) * | 2014-12-24 | 2016-06-30 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for fused multiply-multiply instructions |
| US10114554B1 (en) * | 2015-01-20 | 2018-10-30 | Intellectual Property Systems, LLC | Arrangements for storing more data in faster memory when using a hierarchical memory structure |
| US10229468B2 (en) * | 2015-06-03 | 2019-03-12 | Intel Corporation | Automated conversion of GPGPU workloads to 3D pipeline workloads |
| US10891538B2 (en) | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
| US10997496B2 (en) | 2016-08-11 | 2021-05-04 | Nvidia Corporation | Sparse convolutional neural network accelerator |
| US10776699B2 (en) | 2017-05-05 | 2020-09-15 | Intel Corporation | Optimized compute hardware for machine learning operations |
| US10534838B2 (en) * | 2017-09-29 | 2020-01-14 | Intel Corporation | Bit matrix multiplication |
| US11880683B2 (en) * | 2017-10-31 | 2024-01-23 | Advanced Micro Devices, Inc. | Packed 16 bits instruction pipeline |
-
2018
- 2018-01-12 US US15/869,564 patent/US10776699B2/en active Active
- 2018-04-30 PL PL20200955.1T patent/PL3783479T3/pl unknown
- 2018-04-30 ES ES18170154T patent/ES2914299T3/es active Active
- 2018-04-30 PL PL18170154T patent/PL3407183T3/pl unknown
- 2018-04-30 ES ES20200955T patent/ES3041429T3/es active Active
- 2018-04-30 FI FIEP20200955.1T patent/FI3783479T3/fi active
- 2018-04-30 EP EP20200955.1A patent/EP3783479B1/en active Active
- 2018-04-30 EP EP18170154.1A patent/EP3407183B1/en active Active
- 2018-04-30 DK DK20200955.1T patent/DK3783479T3/da active
- 2018-05-07 CN CN202010802305.XA patent/CN111932435B/zh active Active
- 2018-05-07 CN CN202110826628.7A patent/CN113538206B/zh active Active
- 2018-05-07 CN CN202511328766.7A patent/CN121235894A/zh active Pending
- 2018-05-07 CN CN201810427080.7A patent/CN108805797B/zh active Active
-
2020
- 2020-08-03 US US16/983,107 patent/US11334796B2/en active Active
-
2022
- 2022-05-12 US US17/742,581 patent/US12314727B2/en active Active
-
2025
- 2025-04-22 US US19/186,020 patent/US20250362924A1/en active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US20180322390A1 (en) | 2018-11-08 |
| DK3783479T3 (en) | 2025-09-22 |
| US20220343174A1 (en) | 2022-10-27 |
| US12314727B2 (en) | 2025-05-27 |
| PL3407183T3 (pl) | 2022-06-20 |
| US20250362924A1 (en) | 2025-11-27 |
| EP3783479B1 (en) | 2025-07-02 |
| EP3407183B1 (en) | 2022-03-09 |
| CN121235894A (zh) | 2025-12-30 |
| CN111932435A (zh) | 2020-11-13 |
| CN113538206B (zh) | 2024-06-04 |
| EP3407183A2 (en) | 2018-11-28 |
| CN113538206A (zh) | 2021-10-22 |
| CN111932435B (zh) | 2024-08-27 |
| US20210019631A1 (en) | 2021-01-21 |
| CN108805797A (zh) | 2018-11-13 |
| EP3407183A3 (en) | 2019-02-13 |
| ES3041429T3 (en) | 2025-11-12 |
| FI3783479T3 (fi) | 2025-09-25 |
| US11334796B2 (en) | 2022-05-17 |
| CN108805797B (zh) | 2026-03-03 |
| US10776699B2 (en) | 2020-09-15 |
| EP3783479A1 (en) | 2021-02-24 |
| PL3783479T3 (pl) | 2025-11-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2914299T3 (es) | Hardware de cómputo optimizado para operaciones de aprendizaje automático | |
| US12106210B2 (en) | Scaling half-precision floating point tensors for training deep neural networks | |
| US12148063B2 (en) | Compute optimizations for low precision machine learning operations | |
| ES2925598T3 (es) | Instrucciones y lógica para realizar operaciones de coma flotante y de números enteros para el aprendizaje automático | |
| ES2960064T3 (es) | Unidad de cálculo de gráficos de fin general y método para ejecutar instrucciones de precisión mixta | |
| EP3396535B1 (en) | Compute optimizations for neural networks | |
| ES2930550T3 (es) | Métodos y aparatos para canalización de ejecución de red de aprendizaje profundo en plataforma multiprocesador | |
| EP3392825A2 (en) | Extend gpu/cpu coherency to multi-gpu cores | |
| EP3396599A1 (en) | Hardware optimized convolutional neural network | |
| EP3396532A2 (en) | Dynamic precision for neural network compute operations | |
| EP3396623B1 (en) | Real time context dependent deep learning |




