ES3036704T3 - Apparatus and method for ray tracing instruction processing and execution - Google Patents
Apparatus and method for ray tracing instruction processing and executionInfo
- Publication number
- ES3036704T3 ES3036704T3 ES19203201T ES19203201T ES3036704T3 ES 3036704 T3 ES3036704 T3 ES 3036704T3 ES 19203201 T ES19203201 T ES 19203201T ES 19203201 T ES19203201 T ES 19203201T ES 3036704 T3 ES3036704 T3 ES 3036704T3
- Authority
- ES
- Spain
- Prior art keywords
- data
- value
- graphics
- source
- processor
- 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
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—Three-dimensional [3D] image rendering
- G06T15/06—Ray-tracing
-
- 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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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
- 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
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—Three-dimensional [3D] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20081—Training; Learning
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/08—Bandwidth reduction
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/70—Denoising; Smoothing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computer Graphics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
- Image Analysis (AREA)
Abstract
Un aparato y un método para ejecutar instrucciones de trazado de rayos. Por ejemplo, una realización de un aparato comprende un circuito de ejecución para ejecutar una instrucción de descuantización que convierte varios valores de datos cuantificados en varios valores de datos descuantizados. La instrucción de descuantización incluye un primer operando de origen para identificar varios valores de datos cuantificados empaquetados en un registro de origen y un operando de destino para identificar un registro de destino donde se almacenan varios valores de datos descuantizados empaquetados. El circuito de ejecución convierte cada valor de datos cuantificados empaquetados del registro de origen en un valor de coma flotante, multiplica este valor de coma flotante por un primer valor para generar un primer producto y suma este último a un segundo valor para generar un valor de datos descuantizados, y almacena este valor de datos descuantizados en una ubicación de elemento de datos empaquetados en el registro de destino. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Aparato y método para procesamiento y ejecución de instrucciones de trazado de rayos
ESTADO DE LA TÉCNICA ANTERIOR
Campo de la invención
Esta invención se refiere en general con el sector de los procesadores de gráficos. Más particularmente, la invención se refiere con un aparato y un procedimiento para realizar operaciones de trazado de rayos más eficientes.
Descripción de la técnica relacionada
El trazado de rayos es una técnica en la que se simula un transporte de luz a través de un renderizado basado en la física. Ampliamente utilizado en el renderizado cinemático, hasta hace unos pocos años se consideraba que consumía demasiados recursos para el rendimiento en tiempo real. Una de las operaciones clave en el trazado de rayos es procesar una consulta de visibilidad para las intersecciones de rayos y escenas conocida como "cruce de rayos", que calcula las intersecciones de rayos y escenas al atravesar e intersecar nodos en una jerarquía de volumen límite (BVH).
La eliminación de ruido se ha convertido en una característica crítica para el trazado de rayos en tiempo real con imágenes uniformes y sin ruido. El renderizado se puede realizar en un sistema distribuido en múltiples dispositivos, pero hasta ahora todos los entornos de eliminación de ruido existentes funcionan en una única instancia en una única máquina. Si el renderizado se realiza en varios dispositivos, es posible que no todos los píxeles renderizados sean accesibles para calcular una parte de la imagen sin ruido.
El documento US 2017/178387 A1 se refiere a lógica de procesamiento de gráficos para realizar trazado de rayos. Por ejemplo, un aparato de procesamiento de gráficos incluye una unidad de procesamiento de gráficos que tiene una lógica de volumen delimitador para operar en una jerarquía de volumen delimitador comprimida, en donde cada nodo de volumen delimitador almacena un volumen delimitador padre y múltiples volúmenes delimitadores hijos que están codificados en relación con el volumen delimitador padre.
Sumario
La presente invención está definida en las reivindicaciones independientes. Las reivindicaciones dependientes definen realizaciones de las mismas.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Se puede obtener una mejor comprensión de la presente invención a partir de la siguiente descripción detallada en conjunto con los siguientes dibujos, en los que:
laFigura 1es un diagrama de bloques de una realización de un sistema informático con un procesador que tiene uno o más núcleos de procesador y procesadores gráficos;
laFigura 2es un diagrama de bloques de una realización de un procesador que tiene uno o más núcleos de procesador, un controlador de memoria integrada y un procesador de gráficos integrado;
laFigura 3es un diagrama de bloques de una realización de un procesador de gráficos 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;
laFigura 4es un diagrama de bloques de una realización de un motor de procesamiento de gráficos para un procesador de gráficos;
laFigura 5es un diagrama de bloques de otra realización de un procesador de gráficos;
lasFiguras 6A-Bilustran ejemplos de circuitos de ejecución y lógica;
laFigura 7ilustra un formato de instrucción de unidad de ejecución de procesador de gráficos de acuerdo con una realización;
laFigura 8es un diagrama de bloques de otra realización de un procesador de gráficos que incluye una canalización de gráficos, una canalización de medios, un motor de visualización, una lógica de ejecución de hilos y una canalización de salida de renderizado;
laFigura 9Aes un diagrama de bloques que ilustra un formato de comando de procesador de gráficos de acuerdo con una realización;
laFigura 9Bes un diagrama de bloques que ilustra una secuencia de comandos del procesador de gráficos de acuerdo con una realización;
laFigura 10ilustra una arquitectura de software de gráficos de ejemplo para un sistema de procesamiento de datos de acuerdo con una realización;
lasFiguras 11A-Bilustran un sistema de desarrollo de núcleo IP ejemplar que puede usarse para fabricar un circuito integrado y un conjunto de paquete ejemplar;
laFigura 12ilustra un circuito integrado de sistema en un chip de ejemplo que se puede fabricar utilizando uno o más núcleos IP, de acuerdo con una realización;
lasFiguras 13A-Bilustran un procesador de gráficos ejemplar de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP;
lasFiguras 14A-Bilustran arquitecturas de procesadores gráficos ejemplares;
laFigura 15ilustra una realización de una arquitectura para realizar el entrenamiento inicial de una arquitectura de aprendizaje automático;
laFigura 16ilustra una realización en la que un motor de aprendizaje automático se entrena y actualiza continuamente durante el tiempo de ejecución;
laFigura 17ilustra otra realización en la que un motor de aprendizaje automático se entrena y actualiza continuamente durante el tiempo de ejecución;
lasFiguras 18A-Bilustran realizaciones en las que los datos de aprendizaje automático se comparten en una red; y laFigura 19ilustra una realización de un método para entrenar un motor de aprendizaje automático;
laFigura 20ilustra una realización en la que los nodos intercambian datos de la región fantasma para realizar operaciones de eliminación de ruido distribuidas;
laFigura 21ilustra una realización de una arquitectura en la que las operaciones de renderizado y eliminación de ruido de imágenes se distribuyen entre una pluralidad de nodos;
laFigura 22ilustra detalles adicionales de una arquitectura para renderizado y eliminación de ruido distribuidas; laFigura 23ilustra un método de acuerdo con una realización de la invención;
laFigura 24ilustra una realización de un método de aprendizaje automático;
laFigura 25ilustra una pluralidad de procesadores de gráficos de propósito general interconectados;
laFigura 26ilustra un conjunto de capas convolucionales y capas completamente conectadas para una implementación de aprendizaje automático;
laFigura 27ilustra una realización de una capa convolucional;
laFigura 28ilustra un ejemplo de un conjunto de nodos interconectados en una implementación de aprendizaje automático;
laFigura 29ilustra una realización de un entorno de entrenamiento dentro del cual una red neuronal aprende utilizando un conjunto de datos de entrenamiento;
laFigura 30Ailustra ejemplos de paralelismo de modelos y paralelismo de datos;
laFigura 30Bilustra un ejemplo de un sistema en un chip (SoC);
laFigura 31ilustra un ejemplo de una arquitectura de procesamiento que incluye núcleos de trazado de rayos y núcleos de tensor;
laFigura 32ilustra un ejemplo de un haz;
laFigura 33ilustra una realización de un aparato para realizar el trazado de haces;
laFigura 34ilustra un ejemplo de una jerarquía de haces;
laFigura 35ilustra un procedimiento para realizar el trazado de haces;
laFigura 36ilustra un ejemplo de un motor de trazado de rayos distribuido;
lasFiguras 37-38ilustran un ejemplo de compresión realizada en un sistema de trazado de rayos;
laFigura 39ilustra un método de acuerdo con una realización de la invención;
laFigura 40ilustra un aparato de trazado de rayos híbrido de ejemplo;
laFigura 41ilustra ejemplos de pilas utilizadas para operaciones de trazado de rayos;
laFigura 42ilustra detalles adicionales para una realización de un aparato de trazado de rayos híbrido;
laFigura 43ilustra un ejemplo de una jerarquía de volumen límite;
laFigura 44ilustra un ejemplo de una pila de llamadas y almacenamiento de estado de cruce;
laFigura 45ilustra una realización de una arquitectura para ejecutar instrucciones de trazado de rayos; y laFigura 46ilustra una realización de un método que se ilustra para ejecutar cualquiera de las instrucciones anteriores.
DESCRIPCIÓN DETALLADA
En la siguiente descripción, a efectos explicativos, se describen numerosos detalles específicos con el fin de proporcionar una comprensión completa de las realizaciones de la invención descritas a continuación. Sin embargo, para un experto en la materia será evidente que las realizaciones de la invención se pueden llevar a la práctica sin algunos de estos detalles específicos. En otros casos, estructuras y dispositivos bien conocidos se muestran en forma de diagrama de bloques para evitar oscurecer los principios subyacentes de las realizaciones de la invención.
ARQUITECTURAS DE PROCESADORES DE GRÁFICOS Y TIPOS DE DATOS DE EJEMPLO
Descripción general del sistema
LaFigura 1es un diagrama de bloques de un sistema de procesamiento 100, de acuerdo con una realización. En diversas realizaciones, el sistema 100 incluye uno o más procesadores 102 y uno o más procesadores de gráficos 108, y puede ser un sistema de escritorio de un solo procesador, un sistema de estación de trabajo multiprocesador o un sistema de servidor que tiene una gran cantidad de procesadores 102 o núcleos de procesador 107. En una realización, el sistema 100 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
En una realización, el sistema 100 puede incluir o incorporarse dentro de una plataforma de juegos basada en servidor, una consola de juegos, incluyendo una consola de juegos y medios, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos en línea. En algunas realizaciones, el sistema 100 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tipo tableta o un dispositivo de Internet móvil. El sistema de procesamiento 100 también puede incluir, acoplarse o estar integrado dentro de un dispositivo ponible, tal como un dispositivo ponible de tipo reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento 100 es un televisor o dispositivo decodificador que tiene uno o más procesadores 102 y una interfaz gráfica generada por uno o más procesadores gráficos 108.
En algunas realizaciones, cada uno del uno o más procesadores 102 incluye uno o más núcleos de procesador 107 para procesar instrucciones que, cuando son ejecutadas, realizan operaciones para software de usuario y sistema. En algunas realizaciones, cada uno del uno o más núcleos de procesador 107 está configurado para procesar un conjunto de instrucciones 109 específico. En algunas realizaciones, el conjunto de instrucciones 109 puede facilitar la computación por conjuntos de instrucciones complejas (CISC), la computación por conjuntos de instrucciones reducidas (RISC) o la computación a través de una palabra de instrucción muy larga (VLIW). Múltiples núcleos de procesador 107 pueden procesar cada uno un conjunto de instrucciones 109 diferente, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo del procesador 107 también puede incluir otros dispositivos de procesamiento, tales como un procesador de señales digitales (DSP).
En algunas realizaciones, el procesador 102 incluye memoria caché 104. Dependiendo de la arquitectura, el procesador 102 puede tener una sola memoria caché interna o múltiples niveles de memoria caché interna. En algunas realizaciones, la memoria caché se comparte entre varios componentes del procesador 102. En algunas realizaciones, el procesador 102 también utiliza una memoria caché externa (por ejemplo, una memoria caché de nivel 3 (L3) o memoria caché de último nivel (LLC)) (no se muestra), que puede compartirse entre los núcleos del procesador 107 utilizando técnicas de coherencia de caché conocidas. Además, se incluye en el procesador 102 un archivo de registro 106 que puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de números enteros, registros de punto flotante, registros de estado y un registro de puntero de instrucciones). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos del diseño del procesador 102.
En algunas realizaciones, uno o más procesadores 102 están acoplados a uno o más buses de interfaz 110 para transmitir señales de comunicación tales como direcciones, datos o señales de control entre el procesador 102 y otros componentes en el sistema 100. El bus de interfaz 110, en una realización, puede ser un bus de procesador, tal como una versión del bus de interfaz de medios directa (DMI). Sin embargo, los buses de procesador no se limitan al bus DMI y pueden incluir uno o más buses de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express), buses de memoria u otros tipos de buses de interfaz. En una realización, el procesador o procesadores 102 incluyen un controlador de memoria integrada 116 y un concentrador de controlador de plataforma 130. El controlador de memoria 116 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 100, mientras que el concentrador de controlador de plataforma (PCH) 130 proporciona conexiones a dispositivos de E/S a través de un bus de E/S local.
El dispositivo de memoria 120 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), un dispositivo de memoria flash, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como memoria de proceso. En una realización, el dispositivo de memoria 120 puede operar como memoria de sistema para el sistema 100, para almacenar datos 122 e instrucciones 121 para su uso cuando el uno o más procesadores 102 ejecutan una aplicación o proceso. El controlador de memoria 116 también se acopla con un procesador de gráficos externo opcional 112, que puede comunicarse con uno o más procesadores de gráficos 108 en los procesadores 102 para realizar operaciones de gráficos y de medios. En algunas realizaciones, un dispositivo de visualización 111 puede conectarse al procesador o procesadores 102. El dispositivo de visualización 111 puede ser uno o más de un dispositivo de visualización interno, como en un dispositivo electrónico móvil o un dispositivo portátil o un dispositivo de visualización externo conectado a través de una interfaz de pantalla (por ejemplo, DisplayPort, etc.). En una realización, el dispositivo de visualización 111 puede ser una pantalla montada en la cabeza (HMD), tal como un dispositivo de visualización estereoscópico para su uso en aplicaciones de realidad virtual (RV) o aplicaciones de realidad aumentada (RA).
En algunas realizaciones, el concentrador de controlador de plataforma 130 permite que los periféricos se conecten al dispositivo de memoria 120 y al procesador 102 a través de un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero no se limitan a, un controlador de audio 146, un controlador de red 134, una interfaz de firmware 128, un transceptor inalámbrico 126, sensores táctiles 125, un dispositivo de almacenamiento de datos 124 (por ejemplo, unidad de disco duro, memoria flash, etc.). El dispositivo de almacenamiento de datos 124 puede conectarse mediante una interfaz de almacenamiento (por ejemplo, SATA) o mediante un bus de periféricos, tal como un bus de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express). Los sensores táctiles 125 pueden incluir sensores de pantalla táctil, sensores de presión o sensores de huellas digitales. El transceptor inalámbrico 126 puede ser un transceptor de Wi-Fi, un transceptor de Bluetooth o un transceptor de red móvil tal como un transceptor de 3G, 4G o evolución a largo plazo (LTE). La interfaz de firmware 128 posibilita la comunicación con firmware de sistema y puede ser, por ejemplo, una interfaz de firmware ampliable unificada (UEFI). El controlador de red 134 puede posibilitar una conexión de red a una red cableada. En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de interfaz 110. El controlador de audio 146, en una realización, es un controlador de audio de alta definición de múltiples canales. En una realización, el sistema 100 incluye un controlador de E/S heredado opcional 140 para acoplar dispositivos heredados (por ejemplo, Sistema personal 2 (PS/2)) al sistema. El concentrador de controlador de plataforma 130 también puede conectarse a uno o más controladores de bus serie universal (USB) 142 para conectar dispositivos de entrada, tales como combinaciones de teclado y ratón 143, una cámara 144 u otros dispositivos de entrada USB.
Se apreciará que el sistema 100 mostrado es ejemplar y no limitativo, ya que también se pueden utilizar otros tipos de sistemas de procesamiento de datos que estén configurados de manera diferente. Por ejemplo, una instancia del controlador de memoria 116 y del concentrador de controlador de plataforma 130 puede integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 112. En una realización, el concentrador de controlador de plataforma 130 y/o el controlador de memoria 1160 pueden ser externos a uno o más procesadores 102. Por ejemplo, el sistema 100 puede incluir un controlador de memoria externa 116 y un concentrador de controlador de plataforma 130, que puede configurarse como un concentrador de controlador de memoria y un concentrador de controlador periférico dentro de un conjunto de chips del sistema que está en comunicación con el procesador o procesadores 102.
LaFigura 2es un diagrama de bloques de una realización de un procesador 200 que tiene uno o más núcleos de procesador 202A-202N, un controlador de memoria integrada 214 y un procesador de gráficos integrado 208. Aquellos elementos de la Figura 2 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otras partes en el presente documento, pero no se limitan a los mismas. El procesador 200 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 202N representado por los recuadros en línea discontinua. Cada uno de los núcleos de procesador 202A-202N incluye una o más unidades de caché internas 204A-204N. En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades de caché compartidas 206.
Las unidades de caché internas 204A-204N y las unidades de caché compartidas 206 representan una jerarquía de memoria caché dentro del procesador 200. La jerarquía de memoria caché puede incluir al menos un nivel de memoria caché de instrucciones y datos dentro de cada núcleo de procesador y uno o más niveles de memoria caché de nivel medio compartida, tal como Nivel 2 (L2), Nivel 3 (L3), Nivel 4 (L4) u otros niveles de memoria caché, donde el nivel más alto de memoria 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 distintas unidades de memoria caché 206 y 204A-204N.
En algunas realizaciones, el procesador 200 también puede incluir un conjunto de una o más unidades de controlador de bus 216 y un núcleo de agente de sistema 210. La o más unidades de controlador de bus 216 gestionan un conjunto de buses periféricos, tales como uno o más buses PCI o PCI express. El núcleo del agente del sistema 210 proporciona funcionalidad de gestión para los distintos componentes del procesador. En algunas realizaciones, el núcleo de agente del sistema 210 incluye uno o más controladores de memoria integrada 214 para gestionar el acceso a varios dispositivos de memoria externa (no se muestran).
En algunas realizaciones, uno o más de los núcleos de procesador 202A-202N incluyen soporte para procesamiento de múltiples hilos simultáneo. En dicha realización, el núcleo de agente de sistema 210 incluye componentes para coordinar y operar los núcleos 202A-202N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 210 puede incluir adicionalmente una unidad de control de energía (PCU), que incluye una lógica y componentes para regular el estado de potencia de los núcleos de procesador 202A-202N y el procesador de gráficos 208.
En algunas realizaciones, el procesador 200 incluye adicionalmente el procesador de gráficos 208 para ejecutar operaciones de procesamiento de gráficos. En algunas realizaciones, el procesador de gráficos 208 se acopla con el conjunto de unidades de memoria caché compartida 206 y el núcleo de agente del sistema 210, incluidos el uno o más controladores de memoria integrada 214. En algunas realizaciones, el núcleo de agente del sistema 210 también incluye un controlador de pantalla 211 para dirigir la salida del procesador de gráficos a una o más pantallas acopladas. En algunas realizaciones, el controlador de pantalla 211 también puede ser un módulo separado acoplado con el procesador de gráficos a través de al menos una interconexión, o puede estar integrado dentro del procesador de gráficos 208.
En algunas realizaciones, se utiliza una unidad de interconexión basada en anillo 212 para acoplar los componentes internos del procesador 200. Sin embargo, se puede utilizar una unidad de interconexión alternativa, tal como una interconexión punto a punto, una interconexión conmutada u otras técnicas, incluidas técnicas bien conocidas en la técnica. En algunas realizaciones, el procesador de gráficos 208 se acopla con la interconexión de anillo 212 a través de un enlace de E/S 213.
El enlace de E/S 213 ejemplar representa al menos una de múltiples variedades de interconexiones de E/S, incluida una interconexión de E/S en paquete que facilita la comunicación entre varios componentes del procesador y un módulo de memoria integrado de alto rendimiento 218, tal como un módulo eDRAM. En algunas realizaciones, cada uno de los núcleos de procesador 202A-202N y el procesador de gráficos 208 utilizan módulos de memoria integrada 218 como una memoria caché de último nivel compartida.
En algunas realizaciones, los núcleos de procesador 202A-202N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra realización, los núcleos de procesador 202A-202N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 202A-202N ejecutan un primer conjunto de instrucciones, mientras que al menos uno de los otros núcleos ejecuta un subconjunto del primer conjunto de instrucciones o un conjunto de instrucciones diferente. En una realización, los núcleos de procesador 202A-202N son heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de potencia relativamente más alto se acoplan con uno o más núcleos de potencia que tienen un consumo de energía más bajo. Adicionalmente, el procesador 200 se puede implementar en uno o más chips o como un circuito integrado de SoC que tiene los componentes ilustrados, además de otros componentes.
LaFigura 3es un diagrama de bloques de un procesador de gráficos 300, que puede ser una unidad de procesamiento de gráficos discreta o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento. En algunas realizaciones, el procesador de gráficos se comunica a través de una interfaz de E/S mapeada en memoria con registros en el procesador de gráficos y con comandos colocados en la memoria del procesador. En algunas realizaciones, el procesador de gráficos 300 incluye una interfaz de memoria 314 para acceder a la memoria. La interfaz de memoria 314 puede ser una interfaz a la memoria local, a una o más memorias caché internas, a una o más memorias caché externas compartidas y/o a la memoria del sistema.
En algunas realizaciones, el procesador de gráficos 300 también incluye un controlador de pantalla 302 para dirigir datos de salida de pantalla a un dispositivo de pantalla 320. El controlador de pantalla 302 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. El dispositivo de visualización 320 puede ser un dispositivo de visualización interno o externo. En una realización, el dispositivo de visualización 320 es un dispositivo de visualización montado en la cabeza, tal como un dispositivo de visualización de realidad virtual (RV) o un dispositivo de visualización de realidad aumentada (RA). En algunas realizaciones, el procesador de gráficos 300 incluye un motor de códec de vídeo 306 para codificar, decodificar o transcodificar medios hacia, desde o entre uno o más formatos de codificación de medios, incluidos, entre otros, los formatos del Grupo de expertos en imágenes en movimiento (MPEG), tales como MPEG-2, los formatos de codificación de vídeo avanzada (AVC), tales como H.264/MPEG-4 AVC, así como los formatos 421M/VC-1 de la Sociedad de ingenieros de cine y televisión (SMPTE) y los formatos del Grupo conjunto de expertos en fotografía (JPEG), tales como JPEG y Motion JPEG (MJPEG).
En algunas realizaciones, el procesador de gráficos 300 incluye un motor de transferencia de imágenes en bloques (BLIT) 304 para realizar operaciones de rasterización bidimensionales (2D), incluidas, por ejemplo, transferencias de bloques de límite de bits. Sin embargo, en una realización, las operaciones de gráficos 2D se realizan utilizando uno o más componentes del motor de procesamiento de gráficos (GPE) 310. En algunas realizaciones, GPE 310 es un motor de computación para realizar operaciones de gráficos, incluidas operaciones de gráficos tridimensionales (3D) y operaciones multimedia.
En algunas realizaciones, GPE 310 incluye una canalización 3D 312 para realizar operaciones 3D, tales como renderizar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas primitivas 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 312 incluye elementos de función fija y programable que realizan varias tareas dentro del elemento y/o generan hilos de ejecución hacia un subsistema 3D/de medios 315. Si bien la canalización 3D 312 se puede utilizar para realizar operaciones de medios, una realización de GPE 310 también incluye una canalización de medios 316 que se utiliza específicamente para realizar operaciones de medios, tales como posprocesamiento de vídeo y mejora de imágenes.
En algunas realizaciones, la canalización de medios 316 incluye unidades lógicas programables o de función fija para realizar una o más operaciones de medios especializadas, tales como aceleración de decodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar de, o en nombre del motor de codificador de vídeo 306. En algunas realizaciones, la canalización de medios 316 incluye, además, una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 315. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema 3D/de medios 315.
En algunas realizaciones, el subsistema 3D/de medios 315 incluye lógica para ejecutar hilos generados por la canalización 3D 312 y la canalización de medios 316. En una realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema 3D/de medios 315, que incluye una lógica de despacho de hilos para arbitrar y enviar las diversas solicitudes a los recursos de ejecución de hilos disponibles. Los recursos de ejecución incluyen una serie de unidades de ejecución de gráficos para procesar los hilos 3D y de medios. En algunas realizaciones, el subsistema 3D/de medios 315 incluye una o más memorias caché internas para instrucciones de hilos y datos. En algunas realizaciones, el subsistema también incluye memoria compartida, incluidos registros y memoria direccionable, para compartir datos entre hilos y almacenar datos de salida.
Motor de procesamiento de gráficos
LaFigura 4es un diagrama de bloques de un motor de procesamiento de gráficos 410 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 410 es una versión del GPE 310 que se muestra en laFigura 3. Los elementos de laFigura 4que tengan los mismos números (o nombres) de referencia que los elementos de cualquier otra figura aquí pueden operar o funcionar de cualquier manera similar a la descrita en otra parte aquí, pero no están limitados a ella. Por ejemplo, se ilustran la canalización 3D 312 y la canalización de medios 316 de laFigura 3. La canalización de medios 316 es opcional en algunas realizaciones del GPE 410 y es posible que no esté incluida explícitamente dentro del GPE 410. Por ejemplo y en al menos una realización, un procesador de medios y/o imágenes separado está acoplado al GPE 410.
En algunas realizaciones, GPE 410 se acopla con o incluye un transmisor de comandos 403, que proporciona un flujo de comandos a la canalización 3D 312 y/o a las canalizaciones de medios 316. En algunas realizaciones, el transmisor de comandos 403 está acoplado a una memoria, que puede ser una memoria del sistema o una o más de memoria caché interna y memoria caché compartida. En algunas realizaciones, el transmisor de comandos 403 recibe comandos de la memoria y envía los comandos a la canalización 3D 312 y/o a la canalización de medios 316. Los comandos son directivas extraídas de una memoria intermedia de anillo, que almacena comandos para la canalización 3D 312 y la canalización de medios 316. En una realización, la memoria intermedia de anillo puede incluir, además, memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización 3D 312 también pueden incluir referencias a datos almacenados en la memoria, tales como, entre otros, datos de vértices y geometría para la canalización 3D 312 y/o datos de imágenes y objetos de memoria para la canalización de medios 316. La canalización 3D 312 y la canalización de medios 316 procesan los comandos y datos realizando operaciones a través de la lógica dentro de las respectivas canalizaciones o despachando uno o más hilos de ejecución a una matriz de núcleos de gráficos 414. En una realización, la matriz de núcleos de gráficos 414 incluye uno o más bloques de núcleos de gráficos (por ejemplo, núcleo(s) gráfico(s) 415A, núcleo(s) gráfico(s) 415B), incluyendo cada bloque uno o más núcleos de gráficos. Cada núcleo de gráficos incluye un conjunto de recursos de ejecución de gráficos que incluye lógica de ejecución de gráficos de propósito general y específica para realizar operaciones de gráficos y computación, así como procesamiento de textura de función fija y/o aprendizaje automático y lógica de aceleración de inteligencia artificial.
En diversas realizaciones, la canalización 3D 312 incluye lógica de función fija y programable para procesar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cálculo u otros programas de sombreado, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleos de gráficos 414. La matriz de núcleos de gráficos 414 proporciona un bloque unificado de recursos de ejecución para su uso en el procesamiento de estos programas de sombreado. La lógica de ejecución de múltiples propósitos (por ejemplo, unidades de ejecución) dentro del núcleo o núcleos de gráficos 415A-414B de la matriz de núcleos de gráficos 414 incluye el 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úcleos de gráficos 414 también incluye lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. En una realización, las unidades de ejecución incluyen adicionalmente 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 en conjunto con la lógica de propósito general dentro del núcleo o núcleos del procesador 107 de la Figura 1 o el núcleo 202A-202N como en la Figura 2.
Los datos de salida generados por los hilos que se ejecutan en la matriz de núcleos de gráficos 414 pueden generar datos en la memoria en una memoria intermedia de retorno unificada (URB) 418. La URB 418 puede almacenar datos para múltiples hilos. En algunas realizaciones, la URB 418 se puede utilizar para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleos de gráficos 414. En algunas realizaciones, la URB 418 puede usarse adicionalmente para la sincronización entre hilos en la matriz de núcleos de gráficos y la lógica de función fija dentro de la lógica de función compartida 420.
En algunas realizaciones, la matriz de núcleos de gráficos 414 se puede escalar, de tal forma que la matriz incluye un número variable de núcleos de gráficos, cada uno de los cuales tiene un número variable de unidades de ejecución basado en la potencia objetivo y el nivel de rendimiento del GPE 410. En una realización, los recursos de ejecución se pueden escalar dinámicamente, de tal forma que los recursos de ejecución se pueden activar o desactivar según sea necesario.
La matriz de núcleos de gráficos 414 se acopla con la lógica de funciones compartidas 420 que incluye múltiples recursos que son compartidos entre los núcleos de gráficos en la matriz de núcleos de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 420 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleos de gráficos 414. En varias realizaciones, la lógica de función compartida 420 incluye, entre otros, el muestreador 421, el bloque de matemática 422 y la lógica de comunicación entre hilos (ITC) 423. Además, algunas realizaciones implementan una o más memorias caché 425 dentro de la lógica de función compartida 420.
Se implementa una función compartida cuando la demanda de una función especializada dada es insuficiente para su inclusión dentro de la matriz de núcleos de gráficos 414. En lugar de ello, se implementa una única instancia de esa función especializada como una entidad independiente en la lógica de función compartida 420 y se comparte entre los recursos de ejecución dentro de la matriz de núcleos de gráficos 414. El conjunto preciso de funciones que se comparten entre la matriz de núcleos de gráficos 414 y que se incluyen dentro de la matriz de núcleos de gráficos 414 varía según las realizaciones. En algunas realizaciones, las funciones compartidas específicas dentro de la lógica de función compartida 420 que son utilizadas ampliamente por la matriz de núcleos de gráficos 414 pueden incluirse dentro de la lógica de función compartida 416 dentro de la matriz de núcleos de gráficos 414. En diversas realizaciones, la lógica de función compartida 416 dentro de la matriz de núcleos de gráficos 414 puede incluir parte o toda la lógica dentro de la lógica de función compartida 420. En una realización, todos los elementos lógicos dentro de la lógica de función compartida 420 pueden duplicarse dentro de la lógica de función compartida 416 de la matriz de núcleos de gráficos 414. En una realización, la lógica de función compartida 420 se excluye en favor de la lógica de función compartida 416 dentro de la matriz de núcleos de gráficos 414.
LaFigura 5es un diagrama de bloques de la lógica de hardware de un núcleo de procesador de gráficos 500, de acuerdo con algunas realizaciones descritas en el presente documento. Los elementos de laFigura 5que tengan los mismos números (o nombres) de referencia que los elementos de cualquier otra figura aquí pueden operar o funcionar de cualquier manera similar a la descrita en otra parte aquí, pero no están limitados a ella. El núcleo de procesador de gráficos 500 ilustrado, en algunas realizaciones, está incluido dentro de la matriz de núcleo de gráficos 414 de laFigura 4. El núcleo del procesador de gráficos 500, a veces denominado segmento de núcleo, puede ser uno o varios núcleos de gráficos dentro de un procesador de gráficos modular. El núcleo del procesador de gráficos 500 es un ejemplo de un segmento de núcleo de gráficos, y un procesador de gráficos como se describe en este documento puede incluir múltiples segmentos de núcleo de gráficos basados en envolventes de potencia y rendimiento objetivo. Cada núcleo de procesador de gráficos 500 puede incluir un bloque de función fija 530 acoplado a múltiples subnúcleos 501A-501F, también denominados subsegmentos, que incluyen bloques modulares de lógica de función fija y de propósito general.
En algunas realizaciones, el bloque de función fija 530 incluye una canalización de geometría/función fija 536 que puede ser compartida por todos los subnúcleos en el núcleo de procesador de gráficos 500, por ejemplo, en implementaciones de procesador de gráficos de menor rendimiento y/o menor potencia. En diversas realizaciones, la canalización de función fija/geometría 536 incluye una canalización de función fija 3D (por ejemplo, la canalización 3D 312 como en laFigura 3y laFigura 4), una unidad de extremo frontal de vídeo, un generador de hilos y un despachador de hilos, y un administrador de memoria intermedia de retorno unificado, que administra memorias intermedias de retorno unificado, tal como la memoria intermedia de retorno unificado 418 de laFigura 4.
En una realización, el bloque de función fija 530 también incluye una interfaz de SoC de gráficos 537, un microcontrolador de gráficos 538 y una canalización de medios 539. La interfaz SoC de gráficos 537 proporciona una interfaz entre el núcleo de procesador de gráficos 500 y otros núcleos de procesador dentro de un circuito integrado de sistema en chip. El microcontrolador de gráficos 538 es un subprocesador programable que se puede configurar para gestionar varias funciones del núcleo de procesador de gráficos 500, incluido el despacho de hilos, la planificación y la priorización. La canalización de medios 539 (por ejemplo, la canalización de medios 316 de laFigura 3y laFigura 4) incluye lógica para facilitar la decodificación, codificación, preprocesamiento y/o posprocesamiento de datos multimedia, incluidos datos de imagen y vídeo. La canalización multimedia 539 implementa operaciones multimedia a través de solicitudes para calcular o muestrear lógica dentro de los subnúcleos 501 -501F.
En una realización, la interfaz de SoC 537 permite que el núcleo de procesador de gráficos 500 se comunique con núcleos de procesador de aplicaciones de propósito general (por ejemplo, CPU) y/u otros componentes dentro de un SoC, incluyendo elementos de jerarquía de memoria tales como una memoria caché de último nivel compartida, la RAM de sistema y/o DRAM integrada en chip o en paquete. La interfaz SoC 537 también puede permitir la comunicación con dispositivos de función fija dentro del SoC, tal como por ejemplo canalizaciones de imágenes de cámaras, y permite el uso y/o implementa memorias atómicas globales que pueden compartirse entre el núcleo de procesador de gráficos 500 y las CPU dentro del SoC. La interfaz SoC 537 también puede implementar controles de administración de energía para el núcleo de procesador de gráficos 500 y habilitar una interfaz entre un dominio de reloj del núcleo de gráficos 500 y otros dominios de reloj dentro del SoC. En una realización, la interfaz de SoC 537 permite la recepción de memorias intermedias de comandos desde un emisor de flujo continuo de comandos y un despachador de hilos global que están configurados para proporcionar comandos e instrucciones a cada uno de uno o más núcleos de gráficos dentro de un procesador de gráficos. Los comandos e instrucciones se pueden despachar a la canalización de medios 539, cuando se deben realizar operaciones de medios, o a una canalización de geometría y función fija (por ejemplo, canalización de geometría y función fija 536, canalización de geometría y función fija 514) cuando se deben realizar operaciones de procesamiento de gráficos.
El microcontrolador de gráficos 538 se puede configurar para realizar varias tareas de planificación y gestión para el núcleo de procesador de gráficos 500. En una realización, el microcontrolador de gráficos 538 puede realizar una planificación de carga de trabajo de gráficos y/o de cálculo en los diversos motores paralelos de gráficos dentro de las matrices de unidades de ejecución (UE) 502A-502F, 504A-504F dentro de los subnúcleos 501A-501F. En este modelo de planificación, el software del anfitrión que se ejecuta en un núcleo de CPU de un SoC que incluye el núcleo de procesador de gráficos 500 puede enviar cargas de trabajo a uno de varios timbres del procesador de gráficos, lo que invoca una operación de planificación en el motor de gráficos apropiado. Las operaciones de planificación incluyen determinar qué carga de trabajo ejecutar a continuación, enviar una carga de trabajo a un transmisor de comandos, priorizar las cargas de trabajo existentes que se ejecutan en un motor, monitorizar el progreso de una carga de trabajo y notificar al software del anfitrión cuando se completa una carga de trabajo. En una realización, el microcontrolador de gráficos 538 también puede facilitar estados de baja potencia o en reposo para el núcleo de procesador de gráficos 500, proporcionando al núcleo de procesador de gráficos 500 la capacidad de guardar y recuperar registros dentro del núcleo de procesador de gráficos 500 a través de transiciones de estado de baja potencia de forma independiente desde el sistema operativo y/o el software de controlador de gráficos en el sistema.
El núcleo de procesador de gráficos 500 puede tener más o menos de los subnúcleos ilustrados 501A-501F, hasta N subnúcleos modulares. Para cada conjunto de N subnúcleos, el núcleo de procesador de gráficos 500 también puede incluir lógica de función compartida 510, memoria compartida y/o caché 512, una canalización de función fija/geométrica 514, así como lógica de función fija adicional 516 para acelerar varias operaciones de procesamiento de gráficos y cálculo. La lógica de función compartida 510 puede incluir unidades lógicas asociadas con la lógica de función compartida 420 de laFigura 4(por ejemplo, lógica de comunicación entre hilos, matemáticas y/o de muestreo) que pueden ser compartidas por cada uno de los N subnúcleos dentro del núcleo de procesador de gráficos 500. La memoria compartida y/o memoria caché 512 puede ser una memoria caché de último nivel para el conjunto de N subnúcleos 501A-501F dentro del núcleo de procesador de gráficos 500, y también puede servir como memoria compartida a la que pueden acceder múltiples subnúcleos. La canalización de geometría/función fija 514 se puede incluir en lugar de la canalización de geometría/función fija 536 dentro del bloque de función fija 530 y puede incluir las mismas unidades lógicas o similares.
En una realización, el núcleo de procesador de gráficos 500 incluye una lógica de función fija adicional 516 que puede incluir diversa lógica de aceleración de función fija para su uso por el núcleo de procesador de gráficos 500. En una realización, la lógica de función fija adicional 516 incluye una canalización de geometría adicional para su uso en sombreado únicamente de posición. En el sombreado de solo posición, existen dos canalizaciones de geometría: la canalización de geometría completa dentro de la canalización de geometría/función fija 516, 536, y una canalización de selección, que es una canalización de geometría adicional que puede incluirse dentro de la lógica de función fija adicional 516. En una realización, la canalización de selección es una versión recortada de la canalización de geometría completa. La canalización completa y la canalización de selección pueden ejecutar diferentes instancias de la misma aplicación, teniendo cada instancia un contexto separado. El sombreado de solo posición puede ocultar largas tiradas de triángulos descartados, lo que permite que el sombreado se complete antes en algunos casos. Por ejemplo, y en una realización, la lógica de canalización de selección dentro de la lógica de función fija adicional 516 puede ejecutar sombreadores de posición en paralelo con la aplicación principal y generalmente genera resultados críticos más rápido que la canalización completa, ya que la canalización de selección extrae y sombrea únicamente el atributo de posición de los vértices, sin realizar la rasterización y representación de los píxeles en la memoria intermedia de fotogramas. La canalización de selección puede usar los resultados críticos generados para calcular la información de visibilidad de todos los triángulos sin importar si esos triángulos se seleccionan o no. La canalización completa (que en este caso puede denominarse canalización de reproducción) puede consumir la información de visibilidad para omitir los triángulos seleccionados y sombrear solo los triángulos visibles que finalmente pasan a la fase de rasterización.
En una realización, la lógica de función fija adicional 516 también puede incluir lógica de aceleración de aprendizaje automático, tal como lógica de multiplicación matricial de función fija, para implementaciones que incluyen optimizaciones para entrenamiento o inferencia de aprendizaje automático.
Dentro de cada subnúcleo de gráficos 501A-501F se incluye un conjunto de recursos de ejecución que pueden usarse para realizar operaciones gráficas, multimedia y de cálculo en respuesta a solicitudes de la canalización de gráficos, la canalización multimedia o los programas de sombreado. Los subnúcleos de gráficos 501A-501F incluyen múltiples matrices de UE 502A-502F, 504A-504F, lógica de despacho de hilos y comunicación entre hilos (TD/IC) 503A-503F, un muestreador 3D (por ejemplo, textura) 505A-505F, un muestreador de medios 506A-506F, un procesador de sombreado 507A-507F y memoria local compartida (SLM) 508A-508F. Las matrices de UE 502A-502F, 504A-504F incluyen cada una múltiples unidades de ejecución, que son unidades de procesamiento de gráficos de propósito general capaces de realizar operaciones lógicas de punto flotante y de punto fijo/entero al servicio de una operación de gráficos, medios o computación, incluidos programas de sombreado de gráficos, medios o computación. La lógica de TD/IC 503A-503F realiza operaciones de control de hilos y de despacho de hilos locales para las unidades de ejecución dentro de un subnúcleo y facilita la comunicación entre hilos que se ejecutan en las unidades de ejecución del subnúcleo. El muestreador 3D 505A-505F puede leer texturas u otros datos relacionados con gráficos 3D en memoria. El muestreador 3D puede leer datos de textura de manera diferente basándose en el estado de muestra configurado y en el formato de textura asociado con una textura dada. El muestreador multimedia 506A-506F puede realizar operaciones de lectura similares basándose en el tipo y en el formato asociados con datos multimedia. En una realización, cada subnúcleo de gráficos 501A-501F puede incluir, como alternativa, un muestreador de 3D y de medios unificado. Los hilos que se ejecutan en las unidades de ejecución dentro de cada uno de los subnúcleos 501A-501F pueden hacer uso de la memoria local compartida 508A a 508F dentro de cada subnúcleo, para permitir que los hilos que se ejecutan dentro de un grupo de hilos se ejecuten utilizando un grupo común de memoria en el chip.
Unidades de ejecución
Las Figuras 6A-6B ilustran la lógica de ejecución de hilos 600 que incluye una matriz de elementos de procesamiento empleados en un núcleo de procesador de gráficos según las realizaciones descritas en este documento. Los elementos de las Figuras 6A-6B que tienen los mismos números de referencia (o nombres) que los elementos de cualquier otra figura de este documento pueden operar o funcionar de cualquier manera similar a la descrita en otro lugar de este documento, pero no se limitan a ello. LaFigura6A ilustra una vista general de la lógica de ejecución de hilos 600, que puede incluir una variante de la lógica de hardware ilustrada con cada subnúcleo 501A-501F de la Figura 5. LaFigura6B ilustra detalles internos de ejemplo de una unidad de ejecución.
Como se ilustra en laFigura 6A, en algunas realizaciones, la lógica de ejecución de hilos 600 incluye un procesador de sombreado 602, un despachador de hilos 604, una memoria caché de instrucciones 606, una matriz de unidad de ejecución escalable que incluye una pluralidad de unidades de ejecución 608A-608N, un muestreador 610, una caché de datos 612 y un puerto de datos 614. En una realización, la matriz de unidades de ejecución escalable puede escalar dinámicamente habilitando o deshabilitando una o más unidades de ejecución (por ejemplo, cualquiera de las unidades de ejecución 608A, 608B, 608C, 608D a 608N-1 y 608N) en función de las necesidades de cálculo de una carga de trabajo. En una realización, los componentes incluidos se interconectan por medio de un estructura de interconexión que se enlaza con cada uno de los componentes. En algunas realizaciones, la lógica de ejecución de hilos 600 incluye una o más conexiones a memoria, tal como por ejemplo una memoria de sistema o memoria caché, a través de una o más de la memoria caché de instrucciones 606, el puerto de datos 614, el muestreador 610 y las unidades de ejecución 608A-608N. En algunas realizaciones, cada unidad de ejecución (por ejemplo, 608A) es una unidad computacional de propósito general programable independiente que es capaz de ejecutar múltiples hilos de hardware simultáneos mientras procesa múltiples elementos de datos en paralelo para cada hilo. En diversas realizaciones, la matriz de unidades de ejecución 608A-608N es ajustable a escala para incluir cualquier número de unidades de ejecución individuales.
En algunas realizaciones, las unidades de ejecución 608A-608N se usan principalmente para ejecutar programas de sombreador. Un procesador de sombreado 602 puede procesar los diversos programas de sombreado y despachar hilos de ejecución asociados con los programas de sombreado a través de un despachador de hilos 604. En una realización, el despachador de hilos incluye lógica para arbitrar solicitudes de iniciación de hilos desde las canalizaciones de gráficos y medios e instanciar los hilos solicitados en una o varias unidades de ejecución en las unidades de ejecución 608A-608N. Por ejemplo, una canalización de geometría puede enviar sombreadores de vértices, teselación o geometría a la lógica de ejecución de hilos para su procesamiento. En algunas realizaciones, el despachador de hilos 604 puede procesar también hilos en tiempo de ejecución que generan solicitudes desde los programas sombreadores de ejecución.
En algunas realizaciones, las unidades de ejecución 608A-608N soportan un conjunto de instrucciones que incluye un soporte nativo para muchas instrucciones de sombreador de gráficos 3D convencionales, de modo que los programas sombreadores desde bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traducción mínima. Las unidades de ejecución admiten el procesamiento de vértices y geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y procesamiento de propósito general (por ejemplo, sombreadores de medios y de computación). Cada una de las unidades de ejecución 608A-608N es capaz de ejecutar múltiples instrucciones únicas y múltiples datos (SIMD) y la operación multihilo permite un entorno de ejecución eficiente frente a accesos a memoria de mayor latencia. 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 se realiza mediante múltiples emisiones por reloj hacia canalizaciones capaces de realizar operaciones con números enteros, de punto flotante de precisión simple y doble, capacidad de ramificación SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones diversas. Mientras se esperan los datos de la memoria o una de las funciones compartidas, la lógica de dependencia dentro de las unidades de ejecución 608A-608N hace que un hilo en espera pase a inactividad hasta que se devuelvan los datos solicitados. Mientras el hilo en espera está inactivo, los recursos de hardware pueden dedicarse a procesar otros hilos. Por ejemplo, durante un retraso asociado con una operación de sombreador de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, un sombreador de fragmentos u otro tipo de programa de sombreado, incluido un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 608A-608N opera sobre matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución" o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso a elementos de datos, el enmascaramiento y el control de flujo dentro de las instrucciones. La cantidad de canales puede ser independiente de la cantidad de unidades aritméticas lógicas (ALU) o unidades de punto flotante (FPU) físicas para un procesador de gráficos en particular. En algunas realizaciones, las unidades de ejecución 608A-608N soportan tipos de datos de números enteros y de coma flotante.
El conjunto de instrucciones de la unidad de ejecución incluye instrucciones SIMD. Los distintos elementos de datos se pueden almacenar como un tipo de datos empaquetado en un registro y la unidad de ejecución procesará los distintos elementos en función del tamaño de los datos de los elementos. Por ejemplo, cuando se opera en un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera en el vector como cuatro elementos de datos empaquetados separados de 64 bits (elementos de datos de tamaño Quad-Word (QW)), ocho elementos de datos empaquetados separados de 32 bits (elementos de datos de tamaño Double Word (DW)), dieciséis elementos de datos empaquetados separados de 16 bits (elementos de datos de tamaño Word (W)) o treinta y dos elementos de datos separados de 8 bits (elementos de datos de tamaño byte (B)). Sin embargo, son posibles diferentes anchos de vector y tamaños de registro.
En una realización, una o más unidades de ejecución se pueden combinar en una unidad de ejecución fusionada 609A-609N que tiene una lógica de control de hilos (607A-607N) que es común a las UE fusionadas. Es posible fusionar varias UE en un grupo de UE. Cada UE del grupo de UE fusionado se puede configurar para ejecutar un hilo de hardware SIMD independiente. El número de UE en un grupo de UE fusionadas puede variar de acuerdo con realizaciones. Además, se pueden realizar varios anchos de SIMD por UE, incluidos, entre otros, SIMD8, SIMD16 y SIMD32. Cada unidad de ejecución de gráficos fusionada 609A-609N incluye al menos dos unidades de ejecución. Por ejemplo, la unidad de ejecución fusionada 609A incluye una primera UE 608A, una segunda UE 608B y una lógica de control de hilos 607A que es común a la primera UE 608A y a la segunda UE 608B. La lógica de control de hilos 607A controla los hilos ejecutados en la unidad de ejecución de gráficos fusionada 609A, permitiendo que cada UE dentro de las unidades de ejecución fusionadas 609A-609N se ejecute usando un registro de puntero de instrucción común.
Una o más memorias caché de instrucciones internas (por ejemplo, 606) se incluyen en la lógica de ejecución del hilo 600 para almacenar en caché las instrucciones del hilo para las unidades de ejecución. En algunas realizaciones, se incluyen una o más cachés de datos (por ejemplo, 612) para almacenar en memoria caché los datos del hilo durante la ejecución del hilo. En algunas realizaciones, se incluye un muestreador 610 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunas realizaciones, el muestreador 610 incluye una funcionalidad especializada de muestreo de texturas o medios para procesar datos de texturas o medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, las canalizaciones de gráficos y de medios envían solicitudes de iniciación de hilo a la lógica de ejecución de hilos 600 por medio de 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 en datos de píxeles, se invoca la lógica del procesador de píxeles (por ejemplo, la lógica del sombreador de píxeles, la lógica del sombreador de fragmentos, etc.) dentro del procesador de sombreado 602 para calcular más información de salida y hacer que los resultados se escriban en superficies de salida (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de patrones, etc.). En algunas realizaciones, un sombreador de píxeles o un sombreador de fragmentos calcula los valores de los diversos atributos de vértice que se van a interpolar a lo largo del objeto rasterizado. En algunas realizaciones, la lógica de procesador de píxeles dentro del procesador de sombreador 602 ejecuta a continuación un píxel suministrado por la interfaz de programación de aplicación (API) o programa de sombreador de fragmentos. Para ejecutar el programa de sombreado, el procesador de sombreado 602 despacha hilos a una unidad de ejecución (por ejemplo, 608A) mediante el despachador de hilos 604. En algunas realizaciones, el procesador de sombreador 602 usa la lógica de muestreo de textura en el muestreador 610 para acceder a datos de textura en mapas de textura almacenados en memoria. Operaciones aritméticas sobre los datos de textura y los datos de geometría de entrada calculan datos de color de píxel para cada fragmento geométrico, o descartan el procesamiento adicional de uno o más píxeles.
En algunas realizaciones, el puerto de datos 614 proporciona un mecanismo de acceso a memoria para que la lógica de ejecución de hilos 600 emita datos procesados a memoria para su procesamiento adicional en una canalización de salida de procesador de gráficos. En algunas realizaciones, el puerto de datos 614 incluye o se acopla a una o más memorias caché (por ejemplo, la caché de datos 612) para almacenar en caché datos para el acceso a memoria mediante el puerto de datos.
Como se ilustra en laFigura 6B, una unidad de ejecución de gráficos 608 puede incluir una unidad de extracción de instrucciones 637, una matriz de archivo de registro general (GRF) 624, una matriz de archivo de registro arquitectónico (ARF) 626, un árbitro de hilos 622, una unidad de envío 630, una unidad de bifurcación 632, un conjunto de unidades de coma flotante (FPU) de SIMD 634 y, en una realización, un conjunto de ALU de SIMD de números enteros especializadas 635. El GRF 624 y el ARF 626 incluyen el conjunto de archivos de registro general y archivos de registro de arquitectura asociados con cada hilo de hardware simultáneo que puede estar activo en la unidad de ejecución de gráficos 608. En una realización, el estado arquitectónico por hilo se mantiene en el ARF 626, mientras que los datos utilizados durante la ejecución del hilo se almacenan en el GRF 624. El estado de ejecución de cada hilo, incluyendo los punteros de instrucción para cada hilo, puede mantenerse en registros específicos de hilos en el ARF 626.
En una realización, la unidad de ejecución de gráficos 608 tiene una arquitectura que es una combinación de múltiples hilos simultáneos (SMT) y múltiples hilos entrelazados de precisión (IMT). La arquitectura tiene una configuración modular que puede ajustarse con precisión en tiempo de diseño basándose en un número objetivo de hilos simultáneos y en un número de registros por unidad de ejecución, donde los recursos de unidad de ejecución se dividen a través de la lógica usada para ejecutar múltiples hilos simultáneos.
En una realización, la unidad de ejecución de gráficos 608 puede emitir conjuntamente múltiples instrucciones, cada una de las cuales puede ser instrucciones diferentes. El árbitro de hilos 622 del hilo de la unidad de ejecución de gráficos 608 puede despachar las instrucciones a una de la unidad de envío 630, la unidad de ramificación 6342 o la(s) FPU de SIMD 634 para su ejecución. Cada hilo de ejecución puede acceder a 128 registros de propósito general dentro del GRF 624, donde cada registro puede almacenar 32 bytes, accesibles como un vector de 8 elementos de SIMD de elementos de datos de 32 bits. En una realización, cada hilo de unidad de ejecución tiene acceso a 4 Kbytes dentro del GRF 624, aunque las realizaciones no están así limitadas y, en otras realizaciones, se pueden proporcionar más o menos recursos de registro. En una realización, hasta siete hilos pueden ejecutarse simultáneamente, aunque el número de hilos por unidad de ejecución también puede variar de acuerdo con realizaciones. En una realización en la que siete hilos pueden acceder a 4 Kbytes, el GRF 624 puede almacenar un total de 28 Kbytes. Los modos de direccionamiento flexibles pueden permitir que los registros se direccionen juntos para construir registros más amplios de manera efectiva o para representar estructuras de datos de bloques rectangulares escalonados.
En una realización, las operaciones de memoria, las operaciones de muestreo y otras comunicaciones de sistema de latencia más larga se despachan mediante instrucciones de "envío" que son ejecutadas por la unidad de envío de paso de mensajes 630. En una realización, las instrucciones de bifurcación se despachan a una unidad de bifurcación especializada 632 para facilitar la divergencia de SIMD y la eventual convergencia.
En una realización, la unidad de ejecución de gráficos 608 incluye una o más unidades de SIMD de coma flotante (una(s) FPU) 634 para realizar operaciones de coma flotante. En una realización, la(s) FPU 634 también soporta(n) el cálculo de números enteros. En una realización, la(s) FPU 634 puede(n) ejecutar SIMD hasta un número M de operaciones de coma flotante (o de números enteros) de 32 bits, o ejecutar SIMD hasta 2M operaciones de números enteros de 16 bits o de coma flotante de 16 bits. En una realización, al menos una de la(s) FPU proporciona una capacidad de cálculo matemático ampliada para soportar funciones de cálculo matemático trascendental de alto caudal y coma flotante de 64 bits de doble precisión. En algunas realizaciones, también está presente un conjunto de ALU de SIMD 635 de números enteros de 8 bits, y puede optimizarse específicamente para realizar operaciones asociadas con cálculos de aprendizaje automático.
En una realización, matrices de múltiples instancias de la unidad de ejecución de gráficos 608 pueden instanciarse en un agrupamiento de subnúcleos de gráficos (por ejemplo, un subsegmento). Para lograr escalabilidad, los arquitectos de producto pueden elegir el número exacto de unidades de ejecución por agrupamiento de subnúcleos. En una realización, la unidad de ejecución 608 puede ejecutar instrucciones a través de una pluralidad de canales de ejecución. En otra realización, cada hilo ejecutado en la unidad de ejecución de gráficos 608 se ejecuta en un canal diferente.
LaFigura 7es un diagrama de bloques que ilustra los formatos de instrucción 700 del procesador de gráficos de acuerdo con algunas realizaciones. En una o más realizaciones, las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros con línea continua ilustran los componentes que se incluyen en general en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que únicamente están incluidos en un subconjunto de las instrucciones. En algunas realizaciones, el formato de instrucciones 700 descrito e ilustrado son macroinstrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a microoperaciones resultantes de la decodificación de instrucciones una vez que se ha procesado la instrucción.
En algunas realizaciones, las unidades de ejecución del procesador de gráficos admiten de forma nativa instrucciones en un formato de instrucción de 128 bits 710. Un formato de instrucción compacta de 64 bits 730 está disponible para algunas instrucciones basándose en la instrucción, las opciones de instrucción y el número de operandos seleccionados. El formato de instrucción de 128 bits nativo 710 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 730. Las instrucciones nativas disponibles en el formato de 64 bits 730 varían por realización. En algunas realizaciones, la instrucción se compacta en parte usando un conjunto de valores de índice en un campo de índice 713. El hardware de la unidad de ejecución hace referencia a un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 710.
Para cada formato, el código de operación de instrucción 712 define la operación que la unidad de ejecución debe realizar. 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 adición, la unidad de ejecución realiza una operación de adición simultánea en cada canal de color que representa un elemento de textura o un elemento de imagen. Por defecto, la unidad de ejecución realiza cada instrucción a través de todos los canales de datos de los operandos. En algunas realizaciones, el campo de control de instrucción 714 permite el control sobre ciertas opciones de ejecución, tal como la selección de canales (por ejemplo, predicación) y el orden de los canales de datos (por ejemplo, mezcla). Para las instrucciones en el formato de instrucción de 128 bits 710, un campo de tamaño de ejecución 716 limita el número de canales de datos que se ejecutarán en paralelo. En algunas realizaciones, el campo de tamaño de ejecución 716 no está disponible para su uso en el formato de instrucción compacto de 64 bits 730.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos que incluyen dos operandos de origen, src0 720, src1 722, y un destino 718. En algunas realizaciones, las unidades de ejecución soportan instrucciones de destino dual, donde está implicado uno de los destinos. Las instrucciones de manipulación de datos pueden tener un tercer operando fuente (por ejemplo, SRC2 724), donde el código de operación de la instrucción 712 determina el número de operandos fuente. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de manera fija) pasado con la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 710 incluye un campo de modo de acceso/dirección 726 que especifica, por ejemplo, si se usa el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se utiliza el modo de direccionamiento de registro directo, la dirección de registro de uno o varios operandos es proporcionada directamente por bits en la instrucción.
En algunas realizaciones, el formato de instrucción de 128 bits 710 incluye un campo de modo de acceso/dirección 726, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una realización, el modo de acceso se usa para definir una alineación de acceso a 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 direccionamiento alineado a bytes para los operandos de origen y destino y cuando está en un segundo modo, la instrucción puede usar direccionamiento alineado a 16 bytes para todos los operandos de origen y destino.
En una realización, la porción de modo de dirección del campo de modo de acceso/dirección 726 determina si la instrucción ha de usar el direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, bits en la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se utiliza el modo de direccionamiento de registro indirecto, la dirección de registro de uno o más operandos se puede calcular en función de un valor de registro de dirección y un campo inmediato de dirección en la instrucción.
En algunas realizaciones, las instrucciones se agrupan basándose en los campos de bits del código de operación 712 para simplificar la decodificación de código de operación 740. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación precisa de códigos de operación que se muestra es simplemente un ejemplo. En algunas realizaciones, un grupo de código de operación de movimiento y lógica 742 incluye instrucciones lógicas y de movimiento de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas realizaciones, el grupo de movimiento y lógica 742 comparte los cinco bits más significativos (MSB), donde las instrucciones de movimiento (mov) están tienen la forma 0000xxxxb y las instrucciones lógicas tienen la forma 0001xxxxb. Un grupo de instrucciones de control de flujo 744 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 746 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, esperar, enviar) en la forma de 0011xxxxb (por ejemplo, 0x30). Un grupo paralelo de instrucciones matemáticas 748 incluye instrucciones aritméticas por componentes (por ejemplo, sumar, multiplicar (mul)) en la forma de 0100xxxxb (por ejemplo, 0x40). El grupo paralelo de cálculo matemático 748 lleva a cabo las operaciones aritméticas en paralelo a lo largo de canales de datos. El grupo matemático vectorial 750 incluye instrucciones aritméticas (por ejemplo, dp4) en la forma de 0101xxxxb (por ejemplo, 0x50). El grupo matemático vectorial realiza operaciones aritméticas tales como cálculos de productos escalares en operandos vectoriales.
Canalización de gráficos
LaFigura 8es un diagrama de bloques de otra realización de un procesador de gráficos 800. Aquellos elementos de laFigura 8que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto.
En algunas realizaciones, el procesador de gráficos 800 incluye una canalización de geometría 820, una canalización de medios 830, un motor de visualización 840, una lógica de ejecución de hilos 850 y una canalización de salida de representación 870. En algunas realizaciones, el procesador de gráficos 800 es un procesador de gráficos dentro de un sistema de procesamiento multinúcleo que incluye uno o más núcleos de procesamiento de propósito general. El procesador de gráficos se controla por las escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 800 mediante una interconexión en anillo 802. En algunas realizaciones, la interconexión de anillo 802 acopla el procesador de gráficos 800 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de fin general. Los comandos de la interconexión de anillo 802 son interpretados por un transmisor en continuo de comandos 803, que suministra instrucciones a componentes individuales de la canalización de geometría 820 o la canalización de medios 830.
En algunas realizaciones, el emisor de envío por flujo continuo 803 dirige la operación de un extractor de vértices 805 que lee los datos de vértices de memoria y ejecuta comandos de procesamiento de vértices proporcionados por el emisor de envío por flujo continuo 803. En algunas realizaciones, el extractor de vértices 805 proporciona datos de vértice a un sombreador de vértices 807, 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 805 y el sombreador de vértices 807 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a unidades de ejecución 852A-852B mediante un despachador de hilos 831.
En algunas realizaciones, las unidades de ejecución 852A-852B son una matriz de procesadores 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 852A-852B tienen una caché L1 851 adjunta que es específica para cada matriz o que se comparte entre las matrices. La memoria caché se puede configurar como una memoria caché de datos, una memoria caché de instrucciones o una única memoria caché que se subdivide para contener datos e instrucciones en diferentes particiones.
En algunas realizaciones, la canalización de geometría 820 incluye componentes de teselación para realizar una teselación acelerada por hardware de objetos 3D. En algunas realizaciones, un sombreador de envolvente programable 811 configura las operaciones de teselado. Un sombreador de domino programable 817 proporciona una evaluación de extremo trasero de la salida de teselación. Un teselador 813 opera en la dirección del sombreador de casco 811 y contiene una lógica de propósito especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico aproximado que se proporciona como entrada a la canalización de geometría 820. En algunas realizaciones, si no se usa la teselación, pueden omitirse los componentes de teselación (por ejemplo, el sombreador de casco 811, el teselador 813 y el sombreador de dominio 817).
En algunas realizaciones, pueden procesarse objetos geométricos completos por un sombreador de geometría 819 mediante uno o más hilos despachados a unidades de ejecución 852A-852B, o pueden continuar directamente al recortador 829. En algunas realizaciones, el sombreador de geometría opera sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en etapas previas de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 819 recibe una entrada desde el sombreador de vértices 807. En algunas realizaciones, el sombreador de geometría 819 es programable por un programa de sombreador de geometría para realizar teselación de geometría si las unidades de teselación están desactivadas.
Antes de la rasterización, un recortador 829 procesa datos de vértices. El recortador 829 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y sombreador de geometría. En algunas realizaciones, un componente de prueba de rasterizador y profundidad 873 en la canalización de salida del representador 870 despacha sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxeles. En algunas realizaciones, la lógica de sombreador de píxeles está incluida en la lógica de ejecución de hilos 850. En algunas realizaciones, una aplicación puede omitir el componente de prueba de rasterizador y profundidad 873 y acceder a los datos de vértices no rasterizados por medio de una unidad de salida de flujo 823.
El procesador de gráficos 800 tiene un bus de interconexión, una estructura de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y mensajes entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 852A-852B y las unidades lógicas asociadas (por ejemplo, la caché L1 851, el muestreador 854, la caché de textura 858, etc.) se interconectan a través de un puerto de datos 856 para realizar el acceso a memoria y comunicarse con los componentes de la canalización de salida del representador del procesador. En algunas realizaciones, el muestreador 854, las cachés 851, 858 y las unidades de ejecución 852A-852B cada uno tienen rutas de acceso a memoria separadas. En una realización, la memoria caché de textura 858 también se puede configurar como una memoria caché de muestreador.
En algunas realizaciones, la canalización de salida del representador 870 contiene un componente de prueba de rasterizador y profundidad 873 que convierte objetos basados en vértices en una representación basada en píxeles asociada. En algunas realizaciones, la lógica del rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de triángulo y de línea de función fija. En algunas realizaciones también están disponibles una caché de representación 878 y una caché de profundidad 879 asociadas. Un componente de operaciones de píxel 877 lleva a cabo operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxel asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) se llevan a cabo por el motor 2D 841, o son sustituidas en el momento de la visualización por el controlador de visualización 843 utilizando planos de visualización de superposición. En algunas realizaciones, está disponible una memoria caché L3 compartida 875 para todos los componentes de gráficos, permitiendo la compartición de datos sin utilizar la memoria de sistema principal.
En algunas realizaciones, la canalización de medios de procesador de gráficos 830 incluye un motor de medios 837 y un extremo frontal de vídeo 834. En algunas realizaciones, el extremo frontal de vídeo 834 recibe comandos de canalización desde el emisor por flujo continuo de comandos 803. En algunas realizaciones, la canalización de medios 830 incluye un emisor de flujo continuo de comandos separado. En algunas realizaciones, el extremo frontal de vídeo 834 procesa comandos de medios antes de enviar el comando al motor de medios 837. En algunas realizaciones, el motor de medios 837 incluye una funcionalidad de generación de hilos para generar hilos para su despacho a la lógica de ejecución de hilos 850 a través del despachador de hilos 831.
En algunas realizaciones, el procesador de gráficos 800 incluye un motor de visualización 840. En algunas realizaciones, el motor de visualización 840 es externo al procesador 800 y está acoplado al procesador de gráficos mediante la interconexión en anillo 802 o algún otro bus o estructura de interconexión. En algunas realizaciones, el motor de visualización 840 incluye un motor 2D 841 y un controlador de visualización 843. En algunas realizaciones, el motor de visualización 840 contiene lógica de propósito especial que puede operar independientemente de la canalización 3D. En algunas realizaciones, el controlador de visualización 843 se acopla a un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en el sistema, como en un ordenador portátil, o un dispositivo de visualización externo conectado mediante un conector de dispositivo de visualización.
En algunas realizaciones, la canalización de geometría 820 y la canalización de medios 830 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). En algunas realizaciones, el software de controlador para el procesador gráfico traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden 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 puede proporcionarse soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas realizaciones, puede soportarse una combinación de estas bibliotecas. También se puede proporcionar soporte para la biblioteca Open Source Computer Vision (OpenCV). También se soportaría una API futura con una canalización 3D compatible si puede hacerse un mapeo desde la canalización de la API futura a la canalización del procesador de gráficos.
Programación de canalización de gráficos
LaFigura 9A es un diagrama de bloques que ilustra un formato de comando de procesador de gráficos 900 de acuerdo con algunas realizaciones. LaFigura 9B es un diagrama de bloques que ilustra una secuencia de comandos de procesador de gráficos 910 de acuerdo con una realización. Los recuadros con línea continua en laFigura 9Ailustran 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 900 de ejemplo de laFigura 9Aincluye campos de datos para identificar un cliente 902, un código de operación de comando (opcode) 904 y datos 906 para el comando. En algunos comandos también se incluyen un subcódigo de operación 905 y un tamaño de comando 908.
En algunas realizaciones, el cliente 902 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En algunas realizaciones, un analizador de comandos de procesador de gráficos examina el campo de cliente de cada comando para acondicionar el procesamiento adicional del comando y encaminar los datos de comando a la unidad de cliente apropiada. En algunas realizaciones, las unidades cliente del procesador gráfico incluyen una unidad de interfaz de memoria, una unidad de representación, una unidad 2D, una unidad 3D y una unidad multimedia. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que la unidad cliente recibe el comando, la unidad cliente lee el código de operación 904 y, si está presente, el subcódigo de operación 905 para determinar la operación a realizar. La unidad cliente ejecuta el comando utilizando la información del campo de datos 906. Para algunas comandos se espera un tamaño de comando explícito 908 para especificar el tamaño del comando. En algunas realizaciones, el analizador de comandos determina automáticamente el tamaño de al menos alguno de los comandos basándose en el código de operación del comando. En algunas realizaciones, se alinean los comandos mediante múltiplos de una palabra doble.
El diagrama de flujo de laFigura 9Bilustra una secuencia de comandos de procesador de gráficos 910 de ejemplo. En algunas realizaciones, el software o firmware de un sistema de procesamiento de datos que presenta una realización de un procesador de gráficos utiliza una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra y describe una secuencia de comandos solo a modo de ejemplo, ya que las realizaciones no están limitadas a estos comandos específicos o a esta secuencia de comandos. Además, pueden emitirse los comandos como un lote de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos en concurrencia al menos parcialmente.
En algunas realizaciones, la secuencia de comandos de procesador de gráficos 910 puede comenzar con un comando de vaciado de canalización 912 para hacer que alguna canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización de 3D 922 y la canalización de medios 924 no operan simultáneamente. Se realiza la descarga de la canalización para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de la canalización, el analizador de comandos para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las memorias caché de lectura relevantes. Opcionalmente, cualquier dato en la memoria caché del renderizador que se marque como 'sucia' se puede vaciar en la memoria. En algunas realizaciones, el comando de vaciado de canalización 912 se puede usar para la sincronización de la canalización o antes de hacer que el procesador de gráficos pase un estado de baja potencia.
En algunas realizaciones, se usa un comando de selección de canalización 913 cuando una secuencia de comandos requiere que el procesador de gráficos cambie explícitamente entre canalizaciones. En algunas realizaciones, un comando de selección de canalización 913 se requiere solo una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea para emitir comandos para ambas canalizaciones. En algunas realizaciones, se requiere un comando de vaciado de canalización 912 inmediatamente antes de un conmutador de canalización mediante el comando de selección de canalización 913.
En algunas realizaciones, un comando de control de canalización 914 configura una canalización de gráficos para la operación y se usa para programar la canalización 3D 922 y la canalización de medios 924. En algunas realizaciones, el comando de control de canalización 914 configura el estado de canalización para la canalización activa. En una realización, el comando de control de canalización 914 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 916 se usan para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o varias 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 realizar comunicación entre hilos. En algunas realizaciones, el estado de memoria intermedia de retorno 916 incluye seleccionar el tamaño y número de memorias intermedias de retorno que usar para un conjunto de operaciones de canalización.
Los comandos restantes en la secuencia de comandos difieren en función de la canalización activa para las operaciones. En función de una determinación de canalización 920, la secuencia de comandos se adapta a la canalización 3D 922 comenzando con el estado de canalización 3D 930 o la canalización de medios 924 comenzando en el estado de canalización de medios 940.
Los comandos para configurar el estado de la canalización 3D 930 incluyen comandos de ajuste del estado 3D para el estado de la memoria intermedia de vértices, el estado del elemento de vértice, el estado de color constante, el estado de la memoria intermedia de profundidad y otras variables de estado que se han de configurar antes de que se procesen los comandos de primitivas 3D. Los valores de estos comandos se determinan al menos en parte en función de la API 3D particular en uso. En algunas realizaciones, los comandos de estado de canalización 3D 930 también son capaces de inhabilitar u omitir de manera selectiva determinados elementos de canalización si esos elementos no van a usarse.
En algunas realizaciones, el comando de primitivas 3D 932 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 primitiva 3D 932 se reenvían a la función de extracción de vértices en la canalización de gráficos. La función de extracción de vértices utiliza los datos del comando de primitiva 3D 932 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. En algunas realizaciones, se usa el comando de primitiva 3D 932 para realizar operaciones de vértice en primitivas 3D mediante sombreadores de vértice. Para procesar sombreadores de vértices, la canalización 3D 922 despacha hilos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
En algunas realizaciones, se activa la canalización 3D 922 mediante un comando o evento de ejecución 934. En algunas realizaciones, una escritura de registro activa la ejecución de comando. En algunas realizaciones, la ejecución se activa a través de un comando 'adelante' o 'rechazar' en la secuencia de comandos. En una realización, la ejecución de comando se activa usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La canalización 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez que se completan las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles colorea los píxeles resultantes. También se pueden incluir comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo posterior de píxeles para esas operaciones.
En algunas realizaciones, la secuencia de comandos de procesador gráfico 910 sigue la ruta de canalización de medios 924 al realizar operaciones de medios. En general, el uso y manera específicos de la programación para la canalización de medios 924 depende de las operaciones de medios o de cálculo que van a realizarse. Las operaciones de decodificación de medios específicas se pueden descargar a la canalización de medios durante la decodificación de medios. En algunas realizaciones, puede desviarse también la canalización de medios y puede realizarse la decodificación de medios, en su totalidad o en parte, usando recursos proporcionados por uno o más núcleos de procesamiento de propósito general. En una realización, la canalización de medios también incluye elementos para operaciones de unidad de procesador de gráficos de propósito general (GPGPU), donde el procesador de gráficos se usa para realizar operaciones de vector SIMD usando programas sombreadores computacionales que no están relacionados explícitamente con la representación de primitivas de gráficos.
En algunas realizaciones, la canalización de medios 924 se configura de una manera similar a la de la canalización de 3D 922. Un conjunto de comandos para configurar el estado de canalización de medios 940 se despacha o coloca en una cola de comandos antes de los comandos de objeto de medios 942. En algunas realizaciones, los comandos para el estado de canalización de medios 940 incluyen datos para configurar los elementos de canalización de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de codificación y decodificación de vídeo dentro de la canalización de medios, tales como el formato de codificación o decodificación. En algunas realizaciones, los comandos para el estado de canalización de medios 940 también soportan el uso de uno o más punteros a elementos de estado "indirectos" que contienen un lote de ajustes de estado.
En algunas realizaciones, los comandos de objetos de medios 942 suministran punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias que contienen datos de vídeo que van a procesarse. En algunas realizaciones, todos los estados de canalización de medios deben ser válidos antes de que se emita un comando de objeto de medios 942. Una vez que se ha configurado el estado de la canalización y los comandos de objeto de medios 942 se han puesto en cola, se activa la canalización de medios 924 por medio de un comando de ejecución 944 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida de la canalización de medios 924 puede ser procesada posteriormente por operaciones proporcionadas por la canalización 3D 922 o la canalización de medios 924. En algunas realizaciones, las operaciones de GPGPU se configuran y se ejecutan de una manera similar a la de las operaciones de medios.
Arquitectura de software de gráficos
LaFigura 10ilustra una arquitectura de software de gráficos de ejemplo para un sistema de procesamiento de datos 1000 de acuerdo con algunas realizaciones. En algunas realizaciones, la arquitectura de software incluye una aplicación de gráficos 3D 1010, un sistema operativo 1020 y al menos un procesador 1030. En algunas realizaciones, el procesador 1030 incluye un procesador de gráficos 1032 y uno o más núcleos de procesador de uso general 1034. Cada uno de la aplicación de gráficos 1010 y el sistema operativo 1020 se ejecutan en la memoria de sistema 1050 del sistema de procesamiento de datos.
En algunas realizaciones, la aplicación de gráficos 3D 1010 contiene uno o más programas de sombreador que incluyen instrucciones de sombreador 1012. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el Lenguaje de Sombreador de Alto Nivel (HLSL) o el Lenguaje de Sombreador OpenGL (GLSL). La aplicación también incluye instrucciones ejecutables 1014 en un lenguaje de máquina adecuado para su ejecución por el núcleo de procesador de propósito general 1034. La aplicación también incluye objetos de gráficos 1016 definidos por datos de vértice.
En algunas realizaciones, el sistema operativo 1020 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo similar a UNIX propietario o un sistema operativo similar a UNIX de código abierto que usa una variante del núcleo de Linux. El sistema operativo 1020 puede soportar una API de gráficos 1022 tal como por ejemplo la API de Direct3D, la API de OpenGL o la API Vulkan. Cuando se utiliza la API Direct3D, el sistema operativo 1020 utiliza un compilador de sombreador de interfaz 1024 para compilar cualquier instrucción de sombreador 1012 en HLSL en un lenguaje de sombreador de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede llevar a cabo una precompilación de sombreador. En algunas realizaciones, los sombreadores de alto nivel se compilan en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 1010. En algunas realizaciones, las instrucciones de sombreador 1012 se proporcionan en una forma intermedia, 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 1026 contiene un compilador de sombreadores de extremo posterior 1027 para convertir las instrucciones de sombreador 1012 en una representación específica de hardware. Cuando la API OpenGL está en uso, las instrucciones de sombreador 1012 en el lenguaje de alto nivel GLSL se pasan al controlador de gráficos de modo de usuario 1026 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 1026 usa las funciones de modo de núcleo de sistema operativo 1028 para comunicarse con un controlador de gráficos de modo de núcleo 1029. En algunas realizaciones, el controlador de gráficos de modo de núcleo 1029 se comunica con el procesador de gráficos 1032 para despachar comandos e instrucciones.
Implementaciones de núcleo de IP
Uno o más aspectos de al menos una realización pueden implementarse por código representativo almacenado en un medio legible por máquina que representa y/o define lógica dentro de un circuito integrado tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan diversa lógica dentro del procesador. Cuando las lee una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en este documento. Estas representaciones, conocidas como "núcleos IP", son unidades de lógica reutilizables para un circuito integrado que pueden almacenarse en un medio tangible y legible por máquina como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que fabrican el circuito integrado. El circuito integrado puede fabricarse de manera que el circuito realiza operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
LaFigura 11Aes un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 1100 que puede utilizarse para fabricar un circuito integrado para realizar operaciones de acuerdo con una realización. El sistema de desarrollo de núcleos IP 1100 puede utilizarse para generar diseños modulares y reutilizables que pueden incorporarse en un diseño más grande o utilizarse para construir un circuito integrado completo (por ejemplo, un circuito integrado SOC). Una instalación de diseño 1130 puede generar una simulación de software 1110 de un diseño de núcleo IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). La simulación de software 1110 se puede utilizar para diseñar, probar y verificar el comportamiento del núcleo IP utilizando un modelo de simulación 1112. El modelo de simulación 1112 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. Luego se puede crear o sintetizar un diseño de nivel de transferencia de registro (RTL) 1115 a partir del modelo de simulación 1112. El diseño RTL 1115 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registros de hardware, incluyendo la lógica asociada llevada a cabo utilizando las señales digitales modeladas.
Además de un diseño RTL 1115, también se pueden crear, diseñar o sintetizar diseños de nivel inferior a nivel lógico o nivel de transistor. Por lo tanto, los detalles particulares del diseño inicial y la simulación pueden variar.
El diseño RTL 1115 o equivalente puede ser sintetizado adicionalmente por la instalación de diseño en un modelo de hardware 1120, que puede estar en un lenguaje de descripción de hardware (HDL) o alguna otra representación de datos de diseño físico. El HDL puede ser simulado o probado adicionalmente para verificar el diseño del núcleo IP. El diseño de núcleo IP se puede almacenar para su entrega a una instalación de fabricación de terceros 1165 utilizando memoria no volátil 1140 (por ejemplo, disco duro, memoria flash, o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo IP se puede transmitir (por ejemplo, a través de Internet) a través de una conexión por cable 1150 o una conexión inalámbrica 1160. La instalación de fabricación 1165 puede entonces fabricar un circuito integrado que se basa al menos en parte en el diseño del núcleo IP. El circuito integrado fabricado puede estar configurado para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
LaFigura 11Bilustra una vista lateral en sección transversal de un conjunto de paquete de circuitos integrados 1170, de acuerdo con algunas realizaciones descritas en el presente documento. El conjunto de paquete de circuitos integrados 1170 ilustra una implementación de uno o más dispositivos procesadores o aceleradores como se describe en el presente documento. El conjunto de paquete 1170 incluye múltiples unidades de lógica de hardware 1172, 1174 conectadas a un sustrato 1180. La lógica 1172, 1174 puede implementarse al menos parcialmente en hardware de lógica configurable o lógica de funcionalidad fija, y puede incluir una o más porciones de cualquiera del núcleo o núcleos de procesador, procesador(es) de gráficos u otros dispositivos aceleradores descritos en el presente documento. Cada unidad de lógica 1172, 1174 puede implementarse dentro de una pastilla de semiconductores y acoplarse con el sustrato 1180 mediante una estructura de interconexión 1173. La estructura de interconexión 1173 puede configurarse para encaminar señales eléctricas entre la lógica 1172, 1174 y el sustrato 1180, y puede incluir interconexiones tales como, pero sin limitación, protuberancias o pilares. En algunas realizaciones, la estructura de interconexión 1173 puede configurarse para enrutar señales eléctricas tales como, por ejemplo, señales de entrada/salida (E/S) y/o señales de alimentación o de tierra asociadas con la operación de la lógica 1172, 1174. En algunas realizaciones, el sustrato 1180 es un sustrato laminado basado en epoxi. El sustrato de paquete 1180 puede incluir otros tipos adecuados de sustratos en otras realizaciones. El conjunto de paquete 1170 se puede conectar a otros dispositivos eléctricos a través de una interconexión de paquete 1183. La interconexión de paquete 1183 puede acoplarse a una superficie del sustrato 1180 para encaminar señales eléctricas a otros dispositivos eléctricos, tales como una placa base, otro conjunto de chips o un módulo de múltiples chips.
En algunas realizaciones, las unidades de lógica 1172, 1174 están acopladas eléctricamente con un puente 1182 que está configurado para enrutar señales eléctricas entre la lógica 1172, 1174. El puente 1182 puede ser una estructura de interconexión densa que proporciona una ruta para señales eléctricas. El puente 1182 puede incluir un sustrato de puente compuesto de vidrio o un material semiconductor adecuado. Se pueden formar características de enrutamiento eléctrico en el sustrato de puente para proporcionar una conexión de chip a chip entre la lógica 1172, 1174.
Aunque se ilustran dos unidades de lógica 1172, 1174 y un puente 1182, las realizaciones descritas en el presente documento pueden incluir más o menos unidades lógicas en uno o más chips. Las una o más matrices pueden estar conectadas por cero o más puentes, ya que el puente 1182 puede excluirse cuando la lógica está incluida en una sola matriz. Como alternativa, múltiples pastillas o unidades de lógica pueden conectarse mediante uno o más puentes. Adicionalmente, múltiples unidades de lógica, pastillas y puentes pueden conectarse entre sí en otras configuraciones posibles, incluyendo configuraciones tridimensionales.
Circuito integrado de sistema en un chip ejemplar
Las Figuras 12-14 ilustran circuitos integrados de ejemplo y procesadores de gráficos asociados que pueden fabricarse utilizando uno o más núcleos IP, de acuerdo con diversas realizaciones descritas en el presente documento. Además de lo ilustrado, se pueden incluir otros circuitos y lógica, incluidos procesadores/núcleos de gráficos adicionales, controladores de interfaz periférica o núcleos de procesador de propósito general.
LaFigura 12es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip 1200 de ejemplo que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El circuito integrado 1200 ejemplar incluye uno o más procesadores de aplicación 1205 (por ejemplo, CPU), al menos un procesador de gráficos 1210 y puede incluir adicionalmente un procesador de imágenes 1215 y/o un procesador de vídeo 1220, cualquiera de los cuales puede ser un núcleo IP modular de la misma o de múltiples instalaciones de diseño diferentes. El circuito integrado 1200 incluye lógica de periférico o de bus que incluye un controlador de USB 1225, controlador de UART 1230, un controlador de SPI/SDIO 1235 y un controlador de I2S/I2C 1240. Además, el circuito integrado puede incluir un dispositivo de visualización 1245 acoplado a uno o más de un controlador de interfaz multimedia de alta definición (HDMI) 1250 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 1255. El almacenamiento se puede proporcionar por un subsistema de memoria flash 1260 que incluye la memoria flash y un controlador de memoria flash. La interfaz de memoria se puede proporcionar por medio de un controlador de memoria 1265 para acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 1270.
LasFiguras 13A-13Bson diagramas de bloques que ilustran procesadores de gráficos de ejemplo para su uso dentro de un SoC, de acuerdo con realizaciones descritas en el presente documento. LaFigura 13Ailustra un procesador de gráficos 1310 de ejemplo de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP, de acuerdo con una realización. LaFigura 13Bilustra un procesador de gráficos 1340 de ejemplo adicional de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP, de acuerdo con una realización. El procesador de gráficos 1310 de laFigura 13Aes un ejemplo de un núcleo de procesador de gráficos de bajo consumo. El procesador de gráficos 1340 de laFigura 13Bes un ejemplo de un núcleo de procesador de gráficos de mayor rendimiento. Cada uno de los procesadores de gráficos 1310, 1340 pueden ser variantes del procesador de gráficos 1210 de laFigura 12.
Como se muestra en laFigura 13A, el procesador de gráficos 1310 incluye un procesador de vértices 1305 y uno o más procesadores de fragmentos 1315A-1315N (por ejemplo, 1315A, 1315B, 1315C, 1315D, hasta 1315N-1 y 1315N). El procesador de gráficos 1310 puede ejecutar diferentes programas de sombreador a través de una lógica separada, de modo que el procesador de vértices 1305 está optimizado para ejecutar operaciones para programas de sombreador de vértices, mientras que uno o más procesadores de fragmentos 1315A-1315N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreador de fragmentos o píxeles. El procesador de vértices 1305 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértices. El procesador o procesadores de fragmentos 1315A-1315N usan los datos de primitivas y de vértices generados por el procesador de vértices 1305 para producir una memoria intermedia de fotogramas que se visualiza en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 1315A-1315N están optimizados para ejecutar programas de sombreador de fragmentos según se proporciona en la API de OpenGL, que pueden usarse para realizar operaciones similares como un programa de sombreador de píxeles como se proporciona en la API de Direct 3D.
El procesador de gráficos 1310 incluye además una o más unidades de gestión de memoria (MMU) 1320A-1320B, memorias caché 1325A-1325B e interconexiones de circuitos 1330A-1330B. La una o más MMU 1320A-1320B proporcionan un mapeo de direcciones virtuales a físicas para el procesador de gráficos 1310, incluido el procesador de vértices 1305 y/o el procesador o procesadores de fragmentos 1315A-1315N, que pueden hacer referencia a datos de vértices o de imagen/textura almacenados en la memoria, además de los datos de vértices o de imagen/textura almacenados en la memoria o memorias caché 1325A-1325B. En una realización, las una o más MMU 1320A-1320B se pueden sincronizar con otras MMU dentro del sistema, incluyendo una o más MMU asociadas a los uno o más procesadores de aplicación 1205, procesador de imagen 1215 y/o procesador de vídeo 1220 de laFigura 12, de modo que cada procesador 1205-1220 puede participar en un sistema de memoria virtual compartido o unificado. La una o más interconexiones de circuito 1330A-1330B permiten al procesador de gráficos 1310 interactuar con otros núcleos de IP dentro del SoC, ya sea por medio de un bus interno del SoC o por medio de una conexión directa, de acuerdo con las realizaciones.
Como se muestra en laFigura 13B,el procesador de gráficos 1340 incluye la una o más MMU 1320A-1320B, la caché o cachés 1325A-1325B y las interconexiones de circuito 1330A-1330B del procesador de gráficos 1310 de laFigura 13A.El procesador de gráficos 1340 incluye uno o más núcleos de sombreador 1355A-1355N (por ejemplo, 1455A, 1355B, 1355C, 1355D, 1355E, 1355F, hasta 1355N-1 y 1355N), lo que proporciona una arquitectura de núcleo de sombreador unificada en la que un solo núcleo o tipo de núcleo puede ejecutar todos los tipos de código de sombreado programable, incluido el código de programa de sombreado para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cálculo. El número exacto de núcleos de sombreador presentes puede variar entre realizaciones e implementaciones. Además, el procesador de gráficos 1340 incluye un administrador de tareas entre núcleos 1345, que actúa como un despachador de hilos para despachar hilos de ejecución a uno o más núcleos de sombreador 1355A-1355N y una unidad de tesela 1358 para acelerar las operaciones de tesela para el renderizado basado en teselas, en la que las operaciones de renderizado para una escena se subdividen en el espacio de la imagen, por ejemplo para explotar la coherencia espacial local dentro de una escena o para optimizar el uso de memoria caché interna.
LasFiguras 14A-14Bilustran lógica de procesador de gráficos de ejemplo adicional de acuerdo con las realizaciones descritas en el presente documento. LaFigura 14Ailustra un núcleo de gráficos 1400 que puede estar incluido dentro del procesador de gráficos 1210 de laFigura 12, y puede ser un núcleo de sombreador unificado 1355A-1355N como en laFigura 13B. LaFigura 14Bilustra una unidad de procesamiento de gráficos de propósito general altamente paralela 1430 adicional, que es una unidad de procesamiento de gráficos de propósito general altamente paralela adecuada para su implementación en un módulo de múltiples chips.
Como se muestra en laFigura 14A, el núcleo de gráficos 1400 incluye una caché de instrucciones compartida 1402, una unidad de textura 1418 y una memoria compartida/caché 1420 que son comunes a los recursos de ejecución dentro del núcleo de gráficos 1400. El núcleo de gráficos 1400 puede incluir múltiples segmentos 1401A-1401N o particiones para cada núcleo, y un procesador de gráficos puede incluir múltiples instancias del núcleo de gráficos 1400. Los segmentos 1401A-1401N pueden incluir lógica de soporte que incluye una caché de instrucciones local 1404A-1404N, un planificador de hilos 1406A-1406N, un despachador de hilos 1408A-1408N y un conjunto de registros 1410A-1440N. Para realizar operaciones lógicas, los segmentos 1401A-1401N pueden incluir un conjunto de unidades de función (AFU 1412A-1412N) adicionales, unidades de coma flotante (FPU 1414A-1414N), unidades aritmético-lógicas de números enteros (ALU 1416-1416N), unidades de cálculo de direcciones (ACU 1413A-1413N), unidades de coma flotante de precisión doble (DPFPU 1415A-1415N) y unidades de procesamiento de matrices (MPU 1417A-1417N).
Algunas de las unidades computacionales operan con una precisión específica. Por ejemplo, las FPU 1414A-1414N pueden realizar operaciones de coma flotante de precisión sencilla (32 bits) y de media precisión (16 bits), mientras que las DPFPU 1415A-1415N realizan operaciones de coma flotante de precisión doble (64 bits). Las ALU 1416A-1416N pueden realizar operaciones con números enteros de precisión variable con una precisión de 8 bits, 16 bits y 32 bits, y pueden configurarse para operaciones de precisión mixta. Las MPU 1417A-1417N también pueden configurarse para operaciones con matrices de precisión mixta, incluyendo operaciones de coma flotante de media precisión y operaciones de enteros de 8 bits. Las MPU 1417-1417N pueden realizar una diversidad de operaciones con matrices para acelerar las estructuras de aplicaciones de aprendizaje automático, incluyendo la habilitación del soporte para la multiplicación de matriz con matriz general (GEMM) acelerada. Las AFU 1412A-1412N pueden realizar operaciones lógicas adicionales no soportadas por las unidades de coma flotante o de números enteros, incluyendo operaciones trigonométricas (por ejemplo, seno, coseno, etc.).
Como se muestra en laFigura 14B, una unidad de procesamiento de propósito general (GPGPU) 1430 se puede configurar para permitir que se realicen operaciones de cálculo altamente paralelas mediante una matriz de unidades de procesamiento de gráficos. Además, la GPGPU 1430 se puede vincular directamente a otras instancias de la GPGPU para crear una agrupación de múltiples GPU para mejorar la velocidad de entrenamiento para redes neuronales particularmente profundas. La GPGPU 1430 incluye una interfaz de anfitrión 1432 para habilitar una conexión con un procesador anfitrión. En una realización, la interfaz de anfitrión 1432 es una interfaz PCI Express. Sin embargo, la interfaz de anfitrión también puede ser una interfaz de comunicaciones específica del proveedor o una estructura de comunicaciones. La GPGPU 1430 recibe comandos desde el procesador anfitrión y usa un planificador global 1434 para distribuir hilos de ejecución asociados con estos comandos a un conjunto de agrupaciones de computación 1436A-1436H. Las agrupaciones de computación 1436A-1436H comparten una memoria caché 1438. La memoria caché 1438 puede servir como una memoria caché de nivel superior para memorias caché dentro de las agrupaciones de computación 1436A-1436H.
La GPGPU 1430 incluye la memoria 14434A-14434B acoplada con las agrupaciones de computación 1436A-1436H mediante un conjunto de controladores de memoria 1442A-1442B. En diversas realizaciones, la memoria 1434A-1434B puede incluir diversos tipos de dispositivos de memoria, que incluyen memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como memoria de acceso aleatorio de gráficos síncrona (SGRAM), que incluye memoria de tasa de datos doble de gráficos (GDDR).
En una realización, las agrupaciones de cálculo 1436A-1436H incluyen cada uno un conjunto de núcleos de gráficos, tales como el núcleo de gráficos 1400 de la Figura 14A, que puede incluir múltiples tipos de unidades de lógica de enteros y de coma flotante que pueden realizar operaciones computacionales con un intervalo de precisiones, incluyendo las adecuadas para cálculos de aprendizaje automático. Por ejemplo, y en una realización, al menos un subconjunto de las unidades de coma flotante en cada una de las agrupaciones de cálculo 1436A-1436H puede estar configurado para realizar operaciones de coma flotante de 16 bits o de 32 bits, mientras que un subconjunto diferente de las unidades de coma flotante puede estar configurado para realizar operaciones de coma flotante de 64 bits.
Se pueden configurar múltiples instancias de la GPGPU 1430 para que funcionen como una agrupación de computación. El mecanismo de comunicación usado por la agrupación de cálculo para la sincronización y el intercambio de datos varía a lo largo de las realizaciones. En una realización, las múltiples instancias de la GPGPU 1430 se comunican a través de la interfaz de anfitrión 1432. En una realización, la GPGPU 1430 incluye un concentrador de E/S 1439 que acopla la GPGPU 1430 con un enlace de GPU 1440 que habilita una conexión directa a otras instancias de la GPGPU. En una realización, el enlace de la GPU 1440 está acoplado a un puente de GPU a GPU especializado que posibilita la comunicación y sincronización entre múltiples instancias de la GPGPU 1430. En una realización, el enlace de GPU 1440 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPU o procesadores paralelos. En una realización, las múltiples instancias de la GPGPU 1430 están ubicadas en sistemas de procesamiento de datos separados y se comunican mediante un dispositivo de red que es accesible mediante la interfaz de anfitrión 1432. En una realización, el enlace de GPU 1440 se puede configurar para habilitar una conexión a un procesador de anfitrión además de o como una alternativa a la interfaz de anfitrión 1432.
Aunque la configuración ilustrada de la GPGPU 1430 puede configurarse para entrenar redes neuronales, una realización proporciona una configuración alternativa de la GPGPU 1430, que puede configurarse para el despliegue dentro de una plataforma de inferenciación de alto rendimiento o de baja potencia. En una configuración de inferencia, la GPGPU 1430 incluye menos de las agrupaciones de computación 1436A-1436H en relación con la configuración de entrenamiento. Adicionalmente, la tecnología de memoria asociada con la memoria 1434A-1434B puede diferir entre configuraciones de inferencia y de entrenamiento, con tecnologías de memoria de mayor ancho de banda dedicadas a las configuraciones de entrenamiento. En una realización, la configuración de inferenciación de la GPGPU 1430 puede soportar instrucciones específicas de inferenciación. Por ejemplo, una configuración de inferencia puede proporcionar soporte para una o más instrucciones de producto escalar de enteros de 8 bits, que se utilizan comúnmente durante las operaciones de inferencia para redes neuronales implementadas.
TRAZADO DE RAYOS CON APRENDIZAJE AUTOMÁTICO
Como se mencionó anteriormente, el trazado de rayos es una técnica de procesamiento de gráficos en la que se simula un transporte de luz a través de un renderizado basado en la física. Una de las operaciones clave en el trazado de rayos es procesar una consulta de visibilidad que requiere pruebas de cruce e intersección de nodos en una jerarquía de volumen delimitador (BVH).
Las técnicas basadas en el trazado de rayos y trayectorias calculan imágenes trazando rayos y trayectorias a través de cada píxel y utilizando un muestreo aleatorio para calcular efectos avanzados tales como sombras, brillo, iluminación indirecta, etc. El uso de solo unas pocas muestras es rápido pero produce imágenes ruidosas, mientras que el uso de muchas muestras produce imágenes de alta calidad, pero tiene un coste prohibitivo.
En los últimos años, una solución innovadora para el trazado de rayos y trayectorias para uso en tiempo real ha llegado en forma de "eliminación de ruido": el proceso de utilizar técnicas de procesamiento de imágenes para producir imágenes filtradas/sin ruido de alta calidad a partir de entradas ruidosas de bajo recuento de muestras. Las técnicas de eliminación de ruido más efectivas se basan en técnicas de aprendizaje automático donde un motor de aprendizaje automático aprende cómo se vería probablemente una imagen ruidosa si se hubiera calculado con más muestras. En una implementación particular, el aprendizaje automático lo realiza una red neuronal convolucional (RNC); sin embargo, los principios subyacentes de la invención no se limitan a una implementación de RNC. En dicha implementación, los datos de entrenamiento se producen con entradas de bajo recuento de muestras y verdad fundamental. La RNC está entrenada para predecir el píxel convergente a partir de una vecindad de entradas de píxeles ruidosas alrededor del píxel en cuestión.
Aunque no es perfecta, esta técnica de eliminación de ruido basada en IA ha demostrado ser sorprendentemente eficaz. Sin embargo, la salvedad es que se requieren buenos datos de entrenamiento, ya que de lo contrario la red puede predecir los resultados incorrectos. Por ejemplo, si un estudio de películas animadas entrenó una RNC de eliminación de ruido en películas pasadas con escenas en tierra y luego intentó usar la RNC entrenada para eliminar el ruido de los fotogramas de una nueva película ambientada en el agua, la operación de eliminación de ruido funcionará de manera subóptima.
Para abordar este problema, una realización de la invención recopila datos de aprendizaje de forma dinámica, durante el renderizado, y entrena continuamente un motor de aprendizaje automático, tal como una CNN, en función de los datos en los que se está ejecutando actualmente, mejorando así continuamente el motor de aprendizaje automático para la tarea en cuestión. Esta realización aún puede realizar una fase de entrenamiento antes del tiempo de ejecución, pero continúa ajustando los pesos de aprendizaje automático según sea necesario durante el tiempo de ejecución. Además, esta realización evita el alto coste de calcular los datos de referencia necesarios para el entrenamiento al restringir la generación de datos de aprendizaje a una subregión de la imagen en cada fotograma o cada N fotogramas. En particular, las entradas ruidosas de un fotograma se generan para eliminar el ruido del fotograma completo con la red actual. Además, se genera una pequeña región de píxeles de referencia y se utiliza para el entrenamiento continuo, como se describe a continuación.
Si bien se describe una implementación de CNN con respecto a ciertas realizaciones, se puede utilizar cualquier forma de motor de aprendizaje automático, incluidos, entre otros, sistemas que realizan aprendizaje supervisado (por ejemplo, construir un modelo matemático de un conjunto de datos que contiene tanto las entradas como las salidas deseadas), aprendizaje no supervisado (por ejemplo, que evalúa los datos de entrada para ciertos tipos de estructura) y/o una combinación de aprendizaje supervisado y no supervisado.
Las implementaciones de eliminación de ruido existentes funcionan en una fase de entrenamiento y una fase de tiempo de ejecución. Durante la fase de entrenamiento, se define una topología de red que recibe una región de NxN píxeles con varios canales de datos por píxel, tales como color de píxel, profundidad, normal, desviación normal, identificadores de primitivas y albedo, y genera un color de píxel final. Se genera un conjunto de datos de entrenamiento "representativos" utilizando el valor de una fotograma de entradas de bajo recuento de muestras y haciendo referencia a los colores de píxel "deseados" calculados con un recuento de muestras muy alto. La red se entrena para estas entradas, lo que genera un conjunto de pesos "ideales" para la red. En estas implementaciones, los datos de referencia se utilizan para entrenar los pesos de la red para que la salida de la red coincida lo más posible con el resultado deseado.
En el tiempo de ejecución, se cargan los pesos de red ideales calculados previamente y se inicializa la red. Para cada fotograma, se genera una imagen de bajo recuento de muestras de entradas con eliminación de ruido (es decir, la misma que se utiliza para el entrenamiento). Para cada píxel, la vecindad dada de entradas de píxeles se ejecuta a través de la red para predecir el color del píxel "sin ruido", lo que genera un fotograma sin ruido.
LaFigura 15ilustra una realización de una implementación de entrenamiento inicial. Un motor de aprendizaje automático 1500 (por ejemplo, una RNC) recibe una región de N x N píxeles como datos de imagen de alto recuento de muestras 1702 con varios canales de datos por píxel, tal como color de píxel, profundidad, normal, desviación normal, identificadores de primitivas y albedo, y genera colores de píxel finales. Los datos de entrenamiento representativos se generan utilizando el valor de un fotograma de entradas de bajo recuento de muestras 1501. La red se entrena para estas entradas, generando un conjunto de pesos "ideales" 1505 que el motor de aprendizaje automático 1500 utiliza posteriormente para eliminar el ruido de las imágenes de bajo recuento de muestras en tiempo de ejecución.
Para mejorar las técnicas anteriores, una realización de la invención aumenta la fase de eliminación de ruido para generar nuevos datos de entrenamiento en cada fotograma o un subconjunto de fotogramas (por ejemplo, cada N fotogramas donde N = 2, 3, 4, 10, 25, etc.). En particular, como se ilustra en laFigura 16, este ejemplo elige una o más regiones en cada fotograma, denominadas aquí como "nuevas regiones de referencia" 1602, que se representan con un alto recuento de muestras en una memoria intermedia de alto recuento de muestras 1604 separada. Una memoria intermedia de bajo recuento de muestras 1603 almacena el fotograma de entrada de bajo recuento de muestras 1601 (incluida la región de muestras bajas 1604 correspondiente a la nueva región de referencia 1602).
En una realización, la ubicación de la nueva región de referencia 1602 se selecciona aleatoriamente. Alternativamente, la ubicación de la nueva región de referencia 1602 se puede ajustar de una manera preestablecida para cada nuevo fotograma (por ejemplo, utilizando un movimiento predefinido de la región entre fotogramas, limitado a una región especificada en el centro del fotograma, etc.).
Independientemente de cómo se seleccione la nueva región de referencia, el motor de aprendizaje automático 1600 la utiliza para refinar y actualizar continuamente los pesos entrenados 1605 utilizados para la eliminación de ruido. En particular, se renderizan los colores de los píxeles de referencia de cada nueva región de referencia 1602 y las entradas de píxeles de referencia ruidosas de una región de bajo recuento de muestras 1607 correspondiente. Luego se realiza un entrenamiento complementario en el motor de aprendizaje automático 1600 utilizando la región de referencia de alto recuento de muestras 1602 y la región de bajo recuento de muestras 1607 correspondiente. A diferencia del entrenamiento inicial, este entrenamiento se realiza de manera continua durante el tiempo de ejecución para cada nueva región de referencia 1602, lo que garantiza que el motor de aprendizaje automático 1600 se entrene con precisión. Por ejemplo, se pueden evaluar los canales de datos por píxel (por ejemplo, color de píxel, profundidad, normal, desviación normal, etc.), que el motor de aprendizaje automático 1600 utiliza para realizar ajustes en los pesos entrenados 1605. Como en el caso de entrenamiento(Figura 15), el motor de aprendizaje automático 1600 se entrena hacia un conjunto de pesos ideales 1605 para eliminar el ruido del fotograma de entrada de bajo recuento de muestras 1601 para generar el fotograma sin ruido 1620. Sin embargo, en esta realización, los pesos entrenados 1605 se actualizan continuamente, en función de las nuevas características de imagen de los nuevos tipos de fotogramas de entrada de bajo recuento de muestras 1601.
En una realización, las operaciones de reentrenamiento realizadas por el motor de aprendizaje automático 1600 se ejecutan simultáneamente en un proceso en segundo plano en la unidad de procesamiento de gráficos (GPU) o el procesador anfitrión. El bucle de renderizado, que puede implementarse como un componente de controlador y/o un componente de hardware de GPU, produce continuamente nuevos datos de entrenamiento (por ejemplo, en forma de nuevas regiones de referencia 1602) que coloca en una cola. El proceso de entrenamiento en segundo plano, ejecutado en la GPU o en el procesador anfitrión, lee continuamente los nuevos datos de entrenamiento de esta cola, vuelve a entrenar el motor de aprendizaje automático 1600 y lo actualiza con nuevos pesos 1605 a intervalos apropiados.
LaFigura 17ilustra un ejemplo de una de dichas implementaciones en las que el proceso de entrenamiento en segundo plano 1700 es implementado por la CPU anfitriona 1710. En particular, en esta realización, el proceso de entrenamiento en segundo plano 1700 utiliza la nueva región de referencia de alto recuento de muestras 1602 y la región de bajo recuento de muestras 1604 correspondiente para actualizar continuamente los pesos entrenados 1605, actualizando así el motor de aprendizaje automático 1600.
Como se ilustra en laFigura 18A, en una implementación tal como en un juego en línea multijugador, diferentes máquinas anfitrionas 1820-1822 generan individualmente regiones de referencia que un proceso de entrenamiento en segundo plano 1700A-C transmite a un servidor 1800 (por ejemplo, tal como un servidor de juegos). El servidor 1800 luego realiza el entrenamiento en un motor de aprendizaje automático 1810 utilizando las nuevas regiones de referencia recibidas de cada uno de los anfitriones 1821-1822, actualizando los pesos 1805 como se describió anteriormente. Transmite estos pesos 1805 a las máquinas anfitrionas 1820 que almacenan los pesos 1605A-C, actualizando así cada motor de aprendizaje automático individual (no mostrado). Debido a que se le puede proporcionar al servidor 1800 una gran cantidad de regiones de referencia en un corto período de tiempo, puede actualizar de manera eficiente y precisa los pesos para cualquier aplicación dada (por ejemplo, un juego en línea) que esté siendo ejecutada por los usuarios.
Como se ilustra en laFigura 18B, las diferentes máquinas anfitrionas pueden generar nuevos pesos entrenados (por ejemplo, en base a las regiones de entrenamiento/referencia 1602 como se describió anteriormente) y compartir los nuevos pesos entrenados con un servidor 1800 (por ejemplo, tal como un servidor de juegos) o, alternativamente, usar un protocolo de intercambio de igual a igual. Un componente de gestión de aprendizaje automático 1810 en el servidor genera un conjunto de pesos combinados 1805 usando los nuevos pesos recibidos de cada una de las máquinas anfitrionas. Los pesos combinados 1805, por ejemplo, pueden ser un promedio generado a partir de los nuevos pesos y actualizado continuamente como se describe en este documento. Una vez generados, las copias de los pesos combinados 1605A-C pueden transmitirse y almacenarse en cada una de las máquinas anfitrionas 1820-1821 que luego pueden usar los pesos combinados como se describe en este documento para realizar operaciones de eliminación de ruido.
En una realización, este mecanismo de actualización de bucle semicerrado puede ser utilizado por el fabricante del hardware. Por ejemplo, la red de referencia puede incluirse como parte del controlador distribuido por el fabricante de hardware. A medida que el controlador genera nuevos datos de entrenamiento utilizando las técnicas descritas en este documento y los envía continuamente al fabricante de hardware, el fabricante de hardware utiliza esta información para seguir mejorando sus implementaciones de aprendizaje automático para la próxima actualización del controlador.
En una implementación (por ejemplo, en el renderizado de películas por lotes en una granja de renderizado), el renderizador transmite las regiones de entrenamiento recién generadas a un servidor o base de datos dedicado (en la granja de renderizado de ese estudio) que agrega estos datos de múltiples nodos de renderizado a lo largo del tiempo. Un proceso independiente en una máquina independiente mejora continuamente la red de eliminación de ruido dedicada del estudio, y los nuevos trabajos de renderizado siempre utilizan la última red entrenada.
En laFigura 19se ilustra un procedimiento de acuerdo con una realización de la invención. El procedimiento puede implementarse en las arquitecturas descritas en este documento, pero no se limita a ningún sistema en particular o arquitectura de procesamiento de gráficos.
En 1901, como parte de la fase de entrenamiento inicial, se generan datos de imágenes de bajo recuento de muestras y datos de imágenes de alto recuento de muestras para una pluralidad de fotogramas de imagen. En 1902, se entrena un motor de eliminación de ruido de aprendizaje automático utilizando los datos de imagen de alto/bajo recuento de muestras. En una realización, por ejemplo, un conjunto de pesos de red neuronal convolucional asociados con características de píxeles se puede actualizar de acuerdo con el entrenamiento. Sin embargo, se puede utilizar cualquier arquitectura de aprendizaje automático.
En 1903, en tiempo de ejecución, se generan fotogramas de imagen de bajo recuento de muestras junto con al menos una región de referencia que tiene un alto recuento de muestras. En 1904, el motor de aprendizaje automático y/o la lógica de entrenamiento independiente (por ejemplo, el módulo de entrenamiento en segundo plano 1700) utilizan la región de referencia de alto recuento de muestras para refinar continuamente el entrenamiento del motor de aprendizaje automático. Por ejemplo, en una realización, la región de referencia de alto recuento de muestras se utiliza en combinación con una parte correspondiente de la imagen de bajo recuento de muestras para seguir enseñando al motor de aprendizaje automático 1904 cómo realizar la eliminación de ruido de manera más eficaz. En una implementación de la RNC, por ejemplo, esto puede implicar actualizar los pesos asociados con la RNC.
Se pueden implementar múltiples variaciones de las realizaciones descritas anteriormente, tales como la manera en que se configura el bucle de retroalimentación al motor de aprendizaje automático, las entidades que generan los datos de entrenamiento, la manera en que los datos de entrenamiento se devuelven al motor de entrenamiento y cómo se proporciona la red mejorada a los motores de renderizado. Además, si bien las realizaciones descritas anteriormente realizan un entrenamiento continuo utilizando una única región de referencia, se puede utilizar cualquier número de regiones de referencia. Además, como se mencionó anteriormente, las regiones de referencia pueden ser de diferentes tamaños, se pueden utilizar en diferentes números de fotogramas de imagen y se pueden colocar en diferentes ubicaciones dentro de los fotogramas de imagen utilizando diferentes técnicas (por ejemplo, aleatorias, de acuerdo con un patrón predeterminado, etc.).
Además, si bien se describe una red neuronal convolucional (RNC) como un ejemplo de un motor de aprendizaje automático 1600, los principios subyacentes de la invención se pueden implementar utilizando cualquier forma de motor de aprendizaje automático que sea capaz de refinar continuamente sus resultados utilizando nuevos datos de entrenamiento. A modo de ejemplo, y no de limitación, otras implementaciones de aprendizaje automático incluyen el procedimiento de grupo de manejo de datos (GMDH), memoria de corto plazo larga, computación de reservorio profundo, redes de creencias profundas, redes de apilamiento profundo tensorial y redes de codificación predictiva profunda, por nombrar algunas.
APARATO Y PROCEDIMIENTO PARA LA ELIMINACIÓN DE RUIDO DISTRIBUIDA EFICIENTE
Como se describió anteriormente, la eliminación de ruido se ha convertido en una característica fundamental del trazado de rayos en tiempo real con imágenes uniformes y sin ruido. El renderizado se puede realizar en un sistema distribuido en múltiples dispositivos, pero hasta ahora todos los entornos de eliminación de ruido existentes funcionan en una única instancia en una única máquina. Si el renderizado se realiza en varios dispositivos, es posible que no todos los píxeles renderizados sean accesibles para calcular una parte de la imagen sin ruido.
Una realización de la invención incluye un algoritmo de eliminación de ruido distribuido que funciona tanto con técnicas de eliminación de ruido basadas en inteligencia artificial (IA) como sin IA. Las regiones de la imagen ya están distribuidas en los nodos a partir de una operación de renderizado distribuida o se dividen y distribuyen desde una única memoria intermedia de fotogramas. Las regiones fantasma de las regiones vecinas necesarias para calcular la eliminación de ruido suficiente se recopilan de los nodos vecinos cuando es necesario, y los mosaicos resultantes finales se componen en una imagen final.
PROCESAMIENTO DISTRIBUIDO
LaFigura 20ilustra una realización de la invención en la que varios nodos 2021-2023 realizan el renderizado. Si bien solo se ilustran tres nodos para simplificar, los principios subyacentes de la invención no se limitan a ningún número particular de nodos. De hecho, se puede utilizar un solo nodo para implementar ciertas realizaciones de la invención.
Los nodos 2021-2023 renderizan cada uno una parte de una imagen, lo que da como resultado las regiones 2011 2013 en este ejemplo. Si bien las regiones rectangulares 2011-2013 se muestran en laFigura 20, se pueden utilizar regiones de cualquier forma y cualquier dispositivo puede procesar cualquier número de regiones. Las regiones que necesita un nodo para realizar una operación de eliminación de ruido suficientemente uniforme se denominan regiones fantasma 2011-2013. En otras palabras, las regiones fantasma 2001-2003 representan la totalidad de los datos necesarios para realizar la eliminación de ruido a un nivel de calidad especificado. Al reducir el nivel de calidad se reduce el tamaño de la región fantasma y, por lo tanto, la cantidad de datos necesarios, y al aumentar el nivel de calidad se aumenta la región fantasma y los datos correspondientes necesarios.
En una realización, si un nodo tal como el nodo 2021 tiene una copia local de una porción de la región fantasma 2001 requerida para eliminar el ruido de su región 2011 a un nivel de calidad especificado, el nodo recuperará los datos requeridos de uno o más nodos "adyacentes", tal como el nodo 2022 que posee una porción de la región fantasma 2001 como se ilustra. De manera similar, si el nodo 2022 tiene una copia local de una parte de la región fantasma 2002 requerida para eliminar el ruido de su región 2012 en el nivel de calidad especificado, el nodo 2022 recuperará los datos de la región fantasma requeridos 2032 del nodo 2021. La recuperación puede realizarse a través de un bus, una interconexión, una estructura de memoria de alta velocidad, una red (por ejemplo, Ethernet de alta velocidad), o incluso puede ser una interconexión en chip, en un chip de múltiples núcleos, capaz de distribuir el trabajo de renderizado entre una pluralidad de núcleos (por ejemplo, utilizado para renderizar imágenes grandes en resoluciones extremas o que varían en el tiempo). En una realización, cada nodo 2021-2023 comprende una unidad de ejecución individual o un conjunto especificado de unidades de ejecución dentro de un procesador de gráficos.
La cantidad específica de datos que se enviarán depende de las técnicas de eliminación de ruido que se utilicen. Además, los datos de la región fantasma pueden incluir cualquier dato necesario para mejorar la eliminación de ruido de cada región respectiva. En una realización, por ejemplo, los datos de la región fantasma incluyen colores/longitudes de onda, datos de intensidad/alfa y/o normales de la imagen. Sin embargo, los principios subyacentes de la invención no se limitan a ningún conjunto particular de datos de la región fantasma.
DETALLES ADICIONALES DE UNA REALIZACIÓN
Para redes o interconexiones más lentas, se puede utilizar la compresión de estos datos utilizando la compresión con o sin pérdidas de propósito general existente. Los ejemplos incluyen, entre otros, zlib, gzip y el algoritmo de cadena Lempel-Ziv-Markov (LZMA). Se puede utilizar una compresión adicional específica del contenido teniendo en cuenta que el delta en la información de impacto de rayos entre fotogramas puede ser bastante escaso, y solo las muestras que contribuyen a ese delta deben enviarse cuando el nodo ya tiene los deltas recopilados de fotogramas anteriores. Estos se pueden enviar de forma selectiva a los nodos que recopilan esas muestras,i,o el nodoipuede solicitar muestras de otros nodos. En una realización, se utiliza compresión sin pérdidas para ciertos tipos de datos y código de programa, mientras que se utilizan datos con pérdidas para otros tipos de datos.
LaFigura 21ilustra detalles adicionales de las interacciones entre los nodos 2021-2022, de acuerdo con una realización de la invención. Cada nodo 2021-2022 incluye un circuito de renderizado de trazado de rayos 2081-2082 para renderizar las regiones de imagen 2011-2012 y las regiones fantasma 2001-2002 respectivas. Los eliminadores de ruido 2100-2111 ejecutan operaciones de eliminación de ruido en las regiones 2011-2012, respectivamente, que cada nodo 2021-2022 es responsable de renderizar y eliminar el ruido. Los eliminadores de ruido 2021-2022, por ejemplo, pueden comprender circuitos, software o cualquier combinación de los mismos para generar las regiones sin ruido 2121-2122, respectivamente. Como se ha mencionado, al generar regiones sin ruido, los eliminadores de ruido 2021-2022 pueden necesitar depender de datos dentro de una región fantasma que pertenece a un nodo diferente (por ejemplo, el eliminador de ruido 2100 puede necesitar datos de la región fantasma 2002 que pertenece al nodo 2022).
Por lo tanto, en una realización, los eliminadores de ruido 2100-2111 generan las regiones sin ruido 2121-2122 utilizando datos de las regiones 2011-2012 y las regiones fantasma 2001-2002, respectivamente, al menos una parte de las cuales puede recibirse de otro nodo. Los administradores de datos de región 2101-2102 administran transferencias de datos desde las regiones fantasma 2001-2002 como se describe en este documento. En una realización, las unidades compresoras/descompresoras 2131-2132 realizan la compresión y descompresión de los datos de la región fantasma intercambiados entre los nodos 2021-2022, respectivamente.
Por ejemplo, el administrador de datos de región 2101 del nodo 2021 puede, a pedido del nodo 2022, enviar datos desde la región fantasma 2001 al compresor/descompresor 2131, que comprime los datos para generar datos comprimidos 2106 que transmite al nodo 2022, reduciendo así el ancho de banda a través de la interconexión, red, bus u otro enlace de comunicación de datos. El compresor/descompresor 2132 del nodo 2022 descomprime entonces los datos comprimidos 2106 y el eliminador de ruido 2111 utiliza los datos fantasma descomprimidos para generar una región sin ruido 2012 de mayor calidad que la que sería posible con solo datos de la región 2012. El administrador de datos de región 2102 puede almacenar los datos descomprimidos de la región fantasma 2001 en una memoria caché, memoria, archivo de registro u otro almacenamiento para que estén disponibles para el eliminador de ruido 2111 cuando genere la región sin ruido 2122. Se puede realizar un conjunto similar de operaciones para proporcionar los datos de la región fantasma 2002 al eliminador de ruido 2100 en el nodo 2021 que utiliza los datos en combinación con los datos de la región 2011 para generar una región sin ruido 2121 de mayor calidad.
OBTENER DATOS O RENDERIZAR
Si la conexión entre dispositivos tales como los nodos 2021-2022 es lenta (es decir, menor que una latencia umbral y/o un ancho de banda umbral), puede ser más rápido renderizar regiones fantasma localmente en lugar de solicitar los resultados a otros dispositivos. Esto se puede determinar en tiempo de ejecución mediante el seguimiento de las velocidades de transacción de la red y los tiempos de renderizado extrapolados linealmente para el tamaño de la región fantasma. En los casos en los que es más rápido renderizar toda la región fantasma, varios dispositivos pueden terminar renderizando las mismas partes de la imagen. La resolución de la parte renderizada de las regiones fantasma se puede ajustar en función de la varianza de la región base y el grado determinado de desenfoque.
EQUILIBRIO DE CARGA
En una realización, se pueden utilizar esquemas de equilibrio de carga estáticos y/o dinámicos para distribuir la carga de procesamiento entre los diversos nodos 2021-2023. Para el equilibrio dinámico de la carga, la varianza determinada por el filtro de eliminación de ruido puede requerir más tiempo en la eliminación de ruido, pero también puede influir en la cantidad de muestras utilizadas para renderizar una región concreta de la escena, con una varianza baja y regiones borrosas de la imagen que requieren menos muestras. Las regiones específicas asignadas a nodos concretos pueden ajustarse dinámicamente en función de los datos de fotogramas anteriores o comunicarse dinámicamente entre dispositivos a medida que se renderizan, de modo que todos los dispositivos tengan la misma cantidad de trabajo.
LaFigura 22ilustra una realización en la que un monitor 2201-2202 que se ejecuta en cada nodo respectivo 2021 2022 recopila datos de métricas de rendimiento que incluyen, entre otros, el tiempo consumido para transmitir datos a través de la interfaz de red 2211 -2212, el tiempo consumido al eliminar ruido de una región (con y sin datos de región fantasma), y el tiempo consumido renderizando cada región/región fantasma. Los monitores 2201-2202 informan de estas métricas de rendimiento a un nodo administrador o equilibrador de carga 2201, que analiza los datos para identificar la carga de trabajo actual en cada nodo 2021-2022 y determina potencialmente un modo más eficiente de procesar las distintas regiones sin ruido 2121-2122. El nodo administrador 2201 distribuye entonces nuevas cargas de trabajo para nuevas regiones a los nodos 2021-2022 de acuerdo con la carga detectada. Por ejemplo, el nodo administrador 2201 puede transmitir más trabajo a aquellos nodos que no están muy cargados y/o reasignar trabajo de aquellos nodos que están sobrecargados. Además, el nodo equilibrador de carga 2201 puede transmitir un comando de reconfiguración para ajustar la manera específica en la que el renderizado y/o la eliminación de ruido son realizados por cada uno de los nodos (algunos ejemplos de los cuales se describen anteriormente).
DETERMINACIÓN DE REGIONES FANTASMA
En una realización, los tamaños y formas de las regiones fantasma 2001-2002 se determinan basándose en el algoritmo de eliminación de ruido implementado por los eliminadores de ruido 2100-2111. Sus respectivos tamaños pueden modificarse dinámicamente en función de la varianza detectada de las muestras en las que se está eliminando ruido. El algoritmo de aprendizaje utilizado para la eliminación de ruido de IA en sí puede utilizarse para determinar tamaños de región adecuados o, en otros casos, tales como un desenfoque bilateral, el ancho de filtro predeterminado determinará el tamaño de las regiones fantasma 2001-2002. En una implementación que utiliza un algoritmo de aprendizaje, el motor de aprendizaje automático puede ejecutarse en el nodo administrador 2201 y/o partes del aprendizaje automático pueden ejecutarse en cada uno de los nodos individuales 2021-2023(consulte, por ejemplo,las Figuras 18A-B y el texto asociado anterior).
RECOPILACIÓN DE LA IMAGEN FINAL
En una realización, la imagen final se genera reuniendo las regiones renderizadas y sin ruido de cada uno de los nodos 2021 -2023, sin necesidad de las regiones fantasma o normales. En laFigura 22, por ejemplo, las regiones sin ruido 2121-2122 se transmiten al procesador de regiones 2280 del nodo administrador 2201, que combina las regiones para generar la imagen sin ruido final 2290, que luego se muestra en una pantalla 2290. El procesador de regiones 2280 puede combinar las regiones utilizando una variedad de técnicas de composición 2D. Aunque se ilustran como componentes separados, el procesador de regiones 2280 y la imagen sin ruido 2290 pueden ser parte integral de la pantalla 2290. En esta realización, los diversos nodos 2021-2022 pueden usar una técnica de envío directo para transmitir las regiones sin ruido 2121-2122 y potencialmente usar varias compresiones con o sin pérdidas de los datos de la región.
La eliminación de ruido mediante IA sigue siendo una operación costosa y, a medida que los juegos se trasladan a la nube. Por ello, es posible que se requiera distribuir el procesamiento de la eliminación de ruido entre múltiples nodos 2021-2022 para lograr velocidades de fotogramas en tiempo real para juegos tradicionales o de realidad virtual (RV) que requieren velocidades de fotogramas más altas. Los estudios de cine también suelen renderizar en grandes granjas de renderizado que se pueden utilizar para una eliminación de ruido más rápida.
Una realización de un procedimiento para realizar renderizado y eliminación de ruido distribuidos se ilustra en laFigura 23. El procedimiento se puede implementar dentro del contexto de las arquitecturas de sistema descritas anteriormente, pero no se limita a ninguna arquitectura de sistema en particular.
En 2301, el trabajo gráfico se envía a una pluralidad de nodos que realizan operaciones de trazado de rayos para renderizar una región de un fotograma de imagen. En una realización, cada nodo puede tener ya los datos necesarios para realizar las operaciones en la memoria. Por ejemplo, dos o más de los nodos pueden compartir una memoria común o las memorias locales de los nodos pueden tener ya datos almacenados de operaciones de trazado de rayos anteriores. Alternativamente, o además, ciertos datos pueden transmitirse a cada nodo.
En 2302, se determina la "región fantasma" necesaria para un nivel especificado de eliminación de ruido (es decir, a un nivel aceptable de rendimiento). La región fantasma comprende cualquier dato necesario para realizar el nivel especificado de eliminación de ruido, incluidos los datos que pertenecen a uno o más nodos.
En 2303, los datos relacionados con las regiones fantasma (o partes de las mismas) se intercambian entre nodos. En 2304 cada nodo realiza la eliminación de ruido en su región respectiva (por ejemplo, utilizando los datos intercambiados) y en 2305 los resultados se combinan para generar el fotograma de imagen final sin ruido.
En una realización, un nodo administrador o nodo primario tal como el que se muestra en laFigura 22envía el trabajo a los nodos y luego combina el trabajo realizado por los nodos para generar el fotograma de imagen final. En otra realización, se utiliza una arquitectura basada en pares donde los nodos son pares que intercambian datos para renderizar y eliminar el ruido del fotograma de imagen final.
Los nodos descritos en este documento (por ejemplo, los nodos 2021-2023) pueden ser sistemas informáticos de procesamiento de gráficos interconectados a través de una red de alta velocidad. Alternativamente, los nodos pueden ser elementos de procesamiento individuales acoplados a una estructura de memoria de alta velocidad. En esta realización, todos los nodos pueden compartir un espacio de memoria virtual común y/o una memoria física común. En otra realización, los nodos pueden ser una combinación de CPU y GPU. Por ejemplo, el nodo administrador 2201 descrito anteriormente puede ser una CPU y/o software ejecutado en la CPU y los nodos 2021 -2022 pueden ser GPU y/o software ejecutado en las GPU. Se pueden utilizar varios tipos diferentes de nodos sin dejar de cumplir con los principios subyacentes de la invención.
EJEMPLOS DE IMPLEMENTACIONES DE REDES NEURONALES
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 se puede implementar como un gráfico acíclico en el que los nodos están dispuestos en capas. Normalmente, una topología de red de realimentación prospectiva incluye una capa de entrada y una capa de salida que están separadas por al menos una capa oculta. La capa oculta transforma la entrada recibida por la capa de entrada en una representación que es útil para generar la salida en la capa de salida. Los nodos de red están completamente conectados mediante bordes a los nodos en capas adyacentes, pero no hay bordes entre nodos dentro de cada capa. Los datos recibidos en los nodos de una capa de entrada de una red de realimentación prospectiva se propagan (es decir, "se realimentan prospectivamente") a los nodos de la capa de salida mediante una función de activación que calcula los estados de los nodos de cada capa sucesiva en la red basándose en coeficientes ("pesos") asociados, respectivamente, con cada uno de los bordes que conectan las capas. Dependiendo del modelo específico que se represente mediante el algoritmo que se esté ejecutando, la salida del algoritmo de 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 los pesos asociados con las conexiones se ajustan para minimizar ese error a medida que la señal de error se propaga hacia atrás a través de las capas de la red. La red se considera "entrenada" cuando se minimizan los errores para cada una de las salidas generadas a partir de las instancias del conjunto de datos de entrenamiento.
La precisión de un algoritmo de aprendizaje automático puede verse afectada significativamente por la calidad del conjunto de datos usado para entrenar el algoritmo. El proceso de entrenamiento puede ser computacionalmente intensivo y puede requerir una cantidad significativa de tiempo en un procesador convencional de propósito general. En consecuencia, se utiliza hardware de procesamiento paralelo para entrenar muchos tipos de algoritmos de aprendizaje automático. Esto es particularmente útil para optimizar el entrenamiento de redes neuronales, ya que los cálculos realizados para ajustar los coeficientes en las redes neuronales se prestan naturalmente a implementaciones paralelas. Específicamente, muchos algoritmos de aprendizaje automático y aplicaciones de software se han adaptado para hacer uso del hardware de procesamiento paralelo dentro de dispositivos de procesamiento de gráficos de propósito general.
LaFigura 24es un diagrama generalizado de una pila de software de aprendizaje automático 2400. Una aplicación de aprendizaje automático 2402 se puede configurar para entrenar una red neuronal utilizando un conjunto de datos de entrenamiento o para usar una red neuronal profunda entrenada para implementar inteligencia automática. La aplicación de aprendizaje automático 2402 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 2402 puede implementar cualquier tipo de inteligencia automática incluyendo, pero sin limitación, reconocimiento de imágenes, mapeo y localización, navegación autónoma, síntesis de habla, formación de imágenes médicas o traducción de idioma.
La aceleración de hardware para la aplicación de aprendizaje automático 2402 se puede habilitar a través de una estructura de aprendizaje automático 2404. La estructura de aprendizaje automático 2404 puede proporcionar una biblioteca de primitivas de aprendizaje automático. Las primitivas de aprendizaje automático son operaciones básicas que comúnmente realizan los algoritmos de aprendizaje automático. Sin la estructura de aprendizaje automático 2404, los desarrolladores de algoritmos de aprendizaje automático tendrían que crear y optimizar la lógica computacional principal asociada con el algoritmo de aprendizaje automático, y luego volver a optimizar la lógica computacional a medida que se desarrollan nuevos procesadores paralelos. En cambio, la aplicación de aprendizaje automático se puede configurar para realizar los cálculos necesarios utilizando las primitivas proporcionadas por la estructura de aprendizaje automático 2404. Las primitivas de ejemplo incluyen convoluciones de tipo tensor, funciones de activación y agrupamiento, que son operaciones computacionales que se realizan mientras se entrena una red neuronal convolucional (RNC). La estructura de aprendizaje automático 2404 puede proporcionar también primitivas para implementar subprogramas de álgebra lineal básicos realizados por muchos algoritmos de aprendizaje automático, tales como operaciones matriciales y vectoriales.
La estructura de aprendizaje automático 2404 puede procesar datos de entrada recibidos de la aplicación de aprendizaje automático 2402 y generar la entrada apropiada para un entorno de cálculo 2406. El entorno de cálculo 2406 puede abstraer las instrucciones subyacentes proporcionadas al controlador GPGPU 2408 para permitir que la estructura de aprendizaje automático 2404 aproveche la aceleración de hardware a través del hardware GPGPU 2410 sin requerir que la estructura de aprendizaje automático 2404 tenga un conocimiento profundo de la arquitectura del hardware GPGPU 2410. Además, el entorno de cálculo 2406 puede habilitar la aceleración de hardware para la estructura de aprendizaje automático 2404 en una variedad de tipos y generaciones del hardware GPGPU 2410.
Aceleración de Aprendizaje Automático de GPGPU
LaFigura 25ilustra un sistema informático de múltiples GPU 2500, de acuerdo con una realización. El sistema informático de múltiples GPU 2500 puede incluir un procesador 2502 acoplado a múltiples GPGPU 2506A-D mediante un conmutador de interfaz de anfitrión 2504. El conmutador de interfaz de anfitrión 2504, en una realización, es un dispositivo de conmutación PCI express que acopla el procesador 2502 a un bus PCI express a través del cual el procesador 2502 puede comunicarse con el conjunto de GPGPU 2506A-D. Cada una de las múltiples GPGPU 2506A-D puede ser una instancia de la GPGPU descrita anteriormente. Las GPGPU 2506A-D se pueden interconectar mediante un conjunto de enlaces de GPU a GPU de punto a punto de alta velocidad 2516. Los enlaces de GPU a GPU de alta velocidad se pueden conectar a cada una de las GPGPU 2506A-D a través de un enlace de GPU dedicado. Los enlaces de GPU P2P 2516 permiten la comunicación directa entre cada una de las GPGPU 2506A-D sin requerir comunicación a través del bus de interfaz de anfitrión al que está conectado el procesador 2502. 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 2500, por ejemplo, mediante uno o más dispositivos de red. Aunque en la realización ilustrada las GPGPU 2506A-D se conectan al procesador 2502 mediante el conmutador de interfaz de anfitrión 2504, en una realización, el procesador 2502 incluye el soporte directo para los enlaces de GPU de P2P 2516 y puede conectarse directamente a las GPGPU 2506A-D.
Implementaciones de red neuronal de aprendizaje automático
La arquitectura informática proporcionada por realizaciones descritas en el presente documento puede configurarse para realizar los tipos de procesamiento paralelo que son particularmente adecuados para entrenar y desplegar redes neuronales para un aprendizaje automático. Una red neuronal puede generalizarse como una red de funciones que tienen una relación de grafo. Como es bien sabido en la técnica, existen diversos tipos de implementaciones de redes neuronales utilizadas en el aprendizaje automático. Un tipo ejemplar de red neuronal es la red de realimentación prospectiva, como se describió anteriormente.
Un segundo tipo ilustrativo de red neuronal es la red neuronal convolucional (RNC). Una RNC es una red de realimentación prospectiva especializada para procesar datos que tienen una topología conocida, similar a una cuadrícula, tales como datos de imágenes. En consecuencia, las RNC se utilizan comúnmente para aplicaciones de visión computacional y reconocimiento de imágenes, pero también se pueden utilizar para otros tipos de reconocimiento de patrones, tal como el procesamiento del habla y el lenguaje. Los nodos en la capa de entrada de RNC están organizados en un conjunto de "filtros" (detectores de características inspirados por los campos receptivos encontrados en la retina), y la salida de cada conjunto de filtros se propaga a nodos en capas sucesivas de la red. Los cálculos para una RNC incluyen la aplicación de la operación matemática de convolución a cada filtro para producir la salida de ese filtro. La convolución es un tipo especializado de operación matemática realizada por dos funciones para producir una tercera función que es una versión modificada de una de las dos funciones originales. En la terminología de redes convolucionales, la primera función de la convolución puede denominarse entrada, mientras que la segunda función puede denominarse núcleo de convolución. La salida puede denominarse mapa de características. Por ejemplo, la entrada a una capa de convolución puede ser una matriz multidimensional de datos que define 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 de realimentación prospectiva que incluyen conexiones de retroalimentación entre capas. Las RNN posibilitan el modelado de datos secuenciales compartiendo datos de parámetros a través 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 momento futuro, ya que al menos una parte de los datos de salida de la RNN se utiliza como retroalimentación para procesar la entrada posterior en una secuencia. Esta característica hace que las RNN sean particularmente útiles para el procesamiento de lenguaje debido a la naturaleza variable en la que pueden componerse los datos de lenguaje.
Las figuras que se describen a continuación presentan ejemplos de redes de realimentación prospectiva, RNC y RNN, así como también describen un proceso general para entrenar e implementar respectivamente cada uno de esos tipos de redes. Se entenderá que estas descripciones son ilustrativas y no limitantes en cuanto a cualquier realización específica descrita en el presente documento y los conceptos ilustrados pueden aplicarse, en general, a redes neuronales profundas y técnicas de aprendizaje automático en general.
Las redes neuronales ilustrativas descritas anteriormente pueden usarse para realizar un aprendizaje profundo. El aprendizaje profundo es un aprendizaje automático que usa redes neuronales profundas. Las redes neuronales profundas usadas en aprendizaje profundo son redes neuronales artificiales compuestas de múltiples capas ocultas, a diferencia de redes neuronales poco profundas que incluyen únicamente una sola 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 permiten el reconocimiento de patrones de varias etapas que da como resultado un error de salida reducido en relación con las técnicas de aprendizaje automático superficial.
Las redes neuronales profundas utilizadas en el aprendizaje profundo generalmente incluyen una red de extremo frontal para realizar el reconocimiento de características acoplada a una red de extremo posterior que representa un modelo matemático que puede realizar operaciones (por ejemplo, clasificación de objetos, reconocimiento de voz, etc.) en función de la representación de características proporcionada al modelo. Un aprendizaje profundo posibilita que se realice un aprendizaje automático sin requerir que se realice una ingeniería de características artesanal para el modelo. En cambio, las redes neuronales profundas pueden aprender características en función de la estructura estadística o la correlación dentro de los datos de entrada. Las características aprendidas se pueden proporcionar a un modelo matemático que puede mapear características detectadas a una salida. El modelo matemático utilizado por la red generalmente está especializado para la tarea específica que se va a realizar, y se utilizarán diferentes modelos para realizar diferentes tareas.
Una vez que la red neuronal está estructurada, se puede aplicar un modelo de aprendizaje a la red para entrenarla para que realice 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 procedimiento 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érdidas y se calcula un valor de error para cada una de las neuronas en la capa de salida. Los valores de error se propagan hacia atrás hasta que cada neurona tiene un valor de error asociado que representa aproximadamente su contribución a la salida original. La red puede aprender, a continuación, de esos errores usando un algoritmo, tal como el algoritmo de descenso de gradiente estocástico, para actualizar los pesos de la red neuronal.
LasFiguras 26-27ilustran una red neuronal convolucional ejemplar. LaFigura 26ilustra varias capas dentro de una RNC. Como se muestra en laFigura 26, una RNC ejemplar utilizada para modelar el procesamiento de imágenes puede recibir la entrada 2602 que describe las componentes rojo, verde y azul (RGB) de una imagen de entrada. La entrada 2602 puede procesarse mediante múltiples capas convolucionales (por ejemplo, capa convolucional 2604, capa convolucional 2606). La salida de las múltiples capas convolucionales puede procesarse opcionalmente por un conjunto de capas completamente conectadas 2608. Las neuronas en una capa completamente conectada tienen conexiones completas con todas las activaciones en la capa anterior, como se describió anteriormente para una red de realimentación prospectiva. La salida de las capas completamente conectadas 2608 puede usarse para generar un resultado de salida a partir de la red. Las activaciones dentro de las capas completamente conectadas 2608 se pueden calcular utilizando la multiplicación de matrices en lugar de la convolución. No todas las implementaciones de RNC utilizan capas completamente conectadas. Por ejemplo, en algunas implementaciones, la capa convolucional 2606 puede generar una salida para la RNC.
Las capas convolucionales están escasamente conectadas, lo que difiere de la configuración de red neuronal tradicional que se encuentra en las capas completamente conectadas 2608. Las capas de red neuronal tradicionales están completamente conectadas, de manera que cada unidad de salida interacciona con cada unidad de entrada. Sin embargo, las capas convolucionales están escasamente conectadas porque la salida de la convolución de un campo es la entrada (en lugar del valor de estado respectivo de cada uno de los nodos en el campo) a los nodos de la capa posterior, como se ilustra. Los núcleos asociados con las capas convolucionales realizan operaciones de convolución, cuya salida se envía a la siguiente capa. La reducción de dimensionalidad realizada dentro de las capas convolucionales es un aspecto que permite que la RNC se escale para procesar imágenes grandes.
LaFigura 27ilustra etapas de cálculo de ejemplo dentro de una capa convolucional de una CNN. La entrada a una capa convolucional 2712 de una RNC se puede procesar en tres etapas de una capa convolucional 2714. Las tres etapas pueden incluir una etapa de convolución 2716, una etapa de detección 2718 y una etapa de agrupamiento 2720. La capa de convolución 2714 puede emitir, a continuación, datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de mapas de características de salida o proporcionar entrada a una capa completamente conectada, por ejemplo, para generar un valor de clasificación para la entrada a la RNC.
En la fase de convolución 2716 se realizan varias convoluciones en paralelo para producir un conjunto de activaciones lineales. La etapa de convolución 2716 puede incluir una transformación afín, que es cualquier transformación que se pueda especificar como una transformación lineal más una traslación. Las transformaciones afines incluyen rotaciones, traslaciones, escalamiento y combinaciones de estas transformaciones. La etapa de convolución calcula la salida de funciones (por ejemplo, neuronas) que están conectadas a regiones específicas en la entrada, que se pueden determinar como la región local asociada con la neurona. Las neuronas calculan un producto escalar entre los pesos de las neuronas y la región en la entrada local a la que están conectadas las neuronas. La salida de la etapa de convolución 2716 define un conjunto de activaciones lineales que se procesan por etapas sucesivas de la capa convolucional 2714.
Las activaciones lineales se pueden procesar mediante una etapa de detección 2718. En la etapa de detección 2718, 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 utiliza una función de activación definida como f(x)=max
(0,x), de modo que la activación tiene un umbral de cero.
La etapa de agrupación 2720 utiliza una función de agrupación que reemplaza la salida de la capa convolucional 2706 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 situaciones 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. Se pueden utilizar varios tipos de funciones de agrupación durante la etapa de agrupación 2720, incluyendo agrupación máxima, agrupación promedio y agrupación de norma I2. Además, algunas implementaciones de RNC no incluyen una etapa de agrupación. En cambio, dichas implementaciones sustituyen una etapa de convolución adicional que tiene un paso aumentado en relación con las etapas de convolución anteriores.
La salida de la capa convolucional 2714 puede ser procesada luego por la siguiente capa 2722. La siguiente capa 2722 puede ser una capa convolucional adicional o una de las capas completamente conectadas 2708. Por ejemplo, la primera capa convolucional 2704 de la Figura 27 puede generar una salida a la segunda capa convolucional 2706, mientras que la segunda capa convolucional puede generar una salida a una primera capa de las capas completamente conectadas 2808.
LaFigura 28ilustra una red neuronal recurrente 2800 ejemplar. En una red neuronal recurrente (RNN), el estado previo de la red influye sobre la salida del estado actual de la red. Las RNN se pueden construir de diversas maneras utilizando una variedad de funciones. El uso de las RNN generalmente gira en torno al uso de modelos matemáticos para predecir el futuro en función de una secuencia previa de entradas. Por ejemplo, puede usarse una RNN para realizar modelado de lenguaje estadístico para predecir una palabra próxima dada en una secuencia de palabras anterior. La RNN 2800 ilustrada se puede describir como que tiene una capa de entrada 2802 que recibe un vector de entrada, capas ocultas 2804 para implementar una función recurrente, un mecanismo de retroalimentación 2805 para habilitar una "memoria" de estados anteriores y una capa de salida 2806 para generar un resultado. La RNN 2800 opera basándose en pasos de tiempo. El estado de la RNN en un paso de tiempo determinado se ve influenciado en función del paso de tiempo anterior a través del mecanismo de retroalimentación 2805. Para una etapa de tiempo dada, se define el estado de las capas ocultas 2804 por el estado anterior y la entrada en la etapa de tiempo actual. Una entrada inicial (x1) en un primer paso de tiempo puede ser procesada por la capa oculta 2804. Una segunda entrada (x2) puede ser procesada por la capa oculta 2804 utilizando información de estado que se determina durante el procesamiento de la entrada inicial (x1). Un estado dado se puede calcular como s_t=f(Ux_t+ Ws_(t-1)), donde U y W son matrices de parámetros. La función f es generalmente una no linealidad, tal como la función tangente hiperbólica (Tanh) o una variante de la función rectificadora f(x)=max
(0,x). Sin embargo, la función matemática específica utilizada en las capas ocultas 2804 puede variar dependiendo de los detalles de implementación específicos de la RNN 2800.
Además de las redes RNC y RNN básicas descritas, pueden habilitarse variaciones en esas redes. Una variante de RNN ilustrativa es la RNN de memoria a corto plazo larga (LSTM). Las RNN LSTM son capaces de aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias más largas de lenguaje. Una variante en la RNC es una red de creencia profunda convolucional, que tiene una estructura similar a una r Nc y se entrena de una manera similar a una red de creencia profunda. Una red de creencias profundas (DBN) es una red neuronal generativa que se compone de múltiples capas de variables estocásticas (aleatorias). Las DBN pueden entrenarse capa a capa usando aprendizaje no supervisado voraz. A continuación, los pesos aprendidos de la DBN pueden utilizarse para preentrenar redes neuronales determinando un conjunto inicial óptimo de pesos para la red neuronal.
LaFigura 29ilustra 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 utilizando un conjunto de datos de entrenamiento 2902. Se han desarrollado diversas estructuras de entrenamiento 2904 para posibilitar la aceleración de hardware del proceso de entrenamiento. Por ejemplo, la estructura de aprendizaje automático descrito anteriormente se puede configurar como una estructura de entrenamiento. La estructura de entrenamiento 2904 se puede conectar a una red neuronal no entrenada 2906 y permitir que la red neuronal no entrenada se entrene utilizando los recursos de procesamiento paralelo descritos en este documento para generar una red neuronal entrenada 2908.
Para iniciar el proceso de entrenamiento, los pesos iniciales pueden elegirse aleatoriamente o mediante un entrenamiento previo utilizando una red de creencias profundas. El ciclo de entrenamiento se puede realizar de manera supervisada o no supervisada.
El aprendizaje supervisado es un procedimiento de aprendizaje en el que se realiza un entrenamiento como una operación mediada, tal como cuando el conjunto de datos de entrenamiento 2902 incluye una entrada emparejada con la salida deseada para la entrada, o cuando 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. Luego, los errores se propagan hacia atrás a través del sistema. La estructura de entrenamiento 2904 puede ajustarse para ajustar los pesos que controlan la red neuronal no entrenada 2906. La estructura de entrenamiento 2904 puede proporcionar herramientas para monitorizar qué tan bien la red neuronal no entrenada 2906 está convergiendo hacia un modelo adecuado para generar respuestas correctas en función de los 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 2908. Luego, la red neuronal entrenada 2908 se puede desplegar para implementar cualquier número de operaciones de aprendizaje automático.
El aprendizaje no supervisado es un procedimiento de aprendizaje en el que la red intenta entrenarse a sí misma usando datos no etiquetados. Por lo tanto, para el aprendizaje no supervisado, el conjunto de datos de entrenamiento 2902 incluirá datos de entrada sin ningún dato de salida asociado. La red neuronal no entrenada 2906 puede aprender agrupamientos dentro de la entrada no etiquetada y puede determinar cómo las entradas individuales están relacionadas con el conjunto de datos global. El entrenamiento no supervisado se puede utilizar para generar un mapa autoorganizado, que es un tipo de red neurona! entrenada 2907 capaz de realizar operaciones útiles para reducir la dimensionalidad de los datos. El entrenamiento no supervisado también se puede utilizar para realizar la 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 2902 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 los datos de entrada se utilizan continuamente para entrenar aún más el modelo. El aprendizaje incremental permite que la red neuronal entrenada 2908 se adapte a los nuevos datos 2912 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 en términos computacionales para un solo nodo de computacional. En lugar de usar un único nodo de cálculo, puede usarse una red distribuida de nodos computacionales para acelerar el proceso de entrenamiento.
LaFigura 30Aes un diagrama de bloques que ilustra el aprendizaje distribuido. El aprendizaje distribuido es un modelo de entrenamiento que utiliza múltiples nodos informáticos distribuidos, tales como los nodos descritos anteriormente, para realizar un entrenamiento supervisado o no supervisado de una red neuronal. Los nodos informáticos distribuidos pueden incluir cada uno uno o más procesadores de anfitrión y uno o más de los nodos de procesamiento de propósito general, tales como una unidad de procesamiento de gráficos de propósito general altamente paralela. Como se ilustra, el aprendizaje distribuido se puede realizar mediante paralelismo de modelos 3002, paralelismo de datos 3004 o una combinación de paralelismo de modelos y datos.
En el paralelismo de modelos 3002, diferentes nodos informáticos en un sistema distribuido pueden realizar cálculos de entrenamiento para diferentes partes de una sola red. Por ejemplo, cada capa de una red neuronal puede entrenarse por un nodo de procesamiento diferente del sistema distribuido. Los beneficios del paralelismo de modelos incluyen la capacidad de escalar a modelos particularmente grandes. La división de los cálculos asociados con diferentes capas de la red neuronal posibilita el entrenamiento de redes neuronales muy grandes en las que los pesos para todas las capas no se ajustarían en la memoria de un único nodo computacional. En algunos casos, el paralelismo de modelo puede ser particularmente útil al realizar entrenamiento no supervisado de redes neuronales grandes.
En el paralelismo de datos 3004, los diferentes nodos de la red distribuida tienen una instancia completa del modelo y cada nodo recibe una porción diferente de los datos. Luego se combinan los resultados de los diferentes nodos. Aunque son posibles diferentes enfoques al paralelismo de datos, los enfoques de entrenamiento paralelo de datos requieren, todos ellos, una técnica de combinación de resultados y de sincronización de los parámetros de modelo entre cada nodo. Los enfoques ilustrativos para la combinación de datos incluyen promediado de parámetros y paralelismo de datos basado en actualizaciones. El promedio de parámetros entrena cada nodo en un subconjunto de los datos de entrenamiento y establece los parámetros globales (por ejemplo, pesos, desviaciones) en el promedio de los parámetros de 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. Además, el paralelismo de datos basado en actualizaciones se puede realizar de manera descentralizada, donde las actualizaciones se comprimen y transfieren entre nodos.
El paralelismo de modelo y de datos combinado 3006 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 sola máquina. Sin embargo, los procesadores paralelos y las GPGPU descritas en este documento pueden implementar varias técnicas para reducir la sobrecarga del entrenamiento distribuido, incluidas técnicas para permitir la transferencia de datos de GPU a GPU de alto ancho de banda y la sincronización de datos remota acelerada.
Aplicaciones de aprendizaje automático ejemplares
El aprendizaje automático se puede aplicar para resolver una variedad de problemas tecnológicos, incluidos, entre otros, la visión informática, la conducción y navegación autónomas, el reconocimiento de voz y el procesamiento del lenguaje. 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 la visión artificial van desde la reproducción de las capacidades visuales humanas, tales como el reconocimiento de rostros, 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 procesadores paralelos permite entrenar aplicaciones de visión artificial utilizando conjuntos de datos de entrenamiento significativamente más grandes que los que eran posibles anteriormente y permite implementar sistemas de inferencia utilizando procesadores paralelos de bajo consumo.
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 acelerado se pueden utilizar para entrenar modelos de conducción basados en conjuntos de datos que definen las respuestas adecuadas a una entrada de entrenamiento específica. Los procesadores paralelos descritos en este documento pueden permitir un entrenamiento rápido de las redes neuronales cada vez más complejas que se utilizan para soluciones de conducción autónoma y permiten la implementación de procesadores de inferencia de bajo consumo en una plataforma móvil adecuada para la integración en vehículos autónomos.
Las redes neuronales profundas aceleradas por procesadores paralelos han permitido enfoques de aprendizaje automático para el reconocimiento automático de voz (ASR). El ASR incluye la creación de una función que calcula la secuencia lingüística más probable dada una secuencia acústica de entrada. El aprendizaje automático acelerado mediante redes neuronales profundas ha permitido reemplazar los modelos ocultos de Markov (HMM) y los modelos de mezcla gaussiana (GMM) utilizados 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 sean robustos a entradas erróneas o desconocidas. Las aplicaciones de procesador de lenguaje natural ilustrativas incluyen la traducción mecánica automática entre idiomas humanos.
Las plataformas de procesamiento paralelo utilizadas para el aprendizaje automático se pueden dividir en plataformas de entrenamiento y plataformas de implementación. Las plataformas de entrenamiento son generalmente altamente paralelas e incluyen optimizaciones para acelerar el entrenamiento de nodo único de múltiples GPU y el entrenamiento de múltiples nodos, múltiples GPU. Los procesadores paralelos ejemplares adecuados para el entrenamiento incluyen la unidad de procesamiento de gráficos de propósito general altamente paralela y/o los sistemas informáticos de múltiples GPU descritos en este documento. 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.
LaFigura 30Bilustra un sistema de inferencia en un chip (SOC) ejemplar 3100 adecuado para realizar inferencias utilizando un modelo entrenado. El SOC 3100 puede integrar componentes de procesamiento que incluyen un procesador de medios 3102, un procesador de visión 3104, una GPGPU 3106 y un procesador de múltiples núcleos 3108. El SOC 3100 puede incluir, además, una memoria en chip 3105 que puede habilitar un grupo de datos compartido en chip al que puede acceder cada uno de los componentes de procesamiento. Los componentes de procesamiento pueden optimizarse para una operación de baja potencia para posibilitar 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 3100 se puede utilizar como parte del sistema de control principal para un vehículo autónomo. Donde el SOC 3100 está configurado para su uso en vehículos autónomos, el SOC se diseña y está configurado para cumplir con las normas de seguridad funcional relevantes de la jurisdicción de despliegue.
Durante el funcionamiento, el procesador de medios 3102 y el procesador de visión 3104 pueden trabajar en conjunto para acelerar las operaciones de visión por ordenador. El procesador de medios 3102 puede posibilitar la decodificación de latencia baja de múltiples flujos de vídeo de alta resolución (por ejemplo, 4K, 8K). Las secuencias de vídeo decodificadas se pueden escribir en una memoria intermedia en la memoria en chip 3105. El procesador de visión 3104 puede luego analizar el vídeo decodificado y realizar operaciones de procesamiento preliminares en los fotogramas del vídeo decodificado en preparación para procesar los fotogramas utilizando un modelo de reconocimiento de imágenes entrenado. Por ejemplo, el procesador de visión 3104 puede acelerar las operaciones convolucionales para una RNC que se usa para realizar el reconocimiento de imagen en los datos de vídeo de alta resolución, mientras se realizan cálculos de modelo de extremo trasero por la GPGPU 3106.
El procesador de múltiples núcleos 3108 puede incluir lógica de control para ayudar con la secuenciación y sincronización de transferencias de datos y operaciones de memoria compartida realizadas por el procesador de medios 3102 y el procesador de visión 3104. El procesador de múltiples núcleos 3108 también puede funcionar como un procesador de aplicaciones para ejecutar aplicaciones de software que pueden hacer uso de la capacidad de cálculo de inferencia de la GPGPU 3106. Por ejemplo, puede implementarse al menos una porción de la lógica de navegación y de conducción en software que se ejecuta en el procesador de múltiples núcleos 3108. Dicho software puede emitir directamente cargas de trabajo computacionales a la GPGPU 3106 o las cargas de trabajo computacionales se pueden emitir al procesador de múltiples núcleos 3108, que puede descargar al menos una parte de esas operaciones a la GPGPU 3106.
La GPGPU 3106 puede incluir agrupaciones de computación tales como una configuración de bajo consumo de las agrupaciones de computación DPLAB06A-DPLAB06H dentro de la unidad de procesamiento de gráficos de propósito general altamente paralelo DPLAB00. Las agrupaciones de computación dentro de la GPGPU 3106 pueden admitir instrucciones que están específicamente optimizadas para realizar cálculos de inferencia en una red neuronal entrenada. Por ejemplo, la GPGPU 3106 puede admitir instrucciones para realizar cálculos de baja precisión, tales como operaciones con vectores enteros de 8 y 4 bits.
ARQUITECTURA DE TRAZADO DE RAYOS
En una implementación, el procesador de gráficos incluye circuitos y/o código de programa para realizar el trazado de rayos en tiempo real. En algunas realizaciones, se incluye un conjunto dedicado de núcleos de trazado de rayos en el procesador de gráficos para realizar las diversas operaciones de trazado de rayos descritas en este documento, incluidas las operaciones de cruce de rayos y/o intersección de rayos. Además de los núcleos de trazado de rayos, una realización incluye múltiples conjuntos de núcleos de procesamiento de gráficos para realizar operaciones de sombreado programables y múltiples conjuntos de núcleos tensoriales para realizar operaciones matriciales en datos tensoriales.
LaFigura 31ilustra una parte ejemplar de una de dichas unidades de procesamiento de gráficos (GPU) 3105 que incluye conjuntos dedicados de recursos de procesamiento de gráficos dispuestos en grupos de múltiples núcleos 3100A-N. Si bien se proporcionan los detalles de un solo grupo de múltiples núcleos 3100A, se apreciará que los otros grupos de múltiples núcleos 3100B-N pueden estar equipados con los mismos conjuntos de recursos de procesamiento gráfico o conjuntos similares.
Como se ilustra, un grupo de múltiples núcleos 3100A puede incluir un conjunto de núcleos de gráficos 3130, un conjunto de núcleos de tensor 3140 y un conjunto de núcleos de trazado de rayos 3150. Un planificador/despachador 3110 planifica y despacha los hilos de gráficos para su ejecución en los diversos núcleos 3130, 3140, 3150. Un conjunto de archivos de registro 3120 almacena valores de operando usados por los núcleos 3130, 3140, 3150 cuando se ejecutan los hilos de gráficos. Estos pueden incluir, por ejemplo, registros de número entero para almacenar valores de números enteros, registros de coma flotante para almacenar valores de coma flotante, registros de vector para almacenar elementos de datos empaquetados (elementos de datos de número entero y/o de coma flotante) y registros de tesela para almacenar valores de tensor/matriz. En una realización, los registros de tesela se implementan como conjuntos combinados de registros de vector.
Una o más memorias caché de Nivel 1 (L1) y unidades de textura 3160 almacenan datos de gráficos tales como datos de textura, datos de vértices, datos de píxeles, datos de rayos, datos de volumen delimitador, etc., localmente dentro de cada grupo de múltiples núcleos 3100A. Una memoria caché de Nivel 2 (L2) 3180 compartida por todos o un subconjunto de los grupos de múltiples núcleos 3100A-N almacena datos de gráficos y/o instrucciones para múltiples hilos de gráficos concurrentes. Como se ilustra, la memoria caché L23180 puede ser compartida entre una pluralidad de grupos de múltiples núcleos 3100A-N. Uno o más controladores de memoria 3170 acoplan la GPU 3105 a una memoria 3198 que puede ser una memoria de sistema (por ejemplo, DRAM) y/o una memoria gráfica dedicada (por ejemplo, memoria GDDR6).
El circuito de entrada/salida (E/S) 3195 acopla la GPU 3105 a uno o más dispositivos de E/S 3195, como procesadores de señal digital (DSP), controladores de red o dispositivos de entrada de usuario. Puede usarse una interconexión en chip para acoplar los dispositivos de E/S 3190 a la GPU 3105 y a la memoria 3198. Una o más unidades de administración de memoria E/S (IOMMU) 3170 del circuito de E/S 3195 acoplan los dispositivos de E/S 3190 directamente a la memoria del sistema 3198. En una realización, la IOMMU 3170 administra múltiples conjuntos de tablas de páginas para mapear direcciones virtuales a direcciones físicas en la memoria del sistema 3198. En esta realización, los dispositivos de E/S 3190, las CPU 3199 y las GPU 3105 pueden compartir el mismo espacio de dirección virtual.
En una implementación, la IOMMU 3170 soporta virtualización. En este caso, puede gestionar un primer conjunto de tablas de páginas para mapear direcciones virtuales de invitados/gráficos a direcciones físicas de invitados/gráficos y un segundo conjunto de tablas de páginas para mapear las direcciones físicas de invitados/gráficos a direcciones físicas de sistema/anfitrión (por ejemplo, dentro de la memoria de sistema 3198). Las direcciones base de cada uno del primer y segundo conjuntos de tablas de páginas pueden almacenarse en registros de control e intercambiarse en una conmutación de contexto (por ejemplo, de modo que se proporciona al nuevo contexto acceso al conjunto relevante de tablas de páginas). Si bien no se ilustra en la Figura 31, cada uno de los núcleos 3130, 3140, 3150 y/o grupos de múltiples núcleos 3100A-N pueden incluir memorias intermedias de búsqueda de traducción (TLB) para almacenar en caché traducciones virtuales de invitado a físicas de invitado, traducciones físicas de invitado a físicas de anfitrión y traducciones virtuales de invitado a físicas de anfitrión.
En una realización, las CPU 3199, las GPU 3105 y los dispositivos de E/S 3190 están integrados en un único chip semiconductor y/o paquete de chip. La memoria ilustrada 3198 puede estar integrada en el mismo chip o puede estar acoplada a los controladores de memoria 3170 a través de una interfaz fuera del chip. En una implementación, la memoria 3198 comprende memoria GDDR6 que comparte el mismo espacio de direcciones virtuales que otras memorias de nivel de sistema físico, aunque los principios subyacentes de la invención no se limitan a esta implementación específica.
En una realización, los núcleos de tensor 3140 incluyen una pluralidad de unidades de ejecución diseñadas específicamente para realizar operaciones matriciales, que son la operación de cálculo fundamental usada para realizar operaciones de aprendizaje profundo. Por ejemplo, pueden usarse operaciones de multiplicación de matrices simultáneas para el entrenamiento y la inferencia de redes neuronales. Los núcleos de tensor 3140 pueden realizar el procesamiento de matrices utilizando una variedad de precisiones de operandos, incluyendo precisión simple de punto flotante (por ejemplo, 32 bits), precisión media de punto flotante (por ejemplo, 16 bits), palabras enteras (16 bits), bytes (8 bits) y medios bytes (4 bits). En una realización, una implementación de red neuronal extrae características de cada escena representada, combinando potencialmente detalles de múltiples fotogramas, para construir una imagen final de alta calidad.
En implementaciones de aprendizaje profundo, puede planificarse el trabajo de multiplicación de matrices paralela para su ejecución en los núcleos de tensor 3140. El entrenamiento de redes neuronales, en particular, requiere un número significativo de operaciones de productos escalares de matrices. Para procesar una formulación de producto escalar de una multiplicación de matrices N x N x N, los núcleos de tensor 3140 pueden incluir al menos N elementos de procesamiento de producto escalar. Antes de que comience la multiplicación de matrices, se carga una matriz completa en registros de teselas y se carga al menos una columna de una segunda matriz en cada ciclo durante N ciclos. En cada ciclo, hay N productos escalares que se procesan.
Los elementos de matriz pueden almacenarse con diferentes precisiones de acuerdo con la implementación particular, que incluye palabras de 16 bits, bytes de 8 bits (por ejemplo, INT8) y medios bytes de 4 bits (por ejemplo, INT4). Pueden especificarse diferentes modos de precisión para los núcleos de tensor 3140 para garantizar que se use la precisión más eficiente para diferentes cargas de trabajo (por ejemplo, tales como cargas de trabajo de inferencia que pueden tolerar la cuantificación a bytes y medios bytes).
En una realización, los núcleos de trazado de rayos 3150 aceleran las operaciones de trazado de rayos tanto para implementaciones de trazado de rayos en tiempo real como para implementaciones de trazado de rayos que no son en tiempo real. En particular, los núcleos de trazado de rayos 3150 incluyen circuitería de cruce/intersección de rayos para realizar el cruce de rayos usando jerarquías de volúmenes delimitadores (BVH) e identificar intersecciones entre rayos y primitivas encerradas dentro de los volúmenes de BVH. Los núcleos de trazado de rayos 3150 también pueden incluir circuitería para realizar prueba de profundidad y selección (por ejemplo, usando una memoria intermedia Z o una disposición similar). En una implementación, los núcleos de trazado de rayos 3150 realizan operaciones de cruce e intersección en conjunto con las técnicas de eliminación de ruido de imágenes descritas en el presente documento, al menos una porción de las cuales puede ejecutarse en los núcleos de tensor 3140. Por ejemplo, en una realización, los núcleos de tensor 3140 pueden implementar una red neuronal de aprendizaje profundo para realizar la eliminación de ruido de fotogramas generados por los núcleos de trazado de rayos 3150. Sin embargo, la(s) CPU 3199, los núcleos de gráficos 3130 y/o los núcleos de trazado de rayos 3150 también pueden implementar todos o una porción de los algoritmos de eliminación de ruido y/o aprendizaje profundo.
Además, como se ha descrito anteriormente, puede emplearse un enfoque distribuido para la eliminación de ruido en el que la GPU 3105 está en un dispositivo informático acoplado a otros dispositivos informáticos a través de una red o interconexión de alta velocidad. En esta realización, los dispositivos informáticos interconectados pueden compartir datos de aprendizaje/entrenamiento de redes neuronales para mejorar la velocidad con la que el sistema global aprende a realizar la eliminación de ruido para diferentes tipos de fotogramas de imagen y/o diferentes aplicaciones de gráficos.
En una realización, los núcleos de trazado de rayos 3150 procesan todos los cruces de BVH y las intersecciones de primitivas-rayos, evitando que los núcleos de gráficos 3130 se sobrecarguen con miles de instrucciones por rayo. En una realización, cada núcleo de trazado de rayos 3150 incluye un primer conjunto de circuitería especializada para realizar pruebas de recuadros delimitadores (por ejemplo, para operaciones de cruce) y un segundo conjunto de circuitería especializada para realizar las pruebas de intersección de triángulos de rayos (por ejemplo, rayos que se intersecan que han sido cruzados). Por lo tanto, en una realización, el grupo de múltiples núcleos 3100A puede simplemente lanzar una sonda de rayos, y los núcleos de trazado de rayos 3150 realizan de forma independiente el cruce y la intersección de rayos y devuelven datos de impacto (por ejemplo, un impacto, ningún impacto, múltiples impactos, etc.) al contexto de hilo. Los otros núcleos 3130, 3140 se liberan para realizar otros gráficos o trabajo de cálculo mientras que los núcleos de trazado de rayos 3150 realizan las operaciones de cruce e intersección.
En una realización, cada núcleo de trazado de rayos 3150 incluye una unidad de cruce para realizar operaciones de prueba de BVH y una unidad de intersección que realiza pruebas de intersección de primitivas-rayos. La unidad de intersección genera una respuesta de "impacto", "ningún impacto" o "múltiples impactos", que proporciona al hilo apropiado. Durante las operaciones de cruce e intersección, los recursos de ejecución de los otros núcleos (por ejemplo, los núcleos de gráficos 3130 y los núcleos de tensor 3140) se liberan para realizar otras formas de trabajo gráfico.
En un ejemplo particular descrito a continuación, se usa un enfoque de rasterización/trazado de rayos híbrido en el que se distribuye trabajo entre los núcleos de gráficos 3130 y los núcleos de trazado de rayos 3150.
En un ejemplo, los núcleos de trazado de rayos 3150 (y/u otros núcleos 3130, 3140) incluyen soporte de hardware para un conjunto de instrucciones de trazado de rayos tal como el trazado de rayos de DirectX (DXR) de Microsoft que incluye un comando DispatchRays, así como sombreadores de generación de rayos, de impacto más cercano, de cualquier impacto y de no impacto, que posibilitan la asignación de conjuntos singulares de sombreadores y texturas para cada objeto. Otra plataforma de trazado de rayos que puede ser soportada por los núcleos de trazado de rayos 3150, los núcleos de gráficos 3130 y los núcleos de tensor 3140 es Vulkan 1.1.85. Sin embargo, obsérvese que los principios subyacentes de la invención no se limitan a ninguna ISA de trazado de rayos particular.
En general, los distintos núcleos 3150, 3140, 3130 pueden admitir un conjunto de instrucciones de trazado de rayos que incluye instrucciones/funciones para la generación de rayos, el impacto más cercano, cualquier impacto, intersección de primitiva-rayo, construcción de recuadro delimitador jerárquico y por primitiva, no impacto, visita y excepciones. Más específicamente, una realización incluye instrucciones de trazado de rayos para realizar las siguientes funciones:
Generación de rayos - las instrucciones de generación de rayos se pueden ejecutar para cada píxel, muestra u otra asignación de trabajo definida por el usuario.
Impacto más cercano - Una instrucción de impacto más cercano puede ejecutarse para ubicar el punto de intersección más cercano de un rayo con primitivas dentro de una escena.
Cualquier impacto - Una instrucción de cualquier impacto identifica múltiples intersecciones entre un rayo y primitivas dentro de una escena, potencialmente para identificar el nuevo punto de intersección más cercano.
Intersección - Una instrucción de intersección realiza una prueba de intersección de primitivas-rayos y emite un resultado.
Construcción de recuadro delimitador por primitiva - Esta instrucción crea un recuadro delimitador alrededor de una primitiva o grupo de primitivas dado (por ejemplo, cuando se construye una nueva BVH u otra estructura de datos de aceleración).
No impacto - Indica que un rayo yerra toda la geometría dentro de una escena, o una región especificada de una escena.
Visita - Indica los volúmenes hijos que cruzará un rayo.
Excepciones - Incluye diversos tipos de controladores de excepciones (por ejemplo, invocados para diversas condiciones de error).
TRAZADO DE HAZ JERÁRQUICO
Las jerarquías de volumen delimitador se utilizan comúnmente para mejorar la eficiencia con la que se realizan las operaciones en primitivas gráficas y otros objetos gráficos. Una BVH es una estructura de árbol jerárquica que se construye en base a un conjunto de objetos geométricos. En la parte superior de la estructura de árbol se encuentra el nodo raíz que encierra todos los objetos geométricos en una escena dada. Los objetos geométricos individuales se envuelven en volúmenes delimitadores que forman los nodos de hoja del árbol. Estos nodos se agrupan luego como conjuntos pequeños y se encierran dentro de volúmenes delimitadores más grandes. Estos, a su vez, también se agrupan y encierran dentro de otros volúmenes delimitadores más grandes de manera recursiva, lo que finalmente da como resultado una estructura de árbol con un solo volumen delimitador, representado por el nodo raíz, en la parte superior del árbol. Las jerarquías de volúmenes delimitadores se utilizan para respaldar de manera eficiente una variedad de operaciones en conjuntos de objetos geométricos, tales como detección de colisiones, selección de primitivas y operaciones de intersección/cruce de rayos utilizadas en el trazado de rayos.
En las arquitecturas de trazado de rayos, los rayos cruzan a través de una BVH para determinar las intersecciones de primitivas-rayos. Por ejemplo, si un rayo no pasa por el nodo raíz de la BVH, entonces el rayo no interseca ninguna de las primitivas encerradas por la BVH y no se requiere ningún procesamiento adicional para el rayo con respecto a este conjunto de primitivas. Si un rayo pasa por un primer nodo hijo de la BVH pero no por el segundo nodo hijo, entonces no es necesario probar el rayo contra ninguna primitiva encerrada por el segundo nodo hijo. De esta manera, una BVH proporciona un mecanismo eficiente para probar intersecciones de primitivas-rayos.
En una realización de la invención, se prueban grupos de rayos contiguos, denominados "haces", contra la BVH, en lugar de rayos individuales. LaFigura 32ilustra un haz 3201 de ejemplo delineado por cuatro rayos diferentes. Cualquier rayo que interseque el parche 3200 definido por los cuatro rayos se considera que está dentro del mismo haz. Mientras que el haz 3201 en laFigura 32está definido por una disposición rectangular de rayos, los haces pueden definirse de varias otras maneras mientras siguen cumpliendo con los principios subyacentes de la invención (por ejemplo, círculos, elipses, etc.).
LaFigura 33ilustra una realización de ejemplo en la que un motor de trazado de rayos 3310 de una GPU 3320 implementa las técnicas de trazado de rayos descritas en el presente documento. En particular, el circuito de generación de rayos 3304 genera una pluralidad de rayos para los cuales se deben realizar operaciones de cruce e intersección. Sin embargo, en lugar de realizar operaciones de cruce e intersección en rayos individuales, la realización ilustrada realiza el cruce y la intersección utilizando una jerarquía de haces 3307 generada por el circuito de construcción de jerarquía de haces 3305. En una realización, la jerarquía de haces es análoga a la jerarquía de volumen delimitador (BVH). Por ejemplo, laFigura 34proporciona un ejemplo de un haz primario 3400 que puede subdividirse en una pluralidad de componentes diferentes. En particular, el haz primario 3400 puede dividirse en cuadrantes 3401 -3404 y cada cuadrante puede dividirse a su vez en subcuadrantes, tales como los subcuadrantes A-D dentro del cuadrante 3404. El haz primario puede subdividirse de diversas maneras. Por ejemplo, en una realización, el haz primario puede dividirse por la mitad (en lugar de en cuadrantes) y cada mitad puede dividirse por la mitad, y así sucesivamente. Independientemente de cómo se realicen las subdivisiones, en una realización, se genera una estructura jerárquica de una manera similar a una BVH, por ejemplo, con un nodo raíz que representa el haz primario 3400, un primer nivel de nodos hijo, cada uno representado por un cuadrante 3401 -3404, nodos hijo de segundo nivel para cada subcuadrante A-D, y así sucesivamente.
En una realización, una vez que se construye la jerarquía de haces 3307, el circuito de cruce/intersección 3306 realiza operaciones de cruce/intersección utilizando la jerarquía de haces 3307 y la BVH 3308. En particular, puede probar el haz contra la BVH y descartar porciones del haz que no intersecan ninguna porción de la BVH. Utilizando los datos que se muestran en laFigura 34, por ejemplo, si los subhaces asociados con las subregiones 3402 y 3403 no se intersecan con la BVH o una rama particular de la BVH, entonces pueden descartarse con respecto a la BVH o la rama. Las porciones restantes 3401, 3404 pueden probarse con respecto a la BVH realizando una búsqueda en profundidad u otro algoritmo de búsqueda.
En laFigura 35se ilustra un procedimiento de acuerdo con una realización de la invención. El procedimiento puede implementarse dentro del contexto de las arquitecturas de procesamiento de gráficos descritas anteriormente, pero no se limita a ninguna arquitectura en particular.
En 3500 se construye un haz primario que comprende una pluralidad de rayos y en 3501, el haz se subdivide y se generan estructuras de datos jerárquicas para crear una jerarquía de haces. En una realización, las operaciones 3500 3501 se realizan como una operación única e integrada que construye una jerarquía de haces a partir de una pluralidad de rayos. En 3502, la jerarquía de haces se utiliza con una BVH para seleccionar rayos (de la jerarquía de haces) y/o nodos/primitivas de la BVH. En 3503, se determinan las intersecciones de rayos y primitivas para los rayos y primitivas restantes.
COMPRESIÓN DE PAQUETES CON PÉRDIDAS Y SIN PÉRDIDAS EN UN SISTEMA DE TRAZADO DE RAYOS DISTRIBUIDO
En una realización, las operaciones de trazado de rayos se distribuyen a través de una pluralidad de nodos de cálculo acoplados entre sí a través de una red. LaFigura 36, por ejemplo, ilustra una agrupación de trazado de rayos 3600 que comprende una pluralidad de nodos de trazado de rayos 3610-3613 que realizan operaciones de trazado de rayos en paralelo, combinando potencialmente los resultados en uno de los nodos. En la arquitectura ilustrada, los nodos de trazado de rayos 3610-3613 están acoplados comunicativamente a una aplicación de trazado de rayos del lado del cliente 3630 a través de una puerta de enlace.
Una de las dificultades con una arquitectura distribuida es la gran cantidad de datos en paquetes que se deben transmitir entre cada uno de los nodos de trazado de rayos 3610-3613. En una realización, se utilizan tanto técnicas de compresión sin pérdidas como técnicas de compresión con pérdidas para reducir los datos transmitidos entre los nodos de trazado de rayos 3610-3613.
Para implementar la compresión sin pérdidas, en lugar de enviar paquetes llenos de los resultados de ciertos tipos de operaciones, se envían datos o comandos que permiten al nodo receptor reconstruir los resultados. Por ejemplo, las operaciones de luces de área muestreadas estocásticamente y oclusión ambiental (AO) no necesitan necesariamente direcciones. En consecuencia, en una realización, un nodo transmisor simplemente enviará una semilla aleatoria que luego es utilizada por el nodo receptor para realizar un muestreo aleatorio. Por ejemplo, si una escena se distribuye entre los nodos 3610-3612, para muestrear la luz 1 en los puntos p1-p3, solo es necesario enviar el ID de luz y los orígenes a los nodos 3610-3612. Cada uno de los nodos puede entonces muestrear estocásticamente la luz de forma independiente. En una realización, la semilla aleatoria es generada por el nodo receptor. De manera similar, para los puntos de impacto de rayos primarios, la oclusión ambiental (AO) y el muestreo de sombras uniformes se pueden calcular en los nodos 3610-3612 sin esperar los puntos originales para los fotogramas sucesivos. Además, si se sabe que un conjunto de rayos irá a la misma fuente de luz puntual, se pueden enviar instrucciones que identifiquen la fuente de luz al nodo receptor que la aplicará al conjunto de rayos. Como otro ejemplo, si hay N rayos de oclusión ambiental transmitidos a un único punto, se puede enviar un comando para generar N muestras a partir de este punto.
Se pueden aplicar varias técnicas adicionales para la compresión con pérdidas. Por ejemplo, en una realización, se puede emplear un factor de cuantificación para cuantificar todos los valores de coordenadas asociados con la BVH, las primitivas y los rayos. Además, los valores de punto flotante de 32 bits utilizados para datos tales como nodos BVH y primitivas se pueden convertir en valores enteros de 8 bits. En una implementación particular, los límites de los paquetes de rayos se almacenan con precisión completa, pero los puntos de rayos individuales P1-P3 se transmiten como desplazamientos indexados a los límites. De manera similar, se puede generar una pluralidad de sistemas de coordenadas locales que utilizan valores enteros de 8 bits como coordenadas locales. La ubicación del origen de cada uno de estos sistemas de coordenadas locales se puede codificar utilizando los valores de precisión completa (por ejemplo, punto flotante de 32 bits), conectando efectivamente los sistemas de coordenadas globales y locales.
El siguiente es un ejemplo de compresión sin pérdidas empleado en una realización de la invención. Un ejemplo de un formato de datos de rayos utilizado internamente en un programa de trazado de rayos es el siguiente: struct Ray { uint32 pixId; uint32 materialID; uint32 instanceID; uint64 primitiveID; uint32 geometrylD; uint32 lightID; float origin[3]; float direction[3]; float t0; float t; float time; float normal[3]; //usado para intersecciones de geometría float u; float v; float wavelength; float phase; //Interferometría float refractedOffset; //Schlieren-esque float amplitude; float weight; };
En lugar de enviar los datos sin procesar para todos y cada uno de los nodos generados, estos datos se pueden comprimir agrupando valores y creando rayos implícitos utilizando metadatos aplicables cuando sea posible.
Combinación y agrupamiento de datos de rayos
Una realización utiliza indicadores para datos comunes o máscaras con modificadores. struct RayPacket { uint32 size; uint32 flags; list<Ray> rays; } Por ejemplo: RayPacket.rays = ray_1 to ray_256
Los orígenes son todos compartidos
Se empaquetan todos los datos de rayos, excepto que se almacena un único origen en todos los rayos. RayPacket.flags está configurado para<r>A<y>PACK<e>T_COMMON_ORIGIN. Cuando se desempaqueta RayPacket al recibirlo, los orígenes se completan a partir del valor de origen único.
Los orígenes se comparten solo entre algunos rayos
Se empaquetan todos los datos de rayos, excepto los rayos que comparten orígenes. Para cada grupo de orígenes compartidos únicos, se empaqueta un operador que identifica la operación (orígenes compartidos), almacena el origen y enmascara qué rayos comparten la información. Esta operación se puede realizar en cualquier valor compartido entre nodos, tales como identificadores de material, identificadores de primitivas, origen, dirección, normales, etc. struct RayOperation { uint8 operationID; void* value; uint64 mask; }
Envío de rayos implícitos
A menudo, los datos de rayos se pueden derivar en el extremo receptor con una metainformación mínima utilizada para generarlos. Un ejemplo muy común es la generación de múltiples rayos secundarios para muestrear de forma aleatoria un área. En lugar de que el emisor genere un rayo secundario, lo envíe y el receptor opere sobre él, el emisor puede enviar un comando que indique que se debe generar un rayo con cualquier información dependiente, y el rayo se genera en el extremo receptor. En el caso en que el emisor deba generar primero el rayo para determinar a qué receptor enviarlo, se genera el rayo y se puede enviar la semilla aleatoria para regenerar exactamente el mismo rayo.
Por ejemplo, para muestrear un punto de impacto con 64 rayos de sombra que muestrean una fuente de luz de área, los 64 rayos se intersecan con regiones del mismo cálculo N4. Se crea un RayPacket con un origen y una normal comunes. Se podrían enviar más datos si se desea que el receptor sombree la contribución de píxeles resultante, pero para este ejemplo supongamos que solo deseamos devolver si un rayo impacta en otros nodos. Se crea una RayOperation para generar una operación de rayos de sombra y se le asigna el valor del lightID que se va a muestrear y la semilla de número aleatorio. Cuando N4 recibe el paquete de rayos, genera los datos de rayos completamente llenos completando los datos de origen compartidos para todos los rayos y estableciendo la dirección en función del lightID muestreado estocásticamente con la semilla de número aleatorio para generar los mismos rayos que generó el remitente original. Cuando se devuelven los resultados, solo se deben devolver los resultados binarios para cada rayo, que se pueden entregar mediante una máscara sobre los rayos.
Enviar los 64 rayos originales en este ejemplo habría utilizado 104 bytes * 64 rayos = 6656 bytes. Si los rayos que regresan también se enviaran en su forma original, esto también se duplicaría a 13312 bytes. Al usar la compresión sin pérdidas con solo enviar el origen del rayo común, la normal y la operación de generación de rayos con semilla e ID, solo se envían 29 bytes y se devuelven 8 bytes para la máscara de intersección. Esto da como resultado una tasa de compresión de datos que se debe enviar a través de la red de ~360:1. Esto no incluye la sobrecarga para procesar el mensaje en sí, que se debe identificar de alguna manera, pero eso se deja a criterio de la implementación. Se pueden realizar otras operaciones para volver a calcular el origen y las direcciones de los rayos desde el pixelD para los rayos primarios, volver a calcular los pixelID en función de los intervalos en el paquete de rayos y muchas otras posibles implementaciones para volver a calcular los valores. Se pueden utilizar operaciones similares para cualquier rayo o grupo de rayos enviados, incluidas sombras, reflejos, refracción, oclusión ambiental, intersecciones, intersecciones de volumen, sombreado, reflejos rebotados en el trazado de trayectorias, etc.
LaFigura 37ilustra detalles adicionales para dos nodos de trazado de rayos 3710-3711 que realizan la compresión y descompresión de los paquetes de trazado de rayos. En particular, en una realización, cuando un primer motor de trazado de rayos 3730 está listo para transmitir datos a un segundo motor de trazado de rayos 3731, el circuito de compresión de rayos 3720 realiza una compresión con pérdidas y/o sin pérdidas de los datos de trazado de rayos como se describe en este documento (por ejemplo, convirtiendo valores de 32 bits en valores de 8 bits, sustituyendo datos sin procesar por instrucciones para reconstruir los datos, etc.). Los paquetes de rayos comprimidos 3701 se transmiten desde la interfaz de red 3725 a la interfaz de red 3726 a través de una red local (por ejemplo, una red Ethernet de 10 Gb/s, 100 Gb/s). El circuito de descompresión de rayos descomprime luego los paquetes de rayos cuando es apropiado. Por ejemplo, puede ejecutar comandos para reconstruir los datos de trazado de rayos (por ejemplo, utilizando una semilla aleatoria para realizar un muestreo aleatorio para operaciones de iluminación). El motor de trazado de rayos 3731 utiliza entonces los datos recibidos para realizar operaciones de trazado de rayos.
En la dirección inversa, el circuito de compresión de rayos 3741 comprime los datos de rayos, la interfaz de red 3726 transmite los datos de rayos comprimidos a través de la red (por ejemplo, utilizando las técnicas descritas en este documento), el circuito de descompresión de rayos 3740 descomprime los datos de rayos cuando es necesario y el motor de trazado de rayos 3730 utiliza los datos en operaciones de trazado de rayos. Aunque se ilustra como una unidad separada en laFigura 37, el circuito de descompresión de rayos 3740-3741 puede estar integrado dentro de los motores de trazado de rayos 3730-3731, respectivamente. Por ejemplo, en la medida en que los datos de rayos comprimidos comprendan comandos para reconstruir los datos de rayos, estos comandos pueden ser ejecutados por cada motor de trazado de rayos 3730-3731 respectivo.
Como se ilustra en laFigura 38, el circuito de compresión de rayos 3720 puede incluir un circuito de compresión con pérdidas 3801 para realizar las técnicas de compresión con pérdidas descritas en este documento (por ejemplo, convertir coordenadas de punto flotante de 32 bits en coordenadas enteras de 8 bits) y un circuito de compresión sin pérdidas 3803 para realizar las técnicas de compresión sin pérdidas (por ejemplo, transmitir comandos y datos para permitir que el circuito de recompresión de rayos 3821 reconstruya los datos). El circuito de descompresión de rayos 3721 incluye un circuito de descompresión con pérdidas 3802 y un circuito de descompresión sin pérdidas 3804 para realizar una descompresión sin pérdidas.
En laFigura 39se ilustra un método de acuerdo con una realización. El procedimiento puede implementarse en las arquitecturas de trazado de rayos descritas en este documento, pero no se limita a ninguna arquitectura en particular.
En 3900, se reciben datos de rayos que se transmitirán desde un primer nodo de trazado de rayos a un segundo nodo de trazado de rayos. En 3901, los circuitos de compresión con pérdidas realizan una compresión con pérdidas en los primeros datos de trazado de rayos y, en 3902, los circuitos de compresión sin pérdidas realizan una compresión sin pérdidas en los segundos datos de trazado de rayos. En 3903, los datos de trazado de rayos comprimidos se transmiten a un segundo nodo de trazado de rayos. En 3904, los circuitos de descompresión con pérdidas/sin pérdidas realizan una descompresión con pérdidas/sin pérdidas de los datos de trazado de rayos y, en 3905, el segundo nodo de trazado de rayos realiza operaciones de trazado de rayos sobre los datos descomprimidos.
PROCESADOR DE GRÁFICOS CON TRAZADO DE RAYOS HÍBRIDO ACELERADO POR HARDWARE
Una realización de la invención incluye una canalización de renderizado híbrida que realiza la rasterización en los núcleos de gráficos 3130 y operaciones de trazado de rayos en los núcleos de trazado de rayos 3150, los núcleos de gráficos 3130 y/o los núcleos de la CPU 3199. Por ejemplo, la rasterización y la prueba de profundidad se pueden realizar en los núcleos de gráficos 3130 en lugar de la etapa de proyección de rayos primaria. Los núcleos de trazado de rayos 3150 pueden entonces generar rayos secundarios para reflexiones de rayos, refracciones y sombras. Además, ciertas realizaciones pueden seleccionar ciertas regiones de una escena en las que los núcleos de trazado de rayos 3150 realizarán operaciones de trazado de rayos (por ejemplo, en función de umbrales de propiedades de materiales tales como niveles altos de reflectancia) mientras que otras regiones de la escena se renderizarán con rasterización en los núcleos de gráficos 3130. En una realización, esta implementación híbrida se utiliza para aplicaciones de trazado de rayos en tiempo real, donde la latencia es un problema crítico.
Una realización de la arquitectura de cruce de rayos descrita a continuación realiza sombreado programable y control del cruce de rayos utilizando procesadores de gráficos de instrucción única múltiples datos (SIMD) y/o instrucción única múltiples hilos (SIMT) existentes mientras acelera funciones críticas, tales como el cruce y/o intersecciones de BVH, utilizando hardware dedicado. En esta realización, la ocupación de SIMD para rutas incoherentes se mejora reagrupando sombreadores generados en puntos específicos durante el cruce y antes del sombreado. Esto se logra utilizando hardware dedicado que clasifica los sombreadores de forma dinámica, en el chip. La recursividad se gestiona dividiendo una función en continuaciones que se ejecutan al volver y reagrupando las continuaciones antes de la ejecución para mejorar la ocupación SIMD.
El control programable del cruce/intersección de rayos se logra descomponiendo la funcionalidad de cruce en un cruce interno que se puede implementar como hardware de función fija y un cruce externo que se ejecuta en procesadores de GPU y permite el control programable a través de sombreadores de cruce definidos por el usuario. El coste de transferir el contexto de cruce entre hardware y software se reduce truncando de manera conservadora el estado de cruce interno durante la transición entre el cruce interno y externo.
El control programable del trazado de rayos se puede expresar a través de los diferentes tipos de sombreadores que se enumeran en la Tabla A a continuación. Puede haber varios sombreadores para cada tipo. Por ejemplo, cada material puede tener un sombreador de impacto diferente.
TABLAA
En una realización, el trazado de rayos recursivo se inicia mediante una función API que ordena al procesador de gráficos que inicie un conjunto de sombreadores primarios o circuitos de intersección que pueden generar intersecciones de rayo-escena para rayos primarios. Esto, a su vez, genera otros sombreadores, tales como el cruce, los sombreadores de impacto o los sombreadores de no impacto. Un sombreador que genera un sombreador hijo también puede recibir un valor de retorno de ese sombreador hijo. Los sombreadores invocables son funciones de propósito general que pueden generarse directamente por otro sombreador y también pueden devolver valores al sombreador que realiza la llamada.
LaFigura 40ilustra una realización de una arquitectura de procesamiento de gráficos que incluye circuitos de ejecución de sombreadores 4000 y circuitos de función fija 4010. El subsistema de hardware de ejecución de propósito general incluye una pluralidad de núcleos/unidades de ejecución (UE) de instrucción única y múltiples datos (SIMD) y/o instrucción única y múltiples hilos (SIMT) 4001 (es decir, cada núcleo puede comprender una pluralidad de unidades de ejecución), uno o más muestreadores 4002 y una memoria caché de nivel 1 (L1) 4003 u otra forma de memoria local. El subsistema de hardware de función fija 4010 incluye una unidad de mensajes 4004, un planificador 4007, un circuito de intersección/cruce de rayo-BVH 4005, un circuito de clasificación 4008 y una memoria caché L1 local 4006.
En funcionamiento, el despachador primario 4009 despacha un conjunto de rayos primarios al planificador 4007, que planifica el trabajo de los sombreadores ejecutados en los núcleos/UE SIMD/SIMT 4001. Los núcleos/UE SIMD 4001 pueden ser núcleos de trazado de rayos 3150 y/o núcleos de gráficos 3130 descritos anteriormente. La ejecución de los sombreadores primarios genera trabajo adicional que se debe realizar (por ejemplo, que se debe ejecutar por uno o más sombreadores hijos y/o hardware de función fija). La unidad de mensajes 4004 distribuye el trabajo generado por los núcleos/UE SIMD 4001 al programador 4007, accediendo al grupo de pilas libre según sea necesario, al circuito de clasificación 4008 o al circuito de intersección de rayo-BVH 4005. Si el trabajo adicional se envía al planificador 4007, se planifica para su procesamiento en los núcleos/UE SIMD/SIMT 4001. Antes de la planificación, el circuito de clasificación 4008 puede clasificar los rayos en grupos o contenedores como se describe en este documento (por ejemplo, agrupando rayos con características similares). El circuito de intersección de rayo-BVH 4005 realiza pruebas de intersección de rayos utilizando volúmenes BVH. Por ejemplo, el circuito de intersección de rayo-BVH 4005 puede comparar las coordenadas del rayo con cada nivel de la BVH para identificar los volúmenes que son intersecados por el rayo.
Se puede hacer referencia a los sombreadores utilizando un registro de sombreador, una estructura asignada por el usuario que incluye un puntero a la función de entrada, metadatos específicos del proveedor y argumentos globales para el sombreador ejecutado por los núcleos/UE SIMD 4001. Cada instancia en ejecución de un sombreador está asociada con una pila de llamadas que se puede utilizar para almacenar argumentos pasados entre un sombreador padre y un sombreador hijo. Las pilas de llamadas también pueden almacenar referencias a las funciones de continuación que se ejecutan cuando una llamada retorna.
LaFigura 41ilustra un conjunto de ejemplo de pilas asignadas 4101 que incluye una pila de sombreador principal, una pila de sombreador de impacto, una pila de sombreador de cruce, una pila de función de continuación y una pila de intersección de rayo-BVH (que, como se describe, puede ser ejecutada por el hardware de función fija 4010). Las nuevas invocaciones de sombreador pueden implementar nuevas pilas a partir de un grupo de pilas libre 4102. Las pilas de llamadas pueden almacenarse en caché en una memoria caché L1 local 4003, 4006 para reducir la latencia de los accesos.
En una realización, hay un número finito de pilas de llamadas, cada una con un tamaño máximo fijo "Sstack" asignado en una región contigua de memoria. Por lo tanto, la dirección base de una pila se puede calcular directamente a partir de un índice de pila (SID) como dirección base = SID * Sstack. En una realización, los identificadores de pila son asignados y desasignados por el planificador 4007 al planificar el trabajo para los núcleos/EU SIMD 4001.
En una realización, el despachador primario 4009 comprende un procesador de comandos del procesador de gráficos que despacha sombreadores primarios en respuesta a un comando de despacho del anfitrión (por ejemplo, una CPU). El planificador 4007 recibe estas solicitudes de despacho y lanza un sombreador primario en un hilo de procesador SIMD si puede asignar un ID de pila para cada carril SIMD. Los ID de pila se asignan desde el grupo de pilas libre 4102 que se inicializa al comienzo del comando de despacho.
Un sombreador en ejecución puede generar un sombreador hijo enviando un mensaje de generación a la unidad de mensajería 4004. Este comando incluye los ID de pila asociados con el sombreador y también incluye un puntero al registro del sombreador hijo para cada carril SIMD activo. Un sombreador padre solo puede emitir este mensaje una vez para un carril activo. En una realización, después de enviar mensajes de generación para todos los carriles relevantes, el sombreador padre finaliza.
Un sombreador ejecutado en los núcleos/UE SIMD 4001 también puede generar tareas de función fija, tales como intersecciones de rayo-BVH, utilizando un mensaje de generación con un puntero de registro de sombreador reservado para el hardware de función fija. Como se mencionó, la unidad de mensajería 4004 envía el trabajo de intersección de rayo-BVH generado al circuito de intersección de rayo-BVH de función fija 4005 y los sombreadores invocables directamente al circuito de clasificación 4008. En una realización, el circuito de clasificación agrupa los sombreadores por puntero de registro de sombreador para derivar un lote SIMD con características similares. En consecuencia, los identificadores de pila de diferentes sombreadores padre pueden agruparse mediante el circuito de clasificación 4008 en el mismo lote. El circuito de clasificación 4008 envía lotes agrupados al planificador 4007 que accede al registro de sombreador desde la memoria de gráficos 2511 o la memoria caché de último nivel (LLC) 4020 y lanza el sombreador en un hilo de procesador.
En una realización, las continuaciones se tratan como sombreadores invocables y también pueden referenciarse a través de registros de sombreador. Cuando se genera un sombreador hijo y devuelve valores al sombreador padre, se inserta un puntero al registro del sombreador de continuación en la pila de llamadas 4101. Cuando un sombreador hijo retorna, el registro del sombreador de continuación se extrae de la pila de llamadas 4101 y se genera un sombreador de continuación. Las continuaciones generadas pasan por la unidad de clasificación de manera similar a los sombreadores invocables y se lanzan en un hilo del procesador.
Como se ilustra en laFigura 42, una realización del circuito de clasificación 4008 agrupa las tareas generadas por los punteros de registro de sombreador 4201A, 4201B, 4201npara crear lotes SIMD para sombreado. Los identificadores de pila o los identificadores de contexto en un lote ordenado se pueden agrupar a partir de diferentes despachos y diferentes carriles SIMD de entrada. En una realización, el circuito de agrupamiento 4210 realiza la clasificación utilizando una estructura de memoria direccionable por contenido (CAM) 4201 que comprende una pluralidad de entradas, cada una de las cuales se identifica con una etiqueta 4201. Como se ha mencionado, en una realización, la etiqueta 4201 es un puntero de registro de sombreado 4201A, 4201B, 4201ncorrespondiente. En una realización, la estructura CAM 4201 almacena un número limitado de etiquetas (por ejemplo, 32, 64, 128, etc.) cada una asociada con un lote SIMD incompleto correspondiente a un puntero de registro de sombreador.
Para un comando de generación entrante, cada carril SIMD tiene un ID de pila correspondiente (mostrado como 16 ID de contexto 0-15 en cada entrada CAM) y un puntero de registro de sombreador 4201A-B,...n (que actúa como un valor de etiqueta). En una realización, el circuito de agrupamiento 4210 compara el puntero de registro de sombreador para cada carril con las etiquetas 4201 en la estructura CAM 4201 para encontrar un lote coincidente. Si se encuentra un lote coincidente, el ID de pila/ID de contexto se agrega al lote. De lo contrario, se crea una nueva entrada con una nueva etiqueta de puntero de registro de sombreador, posiblemente expulsando una entrada anterior con un lote incompleto.
Un sombreador en ejecución puede desasignar la pila de llamadas cuando está vacía enviando un mensaje de desasignación a la unidad de mensajes. El mensaje de desasignación se retransmite al planificador, que devuelve los identificadores de pila/identificadores de contexto para los carriles SIMD activos al grupo libre.
Una realización de la invención implementa un enfoque híbrido para las operaciones de cruce de rayos, utilizando una combinación de cruce de rayos de función fija y cruce de rayos de software. En consecuencia, proporciona la flexibilidad del cruce de software mientras mantiene la eficiencia del cruce de función fija. LaFigura 43muestra una estructura de aceleración que puede utilizarse para un cruce híbrido, que es un árbol de dos niveles con un único BVH de nivel superior 4300 y varios BVH de nivel inferior 4301 y 4302. A la derecha se muestran elementos gráficos para indicar rutas de cruce internas 4303, rutas de cruce externas 4304, nodos de cruce 4305, nodos de hoja con triángulos 4306 y nodos de hoja con primitivas personalizadas 4307.
Los nodos de hoja con triángulos 4306 en la BVH de nivel superior 4300 pueden hacer referencia a triángulos, registros de sombreador de intersección para primitivas personalizadas o registros de sombreador de cruce. Los nodos de hoja con triángulos 4306 de las BVH de nivel inferior 4301-4302 solo pueden hacer referencia a triángulos y registros de sombreado de intersección para primitivas personalizadas. El tipo de referencia está codificado dentro del nodo de hoja 4306. El cruce interno 4303 se refiere al cruce dentro de cada BVH 4300-4302. Las operaciones de cruce interno comprenden el cálculo de las intersecciones de rayo-BVH y el cruce a través de las estructuras BVH 4300-4302 se conoce como cruce externo. Las operaciones de cruce interno se pueden implementar de manera eficiente en hardware de función fija, mientras que las operaciones de cruce externo se pueden realizar con un rendimiento aceptable con sombreadores programables. En consecuencia, una realización de la invención realiza operaciones de cruce interno utilizando circuitos de función fija 4010 y realiza operaciones de cruce externo utilizando los circuitos de ejecución de sombreadores 4000 que incluyen núcleos/EU SIMD/SIMT 4001 para ejecutar sombreadores programables.
Tenga en cuenta que los núcleos/UE SIMD/SIMT 4001 a veces se denominan simplemente en este documento "núcleos", "núcleos SIMD", "UE" o "procesadores SIMD" para simplificar. De manera similar, el circuito de intersección/cruce de rayo-BVH 4005 a veces se denomina simplemente "unidad de cruce", "unidad de intersección/cruce" o "circuito de intersección/cruce". Cuando se utiliza un término alternativo, el nombre particular utilizado para designar el circuito/lógica respectiva no altera las funciones subyacentes que el circuito/lógica realiza, como se describe en este documento.
Además, aunque se ilustra como un solo componente en laFigura 40con fines explicativos, la unidad de cruce/intersección 4005 puede comprender una unidad de cruce distinta y una unidad de intersección separada, cada una de las cuales puede implementarse en circuitos y/o lógica como se describe en este documento.
En una realización, cuando un rayo interseca un nodo de cruce durante un cruce interno, se genera un sombreador de cruce. El circuito de clasificación 4008 agrupa estos sombreadores por punteros de registro de sombreador 4201A-B,npara crear un lote SIMD que es lanzado por el planificador 4007 para la ejecución SIMD en los núcleos/UE de gráficos SIMD 4001. Los sombreadores de cruce pueden modificar el cruce de varias maneras, lo que permite una amplia gama de aplicaciones. Por ejemplo, el sombreador de cruce puede seleccionar una BVH con un nivel de detalle (LOD) más aproximado o transformar el rayo para permitir transformaciones de cuerpo rígido. El sombreador de cruce genera entonces un cruce interno para la BVH seleccionada.
El cruce interno calcula las intersecciones de rayo-BVH atravesando la BVH y calculando las intersecciones de rayorecuadro y rayo-triángulo. El cruce interno se genera de la misma manera que los sombreadores enviando un mensaje al circuito de mensajería 4004 que retransmite el mensaje de generación correspondiente al circuito de intersección de rayo-BVH 4005 que calcula las intersecciones de rayo-BVH.
En una realización, la pila para el cruce interno se almacena localmente en el circuito de función fija 4010 (por ejemplo, dentro de la memoria caché L1 4006). Cuando un rayo interseca un nodo de hoja correspondiente a un sombreador de cruce o un sombreador de intersección, se termina el cruce interno y se trunca la pila interna. La pila truncada, junto con un puntero al rayo y BVH, se escribe en la memoria en una ubicación especificada por el sombreador que realiza la llamada y, a continuación, se genera el sombreador de cruce o el sombreador de intersección correspondiente. Si el rayo interseca algún triángulo durante el cruce interno, la información de impacto correspondiente se proporciona como argumentos de entrada a estos sombreadores, como se muestra en el código siguiente. Estos sombreadores generados se agrupan mediante el circuito de clasificación 4008 para crear lotes SIMD para su ejecución. struct HitInfo { float barycentrics[2]; float tmax; bool innerTravComplete; uint primID; uint geomID; ShaderRecord* leafShaderRecord; }
Truncar la pila de cruce interna reduce el coste de volcarla en la memoria. Una realización de la invención utiliza el enfoque descrito en Restart Trail for Stackless BVH Traversal, High Performance Graphics (2010), páginas 107-111, para truncar la pila a una pequeña cantidad de entradas en la parte superior de la pila, un rastro de reinicio de 42 bits y un valor de profundidad de 6 bits. El rastro de reinicio indica las ramas que ya se han tomado dentro de la BVH y el valor de profundidad indica la profundidad del cruce correspondiente a la última entrada de la pila. Esta es información suficiente para reanudar el cruce interno en un momento posterior.
El cruce interno se completa cuando la pila interna está vacía y no hay más nodos BVH para probar. En este caso, se genera un controlador de pila externa que hace estallar la parte superior de la pila externa y reanuda el cruce si la pila externa no está vacía.
En una realización, el cruce externo ejecuta la máquina de estados del cruce principal y se implementa en el código de programa ejecutado por el circuito de ejecución del sombreador 4000. Genera una consulta de cruce interno en las siguientes condiciones: (1) cuando un sombreador de impacto o un sombreador primario genera un nuevo rayo; (2) cuando un sombreador de cruce selecciona una BVH para el cruce; y (3) cuando un controlador de pila externa reanuda el cruce interno para una BVH.
Como se ilustra en laFigura 44, antes de que se genere el cruce interno, se asigna espacio en la pila de llamadas 4405 para que el circuito de función fija 4010 almacene la pila interna truncada 4410. Los desplazamientos 4403-4404 hasta la parte superior de la pila de llamadas y la pila interna se mantienen en el estado de cruce 4400 que también se almacena en la memoria 2511. El estado de cruce 4400 también incluye el rayo en el espacio global 4401 y el espacio de objetos 4402, así como información de impacto para la primitiva de intersección más cercana.
El sombreador de cruce, el sombreador de intersección y el controlador de pila externa son todos generados por el circuito de intersección de rayo-BVH 4005. El sombreador de cruce asigna en la pila de llamadas 4405 antes de iniciar un nuevo cruce interno para la BVH de segundo nivel. El controlador de pila externa es un sombreador que es responsable de actualizar la información de impactos y reanudar cualquier tarea de cruce interno pendiente. El controlador de pila externa también es responsable de generar sombreadores de impactos o no impacto cuando se completa el cruce. El cruce se completa cuando no hay consultas de cruce interno pendientes para generar. Cuando se completa el cruce y se encuentra una intersección, se genera un sombreador de impactos; de lo contrario, se genera un sombreador de no impacto.
Si bien el esquema de cruce híbrido descrito anteriormente utiliza una jerarquía BVH de dos niveles, las realizaciones de la invención descritas en este documento pueden utilizar una cantidad arbitraria de niveles BVH con un cambio correspondiente en la implementación del cruce externo.
Además, mientras que el circuito de función fija 4010 se describe para realizar intersecciones de rayo-BVH en las realizaciones anteriores, otros componentes del sistema también pueden implementarse en el circuito de función fija. Por ejemplo, el controlador de pila externa descrito anteriormente puede ser un sombreador interno (no visible para el usuario) que podría implementarse potencialmente en el circuito de intersección/cruce de BVH de función fija 4005. Esta implementación puede usarse para reducir la cantidad de etapas de sombreador despachadas y recorridos de ida y vuelta entre el hardware de intersección de función fija 4005 y el procesador.
Las realizaciones de la invención descritas aquí permiten el sombreado programable y el control del cruce de rayos utilizando funciones definidas por el usuario que pueden ejecutarse con mayor eficiencia SIMD en procesadores GPU existentes y futuros. El control programable del cruce de rayos permite varias características importantes, tales como instancias procedimentales, selección estocástica de nivel de detalle, intersección primitiva personalizada y actualizaciones de BVH diferidas.
INSTRUCCIONES DE TRAZADO DE RAYOS
Las instrucciones de trazado de rayos descritas a continuación se incluyen dentro de una arquitectura de conjunto de instrucciones (ISA) soportada por una realización de la CPU 3199 y/o la GPU 3105. Si se ejecutan por la CPU, las instrucciones de instrucción única y múltiples datos (SIMD) pueden utilizar registros de origen y destino vectoriales/empaquetados para realizar las operaciones descritas y pueden decodificarse y ejecutarse por un núcleo de CPU. Si se ejecutan por una GPU 3105, las instrucciones pueden ejecutarse por los núcleos de gráficos 3130. Por ejemplo, cualquiera de las unidades de ejecución (EU) 4001 descritas anteriormente puede ejecutar las instrucciones. Como alternativa, las instrucciones pueden ejecutarse por circuitos de ejecución en los núcleos de tensor 3140 o en los núcleos de trazado de rayos 3150.
LaFigura 45ilustra una realización de una arquitectura para ejecutar las instrucciones de trazado de rayos descritas a continuación. La arquitectura ilustrada puede integrarse dentro de uno o más de los núcleos 3130, 3140, 3150 descritos anteriormente (véase, por ejemplo, laFigura 31y texto asociado) o puede incluirse en una arquitectura de procesador diferente.
En la operación, una unidad de extracción de instrucción 4503 extrae instrucciones de trazado de rayos 4500 desde la memoria 3198 y un decodificador 4595 decodifica las instrucciones. En una implementación, el decodificador 4595 decodifica instrucciones para generar operaciones ejecutables (por ejemplo, microoperaciones o uop en un núcleo microcodificado). Como alternativa, algunas o todas las instrucciones de trazado de rayos 4500 pueden ejecutarse sin decodificación y, como tal, no se requiere un decodificador 4504.
En cualquier implementación, un planificador/despachador 4505 planifica y despacha las instrucciones (u operaciones) a través de un conjunto de unidades funcionales (FU) 4510-4512. La realización ilustrada incluye un vector FU 4510 para ejecutar instrucciones de instrucción única y múltiples datos (SIMD) que operan concurrentemente en múltiples elementos de datos empaquetados almacenados en registros de vector 4515 y una FU escalar 4511 para operar en valores escalares almacenados en uno o más registros escalares 4516. Una F<u>de trazado de rayos opcional 4512 puede operar en valores de datos empaquetados almacenados en los registros de vector 4515 y/o valores escalares almacenados en los registros escalares 4516. En una realización sin una FU dedicada 4512, la FU de vector 4510 y, posiblemente, la FU escalar 4511, realizar las instrucciones de trazado de rayos descritas a continuación.
Las diversas FU 4510-4512 acceden a datos de trazado de rayos 4502 (por ejemplo, datos de cruce/intersección) necesarios para ejecutar las instrucciones de trazado de rayos 4500 desde los registros de vector 4515, registros escalares 4516 y/o el subsistema de caché local 4508 (por ejemplo, una caché L1). En una realización, las FU 4510 4512 también pueden realizar acceso a memoria 3198 mediante operaciones de carga y almacenamiento, y el subsistema de caché 4508 puede operar independientemente para almacenar en caché los datos localmente.
Si bien las instrucciones de trazado de rayos pueden usarse para aumentar el rendimiento para cruce/intersección de rayos y las compilaciones de BVH, también pueden ser aplicables a otras áreas tales como la computación de alto rendimiento (HPC) y las implementaciones de GPU de propósito general (GPGPU).
En las descripciones a continuación, la expresión doble palabra en ocasiones de abreviadwy byte sin signo se abreviaub.Además, los registros de origen y destino denominados a continuación (por ejemplo, src0, src1, dest, etc.) pueden referirse a registros de vector 4515 o, en algunos casos, una combinación de registros de vector 4515 y registros escalares 4516. Típicamente, si un valor de origen o destino usado por una instrucción incluye elementos de datos empaquetados (por ejemplo, cuando un origen o destino almacena N elementos de datos), se usan los registros de vector 4515. Otros valores pueden usar registros escalares 4516 o registros de vector 4515.
Descuantificar
Una realización de la instrucción descuantificar "descuantifica" valores previamente cuantificados. A modo de ejemplo, en una implementación de trazado de rayos, ciertos subárboles de BVH pueden cuantificarse para reducir requisitos de almacenamiento y ancho de banda. Una realización de la instrucción descuantificar toma la forma de descuantificar dest src0 src1 src2 donde el registro de origen src0 almacena N bytes sin signo, el registro de origen src1 almacena 1 byte sin signo, el registro de origen src2 almacena 1 valor de coma flotante, y el registro de destino dest almacena N valores de coma flotante. Todos estos registros pueden ser registros de vector 4515. Como alternativa, src0 y dest pueden ser registros de vector 4515 y src 1 y src2 pueden ser registros escalares 4516.
La siguiente secuencia de código define una implementación particular de la instrucción descuantificar:
for (int i = 0; i < SIMD_WIDTH) {
if (execMask[i]) {
dst[i] = src2[i] ldexp(convert_to_float(srcO[i]),srcl);
>
>
En este ejemplo, Idexp multiplica un valor de coma flotante de doble precisión por una potencia de dos integral especificada (es decir, Idexp(x, exp) = x * 2exp). En el código anterior, si el valor de la máscara de ejecución asociado con el elemento de datos SIMD actual (execMask[i])) se establece a 1, entonces el elemento de datos SIMD en la ubicación i en src0 se convierte en un valor de coma flotante y se multiplica por la potencia integral del valor en src1 (2valor de src1) y este valor se añade al elemento de datos SIMD correspondiente en src2.
Min o max selectiva
Una realización de una instrucción min o max selectiva realiza una operación mínima o máxima por carril (es decir, devuelve el mínimo o máximo de un conjunto de valores), como se indica mediante un bit en una máscara de bits. La máscara de bits puede utilizar los registros de vector 4515, registros escalares 4516, o un conjunto separado de registros de máscara (no mostrado). La siguiente secuencia de código define una implementación particular de la instrucción min/max: sel_min_max dest src0 src1 src2, donde src0 almacena N palabras dobles, src1 almacena N palabras dobles, src2 almacena una palabra doble y el registro de destino almacena N palabras dobles.
La siguiente secuencia de código define una implementación particular de la instrucción min/max selectiva:
for (int i — 0; i < SIMD_WIDTH) {
if (execMaskfi]) {
dst[i] = (1 << i) & src2 ? m in(srcO[i],srcl[i]) :
max(srcO[i],srcl[i]);
>
>
En este ejemplo, el valor de (1 < < i) & src2 (un 1 desplazado a la izquierda por i en la operación AND con src2) se utiliza para seleccionar el mínimo del iésimo elemento de datos en src0 y src1 o el máximo del iésimo elemento de datos en src0 y src1. La operación se realiza para el iésimo elemento de datos únicamente si el valor de máscara de ejecución asociado con el elemento de datos SIMD actual (execMask[i])) se establece a 1.
Instrucción de índice aleatorio
Una realización de una instrucción de índice aleatorio puede copiar cualquier conjunto de carriles de entrada a los carriles de salida. Para un ancho de SIMD de 32, esta instrucción se puede ejecutar con un rendimiento menor. Esta realización toma la forma: shuffle_index dest src0 src1 <bandera opcional>, donde src0 almacena N palabras dobles, src1 almacena N bytes sin signo (es decir, el valor de índice) y dest almacena N palabras dobles.
La siguiente secuencia de código define una implementación particular de la instrucción índice aleatorio:
for (int i = 0; i < SIMD_WIDTH) {
uint8_t srcLane = srcl.index[i];
if (execMaskp]) {
bool invalidLane - srcLane < 0 || srcLane > - SIMD_WIDTH ||
!execMask[srcLaneMod];
if (FLAG) {
invalidLane |-flag[srcLaneMod];
>
if (invalidLane) {
dst[i] = src0[i];
>
else {
dst[i] - srcO[srcLane];
>
>
>
En el código anterior, el índice en src1 identifica el carril actual. Si el iésimo valor en la máscara de ejecución se establece a 1, a continuación se realiza una comprobación para garantizar que el carril de origen está dentro del intervalo de 0 a la anchura de SIMD. En caso afirmativo, a continuación se establece la bandera (srcLaneMod) y el elemento de datos i del destino se establece igual al elemento de datos i de src0. Si el carril está dentro del intervalo (es decir, es válido), entonces el valor de índice desde src1 (srcLane0) se usa como un índice en src0 (dst[i] = src0[srcLane]).
Instrucción Up/Dn/XOR de aleatorización inmediata
En una realización, una instrucción de aleatorización inmediata aleatoriza elementos de datos/carriles de entrada basándose en un inmediato de la instrucción. En una implementación, el inmediato puede especificar el desplazamiento de los carriles de entrada en 1, 2, 4, 8, o 16 posiciones, basándose en el valor inmediato. Opcionalmente, se puede especificar un registro de fuente escalar adicional como un valor de relleno. Cuando el índice de carril es no válido, el valor de relleno (si se proporciona) se almacena en la ubicación de elemento de datos en el destino. Si no se proporciona valor de relleno, la ubicación de elemento de datos se establece a todo 0.
En una realización, se usa un registro de bandera como una máscara de origen. Si el bite de bandera para un carril de origen se establece a 1, el carril de origen se marca como no válido y la instrucción precede.
Los siguientes son ejemplos de diferentes implementaciones de la instrucción de aleatorización inmediata: shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional flag> shuffle_<up/dn/xor>_< 1 /2/4/8/16> dest src0 <optional src1 > <optional flag> En esta implementación, src0 almacena N palabras dobles, src1 almacena una palabra doble para el valor de relleno (si está presente) y dest almacena N palabras dobles que comprenden el resultado.
La siguiente secuencia de código define una implementación particular de la instrucción aleatorización inmediata: for (int i = 0; i < SIMD_WIDTH) {
int8_t srcLane;
Switch(SHUFFLE_TYPE) {
case UP:
srcLane = i - SHIFT;
case DN:
srcLane = i SHIFT;
case XOR:
srcLane = i A SHIFT;
>
if (execMask[i]) {
bool invalidLane = srcLane < 0 || srcLane >= SIMD_WIDTH || !execMask[srcLane];
if (FLAG) {
invalidLane |-flag[srcLane];
>
if (invalidLane) {
if (SRCl)
dst[ i] - src l;
else
d st [ i ] = 0;
}
else {
dst[i] = srcO[srcLane];
}
}
>
En este punto, los elementos de datos/carriles de entrada se desplazan en 1, 2, 4, 8, o 16 posiciones, basándose en el valor inmediato. El registro src1 es un registro de origen escalar adicional que se usa como un valor de relleno que se almacena en la ubicación de elemento de datos en el destino cuando el índice de carril de origen no es válido. Si no se proporciona valor de relleno y el índice de carril de origen no es válido, la ubicación de elemento de datos en el destino se establece a 0. El registro de bandera (FLAG) se usa como una máscara de origen. Si el bite de bandera para un carril de origen se establece a 1, el carril de origen se marca como no válido y la instrucción precede como se ha descrito anteriormente.
Instrucción Up/Dn/XOR de aleatorización indirecta
La instrucción de aleatorización tiene un operando de origen (src1) que controla el mapeo desde carriles de origen hasta carriles de destino. Una realización de la instrucción de aleatorización indirecta toma la forma:
shuffle_<up/dn/xor> dest src0 src1 <optional flag> donde src0 almacena N palabras dobles, src1 almacena 1 palabra doble, y dest almacena N palabras dobles.
La siguiente secuencia de código define una implementación particular de la instrucción aleatorización inmediata: for (int i — 0; i < SIMD_WIDTH) {
int8_t srcLane;
switch(SHUFFLE_TYPE) {
case UP:
srcLane = i - srcl;
case DN:
srcLane = i src l;
case XOR:
srcLane - i ^ src l;
>
if (execMaskp]) {
bool invalidLane = srcLane < 0 || srcLane > = SIMD_WIDTH || !execMask[srcLane];
if (FLAG) {
invalidLane |= flag[srcLane];
>
if (invalidLane) {
dst[¡] = 0;
>
else {
dst[¡] = srcO[srcLane];
>
>
}
Por lo tanto, la instrucción de aleatorización indirecta funciona de manera similar a la instrucción de aleatorización inmediata descrita anteriormente, pero el mapeo de los carriles de origen a los carriles de destino está controlado por el registro de origen src1 en lugar del inmediato.
Instrucción min/max de carril cruzado
Las realizaciones de una instrucción máxima/mínima de carril cruzado se soportan para tipos de datos float y entero. La instrucción mínima de carril cruzado toma la forma lane_min dest src0 y la instrucción máxima de carril cruzado toma la forma lane_max dest src0, donde src0 almacena N palabras dobles y dest almacena 1 palabra doble.
A modo de ejemplo, la siguiente secuencia de código define una implementación particular del carril cruzado mínimo: dst = src[0];
for (int i — 1; i < SIMD_WIDTH) {
if (execMask[i]) {
dst = minfdst, src[i]);
>
>
En esta realización, el valor de palabra doble en la posición de elemento de datos i del registro de origen se compara con el elemento de datos en el registro de destino y el mínimo de los dos valores se copia al registro de destino. La instrucción de máximo de carril cruzado opera prácticamente de la misma manera, siendo la única diferencia que se selecciona el máximo del elemento de datos en la posición i y el valor de destino.
Instrucción de índice min/max de carril cruzado
Las realizaciones de una instrucción de índice mínimo de carril cruzado toman la forma lane_min_index dest src0 y la instrucción de índice máximo de carril cruzado toman la forma lane_max_index dest src0, donde src0 almacena N palabras dobles y dest almacena 1 palabra doble.
A modo de ejemplo, la siguiente secuencia de código define una implementación particular de la instrucción de índice mínimo de carril cruzado:
dstjndex = 0;
tmp = src[0]
for (int i = 1; i < SIMD_WIDTH) {
if (src[i] < tmp && execMask[¡])
{
tmp - src [i];
dstjndex = i;
>
>
En esta realización, el índice de destino se incrementa desde 0 a la anchura de SIMD, abarcando el registro de destino. Si se establece el bit de máscara de ejecución, entonces el elemento de datos en la posición i en el registro de origen se copia a una ubicación de almacenamiento temporal (tmp) y el índice de destino se establece en la posición de elemento de datos i.
Instrucción de red de clasificación de carril cruzado
En una realización, una instrucción de red de clasificación de carril cruzado clasifica todos los N elementos de entrada usando una red de clasificación de anchura N (estable), ya sea en orden ascendente (sortnet_min) o en orden descendente (sortnet_max). Las versiones min/max de la instrucción toman las formas sortnet_min dest src0 y sortnet_max dest src0, respectivamente. En una implementación, src0 y dest almacenan N palabras dobles. La clasificación min/max se realiza en las N palabras dobles de src0, y los elementos ordenados ascendentemente (para min) o los elementos de orden descendentemente (para max) se almacenan en dest en sus respectivos órdenes de clasificación. Un ejemplo de una secuencia de código que define la instrucción es: dst = apply_N_wide_sorting_network_min/max(src0).
Instrucción de índice de red de clasificación de carril cruzado
En una realización, una instrucción de índice de red de clasificación de carril cruzado clasifica todos los N elementos de entrada utilizando una red de clasificación de anchura N (estable), pero devuelve el índice de permutación, ya sea en orden ascendente (sortnet_min) o en orden descendente (sortnet_max). Las versiones min/max de la instrucción toman las formas sortnet_min_index dest src0 y sortnet_max_index dest src0, donde src0 y dest almacenan cada uno N palabras dobles. Un ejemplo de una secuencia de código que define la instrucción es dst = apply_N_wide_sorting_network_min/max_index(src0).
Una realización de un método para ejecutar cualquiera de las instrucciones anteriores se ilustra en laFigura 46.El método se puede implementar en las arquitecturas de procesador específicas descritas anteriormente, pero no está limitado a ningún procesador o arquitectura de sistema particular.
En 4601 se ejecutan instrucciones de un hilo de gráficos primario en los núcleos de procesador. Esto puede incluir, por ejemplo, cualquiera de los núcleos descritos anteriormente (por ejemplo, núcleos de gráficos 3130). Cuando se alcanza el trabajo de trazado de rayos dentro del hilo de gráficos primario, determinado en 4602, las instrucciones de trazado de rayos se descargan al circuito de ejecución de trazado de rayos que puede estar en forma de una unidad funcional (UF) tal como se describió anteriormente con respecto a laFigura 45o que puede estar en un núcleo de trazado de rayos dedicado 3150 como se describe con respecto a laFigura 31.
En 4603, las instrucciones de trazado de rayos se decodifican, se extraen de la memoria y, en 4605, las instrucciones se decodifican en operaciones ejecutables (en una realización que requiere un decodificador). En 4604, las instrucciones de trazado de rayos se planifican y envían para su ejecución mediante el circuito de trazado de rayos. En 4605 las instrucciones de trazado de rayos son ejecutadas por el circuito de trazado de rayos. Por ejemplo, las instrucciones pueden enviarse y ejecutarse en las FU descritas anteriormente (por ejemplo, FU vectorial 4510, FU de trazado de rayos 4512, etc.) y/o los núcleos gráficos 3130 o los núcleos de trazado de rayos 3150.
Cuando se completa la ejecución de una instrucción de trazado de rayos, los resultados se almacenan en 4606 (por ejemplo, se vuelven a almacenar en la memoria 3198) y en 4607 se notifica al hilo de gráficos primario. En 4608, los resultados de trazado de rayos se procesan dentro del contexto del hilo primario (por ejemplo, se leen desde la memoria y se integran en los resultados de representación de gráficos).
En algunas formas de realización, el término "motor" o "módulo" o "lógica" puede hacer referencia a, formar parte de, o incluir un circuito integrado de aplicación específica (ASIC), un circuito electrónico, un procesador (compartido, dedicado o en grupo), y/o memoria (compartida, dedicada o en grupo) que ejecute uno o más programas de software o firmware, un circuito lógico combinacional y/u otros componentes adecuados que proporcionen la funcionalidad descrita. En las realizaciones, un motor, un módulo o una lógica se pueden implementar en firmware, hardware, software o cualquier combinación de firmware, hardware y software.
Las realizaciones de la invención pueden incluir diversas etapas, que se han descrito anteriormente. Las etapas se pueden incorporar en instrucciones ejecutables por máquina que se pueden utilizar para hacer que un procesador de propósito general o de propósito especial realice las etapas. Como alternativa, estas etapas se pueden llevar a cabo por componentes de hardware específicos que contienen lógica cableada físicamente para llevar a cabo las etapas, o por cualquier combinación de componentes informáticos programados y componentes de hardware personalizados.
Como se describe en el presente documento, las instrucciones pueden referirse a configuraciones específicas de hardware, tales como circuitos integrados específicos de la aplicación (ASIC) configurados para realizar ciertas operaciones o tener una funcionalidad predeterminada o instrucciones de software almacenadas en la memoria materializadas en un medio legible por ordenador no transitorio. Por lo tanto, las técnicas mostradas en las figuras se pueden implementar utilizando código y datos almacenados y ejecutados en uno o más dispositivos electrónicos (por ejemplo, una estación final, un elemento de red, etc.). Dichos dispositivos electrónicos almacenan y comunican (internamente y/o con otros dispositivos electrónicos a través de una red) código y datos utilizando medios informáticos legibles por máquina, tales como por ejemplo medios de almacenamiento informáticos legibles por máquina no transitorios (por ejemplo, discos magnéticos; discos ópticos; memoria de acceso aleatorio; memoria de sólo lectura; dispositivos de memoria flash; memoria de cambio de fase) y medios de comunicaciones informáticos legibles por máquina transitorios (por ejemplo, señales eléctricas, ópticas, acústicas u otras formas de señales propagadas - tales como por ejemplo ondas portadoras, señales infrarrojas, señales digitales, etc.).
Además, dichos dispositivos electrónicos incluyen habitualmente un conjunto de uno o más procesadores acoplados a uno o más componentes adicionales, 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 lo tanto, el dispositivo de almacenamiento de un dispositivo electrónico dado almacena habitualmente 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 un ejemplo de la invención se pueden implementar usando diferentes combinaciones de software, firmware y/o hardware. A través de toda esta descripción detallada, para los fines de explicación, se exponen numerosos detalles específicos para proporcionar un entendimiento minucioso de la presente invención. Sin embargo, será evidente para un experto en la materia que la invención se puede poner en práctica sin algunos de estos detalles específicos. En algunos casos, no se han descrito con detalle estructuras y funciones bien conocidas con el fin de evitar oscurecer la materia de estudio de la presente invención. Por consiguiente, el alcance de la invención debe juzgarse en términos de las reivindicaciones que siguen.
Claims (11)
1. Un aparato (3320), que comprende:
un generador de rayos (3304) para generar rayos para cruzar a través de una escena de gráficos;
un generador de estructura de datos de aceleración jerárquica (3305) para construir una estructura de datos de aceleración jerárquica que comprende una pluralidad de nodos dispuestos jerárquicamente;
circuito de cruce/intersección (3306) para cruzar uno o más de los rayos a través de la estructura de datos de aceleración jerárquica e intersecar los uno o más rayos con primitivas contenidas dentro de los nodos dispuestos jerárquicamente;
en donde al menos uno del generador de rayos (3304), el generador de estructura de datos de aceleración jerárquica (3305) y el circuito de cruce/intersección (3306) han de cuantificar una pluralidad de valores de datos para generar una pluralidad de valores de datos cuantificados, respectivamente; y
circuito de ejecución para ejecutar una instrucción de descuantificación para convertir la pluralidad de valores de datos cuantificados en una pluralidad de valores de datos descuantificados, incluyendo la instrucción de descuantificación un primer operando de origen para identificar una pluralidad de valores de datos cuantificados empaquetados en un registro de origen y un operando de destino para identificar un registro de destino en el que almacenar una pluralidad de valores de datos descuantificados empaquetados,
en donde el circuito de ejecución ha de leer un valor de máscara de bits que comprende una pluralidad de bits, cada bit asociado con uno de los valores de datos cuantificados empaquetados en el registro de origen,
en donde, para cada valor de datos cuantificados empaquetado en el registro de origen asociado con un valor de bit establecido en la máscara de bits, el circuito de ejecución ha de convertir el valor de datos cuantificados empaquetado en el registro de origen en un valor de coma flotante, multiplicar el valor de coma flotante por un primer valor para generar un primer producto y añadir el primer producto a un segundo valor para generar un valor de datos descuantificados, y almacenar el valor de datos descuantificados en una ubicación de elemento de datos empaquetados en el registro de destino,
en donde el circuito de ejecución ha de generar el primer valor realizando una operación utilizando un segundo valor de datos de origen almacenado en un segundo registro de origen, identificándose el segundo valor de datos de origen por un segundo operando de origen de la instrucción de descuantificación.
2. El aparato (3320) de la reivindicación 1, en donde la ubicación de elemento de datos empaquetado en el registro de destino se selecciona para corresponder a una ubicación de elemento de datos empaquetado en el registro de origen desde el que se leyó el elemento de datos cuantificado.
3. El aparato (3320) de la reivindicación 1 o 2, en donde la operación comprende una potencia integral del segundo valor de datos de origen en el segundo registro de origen.
4. El aparato (3320) de la reivindicación 1 o 2, en donde el segundo valor se lee desde un tercer registro de origen.
5. El aparato (3320) de la reivindicación 1,3, o 4 en donde los valores de datos cuantificados comprenden valores de bytes sin signo y los valores de datos descuantificados comprenden valores de coma flotante de 32 bits.
6. El aparato (3320) de la reivindicación 5, en donde el circuito de ejecución es para generar el primer valor realizando una operación utilizando un segundo valor de datos de origen almacenado en un segundo registro de origen, comprendiendo el segundo valor de datos de origen un valor de un solo byte y en donde el circuito de ejecución es para leer el segundo valor desde un tercer valor de datos de origen almacenado en un tercer registro de origen, comprendiendo el tercer valor de datos de origen un valor de coma flotante de 32 bits.
7. Un método que comprende:
generar rayos para cruzar a través de una escena de gráficos;
construir una estructura de aceleración jerárquica de datos que comprende una pluralidad de nodos dispuestos jerárquicamente,
cruzar uno o más de los rayos a través de la estructura de datos de aceleración jerárquica e intersecar los uno o más rayos con primitivas contenidas dentro de los nodos dispuestos jerárquicamente;
en donde al menos una de las operaciones de generación, construcción y cruce realizan cuantificación de una pluralidad de valores de datos para generar una pluralidad de valores de datos cuantificados, respectivamente; y ejecutar una instrucción de descuantificación para convertir la pluralidad de valores de datos cuantificados en una pluralidad de valores de datos descuantificados, incluyendo la instrucción de descuantificación un primer operando de origen para identificar una pluralidad de valores de datos cuantificados empaquetados en un registro de origen y un operando de destino para identificar un registro de destino en el que almacenar una pluralidad de valores de datos descuantificados empaquetados,
en donde el método comprende, además:
leer valor de máscara de bits que comprende una pluralidad de bits, cada bit asociado con uno de los valores de datos cuantificados empaquetado en el registro de origen,
en donde, para cada valor de datos cuantificados empaquetado en el registro de origen asociado con un valor de bits establecido en la máscara de bits, la ejecución comprende:
convertir el valor de datos cuantificados empaquetados en el registro de origen a un valor de coma flotante, multiplicar el valor de coma flotante por un primer valor para generar un primer producto, y
añadir el primer producto a un segundo valor para generar un valor de datos descuantificados, y
almacenar el valor de datos descuantificados en una ubicación de elemento de datos empaquetado en el registro de destino,
en donde el primer valor se genera realizando una operación utilizando un segundo valor de datos de origen almacenado en un segundo registro de origen, identificándose el segundo valor de datos de origen por un segundo operando de origen de la instrucción de descuantificación.
8. El método de la reivindicación 7, en donde la ubicación de elemento de datos empaquetado en el registro de destino se selecciona para corresponder a una ubicación de elemento de datos empaquetado en el registro de origen desde el que se leyó el elemento de datos cuantificado.
9. El método de la reivindicación 7 u 8, en donde la operación comprende una potencia integral del segundo valor de datos de origen en el segundo registro de origen.
10. El método de la reivindicación 7 u 8, en donde el segundo valor se lee desde un tercer registro de origen.
11. El método de la reivindicación 7, 9, o 10 en donde los valores de datos cuantificados comprenden valores de bytes sin signo y los valores de datos descuantificados comprenden valores de coma flotante de 32 bits.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US16/235,838 US10755469B2 (en) | 2018-12-28 | 2018-12-28 | Apparatus and method for ray tracing instruction processing and execution |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES3036704T3 true ES3036704T3 (en) | 2025-09-23 |
Family
ID=68290176
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES24161684T Active ES3044925T3 (en) | 2018-12-28 | 2019-10-15 | Apparatus and method for ray tracing instruction processing and execution |
| ES19203201T Active ES3036704T3 (en) | 2018-12-28 | 2019-10-15 | Apparatus and method for ray tracing instruction processing and execution |
Family Applications Before (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES24161684T Active ES3044925T3 (en) | 2018-12-28 | 2019-10-15 | Apparatus and method for ray tracing instruction processing and execution |
Country Status (7)
| Country | Link |
|---|---|
| US (5) | US10755469B2 (es) |
| EP (4) | EP4592830A3 (es) |
| CN (2) | CN111402386A (es) |
| DK (1) | DK4358029T3 (es) |
| ES (2) | ES3044925T3 (es) |
| FI (1) | FI4358029T3 (es) |
| PL (2) | PL4358029T3 (es) |
Families Citing this family (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2020177074A (ja) * | 2019-04-16 | 2020-10-29 | 株式会社デンソー | 車両用装置、車両用装置の制御方法 |
| CN111797985B (zh) * | 2020-07-22 | 2022-11-22 | 哈尔滨工业大学 | 一种基于gpu的卷积运算内存访问优化方法 |
| CN112784977B (zh) * | 2021-01-15 | 2023-09-08 | 北方工业大学 | 一种目标检测卷积神经网络加速器 |
| CN113014990B (zh) * | 2021-03-02 | 2024-04-12 | 卡莱特云科技股份有限公司 | 一种节目图片快速播放方法、播放盒及播放系统 |
| US11676327B2 (en) | 2021-03-18 | 2023-06-13 | Apple Inc. | Temporal split techniques for motion blur and ray intersection |
| US11366783B1 (en) | 2021-03-29 | 2022-06-21 | SambaNova Systems, Inc. | Multi-headed multi-buffer for buffering data for processing |
| US11204889B1 (en) | 2021-03-29 | 2021-12-21 | SambaNova Systems, Inc. | Tensor partitioning and partition access order |
| US11709611B2 (en) | 2021-10-26 | 2023-07-25 | SambaNova Systems, Inc. | Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems |
| US12045658B2 (en) * | 2022-01-31 | 2024-07-23 | Intel Corporation | Stack access throttling for synchronous ray tracing |
| CN116049032B (zh) * | 2023-03-30 | 2023-06-23 | 摩尔线程智能科技(北京)有限责任公司 | 基于光线追踪的数据调度方法、装置及设备、存储介质 |
| WO2025193549A1 (en) * | 2024-03-10 | 2025-09-18 | Intel Corporation | Integrated look-up table (lut) upconvert for tensor core hardware |
| CN118392255B (zh) * | 2024-07-01 | 2024-09-27 | 四川奥凸科技有限公司 | 一种水厂机电设备运行工况监测方法、系统和设备 |
Family Cites Families (13)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7952583B2 (en) * | 2000-06-19 | 2011-05-31 | Mental Images Gmbh | Quasi-monte carlo light transport simulation by efficient ray tracing |
| US7123655B2 (en) * | 2001-08-09 | 2006-10-17 | Sharp Laboratories Of America, Inc. | Method for reduced bit-depth quantization |
| US8200940B1 (en) * | 2008-06-30 | 2012-06-12 | Nvidia Corporation | Reduction operations in a synchronous parallel thread processing system with disabled execution threads |
| US9324175B2 (en) | 2009-09-11 | 2016-04-26 | Nvidia Corporation | Memory coherency in graphics command streams and shaders |
| CN104025040B (zh) * | 2011-12-23 | 2017-11-21 | 英特尔公司 | 用于混洗浮点或整数值的装置和方法 |
| US9697003B2 (en) * | 2013-06-07 | 2017-07-04 | Advanced Micro Devices, Inc. | Method and system for yield operation supporting thread-like behavior |
| US10235338B2 (en) * | 2014-09-04 | 2019-03-19 | Nvidia Corporation | Short stack traversal of tree data structures |
| WO2017049496A1 (en) * | 2015-09-23 | 2017-03-30 | Intel Corporation | Apparatus and method for local quantization for convolutional neural networks (cnns) |
| US9928640B2 (en) | 2015-12-18 | 2018-03-27 | Intel Corporation | Decompression and traversal of a bounding volume hierarchy |
| US10580189B2 (en) | 2016-09-16 | 2020-03-03 | Intel Corporation | Apparatus and method for optimized ray tracing |
| US10402937B2 (en) | 2017-12-28 | 2019-09-03 | Nvidia Corporation | Multi-GPU frame rendering |
| US10825230B2 (en) * | 2018-08-10 | 2020-11-03 | Nvidia Corporation | Watertight ray triangle intersection |
| US10853905B2 (en) | 2018-09-10 | 2020-12-01 | Arm Limited | Instruction execution in graphics processor shader programs |
-
2018
- 2018-12-28 US US16/235,838 patent/US10755469B2/en active Active
-
2019
- 2019-10-15 ES ES24161684T patent/ES3044925T3/es active Active
- 2019-10-15 EP EP25176026.0A patent/EP4592830A3/en active Pending
- 2019-10-15 EP EP24161684.6A patent/EP4358029B1/en active Active
- 2019-10-15 ES ES19203201T patent/ES3036704T3/es active Active
- 2019-10-15 DK DK24161684.6T patent/DK4358029T3/da active
- 2019-10-15 EP EP19203201.9A patent/EP3675053B1/en active Active
- 2019-10-15 PL PL24161684.6T patent/PL4358029T3/pl unknown
- 2019-10-15 FI FIEP24161684.6T patent/FI4358029T3/fi active
- 2019-10-15 EP EP20212676.9A patent/EP3825845A1/en not_active Ceased
- 2019-10-15 PL PL19203201.9T patent/PL3675053T3/pl unknown
- 2019-11-28 CN CN201911193005.XA patent/CN111402386A/zh active Pending
- 2019-11-28 CN CN202011270082.3A patent/CN112258620B/zh active Active
-
2020
- 2020-08-18 US US16/996,208 patent/US11568591B2/en active Active
- 2020-10-23 US US17/079,191 patent/US20210042987A1/en not_active Abandoned
-
2022
- 2022-12-29 US US18/090,810 patent/US12236519B2/en active Active
-
2025
- 2025-02-18 US US19/056,001 patent/US20250292487A1/en active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US12236519B2 (en) | 2025-02-25 |
| CN112258620A (zh) | 2021-01-22 |
| EP3675053A1 (en) | 2020-07-01 |
| FI4358029T3 (fi) | 2025-10-13 |
| EP4358029A3 (en) | 2024-06-26 |
| US20210035349A1 (en) | 2021-02-04 |
| US20200211262A1 (en) | 2020-07-02 |
| EP3825845A1 (en) | 2021-05-26 |
| ES3044925T3 (en) | 2025-11-27 |
| CN111402386A (zh) | 2020-07-10 |
| EP4592830A3 (en) | 2025-08-20 |
| US20230137438A1 (en) | 2023-05-04 |
| PL3675053T3 (pl) | 2025-09-01 |
| EP4358029B1 (en) | 2025-09-03 |
| US20250292487A1 (en) | 2025-09-18 |
| CN112258620B (zh) | 2024-11-08 |
| US10755469B2 (en) | 2020-08-25 |
| EP4592830A2 (en) | 2025-07-30 |
| PL4358029T3 (pl) | 2025-12-01 |
| EP4358029A2 (en) | 2024-04-24 |
| US20210042987A1 (en) | 2021-02-11 |
| DK4358029T3 (da) | 2025-09-29 |
| US11568591B2 (en) | 2023-01-31 |
| EP3675053B1 (en) | 2025-05-14 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES3034029T3 (en) | Cluster of scalar engines to accelerate intersection in leaf node | |
| ES3048986T3 (en) | Cloud-based realtime raytracing | |
| ES2997192T3 (en) | Apparatus and method for ray tracing with grid primitives | |
| US11527035B2 (en) | Real time ray tracing (RTRT)-based adaptive multi-frequency shading (AMFS) | |
| ES3036704T3 (en) | Apparatus and method for ray tracing instruction processing and execution | |
| ES2907861T3 (es) | Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos | |
| US10699475B1 (en) | Multi-pass apparatus and method for early termination of graphics shading | |
| ES3036875T3 (en) | Apparatus and method for acceleration data structure refit | |
| US11900523B2 (en) | Early termination in bottom-up acceleration data structure refit | |
| US20240233244A1 (en) | Apparatus and method for a hierarchical beam tracer | |
| EP3675055A1 (en) | Apparatus and method for general ray tracing queries |