ES2997192T3 - Apparatus and method for ray tracing with grid primitives - Google Patents

Apparatus and method for ray tracing with grid primitives Download PDF

Info

Publication number
ES2997192T3
ES2997192T3 ES19202161T ES19202161T ES2997192T3 ES 2997192 T3 ES2997192 T3 ES 2997192T3 ES 19202161 T ES19202161 T ES 19202161T ES 19202161 T ES19202161 T ES 19202161T ES 2997192 T3 ES2997192 T3 ES 2997192T3
Authority
ES
Spain
Prior art keywords
data
primitives
graphics
primitive
operations
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES19202161T
Other languages
English (en)
Inventor
Scott Janus
Prasoonkumar Surti
Karthik Vaidyanathan
Carsten Benthin
Philip Laws
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of ES2997192T3 publication Critical patent/ES2997192T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00Three-dimensional [3D] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00Three-dimensional [3D] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three-dimensional [3D] modelling for computer graphics
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Abstract

Aparato y método para la aceleración del trazado de rayos utilizando una primitiva de cuadrícula. Por ejemplo, una realización de un aparato comprende: un generador de primitivas de cuadrícula para generar una primitiva de cuadrícula que comprende una pluralidad de primitivas interconectadas adyacentes; un generador de máscara de bits para generar una máscara de bits asociada con la primitiva de cuadrícula, comprendiendo la máscara de bits una pluralidad de valores de máscara de bits, estando cada valor de máscara asociado con una primitiva de la primitiva de cuadrícula; un motor de trazado de rayos que comprende una lógica de hardware de recorrido e intersección para realizar operaciones de recorrido e intersección en las que los rayos se recorren a través de una estructura de datos de aceleración jerárquica y se identifican las intersecciones entre los rayos y una o más de las primitivas interconectadas adyacentes, en donde el motor de trazado de rayos debe leer la máscara de bits para determinar un primer conjunto de primitivas a partir de la primitiva de cuadrícula en las que se realizarán las operaciones de recorrido e intersección y un segundo conjunto de primitivas a partir de la primitiva de cuadrícula en las que no se realizarán las operaciones de recorrido e intersección. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Aparato y procedimiento para el trazado de rayos con primitivas de cuadrícula
ESTADO DE LA TÉCNICA ANTERIOR
Sector de la invención
Esta invención se refiere en general con el sector de los procesadores 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.
Nikolaus Binderetal.:"Massive parallel stackless ray tracing of catmull-clark subdivision surfaces", arxiv.org, Biblioteca de la Universidad de Cornell, 201 Olin library Cornell University Ithaca, NY 14853, 8 de noviembre de 2018, XP080942342 presenta un procedimiento rápido y eficiente para intersecar rayos con superficies de subdivisión Catmull-Clark. Aprovecha la aproximación democratizada por OpenSubdiv, en la que los parches regulares se representan mediante superficies de Bézier de producto tensorial y las irregulares se aproximan mediante parches de Gregory. El algoritmo opera únicamente sobre los datos del parche original y puede procesar ambos tipos de parches simultáneamente con solo una pequeña cantidad de divergencia del flujo de control. Además de introducir un procedimiento optimizado para determinar recuadros delimitadores alineados con ejes de parches de Gregory restringidos en el dominio paramétrico, se introducen varias técnicas que aceleran el proceso de subdivisión recursiva, incluyendo operación sin pila, distribución de trabajo eficiente y optimizaciones de flujo de control. El algoritmo es especialmente útil para tiempos de respuesta rápidos durante la edición de parches y la reproducción de animación.
Características
El objeto de la presente solicitud se resuelve mediante las reivindicaciones independientes. Las realizaciones ventajosas se describen mediante las reivindicaciones dependientes.
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 integrado 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 varios 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;
las figuras 6A-B ilustran 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 subprocesos 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;
las Figuras 11A-B ilustran un sistema de desarrollo de núcleo IP ejemplar que se puede utilizar para fabricar un circuito integrado y un conjunto de paquete ejemplar;
laFigura 12ilustra un circuito integrado de sistema en un chip ejemplar que se puede fabricar utilizando uno o más núcleos IP, de acuerdo con una realización;
las Figuras 13A-B ilustran un procesador de gráficos ejemplar de un circuito integrado de sistema en un chip que se puede fabricar utilizando uno o más núcleos IP;
Las figuras 14A-B ilustran arquitecturas de procesadores de 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;
las figuras 18A-B ilustran realizaciones en las que los datos de aprendizaje automático se comparten en una red; y
laFigura 19ilustra una realización de un procedimiento 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 procedimiento de acuerdo con una realización de la invención;
laFigura 24ilustra una realización de un procedimiento 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 procedimiento 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 un ejemplo de una primitiva de cuadrícula;
laFigura 46ilustra un sistema de ejemplo para procesar una primitiva de cuadrícula con una máscara de bits;
laFigura 47ilustra realizaciones de una memoria caché de página MMU a nivel de sistema;
laFigura 48ilustra otra realización de una memoria caché de página a nivel de sistema;
laFigura 49ilustra una memoria caché de página a nivel de sistema que utiliza un preextractor de páginas; y
laFigura 50ilustra un procedimiento de acuerdo con una realización de la invención.
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. La invención está definida por las reivindicaciones adjuntas.
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 gráficos 108, y puede ser un sistema de escritorio de procesador único, un sistema de estación de trabajo multiprocesador o un sistema de servidor que tiene un gran número de procesadores 102 o núcleos de procesador 107. En una realización, el sistema 100 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
En una realización, el sistema 100 puede incluir o incorporarse dentro de una plataforma de juegos basada en servidor, una consola de juegos, incluyendo una consola de juegos y medios, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos en línea. En algunas realizaciones, el sistema 100 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tipo tableta o un dispositivo de Internet móvil. El sistema de procesamiento 100 también puede incluir, acoplarse o estar integrado dentro de un dispositivo ponible, tal como un dispositivo ponible de tipo reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento 100 es un televisor o dispositivo decodificador que tiene uno o más procesadores 102 y una interfaz gráfica generada por uno o más procesadores gráficos 108.
En algunas realizaciones, cada uno del uno o más procesadores 102 incluye uno o más núcleos de procesador 107 para procesar instrucciones que, cuando se ejecutan, 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 el cálculo de conjunto de instrucciones complejas (CISC), el cálculo de conjunto de instrucciones reducido (RISC) o el cálculo mediante 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 de 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 la memoria caché 104. Dependiendo de la arquitectura, el procesador 102 puede tener una única 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 una memoria caché de último nivel (LLC)) (no se muestra), que puede compartirse entre los núcleos de procesador 107 utilizando técnicas de coherencia de memoria caché conocidas. Un archivo de registros 106 se incluye adicionalmente en el procesador 102 que puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de números enteros, registros de coma flotante, registros de estado y un registro de puntero de instrucciones). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos para el diseño del procesador 102.
En algunas realizaciones, uno o más procesadores 102 están acoplados con 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 integrado 116 y un concentrador de controlador de plataforma 130. El controlador de memoria 116 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 100, mientras que el concentrador de controlador de plataforma (PCH) 130 proporciona conexiones a dispositivos de E/S mediante un bus de E/S local.
El dispositivo de memoria 120 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), un dispositivo de memoria flash, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como memoria de proceso. En una realización, el dispositivo de memoria 120 puede 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 el uno o más procesadores gráficos 108 en los procesadores 102 para realizar operaciones de gráficos y multimedia. En algunas realizaciones, un dispositivo de visualización 111 puede conectarse al procesador o los procesadores 102. El dispositivo de visualización 111 puede ser uno o más de un dispositivo de visualización interno, como en un dispositivo electrónico móvil o un dispositivo portátil o un dispositivo de visualización externo unido mediante una interfaz de visualización (por ejemplo, DisplayPort, etc.). En una realización, el dispositivo de visualización 111 puede ser una pantalla montada en la cabeza (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, Personal System 2 (PS/2)) al sistema. El concentrador de controlador de plataforma 130 también puede conectarse a uno o más controladores de bus serie universal (USB) 142 para conectar dispositivos de entrada, tales como combinaciones de teclado y ratón 143, una cámara 144 u otros dispositivos de entrada de USB.
Se apreciará que el sistema 100 mostrado es ilustrativo y no limitativo, debido a que también pueden usarse otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, una instancia del controlador de memoria 116 y del concentrador de controlador de plataforma 130 puede integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 112. En una realización el concentrador de controlador de plataforma 130 y/o el controlador de memoria 1160 pueden ser externos al uno o más procesadores 102. Por ejemplo, el sistema 100 puede incluir un controlador de memoria externo 116 y un concentrador de controlador de plataforma 130, que puede configurarse como un concentrador de controlador de memoria y un concentrador de controlador de periféricos dentro de un conjunto de chips de sistema que está en comunicación con el procesador o los procesadores 102.
LaFigura 2es un diagrama de bloques de una realización de un procesador 200 que tiene uno o más núcleos de procesador 202A-202N, un controlador de memoria integrado 214 y un procesador de gráficos integrado 208. Aquellos elementos de 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 memoria caché internas 204A-204N. En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades de memoria caché compartidas 206.
Las unidades de memoria caché internas 204A-204N y las unidades de memoria 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 un 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 memoria caché mantiene la coherencia entre las diversas 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 una o más unidades de controlador de bus 216 gestionan un conjunto de buses de periféricos, tal como uno o más buses PCI o PCI Express. El núcleo de agente de sistema 210 proporciona funcionalidad de gestión para los diversos componentes de procesador. En algunas realizaciones, el núcleo de agente de sistema 210 incluye uno o más controladores de memoria integrados 214 para gestionar el acceso a varios dispositivos de memoria externa (no se muestran).
En algunas realizaciones, uno o más de los núcleos de procesador 202A-202N incluyen soporte para procesamiento de múltiples procesos 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 subprocesos. El núcleo de agente de sistema 210 puede incluir adicionalmente una unidad de control de energía (PCU), que incluye lógica y componentes para regular el estado de energía de los núcleos 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é compartidas 206 y el núcleo de agente de sistema 210, incluidos el uno o más controladores de memoria integrados 214. En algunas realizaciones, el núcleo de agente de sistema 210 también incluye un controlador de visualización 211 para impulsar la salida del procesador de gráficos a una o más pantallas acopladas. En algunas realizaciones, el controlador de visualización 211 también puede ser un módulo separado acoplado con el procesador de gráficos mediante al menos una interconexión, o puede integrarse dentro del procesador de gráficos 208.
En algunas realizaciones, se usa una unidad de interconexión basada en anillo 212 para acoplar los componentes internos del procesador 200. Sin embargo, se puede utilizar una unidad de interconexión alternativa, como por ejemplo una interconexión punto a punto, una interconexión conmutada u otras técnicas, incluyendo técnicas bien conocidas en el técnica. En algunas realizaciones, el procesador de gráficos 208 se acopla con la interconexión en anillo 212 por medio 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 energía relativamente más alto se acoplan con uno o más núcleos de energía que tienen un consumo de energía más bajo. Adicionalmente, el procesador 200 se puede implementar en uno o más microprocesadores o como un circuito integrado 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 memoria. La interfaz de memoria 314 puede ser una interfaz con la memoria local, una o más memorias caché internas, una o más memorias caché externas compartidas y/o con la memoria del sistema.
En algunas realizaciones, el procesador de gráficos 300 también incluye un controlador de visualización 302 para dirigir los datos de salida de visualización a un dispositivo de visualización 320. El controlador de visualización 302 incluye hardware para uno o más planos de superposición para la visualización y 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 a, desde o entre uno o más formatos de codificación de medios, incluyendo, pero sin limitación, formatos del Grupo de Expertos en Imágenes en Movimiento (MPEG) tales como MPEG-2, formatos de Codificación de Vídeo Avanzada (AVC) tales como H.264/MPEG-4 AVC, así como de la Sociedad de Ingenieros de Imágenes en Movimiento y de Televisión (SMPTE) 421M/VC-1 y formatos del Grupo Conjunto de Expertos en Fotografía (JPEG) tales como los formatos JPEG y Motion JPEG (MJPEG).
En algunas realizaciones, el procesador de gráficos 300 incluye un motor de transferencia de imágenes en bloques (BLIT) 304 para realizar operaciones de rasterización bidimensionales (2D) que incluyen, por ejemplo, transferencias en bloques de límites de bits. Sin embargo, en una realización, se llevan a cabo operaciones de gráficos 2D utilizando uno o más componentes del motor de procesamiento de gráficos (GPE) 310. En algunas realizaciones, el GPE 310 es un motor de cálculo para realizar operaciones de gráficos, incluidas operaciones de gráficos tridimensionales (3D) y operaciones multimedia.
En algunas realizaciones, el GPE 310 incluye una canalización 3D 312 para realizar operaciones 3D, tales como renderizar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas de primitivas 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 312 incluye elementos de función fija y programables que realizan varias tareas dentro del elemento y/o generan subprocesos de ejecución en un subsistema 3D/de medios 315. Si bien la canalización 3D 312 se puede utilizar para realizar operaciones de medios, una realización del GPE 310 también incluye una canalización de medios 316 que se utiliza específicamente para realizar operaciones de medios, tales como postprocesamiento de vídeo y mejora de imagen.
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 códec de vídeo 306. En algunas realizaciones, la canalización de medios 316 incluye adicionalmente una unidad de generación de subprocesos para generar subprocesos para su ejecución en el subsistema 3D/de medios 315. Los subprocesos generados llevan a cabo 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 subprocesos 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 subprocesos al subsistema 3D/de medios 315, que incluye lógica de despacho de subprocesos para arbitrar y despachar las diversas solicitudes a recursos de ejecución de subproceso disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los subprocesos 3D y de medios. En algunas realizaciones, el subsistema 3D/de medios 315 incluye una o más memorias caché internas para instrucciones de subprocesos y datos. En algunas realizaciones, el subsistema también incluye una memoria compartida, incluyendo registros y una memoria direccionable, para compartir datos entre subprocesos y para almacenar datos de salida.
Motor de procesamiento de gráficos
LaFigura 4es un diagrama de bloques de un motor de procesamiento de gráficos 410 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 410 es una versión del GPE 310 que se muestra en laFigura 3. Aquellos elementos de laFigura 4que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. Por ejemplo, se ilustra la canalización 3D 312 y la canalización de medios 316 de laFigura 3. La canalización de medios 316 es opcional en algunas realizaciones del GPE 410 y puede no incluirse explícitamente dentro del GPE 410. Por ejemplo, en al menos una realización, se acopla al GPE 410 un procesador de medios y/o imágenes separado.
En algunas realizaciones, el GPE 410 se acopla con o incluye un transmisor en continuo de comandos 403, que proporciona un flujo de comandos a la canalización 3D 312 y/o a las canalizaciones de medios 316. En algunas realizaciones, el transmisor en continuo de comandos 403 está acoplado a memoria, que puede ser memoria de sistema, o una o más de memoria caché interna y memoria caché compartida. En algunas realizaciones, el transmisor en continuo de comandos 403 recibe comandos desde la memoria y envía los comandos a la canalización 3D 312 y/o a la canalización de medios 316. Los comandos son directivas extraídas de una memoria intermedia 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 adicionalmente 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 por ejemplo, entre otros, datos de vértices y de geometría para la canalización 3D 312 y/o datos de imagen y objetos de memoria para la canalización de medios 316. La canalización 3D 312 y la canalización de medios 316 procesan los comandos y los datos llevando a cabo operaciones por medio de una lógica dentro de las canalizaciones respectivas o despachando uno o más subprocesos 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) de gráfico(s) 415A, núcleo(s) de 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 incluyen lógica de ejecución de propósito general y específica de gráficos para realizar operaciones de gráficos y de cálculo, así como lógica de aceleración de inteligencia artificial y aprendizaje automático y/o procesamiento de texturas de función fija.
En diversas realizaciones, la canalización 3D 312 incluye lógica de función fija y programable para procesar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cálculo u otros programas de sombreado, procesando las instrucciones y despachando subprocesos 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 subprocesos 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 subprocesos 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 subprocesos. En algunas realizaciones, la URB 418 puede usarse para enviar datos entre diferentes subprocesos 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 subprocesos en la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de función compartida 420.
En algunas realizaciones, la matriz de núcleos de gráficos 414 es ajustable a escala, de manera que la matriz incluye un número variable de núcleos de gráficos, teniendo cada uno un número variable de unidades de ejecución basándose en la potencia objetivo y en el nivel de rendimiento del GPE 410. En una realización, los recursos de ejecución se pueden escalar dinámicamente, de tal forma que los recursos de ejecución se pueden habilitar o deshabilitar 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 otras, el muestreador 421, el módulo matemático 422 y la lógica de comunicación entre subprocesos (ITC) 423. Adicionalmente, algunas realizaciones implementan una o más memorias caché 425 dentro de la lógica de funciones compartidas 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úcleo de gráficos 414. En su lugar, una única instanciación de esa función especializada se implementa como una entidad autónoma en la lógica de funciones compartidas 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úcleo de gráficos 414 y que se incluyen dentro de la matriz de núcleo de gráficos 414 varía según las realizaciones. En algunas realizaciones, funciones compartidas específicas dentro de la lógica de funciones compartidas 420 que son usadas ampliamente por la matriz de núcleos de gráficos 414 pueden incluirse dentro de la lógica de funciones compartidas 416 dentro de la matriz de núcleos de gráficos 414. En diversas realizaciones, la lógica de funciones compartidas 416 dentro de la matriz de núcleos de gráficos 414 puede incluir alguna o toda la lógica dentro de la lógica de funciones compartidas 420. En una realización, todos los elementos lógicos dentro de la lógica de funciones compartidas 420 pueden duplicarse dentro de la lógica de funciones compartidas 416 de la matriz de núcleos de gráficos 414. En una realización, la lógica de funciones compartidas 420 se excluye en favor de la lógica de funciones compartidas 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 este documento. Aquellos elementos de laFigura 5que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. El núcleo de procesador de gráficos 500 ilustrado, en algunas realizaciones, está incluido dentro de la matriz de núcleo de gráficos 414 de laFigura 4. El núcleo de procesador de gráficos 500, a veces denominado porción de núcleo, puede ser uno o varios núcleos de gráficos dentro de un procesador de gráficos modular. El núcleo de procesador de gráficos 500 es ilustrativo de un segmento de núcleo de gráficos, y un procesador de gráficos como se describe en el presente documento puede incluir múltiples segmentos de núcleo de gráficos basándose en la potencia objetivo y en las envolventes de rendimiento. Cada núcleo de procesador de gráficos 500 puede incluir un bloque de función fija 530 acoplado con múltiples subnúcleos 501A-501F, también denominados subsegmentos, que incluyen bloques modulares de lógica de función fija y de propósito general.
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/geométrica 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 interfaz de vídeo, un generador de subprocesos y un despachador de subprocesos, y un administrador de memoria intermedia de retorno unificado, que administra memoria intermedia de retorno unificada, como la memoria intermedia de retorno unificada 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 gráfica SoC 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 un chip. El microcontrolador de gráficos 538 es un subprocesador programable que puede configurarse para gestionar diversas funciones del núcleo de procesador de gráficos 500, incluyendo el despacho de subprocesos, la planificación y el otorgamiento de prioridad. 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 postprocesamiento de datos multimedia, incluidos datos de imagen y vídeo. La canalización de medios 539 implementa operaciones de medios 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 posibilita 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 en chip o en paquete integrada. La interfaz de SoC 537 también puede posibilitar la comunicación con dispositivos de función fija dentro del SoC, tales como canalizaciones de formación de imágenes de cámara, y posibilita el uso y/o implementa atomizaciones de memoria global que pueden compartirse entre el núcleo de procesador de gráficos 500 y las CPU dentro del SoC. La interfaz de 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 posibilita la recepción de memorias intermedias de comandos desde un transmisor en continuo de comandos y un despachador de subprocesos global que están configurados para proporcionar comandos e instrucciones a cada uno de uno o más núcleos de gráficos dentro de un procesador de gráficos. Los comandos e instrucciones pueden despacharse a la canalización de medios 539, cuando van a realizarse operaciones de medios, o a una canalización de geometría y función fija (por ejemplo, la canalización de geometría y función fija 536, la canalización de geometría y función fija 514) cuando van a realizarse operaciones de procesamiento de gráficos.
El microcontrolador de gráficos 538 puede configurarse para realizar diversas tareas de planificación y gestión para el núcleo de 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 (EU) 502A-502F, 504A-504F dentro de los subnúcleos 501A-501F. En este modelo de planificación, el software de anfitrión que se ejecuta en un núcleo de CPU de un SoC que incluye el núcleo de procesador de gráficos 500 puede enviar cargas de trabajo a uno de múltiples llamadores de procesador de gráficos, lo que invoca una operación de planificación en el motor de gráficos apropiado. Las operaciones de planificación incluyen determinar qué carga de trabajo ejecutar a continuación, emitir una carga de trabajo a un transmisor en continuo de comandos, dar prioridad a cargas de trabajo existentes que se ejecutan en un motor, supervisar el progreso de una carga de trabajo y notificar al software de anfitrión cuándo se ha completado 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 restablecer 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 subprocesos, 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 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 únicamente de posición, existen dos canalizaciones de geometría, la canalización de geometría completa dentro de la canalización de geometría/función fija 516, 536, y una canalización de selección, que es una canalización de geometría adicional que puede incluirse dentro de la lógica de función fija adicional 516. En una realización, la canalización de selección es una versión recortada de la canalización de geometría completa. La canalización completa y la canalización de selección pueden ejecutar diferentes instancias de la misma aplicación, teniendo cada instancia un contexto separado. El sombreado de solo posición puede ocultar largas ejecuciones de selección 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, debido a que la canalización de selección extrae y sombrea solo el atributo de posición de los vértices, sin realizar la rasterización y renderizado de los píxeles a la memoria intermedia de fotogramas. La canalización de selección puede usar los resultados críticos generados para calcular información de visibilidad de todos los triángulos sin tener en cuenta si se seleccionan esos triángulos. La canalización completa (que en este caso puede denominarse canalización de reproducción) puede consumir la información de visibilidad para omitir los triángulos seleccionados para sombrear solo los triángulos visibles que se pasan finalmente a la fase de rasterización.
En una realización, la lógica de función fija adicional 516 también puede incluir lógica de aceleración de aprendizaje automático, tal como lógica de multiplicación matricial de función fija, para implementaciones que incluyen optimizaciones para entrenamiento o inferencia de aprendizaje automático.
Dentro de cada subnúcleo de gráficos 501A-501F 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 EU 502A-502F, 504A-504F, la lógica de despacho de subprocesos y comunicación entre subprocesos (TD/IC) 503A-503F, un muestreador 3D (por ejemplo, de textura) 505A-505F, un muestreador de medios 506A-506F, un procesador de sombreador 507A-507F y una memoria local compartida (SLM) 508A-508F. Cada una de las matrices de EU 502A-502F, 504A-504F incluye múltiples unidades de ejecución, que son unidades de procesamiento de gráficos de propósito general que pueden realizar operaciones lógicas de coma flotante y de números enteros/coma fija al servicio de una operación de gráficos, de medios o de cálculo, incluyendo programas de gráficos, de medios o de sombreado de cálculo. La lógica de TD/IC 503A-503F realiza operaciones de control de subprocesos y de despacho de subprocesos locales para las unidades de ejecución dentro de un subnúcleo y facilita la comunicación entre subprocesos 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 de medios 506A-506F puede realizar operaciones de lectura similares basándose en el tipo y en el formato asociados con datos de medios. En una realización, cada subnúcleo de gráficos 501A-501F puede incluir, como alternativa, un muestreador 3D y de medios unificado. Los subprocesos que se ejecutan en las unidades de ejecución dentro de cada uno de los subnúcleos 501A-501F pueden hacer uso de la memoria local compartida 508A-508F dentro de cada subnúcleo, para posibilitar que los subprocesos que se ejecutan dentro de un grupo de subprocesos se ejecuten usando un agrupamiento común de memoria en chip.
Unidades de ejecución
Las Figuras 6A-6B ilustran la lógica de ejecución de subprocesos 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. La Figura 6A ilustra una visión general de la lógica de ejecución de subprocesos 600, que puede incluir una variante de la lógica de hardware ilustrada con cada subnúcleo 501A-501F de la Figura 5. La Figura 6B ilustra detalles internos ejemplares de una unidad de ejecución.
Como se ilustra en la Figura 6A, en algunas realizaciones, la lógica de ejecución de subprocesos 600 incluye un procesador de sombreado 602, un despachador de subprocesos 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 memoria 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 subprocesos 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 subprocesos de hardware simultáneos mientras procesa múltiples elementos de datos en paralelo para cada subproceso. 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 utilizan principalmente para ejecutar programas de sombreado. Un procesador de sombreado 602 puede procesar los diversos programas de sombreado y despachar subprocesos de ejecución asociados con los programas de sombreado por medio de un despachador de subprocesos 604. En una realización, el despachador de subprocesos incluye una lógica para arbitrar solicitudes de iniciación de subprocesos desde las canalizaciones de gráficos y de medios e instanciar los subprocesos solicitados en una o más unidades de ejecución en las unidades de ejecución 608A-608N. Por ejemplo, una canalización de geometría puede despachar sombreadores de vértices, teselaciones o geometrías a la lógica de ejecución de subprocesos para su procesamiento. En algunas realizaciones, el despachador de subprocesos 604 también puede procesar solicitudes de generación de subprocesos en tiempo de ejecución desde los programas de sombreado en ejecución.
En algunas realizaciones, las unidades de ejecución 608A-608N admiten un conjunto de instrucciones que incluye soporte nativo para muchas instrucciones de sombreadores de gráficos 3D estándar, de modo que los programas de sombreado de bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una 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), el procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y el procesamiento de propósito general (por ejemplo, sombreadores de medios y de cálculo). Cada una de las unidades de ejecución 608A-608N es capaz de múltiples emisiones de ejecución de múltiples datos, una instrucción (SIMD), y un funcionamiento de múltiples subprocesos habilita un entorno de ejecución efectivo frente a accesos de memoria de latencia superior. Cada subproceso de hardware dentro de cada unidad de ejecución tiene un archivo de registro de ancho de banda alto dedicado y un estado de subproceso independiente asociado. La ejecución es de múltiples emisiones por reloj a canalizaciones aptas para operaciones de números enteros, y de coma flotante de precisión sencilla y doble, capacidad de ramal de SIMD, operaciones lógicas, operaciones transcendentales y otras operaciones misceláneas. 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 subproceso en espera pase a inactividad hasta que se devuelvan los datos solicitados. Mientras el subproceso en espera está inactivo, los recursos de hardware pueden dedicarse al procesamiento de otros subprocesos. Por ejemplo, durante un retraso asociado con una operación de sombreador de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, un sombreador de fragmentos u otro tipo de programa de 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, enmascaramiento y control de flujo de elementos de datos dentro de las instrucciones. El número de canales puede ser independiente del número de unidades aritméticas lógicas (ALU) o unidades de coma flotante (FPU) de un procesador de gráficos en particular. En algunas realizaciones, las unidades de ejecución 608A-608N admiten tipos de datos de punto flotante y entero.
El conjunto de instrucciones de la unidad de ejecución incluye instrucciones SIMD. Los diversos elementos de datos se pueden almacenar como un tipo de datos empaquetados en un registro y la unidad de ejecución procesará los diversos elementos en función del tamaño de datos de los elementos. Por ejemplo, cuando se realizan operaciones con un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución realiza operaciones con el vector como cuatro elementos de datos empaquetados de 64 bits separados (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados de 32 bits separados (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados de 16 bits separados (elementos de datos de tamaño de palabra (W)) o treinta y dos elementos de datos de 8 bits separados (elementos de datos de tamaño de octeto (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
En una realización, una o más unidades de ejecución se pueden combinar en una unidad de ejecución fusionada 609A-609N que tiene una lógica de control de subprocesos (607A-607N) que es común a las UE fusionadas. Múltiples EU pueden fusionarse en un grupo de EU. Cada EU del grupo de EU fusionadas puede configurarse para ejecutar un subproceso de hardware de SIMD separado. El número de EU en un grupo de EU fusionadas puede variar de acuerdo con realizaciones. Adicionalmente, pueden realizarse diversas anchuras de SIMD por EU, que incluyen, pero sin limitación, SIMD8, SIMD16 y SIMD32. Cada unidad de ejecución de gráficos fusionada 609A-609N incluye al menos dos unidades de ejecución. Por ejemplo, la unidad de ejecución fusionada 609A incluye una primera EU 608A, una segunda EU 608B y una lógica de control de subprocesos 607A que es común a la primera EU 608A y a la segunda EU 608B. La lógica de control de subprocesos 607A controla los subprocesos ejecutados en la unidad de ejecución de gráficos fusionada 609A, permitiendo que cada EU dentro de las unidades de ejecución fusionadas 609A-609N se ejecute usando un registro de puntero de instrucción común.
Una o más memorias caché de instrucciones internas (por ejemplo, 606) se incluyen en la lógica de ejecución de subprocesos 600 para almacenar en memoria caché las instrucciones de subprocesos para las unidades de ejecución. En algunas realizaciones, se incluyen una o más memorias caché de datos (por ejemplo, 612) para almacenar en caché los datos de los subprocesos durante la ejecución de los subprocesos. En algunas realizaciones, se incluye un muestreador 610 para proporcionar un muestreo de texturas para operaciones 3D y un 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 medios envían solicitudes de inicio de subprocesos a la lógica de ejecución de subprocesos 600 a través de la lógica de generación y envío de subprocesos. 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 del procesador de píxeles dentro del procesador de sombreado 602 luego ejecuta un programa de sombreado de píxeles o fragmentos suministrado por una interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreado, el procesador de sombreado 602 despacha subprocesos a una unidad de ejecución (por ejemplo, 608A) mediante el despachador de subprocesos 604. En algunas realizaciones, el procesador<de sombreado>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 de memoria para que la lógica de ejecución de subprocesos 600 emita datos procesados a la 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 memoria caché de datos 612) para almacenar en caché datos para un acceso de memoria por medio del puerto de datos.
Como se ilustra en la Figura 6B, una unidad de ejecución de gráficos 608 puede incluir una unidad de extracción de instrucciones 637, una matriz de archivos de registro general (GRF) 624, una matriz de archivos de registro arquitectónico (ARF) 626, un árbitro de subprocesos 622, una unidad de envío 630, una unidad de ramificación 632, un conjunto de unidades de punto flotante (FPU) SIMD 634 y, en una realización, un conjunto de ALU de SIMD de enteros dedicados 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 subproceso 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 subproceso se mantiene en el ARF 626, mientras que los datos usados durante la ejecución de subproceso se almacenan en el GRF 624. El estado de ejecución de cada subproceso, incluyendo los punteros de instrucción para cada subproceso, puede mantenerse en registros específicos de subproceso 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 subprocesos simultáneos (SMT) y múltiples subprocesos entrelazados de granularidad fina (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 subprocesos 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 subprocesos simultáneos.
En una realización, la unidad de ejecución de gráficos 608 puede emitir conjuntamente múltiples instrucciones, cada una de las cuales pueden ser instrucciones diferentes. El árbitro de subprocesos 622 del subproceso 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 subproceso 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 subproceso de unidad de ejecución tiene acceso a 4 kbytes dentro del GRF 624, aunque las realizaciones no se limitan a ello, y pueden proporcionarse más o menos recursos de registro en otras realizaciones. En una realización, hasta siete subprocesos pueden ejecutarse simultáneamente, aunque el número de subprocesos por unidad de ejecución también puede variar de acuerdo con realizaciones. En una realización en la que siete subprocesos 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 conjuntamente para construir registros más amplios de manera eficaz o para representar estructuras de datos de bloques rectangulares con paso.
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 ramificación se despachan a una unidad de ramificación dedicada 632 para facilitar la divergencia de SIMD y la convergencia final.
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, las matrices de múltiples instancias de la unidad de ejecución de gráficos 608 se pueden instanciar en una agrupación de subnúcleos de gráficos (por ejemplo, una subsección). 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 subproceso 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 del procesador de gráficos admiten un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros de líneas continuas ilustran los componentes que se incluyen generalmente en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que sólo se incluyen en un subconjunto de las instrucciones. En algunas realizaciones, el formato de instrucción 700 descrito e ilustrado son macroinstrucciones, en el sentido de que son instrucciones suministradas a la unidad de ejecución, en oposición a microoperaciones resultantes de la decodificación de instrucciones una vez que se procesa 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 según la realización. En algunas realizaciones, la instrucción se compacta en parte utilizando un conjunto de valores de índice en un campo de índice 713. El hardware de la unidad de ejecución hace referencia a un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 710.
Para cada formato, el código de operación de instrucción 712 define la operación que 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, predicción) y el orden de los canales de datos (por ejemplo, el intercambio de canales). Para las instrucciones en el formato de instrucción de 128 bits 710, un campo de tamaño de ejecución 716 limita el número de canales de datos que se ejecutarán en paralelo. En algunas realizaciones, el campo de tamaño de ejecución 716 no está disponible para su uso en el formato de instrucción compacta de 64 bits 730.
Algunas instrucciones de unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 720, src1 722 y un destino 718. En algunas realizaciones, las unidades de ejecución admiten instrucciones de destino dual, donde uno de los destinos está implícito. 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 utiliza el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se utiliza el modo de direccionamiento de registro directo, la dirección de registro de uno o 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 dirección/acceso 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 utiliza para definir una alineación de acceso a datos para la instrucción. Algunas realizaciones admiten 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 la instrucción. Por ejemplo, cuando está en un primer modo, la instrucción puede usar direccionamiento alineado con bytes para los operandos de origen y destino y cuando está en un segundo modo, la instrucción puede usar direccionamiento alineado con 16 bytes para todos los operandos de origen y destino.
En una realización, la parte de modo de dirección del campo de modo de acceso/dirección 726 determina si la instrucción debe utilizar 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ódigos 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) tienen la forma de 0000xxxxb y las instrucciones lógicas tienen la forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 744 (por ejemplo, llamar, saltar (jmp)) incluye instrucciones en la 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 0011 xxxxb (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 subprocesos 850 y una canalización de salida de renderizado 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 mediante escrituras de registros en uno o más registros de control (no se muestran) o mediante comandos emitidos al procesador de gráficos 800 a través de una interconexión de anillo 802. En algunas realizaciones, la interconexión en anillo 802 acopla el procesador de gráficos 800 a otros componentes de procesamiento, tales como por ejemplo otros procesadores de gráficos o procesadores de propósito 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 transmisor en continuo de comandos 803 dirige la operación de un extractor de vértices 805 que lee datos de vértices desde memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor en continuo de comandos 803. En algunas realizaciones, el extractor de vértices 805 proporciona datos de vértices a un sombreador de vértices 807, que realiza operaciones de transformación de espacio de coordenadas e iluminación para 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 mediante el despacho de subprocesos de ejecución a las unidades de ejecución 852A-852B a través de un despachador de subprocesos 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 memoria caché L1 adjunta 851 que es específica para cada matriz o está compartida entre las matrices. La memoria caché se puede configurar como una memoria caché de datos, una memoria caché de instrucciones o una única memoria caché que se 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 la teselación acelerada por hardware de objetos 3D. En algunas realizaciones, un sombreador de casco programable 811 configura las operaciones de teselación. Un sombreador de dominio programable 817 proporciona una evaluación de extremo posterior de la salida de la teselación. Un teselador 813 opera bajo 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 basados 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, los objetos geométricos completos pueden ser procesados por un sombreador de geometría 819 a través de uno o más subprocesos despachados a las unidades de ejecución 852A-852B, o pueden proceder directamente al recortador 829. En algunas realizaciones, el sombreador de geometría opera sobre objetos geométricos completos, en lugar de vértices o parches de vértices como en etapas anteriores de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 819 recibe la entrada del sombreador de vértices 807. En algunas realizaciones, el sombreador de geometría 819 se puede programar mediante un programa de sombreado de geometría para llevar a cabo una teselación de geometría si las unidades de teselación están deshabilitadas.
Antes de la rasterización, un recortador 829 procesa datos de vértice. 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 rasterizador y un componente de prueba de profundidad 873 en la canalización de salida de renderizado 870 despacha sombreadores de píxeles para convertir los objetos geométricos en representaciones por píxel. En algunas realizaciones, la lógica de sombreador de píxeles está incluida en la lógica de ejecución de subprocesos 850. En algunas realizaciones, una aplicación puede omitir el rasterizador y el componente de prueba de profundidad 873 y acceder a datos de vértices no rasterizados a través 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 de lógica asociadas (por ejemplo, la memoria caché L1 851, el muestreador 854, la memoria caché de textura 858, etc.) se interconectan mediante un puerto de datos 856 para realizar el acceso de memoria y comunicarse con los componentes de canalización de salida de renderizado del procesador. En algunas realizaciones, el muestreador 854, las memorias caché 851, 858 y las unidades de ejecución 852A-852B tienen, cada uno, rutas de acceso de 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 de renderizado 870 contiene un rasterizador y un componente de prueba de profundidad 873 que convierte objetos basados en vértices en una representación asociada basada en píxeles. En algunas realizaciones, la lógica del rasterizador incluye una unidad generadora de ventanas/enmascaradora para llevar a cabo una rasterización de líneas y de triángulos de función fija. Una memoria caché de renderizado 878 y una memoria caché de profundidad 879 asociadas también están disponibles en algunas realizaciones. 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 del transmisor en continuo de comandos 803. En algunas realizaciones, la canalización de medios 830 incluye un transmisor en continuo de comandos independiente. En algunas realizaciones, el extremo frontal de vídeo 834 procesa los comandos de medios antes de enviar el comando al motor de medios 837. En algunas realizaciones, el motor de medios 837 incluye funcionalidad de generación de subprocesos para generar subprocesos para su despacho a la lógica de ejecución de subprocesos 850 a través del despachador de subprocesos 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 se acopla con el procesador de gráficos por medio de 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 capaz de operar independientemente de la canalización 3D. En algunas realizaciones, el controlador de visualización 843 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en el sistema, como en un ordenador portátil, o un dispositivo de visualización externo conectado por medio de un conector de dispositivo de visualización.
En algunas realizaciones, la canalización de geometría 820 y la canalización de medios 830 se pueden configurar para realizar operaciones basadas en múltiples interfaces de programación de gráficos y 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 de gráficos traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. En algunas realizaciones, se proporciona soporte para Open Graphics Library (OpenGL), Open Computing Language (OpenCL) y/o API de gráficos y de cálculo Vulkan, todas ellas del grupo Khronos. En algunas realizaciones, también se puede proporcionar soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas realizaciones, 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
La Figura 9A es un diagrama de bloques que ilustra un formato de comando de procesador de gráficos 900 de acuerdo con una realización. La Figura 9B es un diagrama de bloques que ilustra una secuencia de comandos del procesador de gráficos 910 de acuerdo con una realización. Los recuadros de líneas continuas en la Figura 9A ilustran los componentes que generalmente se incluyen en un comando de gráficos mientras que las líneas discontinuas incluyen componentes que son opcionales o que sólo se incluyen en un subconjunto de los comandos de gráficos. El formato de comando de procesador de gráficos 900 de ejemplo de la Figura 9A incluye 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 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 condicionar el procesamiento posterior del comando y enviar los datos del comando a la unidad cliente adecuada. En algunas realizaciones, las unidades cliente de procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad de renderizado, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad 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 algunos de los comandos en función del código de operación del comando. En algunas realizaciones, los comandos se alinean por medio de múltiplos de una palabra doble.
El diagrama de flujo de la Figura 9B ilustra 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 configurar, ejecutar y finalizar un conjunto de operaciones de gráficos. Se muestra y describe una secuencia de comandos de muestra solo con fines de ejemplo, ya que las realizaciones no se limitan a estos comandos específicos ni a esta secuencia de comandos. Además, los comandos pueden emitirse como un lote de comandos en una secuencia de comandos, de modo que el procesador de gráficos procesará la secuencia de comandos al menos parcialmente en concurrencia.
En algunas realizaciones, la secuencia de comandos del procesador de gráficos 910 puede comenzar con un comando de vaciado de canalización 912 para hacer que cualquier canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización 3D 922 y la canalización de medios 924 no funcionan simultáneamente. El vaciado de la canalización se realiza para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de 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 utiliza 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 sólo 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 descarga de canalización 912 inmediatamente antes de un cambio de canalización por medio del 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 su operación y se utiliza para programar la canalización 3D 922 y la canalización de medios 924. En algunas realizaciones, el comando de control de canalización 914 configura el estado de canalización para la canalización activa. En una realización, el comando de control de canalización 914 se utiliza para la sincronización de canalizaciones 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 utilizan para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de 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 utiliza una o varias memorias intermedias de retorno para almacenar datos de salida y para realizar la comunicación entre subprocesos. En algunas realizaciones, el estado de memoria intermedia de retorno 916 incluye seleccionar el tamaño y el número de memorias intermedias de retorno a 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 primitiva 3D 932 se utiliza para enviar primitivas 3D para que sean procesadas por la canalización 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos por medio del 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, el comando de primitiva 3D 932 se utiliza para realizar operaciones de vértice en primitivas 3D a través de sombreadores de vértice. Para procesar sombreadores de vértices, la canalización 3D 922 despacha subprocesos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
En algunas realizaciones, la canalización 3D 922 se desencadena por medio de un comando o evento de ejecución 934. En algunas realizaciones, una escritura de registro activa la ejecución del comando. En algunas realizaciones, la ejecución se desencadena mediante un comando "go" o "kick" en la secuencia de comandos. En una realización, la ejecución del comando se activa utilizando un comando de sincronización de canalización para limpiar la secuencia de comandos en 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 910 del procesador de gráficos sigue la ruta de la canalización de medios 924 cuando realiza operaciones de medios. En general, el uso específico y la forma de programación de la canalización de medios 924 depende de las operaciones de medios o de cálculo a realizar. 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 la unidad de procesador de gráficos de propósito general (GPGPU), donde el procesador de gráficos se usa para realizar operaciones vectoriales de SIMD usando programas sombreador computacional que no están relacionados explícitamente con la representación de primitivas de gráficos.
En algunas realizaciones, se configura la canalización de medios 924 de una manera similar a la canalización 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 configuraciones de estado.
En algunas realizaciones, los comandos de objeto 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 de memoria que contienen datos de vídeo para procesar. 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 configura el estado de la canalización y se ponen en cola los comandos de objeto de medios 942, la canalización de medios 924 se activa a través de un comando de ejecución 944 o un evento de ejecución equivalente (por ejemplo, escritura de registro). La salida de la canalización de medios 924 puede 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 ejecutan de forma similar a 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 propósito general 1034. Tanto la aplicación de gráficos 1010 como 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 sombreado que incluyen instrucciones de sombreado 1012. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como por ejemplo el lenguaje de sombreador de alto nivel (HLSL) o el lenguaje de sombreador de 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 propietario similar a UNIX o un sistema operativo de código abierto similar a UNIX que utiliza una variante del núcleo Linux. El sistema operativo 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 Vulkan.
En algunas realizaciones, el controlador de gráficos de modo de usuario 1026 contiene un compilador de sombreador de extremo posterior 1027 para convertir las instrucciones de sombreado 1012 en una representación específica de hardware. Cuando se utiliza la API de OpenGL, las instrucciones de sombreador 1012 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 1026 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 1026 usa las funciones en modo kernel (núcleo) de sistema operativo 1028 para comunicarse con un controlador de gráficos en modo kernel 1029. En algunas realizaciones, el controlador de gráficos en modo kernel 1029 se comunica con el procesador de gráficos 1032 para despachar comandos e instrucciones.
Implementaciones de núcleos IP
Uno o más aspectos de al menos una realización pueden implementarse mediante un código representativo almacenado en un medio legible por máquina que representa y/o define la lógica dentro de un circuito integrado, tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan una lógica diversa 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 realice las operaciones descritas en asociación con cualquiera de las realizaciones descritas en este documento.
LaFigura 11Aes un diagrama de bloques que ilustra un sistema de desarrollo de núcleos 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 del 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 del 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 este 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 encaminar señales eléctricas tales como, por ejemplo, señales de entrada/salida (E/S) y/o señales de alimentación o de masa asociadas con la operación de la lógica 1172, 1174. En algunas realizaciones, el sustrato 1180 es un sustrato laminado a base de resina epoxídica. El sustrato de paquete 1180 puede incluir otros tipos adecuados de sustratos en otras realizaciones. El conjunto de paquete 1170 puede conectarse a otros dispositivos eléctricos mediante una interconexión de paquete 1183. La interconexión de paquete 1183 puede acoplarse a una superficie del sustrato 1180 para encaminar señales eléctricas a otros dispositivos eléctricos, tales como una placa base, otro conjunto de chips o un módulo de múltiples chips.
En algunas realizaciones, las unidades de lógica 1172, 1174 se acoplan eléctricamente con un puente 1182 que está configurado para encaminar señales eléctricas entre la lógica 1172, 1174. El puente 1182 puede ser una estructura de interconexión densa que proporciona una ruta para señales eléctricas. El puente 1182 puede incluir un sustrato de puente compuesto de vidrio o un material semiconductor adecuado. 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 de lógica en una o más pastillas. La una o más pastillas pueden conectarse mediante cero o más puentes, debido a que el puente 1182 puede excluirse cuando la lógica se incluye en una única pastilla. 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 ejemplares y procesadores de gráficos asociados que pueden fabricarse utilizando uno o más núcleos IP, según diversas realizaciones descritas en el presente documento. Además de lo que se ilustra, 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 chip 1200 ejemplar que puede fabricarse utilizando uno o más núcleos IP, según 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 ejemplares para su uso dentro de un SoC, de acuerdo con realizaciones descritas en este documento. LaFigura 13Ailustra un procesador de gráficos 1310 ejemplar de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP, según una realización. LaFigura 13Bilustra un procesador de gráficos 1340 ejemplar adicional de un circuito integrado de sistema en chip que puede fabricarse utilizando uno o más núcleos IP, según 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 sombreado 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 sombreado 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 sombreado 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 primitiva y de vértice 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 sombreado de fragmentos según se proporciona en la API de OpenGL, que pueden usarse para realizar operaciones similares como un programa de sombreado de píxeles como se proporciona en la API de Direct 3D.
El procesador de gráficos 1310 incluye adicionalmente una o varias unidades de gestión de memoria (MMU) 1320A-1320B, memoria o memorias caché 1325A-1325B e interconexión o interconexiones de circuito 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, la una o más MMU 1320A-1320B pueden estar sincronizadas con otras MMU dentro del sistema, incluyendo una o más MMU asociadas con el 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 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, memorias caché 1325A-1325B e 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 subprocesos para despachar subprocesos de ejecución a uno o más núcleos de sombreador 1355A-1355N y una unidad de mosaico 1358 para acelerar las operaciones de mosaico para el renderizado basado en mosaicos, 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 ejemplar adicional de acuerdo con las realizaciones descritas en este 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 memoria caché de instrucciones compartidas 1402, una unidad de textura 1418 y una memoria caché/compartida 1420 que son comunes a los recursos de ejecución dentro del núcleo de gráficos 1400. El núcleo de gráficos 1400 puede incluir múltiples segmentos 1401A-1401N o particiones para cada núcleo, y un procesador de gráficos puede incluir múltiples instancias del núcleo de gráficos 1400. Los segmentos 1401A-1401N pueden incluir lógica de soporte que incluye una memoria caché de instrucciones local 1404A-1404N, un planificador de subprocesos 1406A-1406N, un despachador de subprocesos 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 subprocesos de ejecución asociados con estos comandos a un conjunto de agrupaciones de cálculo 1436A-1436H. Las agrupaciones de cálculo 1436A-1436H comparten una memoria caché 1438. La memoria caché 1438 puede servir como memoria caché de nivel superior para memorias caché dentro de las agrupaciones de cálculo 1436A-1436H.
La GPGPU 1430 incluye la memoria 14434A-14434B acoplada con las agrupaciones de cálculo 1436A-1436H mediante un conjunto de controladores de memoria 1442A-1442B. En diversas realizaciones, la memoria 1434A-1434B puede incluir diversos tipos de dispositivos de memoria, que incluyen memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como la memoria de acceso aleatorio de gráficos sincrónica (SGRAM), que incluye la 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 cálculo. El mecanismo de comunicación usado por la agrupación de cálculo para la sincronización y el intercambio de datos varía a lo largo de las realizaciones. En una realización, las múltiples instancias de la GPGPU 1430 se comunican a través de la interfaz de anfitrión 1432. En una realización, la GPGPU 1430 incluye un concentrador de E/S 1439 que acopla la GPGPU 1430 con un enlace de GPU 1440 que permite una conexión directa a otras instancias de la GPGPU. En una realización, el enlace de GPU 1440 está acoplado a un puente GPU a GPU dedicado que permite la comunicación y sincronización entre múltiples instancias de la GPGPU 1430. En una realización, el enlace de GPU 1440 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPU o procesadores paralelos. En una realización, las múltiples instancias de la GPGPU 1430 están ubicadas en sistemas de procesamiento de datos separados y se comunican a través de un dispositivo de red al que se puede acceder a través de la interfaz de anfitrión 1432. En una realización, el enlace de GPU 1440 puede estar configurado para posibilitar una conexión a un procesador anfitrión además de o como una alternativa a la interfaz de anfitrión 1432.
Aunque la configuración ilustrada de la GPGPU 1430 puede configurarse para entrenar redes neuronales, una realización proporciona una configuración alternativa de la GPGPU 1430 que puede configurarse para el despliegue dentro de una plataforma de inferencia de alto rendimiento o de baja potencia. En una configuración de inferencia, la GPGPU 1430 incluye menos de las agrupaciones de cálculo 1436A-1436H 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 inferencia de la GPGPU 1430 puede soportar las instrucciones específicas de inferencia. Por ejemplo, una configuración de inferencia puede proporcionar soporte para una o más instrucciones de producto escalar de 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 (CNN); sin embargo, los principios subyacentes de la invención no se limitan a una implementación de CNN. En dicha implementación, los datos de entrenamiento se producen con entradas de bajo recuento de muestras y verdad fundamental. La CNN 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 CNN de eliminación de ruido en películas pasadas con escenas en tierra y luego intentó usar la CNN 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 trama 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 trama, 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 CNN) 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, esta realización elige una o más regiones en cada fotograma, denominadas aquí como "nuevas regiones de referencia" 1602 que se renderizan con un alto recuento de muestras en un memoria intermedia de alto recuento de muestras 1604 independiente. 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.
Un procedimiento de acuerdo con una realización de la invención se ilustra en laFigura 19. 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 CNN, por ejemplo, esto puede implicar actualizar los pesos asociados con la CNN.
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 (CNN) 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 ilustrativas incluyen convoluciones de tipo tensor, funciones de activación y agrupamiento, que son operaciones computacionales que se realizan mientras se entrena una red neuronal convolucional (CNN). La estructura de aprendizaje automático 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 pueden interconectarse 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. Mientras que en la realización ilustrada las GPGPU 2506A-D se conectan al procesador 2502 a través del conmutador de interfaz de anfitrión 2504, en una realización el procesador 2502 incluye soporte directo para los enlaces de GPU 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 las realizaciones descritas en el presente documento se puede configurar para realizar los tipos de procesamiento paralelo que son particularmente adecuados para el entrenamiento y la implementación de redes neuronales para el aprendizaje automático. Una red neuronal puede generalizarse como una red de funciones que tienen una relación de grafo. Como es bien sabido en 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 (CNN). Una CNN 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 CNN 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 CNN están organizados en un conjunto de "filtros" (detectores de características inspirados por los campos receptivos encontrados en la retina), y la salida de cada conjunto de filtros se propaga a nodos en capas sucesivas de la red. Los cálculos para una CNN incluyen 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 neurona!. 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, CNN 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 limitativas en cuanto a cualquier realización específica descrita en el presente documento y los conceptos ilustrados pueden aplicarse, de manera general, a redes neuronales profundas y técnicas de aprendizaje automático en general.
Las redes neuronales ejemplares descritas anteriormente se pueden utilizar para realizar aprendizaje profundo. El aprendizaje profundo es aprendizaje automático que utiliza 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 CNN. Como se muestra en laFigura 26, una CNN 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 CNN utilizan capas completamente conectadas. Por ejemplo, en algunas implementaciones, la capa convolucional 2606 puede generar una salida para la CNN.
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 CNN se escale para procesar imágenes grandes.
LaFigura 27ilustra etapas de cálculo ejemplares dentro de una capa convolucional de una CNN. La entrada a una capa convolucional 2712 de una CNN 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 CNN.
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
¡/O ¡
(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 CNN 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 CNN y RNN básicas descritas, pueden habilitarse variaciones en esas redes. Una variante de RNN ilustrativa es la RNN de memoria a corto plazo larga (LSTM). Las RNN 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 CNN es una red de creencia profunda convolucional, que tiene una estructura similar a una CNN y se entrena de una manera similar a una red de creencia profunda. Una red de 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 neuronal 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 cómputo. 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 anteriormente para 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 CNN 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 cálculo tales como una configuración de bajo consumo de las agrupaciones de cálculo DPLAB06A-DPLAB06H dentro de la unidad de procesamiento de gráficos de propósito general altamente paralelo DPLAB00. Las agrupaciones de cálculo 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 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 subprocesos 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 subprocesos 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 subprocesos 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 interno de una matriz N x N x N multiplicada, 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 mosaicos y se carga al menos una columna de una segunda matriz 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 de 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 subproceso. 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 de rayos. La unidad de intersección genera una respuesta de "impacto", "ningún impacto" o "múltiples impactos", que proporciona al subproceso 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 una realización particular descrita 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 una realización, 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 de 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 rayo-primitiva.
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 ejemplar 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 ejemplar en la que un motor de trazado de rayos 3310 de una GPU 3320 implementa las técnicas de trazado de rayos descritas en este 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 refracted Offset; //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 procedimiento 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 subprocesos (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.
TABLA A
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 (EU) de instrucción única y múltiples datos (SIMD) y/o instrucción única y múltiples subprocesos (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/EU SIMD/SIMT 4001. Los núcleos/EU 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/EU 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/EU 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/EU 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 subproceso 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/EU 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 subproceso 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 subproceso 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 mencionó, 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 los 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/EU SIMD/SIMT 4001 a veces se denominan simplemente en este documento "núcleos", "núcleos SIMD", "EU" 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,n paracrear un lote SIMD que es lanzado por el planificador 4007 para la ejecución SIMD en los núcleos/EU 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.
PROCESAMIENTO DE PRIMITIVAS DE CUADRÍCULA CON MÁSCARAS DE BITS
Una realización de la invención comprende un circuito de trazado de rayos que interseca uno o más rayos con una cuadrícula de tamaño fijo de N x M triángulos (que tienen (N+1) x (M+1) vértices) u otras primitivas. Cada cuadrícula está asociada con, o contiene una máscara de bits N x M donde cada bit indica si se debe ejecutar o no una prueba de intersección de rayo-triángulo con el triángulo correspondiente. Los triángulos cuyo bit correspondiente en la máscara de bits no esté establecido se ignorarán para operaciones de trazado de rayos posteriores.
LaFigura 45ilustra un ejemplo de una primitiva de cuadrícula de este tipo 4501A que comprende una pluralidad de triángulos y una máscara de bits 4503 que contiene un bit asociado con cada triángulo. Un valor de bit establecido (1) significa que el triángulo se utilizará para operaciones de trazado de rayos posteriores, mientras que un valor de bit que no esté establecido (0) significa que el triángulo se ignorará para operaciones de trazado de rayos posteriores. La primitiva de cuadrícula 4501B muestra el resultado donde se ignora/descarta un conjunto de triángulos 4502. Por lo tanto, cuando se comprueba la intersección de un rayo 4502 con triángulos en la primitiva de cuadrícula 4501B, los triángulos asociados con valores de 0 en la máscara de bits 4503 no se procesan.
Representar geometría triangulada densa y regular con cuadrículas pequeñas de tamaño fijo es muy eficiente en términos de memoria, ya que no es necesario almacenar información de adyacencia de triángulos (índices de triángulos) (es decir, porque la triangulación de la cuadrícula es proporcionada implícitamente por el diseño de vértices regular). Realizar una prueba de intersección de rayo-primitiva de cuadrícula simplemente requiere iterar sobre todos los triángulos en la cuadrícula y realizar (ya sea de manera secuencial o en paralelo) pruebas de intersección de rayo y triángulo.
LaFigura 46ilustra un motor de trazado de rayos 4610 ejecutado en una GPU 4005 que incluye soporte para la generación y el cruce/intersección de primitivas de cuadrícula. En particular, en esta realización, el circuito de generación de primitivas de cuadrícula 4601 genera primitivas de cuadrícula que comprenden una pluralidad de triángulos (u otras primitivas) y una máscara de bits asociada. Con referencia a laFigura 45, en una realización, el circuito de generación de primitivas de cuadrícula 4601 forma una primitiva de cuadrícula en la que múltiples triángulos u otras primitivas comparten lados y vértices para reducir los requisitos de almacenamiento y procesamiento de datos.
La unidad de cruce/intersección 4005 de esta realización incluye un circuito de intersección de primitivas de cuadrícula 4600 para procesar las primitivas de cuadrícula de acuerdo con la máscara de bits como se describe en este documento. Por ejemplo, en una realización, el circuito de intersección de primitivas de cuadrícula 4600 ignora los triángulos asociados con bits establecidos en un valor particular (por ejemplo, bits establecidos en 0) y realiza pruebas de cruce e intersección para los triángulos restantes (por ejemplo, triángulos con bits establecidos en 1).
En una realización, los triángulos que se van a procesar según la máscara de bits se asocian con diferentes nodos dentro de la jerarquía de volumen delimitador (BVH) 4605. En una realización, el circuito de procesamiento de BVH 4607 genera de manera eficiente una BVH 4505 sobre los triángulos en cada primitiva de cuadrícula en función de la máscara de bits (es decir, ignorando los triángulos asociados con bits de máscara de bits no establecidos). El circuito de intersección de primitivas de cuadrícula 4600 puede entonces utilizar la BVH 4505 para aumentar la eficiencia de las pruebas de intersección de rayo-cuadrícula realizadas al atravesar primero el rayo o los rayos a través de la BVH. Sin embargo, debe tenerse en cuenta que no se requieren técnicas de generación de BVH particulares para cumplir con los principios subyacentes de la invención.
En una realización, el circuito de intersección de primitivas de cuadrícula 4600 prueba un rayo en busca de intersecciones con uno o más triángulos de primitivas de cuadrícula cuando se alcanza un nodo de hoja de la BVH. Como se mencionó, las jerarquías de volúmenes delimitadores (BVH) se utilizan comúnmente para mejorar la eficiencia con la que se realizan las operaciones en primitivas de gráficos y otros objetos de 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" en la parte inferior 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.
Los rayos atraviesan una BVH para reducir la cantidad de intersecciones de rayos y primitivas. 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 a través del primer nodo hijo de la BVH pero no del segundo nodo hijo, entonces no es necesario probar el rayo con respecto a ninguna primitiva incluida en el segundo nodo hijo. De esta manera, una BVH proporciona un mecanismo eficiente para reducir la cantidad de intersecciones de rayos con primitivas.
En una realización, el circuito de intersección de primitivas de cuadrícula 4600 genera datos de impacto 4665 que indican las intersecciones detectadas entre rayos y triángulos (u otras primitivas) que forman la primitiva de cuadrícula 4501A. En una realización, debido a que una parte de los triángulos se ignora como resultado de la máscara de bits 4503, la cantidad de operaciones de prueba de intersección y cruce se reduce significativamente.
MEMORIA CACHÉ DE PÁGINA PARA ENTORNOS DE MÚLTIPLES GPU
Una realización de la invención incluye una unidad de gestión de memoria a nivel de sistema para controlar la migración de páginas de memoria en entornos de múltiples GPU, lo que permite que todas las GPU y/o CPU trabajen eficientemente dentro de las mismas regiones de memoria. En algunas implementaciones, dicha región se extiende a través de múltiples memorias físicas de GPU/CPU. Por ejemplo, todas las GPU y los núcleos de CPU en el sistema pueden compartir el mismo espacio de dirección virtual, que se asigna a través de las múltiples memorias físicas de GPU y núcleos de CPU. Una realización de la MMU o SMMU a nivel de sistema también puede realizar traducciones de direcciones en nombre de las GPU y CPU solicitantes para traducir direcciones virtuales a direcciones físicas de páginas de memoria. Alternativamente, las GPU y CPU pueden realizar las traducciones virtuales a físicas (por ejemplo, con una MMU de GPU/CPU local) y generar solicitudes de memoria a la MMU a nivel de sistema con direcciones de memoria física.
La unidad de hardware de administración de memoria propuesta administra la migración de páginas a través de múltiples entidades de procesamiento de GPU/CPU. Estas entidades pueden incluir cualquier subdivisión o agrupación lógica o física de recursos de procesamiento, algunos ejemplos de los cuales incluyen chiplets, mosaicos de GPU, núcleos de CPU, segmentos de GPU/CPU, GPU/CPU completas o grupos de núcleos de GPU/CPU, todos los cuales comparten el espacio de dirección virtual común.
En una realización, cada entidad de procesamiento puede acceder a la memoria ubicada en la memoria local de otra entidad de procesamiento. En una realización, dicho acceso puede desencadenar una migración/transferencia de página desde una primera memoria física local a una entidad de GPU/CPU a una segunda memoria física local a otra entidad de GPU/CPU (por ejemplo, la que accede a la página).
LaFigura 47ilustra un ejemplo que muestra una memoria de GPU04700 asociada a la GPU0, una memoria de GPU1 4701 asociada a la GPU1 y una memoria de GPU M 4702 asociada a la GPU M. Cuando una GPU accede a la memoria ubicada en la memoria de otra GPU, la MMU de gráficos 4712 administra esta transferencia mientras realiza un seguimiento de qué página se ha transferido a qué GPU. También almacena en caché el contenido de las páginas a las que se accede con más frecuencia dentro de una memoria caché de página de GPU administrada por la MMU 4710, evitando así transferencias costosas de GPU a GPU.
El tamaño de una página normalmente variará entre 4k y varios MB. En una realización, al escribir en la memoria caché de páginas 4710, solo se permite que una única GPU "posea" la página mientras realiza la escritura, mientras que las lecturas de una página se replican en la memoria local en muchas entidades de GPU (por ejemplo, memorias de GPU 4700-4702).
LaFigura 48ilustra una realización en la que el mismo mecanismo de coherencia de páginas se extiende a otros agentes a nivel de sistema, incluidos los núcleos de CPU. Si bien solo se ilustra una única memoria de núcleo de CPU (core0), los mismos principios se pueden extender a todos los demás núcleos y a todos los demás agentes del sistema. Por ejemplo, los dispositivos de entrada/salida (E/S) y otros componentes de procesamiento, tales como los procesadores de señales digitales (DSP), también pueden estar acoplados a la MMU 4712 del sistema y aprovechar la memoria caché de páginas administrada por la MMU 4710.
Una realización de la MMU 4712 realiza una preextracción de páginas asincrónica en la memoria caché de páginas administrada por la MMU 4710 si detecta un determinado patrón de acceso a la memoria. Como se ilustra en laFigura 49, esta realización de la MMU 4712 incluye un preextractor de páginas 4950 que preextrae páginas desde la memoria del sistema 4755 a la memoria caché de páginas administrada por la MMU 4710 del sistema en función de los patrones de acceso detectados. Una realización del preextractor de páginas 4950 incluye circuitos/lógica de detección de patrones de acceso 4951 para detectar tipos específicos de patrones de acceso e informar al preextractor de páginas 4950 cuando se detecta uno de los patrones de acceso.
A modo de ejemplo, y no como limitación, una realización del circuito/lógica de detección de patrones de acceso 4951 observa y evalúa patrones de errores de memoria local para solicitudes de datos generadas desde los núcleos de GPU y/o CPU. Basándose en esta evaluación, realiza predicciones sobre errores futuros basándose en patrones recurrentes. A modo de ejemplo, y no como limitación, los patrones recurrentes pueden comprender secuencias de direcciones separadas por un valor de paso constante. Si se detectan dichos patrones, entonces una realización del preextractor de páginas 4950 intenta preextraer automáticamente páginas futuras.
Una realización del preextractor de páginas 4950 es configurable (por ejemplo, a través de un valor de registro de control) en diferentes niveles de agresividad al preextraer. Por ejemplo, un primer valor puede indicar que no se realiza una preextracción, un segundo valor puede indicar que se realiza una preextracción de hasta N páginas, un tercer valor puede indicar que se realiza una preextracción de hasta M páginas (donde M > N), etc.
En una realización, la preextracción también puede ser invocada por una programación explícita del usuario, tal como una instrucción de preextracción que haga que la MMU 4712 realice una preextracción asincrónica de páginas adicionales, ya que el usuario espera que se acceda a ellas pronto.
En laFigura 50se ilustra un procedimiento de acuerdo con una realización de la invención. El procedimiento puede implementarse dentro del contexto de varias arquitecturas de procesador y sistema descritas en este documento, pero no se limita a ninguna arquitectura en particular.
En 5001, se asigna un espacio de dirección virtual a través de una pluralidad de dispositivos de memoria física, incluidas memorias de GPU locales y memorias de CPU locales. A modo de ejemplo, las memorias de GPU locales pueden comprender memorias GDDR y las memorias de CPU pueden comprender una memoria de acceso aleatorio (RAM) del sistema o una memoria de alto ancho de banda (HBM).
En 5002, se gestiona el acceso a las páginas de memoria por parte de las GPU y CPU. En una realización de realización, la gestión incluye la implementación de una memoria caché de páginas a nivel de sistema que almacena las páginas solicitadas por las GPU y las CPU. En 5003, se monitorizan y evalúan los patrones de acceso a las páginas de memoria. Los resultados de la evaluación pueden comprender ciertos patrones de acceso detectados que se pueden utilizar para anticipar las páginas que se solicitarán en transacciones posteriores. Estos datos pueden almacenarse localmente (por ejemplo, en una memoria caché o memoria intermedia local) para que puedan usarse posteriormente con fines comparativos.
Si se detecta un patrón de acceso particular, determinado en 5004, entonces las páginas asociadas con el patrón detectado se preextraen en 5005. Por ejemplo, las páginas pueden recuperarse de la memoria del sistema y almacenarse en una memoria caché de páginas accesible por las GPU y las CPU (por ejemplo, cuando las secuencias de direcciones están separadas por un valor de paso constante, pueden preextraerse las páginas posteriores a un primer conjunto de páginas). En 5006, las páginas preextraídas se proporcionan desde la memoria caché de páginas a nivel del sistema a una GPU, CPU y/u otro componente a nivel del sistema solicitante (por ejemplo, un DSP, un dispositivo de E/S, una interfaz de red, etc.).
En las realizaciones descritas anteriormente, el término "motor" o "módulo" o "lógica" puede referirse a, ser parte de, o incluir un circuito integrado específico de la aplicación (ASIC), un circuito electrónico, un procesador (compartido, dedicado o en grupo) y/o una memoria (compartida, dedicada o en grupo) que ejecutan uno o más programas de software o firmware, un circuito de lógica combinacional y/u otros componentes adecuados que proporcionan 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 una realización 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.

Claims (13)

REIVINDICACIONES
1. Aparato que comprende:
un generador de primitivas de cuadrícula (4601) configurado para generar una primitiva de cuadrícula (4501A, 4501B) que comprende una pluralidad de primitivas interconectadas adyacentes;
un generador de máscara de bits configurado para generar una máscara de bits (4503) asociada con la primitiva de cuadrícula (4501A, 4501B), comprendiendo la máscara de bits (4503) una pluralidad de valores de máscara de bits, estando cada valor de máscara asociado con una primitiva de la primitiva de cuadrícula (4501A, 4501B); y un motor de trazado de rayos (3310, 3730, 3731, 4610) que comprende lógica de hardware de cruce e intersección configurada para realizar operaciones de cruce e intersección en las que los rayos atraviesan una estructura de datos de aceleración jerárquica y se identifican intersecciones entre los rayos y una o más de las primitivas interconectadas adyacentes,
en el que el motor de trazado de rayos (3310, 3730, 3731,4610) está configurado para leer la máscara de bits (4503) para determinar un primer conjunto de primitivas de la primitiva de cuadrícula (4501A, 4501B) en las que realizar las operaciones de cruce e intersección y un segundo conjunto de primitivas de la primitiva de cuadrícula (4501A, 4501B) en las que no se realizarán las operaciones de cruce e intersección, y
la lógica de hardware de cruce e intersección está configurada para realizar una pluralidad de pruebas de intersección de rayo-primitiva en paralelo en una pluralidad del primer conjunto de primitivas.
2. Aparato, según la reivindicación 1, en el que un primer valor de bit en la máscara de bits (4503) indica que las operaciones de cruce e intersección se deben realizar en una primitiva correspondiente y un segundo valor de bit en la máscara de bits (4503) indica que las operaciones de cruce e intersección no se deben realizar en la primitiva correspondiente.
3. Aparato, según la reivindicación 1 o 2, en el que el generador (4601) de primitivas de cuadrícula (4501A, 4501B) está configurado para identificar primitivas que se deben incluir en la primitiva de cuadrícula (4501A, 4501B) en función de la densidad medida y/o la repetición periódica de las primitivas que estén por encima de uno o más valores umbral.
4. Aparato, según la reivindicación 3, en el que el generador (4601) de primitivas de cuadrícula (4501A, 4501B) está configurado para almacenar al menos una parte de las primitivas en la memoria sin índices, y en el que las ubicaciones de memoria de las primitivas se deben determinar de manera implícita en función de las relaciones espaciales entre las primitivas dentro de la primitiva de cuadrícula (4501 A, 4501B).
5. Aparato, según la reivindicación 1 o 4, en el que la estructura de datos de aceleración jerárquica comprende una jerarquía de volumen delimitador, BVH (4300, 4301,4302, 4605).
6. Aparato, según la reivindicación 5, que comprende, además:
lógica de hardware de procesamiento de BVH configurada para generar una BVH (4300, 4301,4302, 4605) sobre las primitivas en cada primitiva de cuadrícula (4501A, 4501B) en función de la máscara de bits (4503).
7. Aparato, según la reivindicación 6, en el que la lógica de hardware de procesamiento de BVH está configurada para generar la BVH (4300, 4301,4302, 4605) utilizando primitivas asociadas con bits en la máscara de bits establecida en un primer valor y para ignorar triángulos asociados con bits en la máscara de bits establecida en un segundo valor.
8. Procedimiento implementado por ordenador que comprende:
generar una primitiva de cuadrícula (4501A, 4501B) que comprende una pluralidad de primitivas interconectadas adyacentes;
generar una máscara de bits (4503) asociada con la primitiva de cuadrícula (4501A, 4501B), comprendiendo la máscara de bits (4503) una pluralidad de valores de máscara de bits, cada valor de máscara asociado con una primitiva de la primitiva de cuadrícula (4501A, 4501B);
realizar operaciones de cruce e intersección en las que los rayos atraviesan una estructura de datos de aceleración jerárquica e intersecciones entre los rayos y una o más de las primitivas interconectadas adyacentes identificadas, leer la máscara de bits (4503) para determinar un primer conjunto de primitivas a partir de la primitiva de cuadrícula (4501A, 4501B) en el que realizar las operaciones de cruce e intersección y un segundo conjunto de primitivas a partir de la primitiva de cuadrícula (4501A, 4501B) en el que no se realizarán las operaciones de cruce e intersección, y realizar una pluralidad de pruebas de intersección de rayo-primitiva en paralelo en una pluralidad del primer conjunto de primitivas.
9. Procedimiento, según la reivindicación 8, en el que un primer valor de bit en la máscara de bits (4503) indica que las operaciones de cruce e intersección se deben realizar en una primitiva correspondiente y un segundo valor de bit en la máscara de bits (4503) indica que las operaciones de cruce e intersección no se deben realizar en la primitiva correspondiente.
10. Procedimiento, según la reivindicación 8 o 9, en el que las primitivas que se van a incluir en la primitiva de cuadrícula (4501 A, 4501B) se identifican en función de la densidad medida y/o la repetición periódica de las primitivas que están por encima de uno o más valores umbral.
11. Procedimiento, según la reivindicación 10, en el que al menos una parte de las primitivas se almacenan en la memoria sin índices, y en el que las ubicaciones de memoria de las primitivas se van a determinar de forma implícita en función de las relaciones espaciales entre las primitivas dentro de la primitiva de cuadrícula (4501A, 4501B).
12. Procedimiento, según la reivindicación 8 u 11, en el que la estructura de datos de aceleración jerárquica comprende una jerarquía de volumen delimitador, BVH (4300, 4301,4302, 4605).
13. Procedimiento, según la reivindicación 12, que comprende, además:
generar una BVH (4300, 4301, 4302, 4605) sobre las primitivas en cada primitiva de cuadrícula (4501A, 4501B) basándose en la máscara de bits (4503).
ES19202161T 2018-12-28 2019-10-09 Apparatus and method for ray tracing with grid primitives Active ES2997192T3 (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US16/236,041 US11062500B2 (en) 2018-12-28 2018-12-28 Apparatus and method for ray tracing with grid primitives

Publications (1)

Publication Number Publication Date
ES2997192T3 true ES2997192T3 (en) 2025-02-14

Family

ID=68242436

Family Applications (1)

Application Number Title Priority Date Filing Date
ES19202161T Active ES2997192T3 (en) 2018-12-28 2019-10-09 Apparatus and method for ray tracing with grid primitives

Country Status (5)

Country Link
US (2) US11062500B2 (es)
EP (1) EP3675052B1 (es)
CN (1) CN111383315A (es)
ES (1) ES2997192T3 (es)
PL (1) PL3675052T3 (es)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11508110B2 (en) 2020-02-03 2022-11-22 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by performing geometry analysis before rendering
US11080814B1 (en) 2020-02-03 2021-08-03 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by pretesting against screen regions using prior frame information
US12112394B2 (en) * 2020-02-03 2024-10-08 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by pretesting against screen regions using configurable shaders
US11321800B2 (en) 2020-02-03 2022-05-03 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by region testing while rendering
US11120522B2 (en) 2020-02-03 2021-09-14 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by subdividing geometry
US11514549B2 (en) 2020-02-03 2022-11-29 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by generating information in one rendering phase for use in another rendering phase
US11263718B2 (en) 2020-02-03 2022-03-01 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by pretesting against in interleaved screen regions before rendering
US11170461B2 (en) 2020-02-03 2021-11-09 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by performing geometry analysis while rendering
US20220051094A1 (en) * 2020-08-14 2022-02-17 Nvidia Corporation Mesh based convolutional neural network techniques
US11995767B2 (en) 2020-08-17 2024-05-28 Intel Corporation Apparatus and method for compressing ray tracing acceleration structure build data
US12002145B2 (en) 2020-08-17 2024-06-04 Intel Corporation Apparatus and method for efficient graphics processing including ray tracing
US11232544B1 (en) * 2020-10-09 2022-01-25 Nvidia Corporation History clamping for denoising dynamic ray-traced scenes using temporal accumulation
KR20230070759A (ko) * 2021-11-15 2023-05-23 한국전자통신연구원 자원 중심 네트워크의 메모리 주소 할당 방법 및 장치
US11908065B2 (en) * 2022-03-21 2024-02-20 Advanced Micro Devices, Inc. Stack-based ray traversal with dynamic multiple-node iterations
US11474720B1 (en) * 2022-04-04 2022-10-18 Illuscio, Inc. Systems and methods for implementing a custom heap memory manager to optimize compute kernel performance
US20240203033A1 (en) * 2022-12-14 2024-06-20 Advanced Micro Devices, Inc. Intersectable instance nodes for ray tracing acceleration structure nodes
US12307577B2 (en) * 2022-12-27 2025-05-20 Advanced Micro Devices, Inc. Traversing multiple regions of a bounding volume hierarchy in parallel
US20240282055A1 (en) * 2023-02-16 2024-08-22 Qualcomm Incorporated Mesh gpu codec for real-time streaming
CN119850838B (zh) * 2024-12-25 2025-09-30 北京航空航天大学 基于偏振信息的三维模型生成方法、装置、设备和介质

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6879324B1 (en) * 1998-07-14 2005-04-12 Microsoft Corporation Regional progressive meshes
US7952583B2 (en) * 2000-06-19 2011-05-31 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
US8581914B2 (en) 2008-09-30 2013-11-12 Microsoft Corporation Real-time kd-tree construction on graphics hardware
GB201104066D0 (en) * 2011-03-09 2011-04-20 Imagination Tech Ltd Compression of a tessellated primitive index list in a tile rendering system
US9245383B2 (en) * 2012-08-17 2016-01-26 Google Inc. Accelerated three-dimensional intersection testing using compressed volumes
GB2511817A (en) * 2013-03-14 2014-09-17 Imagination Tech Ltd Rendering in computer graphics systems
US10331632B2 (en) * 2013-06-10 2019-06-25 Nvidia Corporation Bounding volume hierarchies through treelet restructuring
US9817919B2 (en) * 2013-06-10 2017-11-14 Nvidia Corporation Agglomerative treelet restructuring for bounding volume hierarchies
US9547932B2 (en) * 2013-06-10 2017-01-17 Nvidia Corporation Splitting bounding volumes of primitives
US10229526B2 (en) * 2014-03-13 2019-03-12 Imagination Technologies Limited Rendering of soft shadows
US10083541B2 (en) * 2014-03-13 2018-09-25 Imagination Technologies Limited Object illumination in hybrid rasterization and ray traced 3-D rendering
US10235338B2 (en) * 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
TW201805894A (zh) * 2016-05-06 2018-02-16 國立臺灣大學 三維渲染方法以及三維繪圖處理裝置
US10388059B2 (en) * 2016-10-03 2019-08-20 Nvidia Corporation Stable ray tracing

Also Published As

Publication number Publication date
US20200211264A1 (en) 2020-07-02
EP3675052A1 (en) 2020-07-01
US20210407177A1 (en) 2021-12-30
CN111383315A (zh) 2020-07-07
PL3675052T3 (pl) 2025-01-20
EP3675052B1 (en) 2024-09-04
US11062500B2 (en) 2021-07-13

Similar Documents

Publication Publication Date Title
ES2997192T3 (en) Apparatus and method for ray tracing with grid primitives
US12182900B2 (en) Unified architecture for BVH construction based on hardware pre-sorting and a parallel, reconfigurable clustering array
ES3034029T3 (en) Cluster of scalar engines to accelerate intersection in leaf node
US12125133B2 (en) Speculative execution of hit and intersection shaders on programmable ray tracing architectures
US12579727B2 (en) Apparatus and method for asynchronous ray tracing
ES3048986T3 (en) Cloud-based realtime raytracing
ES3036704T3 (en) Apparatus and method for ray tracing instruction processing and execution
US12229870B2 (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
US10929948B2 (en) Page cache system and method for multi-agent environments
US12307547B2 (en) Apparatus and method for performing a stable and short latency sorting operation
US11989817B2 (en) Apparatus and method for high quality ray-traced level of detail transitions