ES2907861T3 - Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos - Google Patents

Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos Download PDF

Info

Publication number
ES2907861T3
ES2907861T3 ES19204264T ES19204264T ES2907861T3 ES 2907861 T3 ES2907861 T3 ES 2907861T3 ES 19204264 T ES19204264 T ES 19204264T ES 19204264 T ES19204264 T ES 19204264T ES 2907861 T3 ES2907861 T3 ES 2907861T3
Authority
ES
Spain
Prior art keywords
shader
data
ray
graphics
thread
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
ES19204264T
Other languages
English (en)
Inventor
Gabor Liktor
Karthik Vaidyanathan
Jefferson Amstutz
Atsuo Kuwahara
Michael Doyle
Travis Schluessler
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 ES2907861T3 publication Critical patent/ES2907861T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection

Landscapes

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

Abstract

Un aparato que comprende: unidades de ejecución (EUs) (4001) de datos múltiples de instrucción única (SIMD) o de hilos múltiples de instrucción única (SIMT) para ejecutar sombreadores; circuitos de trazado de rayos para ejecutar un hilo cruce de rayos, comprendiendo el circuito de trazado de rayos: circuitos transversales/de intersección (4005), en respuesta al hilo transversal, para atravesar un rayo a través de una estructura de datos de aceleración que comprende una pluralidad de nodos dispuestos de forma jerárquica y para intersectar el rayo con una primitiva contenida dentro de al menos uno de los nodos; y circuitos diferidos de sombreadores para aplazar y agregar múltiples solicitaciones de sombreadores múltiples resultantes del hilo transversal hasta que se detecte un evento desencadenante particular, en donde los sombreadores múltiples deben enviarse en las unidades EUs (4001) en un solo lote de sombreador tras la detección del evento desencadenante; y circuitos de eliminación de solicitaciones de sombreador para eliminar una o más de las múltiples solicitaciones de sombreadores múltiples al determinarse que una o más de las múltiples solicitaciones de sombreador son innecesarias, en donde el único lote de sombreador debe enviarse sin la una o más solicitaciones de sombreador eliminadas.

Description

DESCRIPCIÓN
Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos ANTECEDENTES CAMPO DE LA INVENCIÓN
La presente invención se refiere, en general, al campo de los procesadores gráficos. Más en particular, la invención se refiere a un aparato y a un método para realizar operaciones de trazado de rayos de forma más eficiente.
DESCRIPCIÓN DE LA TÉCNICA RELACIONADA
El trazado de rayos es una técnica en donde se simula un transporte de luz a través de un renderizado con base física. Ampliamente utilizado en el renderizado cinemático, se consideraba que requería demasiados recursos para el rendimiento en tiempo real hasta hace solamente unos años. Una de las operaciones clave en el trazado de rayos es procesar una consulta de visibilidad para las intersecciones de la rayos-escena conocida como "transversal de rayo" que calcula las intersecciones de la rayos-escena atravesando e intersectando 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 varios dispositivos, pero hasta ahora todas las estructuras de eliminación de ruido existentes funcionan en una sola instancia en una única máquina. Si el renderizado se realiza en varios dispositivos, es posible que no tengan todos los píxeles renderizados accesibles para calcular una parte sin ruido de la imagen.
En Christian Eisenacher et al: "Sombreado diferido clasificado para el seguimiento de la ruta de producción", Rendering, Eurographics Asociation, 2013, se describe un algoritmo ordenado de seguimiento de rutas que aborda la coherencia del cruce de rayos y del sombreado y de las texturas de las escenas. Los rayos se agrupan en primer lugar en función de su dirección. El transversal de escena se realiza para cada rayo por lotes, en donde para cada rayo atravesado se crea una lista de resultados de choques de transversal. Las listas de los rayos atravesados se clasifican, agrupan y se envían de nuevo para que se pueda realizar un sombreado diferido coherente.
Jared Hoberock et al.: "Compactación de flujo para sombreado diferido", HPG '09 Proceedings of the Conference on High Performance Graphics, 2009, describe el uso de algoritmos de programación para aprovechar la eficiencia de SIMD en una GPU.
La invención se define por un aparato y un método según las reivindicaciones independientes. Las formas de realización preferidas están definidas por 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 cuales:
la Figura 1 es un diagrama de bloques de una forma de realización de un sistema informático con un procesador que tiene uno o más núcleos de procesador y procesadores gráficos;
la Figura 2 es un diagrama de bloques de una forma de realización de un procesador que tiene uno o más núcleos de procesador, un controlador de memoria integrado y un procesador gráfico integrado;
la Figura 3 es un diagrama de bloques de una forma de realización de un procesador gráfico que puede ser una unidad discreta de procesamiento de gráficos, o puede ser un procesador gráfico integrado con una pluralidad de núcleos de procesamiento;
la Figura 4 es un diagrama de bloques de una forma de realización de un motor de procesamiento de gráficos para un procesador gráfico;
la Figura 5 es un diagrama de bloques de otra forma de realización de un procesador gráfico;
las Figuras 6A-B ilustran ejemplos de circuitos y de lógica de ejecución;
la Figura 7 ilustra un formato de instrucción de unidad de ejecución de procesador gráfico de conformidad con una forma de realización;
la Figura 8 es un diagrama de bloques de otra forma de realización de un procesador gráfico que incluye una canalización de gráficos, una canalización de medios, un motor de visualización, una lógica de ejecución de hilos y una canalización de salida de renderizado;
la Figura 9A es un diagrama de bloques que ilustra un formato de orden de procesador gráfico de conformidad con una forma de realización;
la Figura 9B es un diagrama de bloques que ilustra una secuencia de órdenes del procesador gráfico según una forma de realización;
la Figura 10 ilustra una arquitectura de software de gráficos, a modo de ejemplo, para un sistema de procesamiento de datos según una forma de realización;
las Figuras 11A-B ilustran un sistema de desarrollo de núcleo de IP, a modo de ejemplo, que puede utilizarse para fabricar un circuito integrado y un conjunto de paquete a modo de ejemplo;
la Figura 12 ilustra un sistema, a modo de ejemplo, en un circuito integrado en chip que puede fabricarse utilizando uno o más núcleos de IP, según una forma de realización;
las Figuras. 13A-B ilustra un procesador gráfico, a modo de ejemplo, de un sistema en un circuito integrado en chip que puede fabricarse utilizando uno o más núcleos de IP;
las Figuras 14A-B ilustran ejemplos de arquitecturas de procesadores gráficos;
la Figura 15 ilustra una forma de realización de una arquitectura para realizar el aprendizaje inicial de una arquitectura de aprendizaje por máquina;
la Figura 16 ilustra una forma de realización en donde un motor de aprendizaje por máquina es objeto de aprendizaje y actualización continua durante el tiempo de ejecución;
la Figura 17 ilustra otra forma de realización en donde un motor de aprendizaje por máquina es objeto de aprendizaje y de actualización continua durante el tiempo de ejecución;
las Figuras 18A-B ilustran formas de realización en las que los datos de aprendizaje por máquina se comparten en una red; y
la Figura 19 ilustra una forma de realización de un método para el aprendizaje de un motor de aprendizaje por máquina; la Figura 20 ilustra una forma de realización en donde los nodos intercambian datos de la zona fantasma para realizar operaciones de eliminación de ruido distribuidas;
la Figura 21 ilustra una forma de realización de una arquitectura en donde las operaciones de renderizado de imágenes y de eliminación de ruido se distribuyen a través de una pluralidad de nodos;
la Figura 22 ilustra detalles adicionales de una arquitectura para operaciones distribuidas de renderizado y eliminación de ruido;
la Figura 23 ilustra un método de conformidad con una forma de realización de la invención;
la Figura 24 ilustra una forma de realización de un método de aprendizaje por máquina;
la Figura 25 ilustra una pluralidad de procesadores gráficos de uso general interconectados;
la Figura 26 ilustra un conjunto de capas convolucionales y capas completamente conectadas para una puesta en práctica de aprendizaje por máquina;
la Figura 27 ilustra una forma de realización de una capa convolucional;
la Figura 28 ilustra un ejemplo de un conjunto de nodos interconectados en una puesta en práctica de aprendizaje por máquina;
la Figura 29 ilustra una forma de realización de una estructura de aprendizaje dentro de la cual una red neuronal aprende utilizando un conjunto de datos de aprendizaje;
la Figura 30A ilustra ejemplos de paralelismo de modelos y paralelismo de datos;
la Figura 30B ilustra un ejemplo de un sistema en un circuito integrado (SoC);
la Figura 31 ilustra un ejemplo de una arquitectura de procesamiento que incluye núcleos de trazado de rayos y núcleos de tensor;
la Figura 32 ilustra un ejemplo de un haz;
la Figura 33 ilustra una forma de realización de un aparato para realizar el trazado de haces;
la Figura 34 ilustra un ejemplo de una jerarquía de haces;
la Figura 35 ilustra un método para realizar el trazado de haces;
la Figura 36 ilustra un ejemplo de un motor de trazado de rayos distribuido;
las Figuras 37-38 ilustran un ejemplo de compresión realizada en un sistema de trazado de rayos;
la Figura 39 ilustra un método de conformidad con una forma de realización de la invención;
la Figura 40 ilustra un aparato de trazado de rayos híbrido a modo de ejemplo;
la Figura 41 ilustra ejemplos de pilas utilizadas para operaciones de trazado de rayos;
la Figura 42 ilustra detalles adicionales para una forma de realización de un aparato de trazado de rayos híbrido; la Figura 43 ilustra un ejemplo de una jerarquía de volumen límite;
la Figura 44 ilustra un ejemplo de una pila de llamadas y de almacenamiento de estado transversal;
la Figura 45 ilustra una forma de realización de un método para transversal e intersección;
las Figuras 46A-B ilustran una forma de realización en donde se requieren múltiples ciclos de envío para ejecutar ciertos sombreadores;
la Figura 47 ilustra una forma de realización en donde un único ciclo de envío ejecuta una pluralidad de sombreadores; y
la Figura 48 ilustra otra forma de realización en donde un único ciclo de envío ejecuta una pluralidad de sombreadores. DESCRIPCIÓN DETALLADA
En la siguiente descripción, con fines explicativos, se exponen numerosos detalles especificados para proporcionar una comprensión completa de las formas de realización de la invención que se describen a continuación. Sin embargo, será evidente para un experto en esta técnica que las formas de realización de la invención se pueden poner en práctica sin algunos de estos detalles especificados. En otros casos, las estructuras y dispositivos bien conocidos se muestran en forma de diagrama de bloques para evitar oscurecer los principios subyacentes de las formas de realización de la invención.
ARQUITECTURAS A MODO DE EJEMPLO DE PROCESADORES DE GRÁFICOS Y TIPOS DE DATOS
Descripción general del sistema
La Figura 1 es un diagrama de bloques de un sistema de procesamiento 100, según una forma de realización. En varias formas de realización, el sistema 100 incluye uno o más procesadores 102 y uno o más procesadores gráficos 108, y puede ser un sistema de sobremesa de un único procesador, un sistema de estación de trabajo multiprocesador o un sistema de servidor que tenga una gran cantidad de procesadores 102 o núcleos de procesador 107. En una forma de realización, el sistema 100 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un circuito integrado (SoC) para uso en dispositivos móviles, portátiles o integrados.
En una forma de realización, el sistema 100 puede incluir, o incorporarse dentro de una plataforma de juegos basada en servidor, una consola de juegos, que incluye una consola de juegos y multimedia, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos online. En algunas formas de realización, el sistema 100 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tableta electrónica o un dispositivo móvil de Internet. El sistema de procesamiento 100 también puede incluir, acoplarse o integrarse dentro de un dispositivo portátil, tal como un dispositivo portátil de reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas formas de realización, 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 formas de realización, uno o más procesadores 102 incluyen, cada uno, uno o más núcleos de procesador 107 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para el sistema y el software del usuario. En algunas formas de realización, cada uno o más núcleos de procesador 107 está configurado para procesar un conjunto de instrucciones especificado 109. En algunas formas de realización, 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 a través de una Palabra de Instrucción muy Larga (VLIW). Multi-núcleo de procesador 107 pueden procesar, cada uno, un conjunto de instrucciones diferente 109, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo del procesador 107 también puede incluir otros dispositivos de procesamiento, tales como un Procesador de Señal Digital (DSP).
En algunas formas de realización, el procesador 102 incluye memoria caché 104. Dependiendo de la arquitectura, el procesador 102 puede tener una memoria caché interna única o múltiples niveles de memoria caché interna. En algunas formas de realización, la memoria caché se comparte entre varios componentes del procesador 102. En algunas formas de realización, el procesador 102 también utiliza una memoria caché externa (por ejemplo, una memoria caché de nivel 3 (L3) o memoria caché de último nivel (LLC)) (no ilustrada), que puede compartirse entre los núcleos de procesador 107 utilizando técnicas conocidas de coherencia de memoria caché. Un fichero de registro 106 se incluye de manera adicional 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 instrucción). Algunos registros pueden ser registros de uso general, mientras que otros registros pueden ser especificados del diseño del procesador 102.
En algunas formas de realización, uno o más procesador(s) 102 está acoplado con uno o más bus(es) 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 forma de realización, puede ser un bus de procesador, tal como una versión del bus de interfaz de medios directos (DMI). Sin embargo, los buses del procesador no se limitan al bus DMI y pueden incluir uno o más buses de interconexión de componentes periféricos (p. ej., PCI, PCI Express), buses de memoria u otros tipos de buses de interfaz. En una forma de realización, el procesador(es) 102 incluye 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 a través de un bus de E/S local.
El dispositivo de memoria 120 puede ser un dispositivo de memoria de acceso aleatorio dinámico (DRAM), un dispositivo de memoria de acceso aleatorio estático (SRAM), un dispositivo de memoria instantánea, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tenga un rendimiento adecuado para servir como memoria de proceso. En una forma de realización, el dispositivo de memoria 120 puede funcionar como memoria de sistema para el sistema 100, para almacenar datos 122 e instrucciones 121 para utilizar cuando uno o más procesadores 102 ejecutan una aplicación o proceso. El controlador de memoria 116 también se acopla con un procesador gráfico externo opcional 112, que puede comunicarse con uno o más procesadores gráficos 108 en los procesadores 102 para realizar operaciones de gráficos y medios. En algunas formas de realización, un dispositivo de visualización 111 puede conectarse al (a los) procesador(es) 102. El dispositivo de visualización 111 puede ser uno o más dispositivos de visualización internos, tales como en un dispositivo electrónico móvil o en un dispositivo portátil o en un dispositivo de visualización externo conectado a través de una interfaz de visualización (por ejemplo, DisplayPort, etc.). En una forma de 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 uso en aplicaciones de realidad virtual (VR) o en aplicaciones de realidad aumentada (AR).
En algunas formas de realización, 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 sin limitación, 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 (p. ej., unidad de disco duro, memoria instantánea, etc.). El dispositivo de almacenamiento de datos 124 puede conectarse a través de una interfaz de almacenamiento (p. ej., SATA) o a través de un bus periférico, tal como un bus de interconexión de componentes periféricos (p. ej., PCI, PCI Express). Los sensores táctiles 125 pueden incluir sensores de pantalla táctil, sensores de presión o sensores de huellas dactilares. El transceptor inalámbrico 126 puede ser un transceptor Wi-Fi, un transceptor Bluetooth o un transceptor de red móvil tal como un transceptor 3G, 4G o de Evolución a Largo Plazo (LTE). La interfaz de firmware 128 permite la comunicación con el firmware del sistema y puede ser, por ejemplo, una interfaz de firmware extensible unificada (UEFI). El controlador de red 134 puede habilitar una conexión de red a una red cableada. En algunas formas de realización, un controlador de red de alto rendimiento (no ilustrado) se acopla con el bus de interfaz 110. El controlador de audio 146, en una forma de realización, es un controlador de audio multicanal de alta definición. En una forma de realización, el sistema 100 incluye un controlador de E/S heredado opcional 140 para acoplar dispositivos heredados (por ejemplo, Sistema Personal 2 (PS/2)) al sistema. El concentrador de controlador de plataforma 130 también puede conectarse a uno o más controladores de bus serie universal (USB) 142 para conectar dispositivos de entrada, tales como combinaciones de teclado y de ratón 143, una cámara 144 u otros dispositivos de entrada USB.
Se apreciará que el sistema 100 mostrado es a modo de ejemplo y no limitativo, puesto que también se pueden utilizar otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, una instancia del controlador de memoria 116 y del concentrador de controlador de plataforma 130 pueden integrarse en un procesador gráfico externo discreto, tal como el procesador gráfico externo 112. En una forma de realización, el concentrador de controlador de plataforma 130 y/o el controlador de memoria 1160 pueden ser externos al uno o más procesador(es) 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 periférico dentro de un conjunto de circuito integrado del sistema que está en comunicación con el(los) procesador(es) 102.
La Figura 2 es un diagrama de bloques de una forma de 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 gráfico integrado 208. Los elementos de la Figura 2 que tienen las mismas referencias numéricas (o nombres) que los elementos de cualquier otra figura en este documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte de este documento, pero no se limitan a las mismas. El procesador 200 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 202N representado por las cajas con líneas discontinuas. Cada uno de los núcleos de procesador 202A-202N incluye una o más unidades de memoria caché interna 204A-204N. En algunas formas de realización, cada núcleo de procesador también tiene acceso a una o más unidades 206 en memorias caché compartidas.
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 del procesador y uno o más niveles de memoria caché compartida de nivel medio, tal como Nivel 2 (L2), Nivel 3 (L3), Nivel 4 (L4) u otros niveles de memoria caché, en donde el nivel más alto de memoria caché antes de la memoria externa se clasifica como LLC. En algunas formas de realización, la lógica de coherencia de memoria caché mantiene la coherencia entre las diversas unidades de memoria caché 206 y 204A-204N.
En algunas formas de realización, 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 del sistema 210. La una o más unidades de controlador de bus 216 gestionan un conjunto de buses periféricos, tales como uno o más PCI o buses PCI Express. El núcleo 210 del agente del sistema proporciona funcionalidad de gestión para los diversos componentes del procesador. En algunas formas de realización, el núcleo del agente del sistema 210 incluye uno o más controladores de memoria integrados 214 para gestionar el acceso a varios dispositivos de memoria externos (no ilustrados).
En algunas formas de realización, uno o más de los núcleos de procesador 202A-202N incluyen soporte para hilos múltiples simultáneos. En dicha forma de realización, el núcleo del agente del sistema 210 incluye componentes para coordinar y hacer funcionar los núcleos 202A-202N durante el procesamiento de hilos múltiples. El núcleo del agente del sistema 210 puede incluir, además, 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 del procesador 202A-202N y del procesador gráfico 208.
En algunas formas de realización, el procesador 200 incluye, además, un procesador gráfico 208 para ejecutar operaciones de procesamiento de gráficos. En algunas formas de realización, el procesador gráfico 208 se acopla con el conjunto de unidades de memoria caché compartidas 206 y el núcleo del agente del sistema 210, incluyendo uno o más controladores de memoria integrados 214. En algunas formas de realización, el núcleo del agente del sistema 210 también incluye un controlador de visualización 211 para impulsar la salida del procesador gráfico a una o más pantallas acopladas. En algunas formas de realización, el controlador de visualización 211 también puede ser un módulo separado acoplado con el procesador gráfico a través de al menos una interconexión, o puede estar integrado dentro del procesador gráfico 208.
En algunas formas de realización, se utiliza una unidad de interconexión basada en anillo 212 para acoplar los componentes internos del procesador 200. Sin embargo, se puede utilizar una unidad de interconexión alternativa, tal como una interconexión punto a punto, una interconexión conmutada u otras técnicas, incluyendo técnicas bien conocidas en esta técnica particular. En algunas formas de realización, el procesador gráfico 208 se acopla con la interconexión de anillo 212 a través de un enlace de E/S 213.
El enlace de E/S 213, a modo de ejemplo, representa al menos una de las múltiples variedades de interconexiones de E/S, incluyendo una interconexión de E/S en el paquete que facilita la comunicación entre varios componentes del procesador y un módulo de memoria integrado de alto rendimiento 218, tal como un módulo eDRAM. En algunas formas de realización, cada uno de los núcleos de procesador 202A-202N y del procesador gráfico 208 utilizan módulos de memoria integrados 218 tal como una memoria caché de último nivel compartida.
En otras formas de realización, los núcleos de procesador 202A-202N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra forma de realización, los núcleos de procesador 202A-202N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), en 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 forma de realización, los núcleos de procesador 202A-202N son heterogéneos en términos de microarquitectura, en donde uno o más núcleos que tienen un consumo de energía relativamente mayor se acoplan con uno o más núcleos de energía que tienen un consumo de energía más bajo. Además, el procesador 200 se puede poner en práctica en uno o más circuitos impresos o como un circuito integrado SoC que tenga los componentes ilustrados, además, de otros componentes.
La Figura 3 es un diagrama de bloques de un procesador gráfico 300, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador gráfico integrado con una pluralidad de núcleos de procesamiento. En algunas formas de realización, el procesador gráfico se comunica a través de una interfaz de E/S mapeada en memoria con registros en el procesador gráfico y con órdenes ubicadas en la memoria del procesador. En algunas formas de realización, el procesador gráfico 300 incluye una interfaz de memoria 314 para acceder a la memoria. La interfaz de memoria 314 puede ser una interfaz para la memoria local, una o más memorias caché internas, una o más memorias caché externas compartidas y/o para la memoria del sistema.
En algunas formas de realización, el procesador gráfico 300 también incluye un controlador de visualización 302 para conducir 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 superpuestos para la visualización y composición de múltiples capas de vídeo o elementos de interfaz de usuario. El dispositivo de visualización 320 puede ser un dispositivo de visualización interno o externo. En una forma de 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 (VR) o un dispositivo de visualización de realidad aumentada (AR). En algunas formas de realización, el procesador gráfico 300 incluye un motor de códec de vídeo 306 para codificar, decodificar o transcodificar medios hacia, desde o entre uno o más formatos de codificación de medios, incluyendo, pero sin limitación, formatos del Grupo de Expertos en Imágenes en Movimiento (MPEG) tal como Mp Eg -2, formatos de Codificación Avanzada de Vídeo (AVC) tal como H.264/MPEG-4 AVC, así como la Sociedad de Ingenieros de Cine y Televisión (SMPTE) 421M/VC-1 y el Grupo de Expertos Fotográficos Conjuntos (JPEG) formatos tales como JPEG y Motion JPEG (Mj PeG).
En algunas formas de realización, el procesador gráfico 300 incluye un motor 304 de Transferencia de Imágenes en Bloque (BLIT) para realizar operaciones de rasterizado bidimensional (2D) que incluyen, por ejemplo, transferencias de bloque de límites de bits. Sin embargo, en una forma de realización, las operaciones de gráficos 2D se realizan utilizando uno o más componentes del motor de procesamiento de gráficos (GPE) 310. En algunas formas de realización, GPE 310 es un motor de cálculo para realizar operaciones de gráficos, incluyendo operaciones de gráficos tridimensionales (3D) y operaciones de los medios.
En algunas formas de realización, GPE 310 incluye una canalización 3D 312 para realizar operaciones 3D, tal como renderizar imágenes y escenas tridimensionales utilizando funciones de procesamiento que actúan sobre formas de primitivos 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 312 incluye elementos programables y de funciones fijas que realizan diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema 315/3D de medios. Mientras que la canalización 3D 312 se puede utilizar para realizar operaciones de medios, una forma de realización de GPE 310 también incluye una canalización de medios 316 que se utiliza específicamente para realizar operaciones de medios, tal como el procesamiento posterior de vídeo y la mejora de imágenes.
En algunas formas de realización, la canalización de medios 316 incluye funciones fijas o unidades lógicas programables 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 representación del motor de códec de vídeo 306. En algunas formas de realización, la canalización de medios 316 incluye, además, una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/Media 315. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluyendo en el subsistema 3D/Media 315.
En algunas formas de realización, el subsistema 3D/Media 315 incluye lógica para ejecutar hilos generados por la canalización 3D 312 y la canalización de medios 316. En una forma de realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema 3D/Media 315, que incluye lógica de envío de hilos para arbitrar y enviar las diversas solicitudes a los recursos de ejecución de hilos disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los hilos de medios y 3D. En algunas formas de realización, el subsistema 3D/Media 315 incluye una o más memorias caché internas para instrucciones y datos de hilos. En algunas formas de realización, el subsistema también incluye memoria compartida, que comprende registros y memoria direccionable, para compartir datos entre hilos y almacenar datos de salida.
Motor de procesamiento de gráficos
La Figura 4 es un diagrama de bloques de un motor de procesamiento de gráficos 410 de un procesador gráfico de conformidad con algunas formas de realización. En una forma de realización, el motor de procesamiento de gráficos (GPE) 410 es una versión del GPE 310 que se muestra en la Figura 3. Los elementos de la Figura 4 que tienen las mismas referencias numéricas (o nombres) que los elementos de cualquier otra figura pueden operar o funcionar en cualquier manera similar a la descrita en otra parte del presente documento, pero no se limita a dicha forma. Por ejemplo, se ilustra la canalización 3D 312 y la canalización de medios 316 de la Figura 3. La canalización de medios 316 es opcional en algunas formas de realización del GPE 410 y puede no estar explícitamente incluyendo dentro del GPE 410. Por ejemplo, y en al menos una forma de realización, un procesador de imágenes y/o medios separados está acoplado al GPE 410.
En algunas formas de realización, GPE 410 se acopla o incluye un flujo continuo de órdenes 403, que proporciona un flujo de órdenes a la canalización 3D 312 y/o canalizaciones de medios 316. En algunas formas de realización, el flujo continuo de órdenes 403 está acoplado con memoria, que puede ser memoria del sistema, o una o más de entre la memoria caché interna y la memoria caché compartida. En algunas formas de realización, el transmisor de órdenes 403 recibe órdenes desde la memoria y las envía a la canalización 3D 312 y/o a la canalización de medios 316. Las órdenes son directivas obtenidas desde una memoria intermedia anular, que almacena órdenes para la canalización 3D 312 y la canalización de medios 316. En una forma de realización, la memoria intermedia anular puede incluir de manera adicional memoria intermedia de órdenes por lotes que almacenan lotes de múltiples órdenes. Las órdenes para la canalización 3D 312 también pueden incluir referencias a datos almacenados en la memoria, tales como, pero sin limitación, datos de vértice 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 las órdenes y los datos realizando operaciones a través de la lógica dentro de las canalizaciones respectivas o enviando uno o más hilos de ejecución a una matriz de núcleo de gráficos 414. En una forma de realización, la matriz de núcleo de gráficos 414 incluye uno o más bloques de núcleos de gráficos (por ejemplo, núcleo(s) gráfico(s) 415A, núcleo(s) gráfico(s) 415B), incluyendo cada bloque uno o más núcleos gráficos. Cada núcleo de gráficos incluye un conjunto de recursos de ejecución de gráficos que incluye lógica de ejecución específica de gráficos y de uso general para realizar operaciones gráficas y de cálculo, así como procesamiento de texturas de función fija y/o de aprendizaje por máquina y lógica de aceleración de inteligencia artificial.
En varias formas de realización, la canalización 3D 312 incluye función fija y lógica 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 enviando los hilos de ejecución a la matriz de núcleo de gráficos 414. La matriz de núcleo de gráficos 414 proporciona un bloque unificado de recursos de ejecución para su uso en el procesamiento de estos programas de sombreado. La lógica de ejecución multipropósito (por ejemplo, unidades de ejecución) dentro de los núcleos gráficos 415A-414B de la matriz de núcleos gráficos 414 incluye soporte para varios lenguajes de sombreado API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados con múltiples sombreadores.
En algunas formas de realización, la matriz de núcleo de gráficos 414 también incluye lógica de ejecución para realizar funciones de medios, tal como procesamiento de vídeo y/o imagen. En una forma de realización, las unidades de ejecución incluyen, además, lógica de uso general que es programable para realizar operaciones de cálculo paralelas de uso general, además de operaciones de procesamiento de gráficos. La lógica de uso general puede realizar operaciones de procesamiento en paralelo o junto con la lógica de uso general dentro del (de los) núcleo(s) del procesador 107 de la Figura 1 o del núcleo 202A-202N como en la Figura 2.
Los datos de salida generados por hilos que se ejecutan en la matriz de núcleo de gráficos 414 pueden enviar datos a la memoria en una memoria intermedia de retorno unificada (URB) 418. La URB 418 puede almacenar datos para múltiples hilos. En algunas formas de realización, la URB 418 se puede utilizar para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleo de gráficos 414. En algunas formas de realización, la URB 418 se puede utilizar de manera adicional para la sincronización entre hilos en la matriz de núcleo de gráficos y la lógica de función fija dentro de la lógica de función compartida 420.
En algunas formas de realización, la matriz de núcleos de gráficos 414 es escalable, de modo que la matriz incluye un número variable de núcleos de gráficos, cada uno de los cuales tiene un número variable de unidades de ejecución en función de la potencia objetivo y del nivel de rendimiento del GPE 410. En una forma de realización, los recursos de ejecución son de manera dinámica escalables, de modo que los recursos de ejecución se puedan habilitar o deshabilitar según sea necesario.
La matriz de núcleo de gráficos 414 se acopla con la lógica de función compartida 420 que incluye múltiples recursos que se comparten entre los núcleos de gráficos en la matriz de núcleo de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 420 son unidades lógicas de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleo de gráficos 414. En varias formas de realización, la lógica de medio separado función compartida 420 incluye, sin limitación al muestreador 421, el dispositivo matemático 422 y la lógica de comunicación entre hilos (TIC) 423. Además, algunas formas de realización ponen en práctica una o más memorias caché 425 dentro de la lógica de función compartida 420.
Se pone en práctica una función compartida cuando la demanda de una función especializada dada es insuficiente para incluirla dentro de la matriz de núcleo de gráficos 414. En su lugar, se pone en práctica una instancia única de esa función especializada como una entidad independiente en la lógica de función compartida 420 y compartida entre los recursos de ejecución dentro de la matriz de núcleo de gráficos 414. El conjunto preciso de funciones que se comparten entre la matriz de núcleo de gráficos 414 y se incluyen dentro de la matriz de núcleo de gráficos 414 varía según las formas de realización. En algunas formas de realización, las funciones compartidas específicas dentro de la lógica de función compartida 420 que son ampliamente utilizadas por la matriz de núcleo de gráficos 414 pueden incluirse dentro de la lógica de función compartida 416 dentro de la matriz de núcleo de gráficos 414. En varias formas de realización, la lógica de función compartida 416, dentro de la matriz de núcleos de gráficos 414, puede incluir parte o la totalidad de la lógica dentro de la lógica de función compartida 420. En una forma de realización, todos los elementos lógicos dentro de la lógica de función compartida 420 pueden duplicarse dentro de la lógica de función compartida 416 de la matriz de núcleo de gráficos 414. En una forma de realización, la lógica de función compartida 420 se excluye a favor de la lógica de función compartida 416 dentro de la matriz de núcleo de gráficos 414.
La Figura 5 es un diagrama de bloques de la lógica de hardware de un núcleo de procesador gráfico 500, según algunas formas de realización descritas en el presente documento. Los elementos de la Figura 5 que tienen las mismas referencias numéricas (o nombres) que los elementos de cualquier otra figura del presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otro lugar del presente documento, pero no se limitan a dicha forma. El núcleo del procesador gráfico ilustrado 500, en algunas formas de realización, está incluido dentro de la matriz de núcleos de gráficos 414 de la Figura 4. El núcleo del procesador gráfico 500, a veces denominado segmento de núcleo, puede ser uno o varios núcleos de gráficos dentro de un procesador gráfico modular. El núcleo del procesador gráfico 500 es un ejemplo de un segmento de núcleo de gráficos, y un procesador gráfico tal como se describe en el presente documento puede incluir múltiples segmentos de núcleo de gráficos en función de las envolventes de potencia y de rendimiento objetivo. Cada núcleo de procesador gráfico 500 puede incluir un bloque de función fijo 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 uso general.
En algunas formas de realización, el bloque de funciones fijas 530 incluye una canalización de geometría/funciones fijas 536 que pueden compartirse mediante todos los subnúcleos en el núcleo del procesador gráfico 500, por ejemplo, en puestas en práctica de procesadores gráficos de menor rendimiento y/o menor potencia. En varias formas de realización, la canalización de geometría/función fija 536 incluye una canalización de función fija 3D (por ejemplo, la canalización 3D 312 tal como en la Figura 3 y en la Figura 4), una unidad de extremo frontal de vídeo, un generador de hilos y un dispositivo de envío de hilos, y un gestor de memoria intermedia de retorno unificada, que gestiona las memorias intermedias de retorno unificadas, tales como la memoria intermedia de retorno unificada 418 de la Figura 4.
En una forma de realización, el bloque de función fija 530 también incluye una interfaz SoC de gráficos 537, un microcontrolador de gráficos 538 y una canalización de medios 539. La interfaz SoC de gráficos 537 proporciona una interfaz entre el núcleo del procesador gráfico 500 y otros núcleos de procesador dentro de un sistema en un circuito integrado de circuito integrado. El microcontrolador de gráficos 538 es un subprocesador programable que se puede configurar para gestionar varias funciones del núcleo del procesador gráfico 500, incluyendo el envío de hilos, la planificación y la preferencia. La canalización de medios 539 (p. ej., la canalización de medios 316 de la Figura 3 y la Figura 4) incluye lógica para facilitar la decodificación, codificación, procesamiento previo y/o procesamiento posterior de datos multimedia, incluyendo datos de imagen y de vídeo. La canalización de medios 539 pone en práctica operaciones de medios a través de solicitudes para calcular o muestrear lógica dentro de los subnúcleos 501-501F.
En una forma de realización, la interfaz SoC 537 permite que el núcleo del procesador gráfico 500 se comunique con los núcleos del procesador de aplicaciones de uso general (por ejemplo, CPUs) y/u otros componentes dentro de un SoC, incluyendo los elementos de la jerarquía de la memoria, tal como una memoria caché de último nivel compartida, la memoria RAM del sistema y/o la memoria DRAM integrada en el circuito integrado o en el paquete. La interfaz SoC 537 también puede habilitar la comunicación con dispositivos de funciones fijas dentro del SoC, tales como canalizaciones de imágenes de cámaras, y permite el uso y/o pone en práctica elementos atómicos de memoria global que pueden compartirse entre el núcleo de procesador gráfico 500 y las CPUs dentro del SoC. La interfaz de SoC 537 también puede poner en práctica controles de gestión de energía para el núcleo de procesador gráfico 500 y habilitar una interfaz entre un campo de reloj del núcleo de procesador gráfico 500 y otros campos de reloj dentro del SoC. En una forma de realización, la interfaz SoC 537 permite la recepción de memorias intermedias de órdenes desde un transmisor de órdenes y un dispositivo de envío de hilos globales que están configurados para proporcionar órdenes e instrucciones a cada uno o más núcleos de gráficos dentro de un procesador gráfico. Las órdenes e instrucciones se pueden enviar a la canalización de medios 539, cuando se van a realizar operaciones de medios, o a una canalización de funciones fijas y de geometría (por ejemplo, canalización de funciones fijas y de geometría 536, canalización de funciones fijas y de geometría 514) cuando han de realizarse operaciones de procesamiento de gráficos.
El microcontrolador de gráficos 538 se puede configurar para realizar diversas tareas de programación y de gestión para el núcleo del procesador gráfico 500. En una forma de realización, el microcontrolador de gráficos 538 puede realizar gráficos y/o calcular la programación de la carga de trabajo en los diversos motores paralelos de gráficos dentro de las matrices 502A-502F, 504A-504F de la unidad de ejecución (EU) dentro de los subnúcleos 501A-501F. En este modelo de programación, el software del host que se ejecuta en un núcleo de CPU de un SoC, incluyendo el núcleo del procesador gráfico 500, puede enviar cargas de trabajo a uno de los múltiples timbres de entrada del procesador gráfico, lo que demanda una operación de programación en el motor de gráficos adecuado. Las operaciones de programación incluyen determinar qué carga de trabajo ejecutar a continuación, enviar una carga de trabajo a un transmisor de órdenes, adelantarse a las cargas de trabajo existentes que se ejecutan en un motor, supervisar el progreso de una carga de trabajo y notificar al software del host cuando se completa una carga de trabajo. En una forma de realización, el microcontrolador de gráficos 538 también puede facilitar estados inactivos o de bajo consumo para el núcleo del procesador gráfico 500, proporcionando al núcleo del procesador gráfico 500 la capacidad de guardar y restaurar registros dentro del núcleo del procesador gráfico 500 a través de transiciones de estado de bajo consumo de forma independiente desde el sistema operativo y/o el software del controlador de gráficos en el sistema.
El núcleo del procesador gráfico 500 puede tener, más o menos, que el número de subnúcleos ilustrados 501A-501F, hasta N subnúcleos modulares. Para cada conjunto de N subnúcleos, el núcleo del procesador gráfico 500 también puede incluir lógica de función compartida 510, memoria caché y/o compartida 512, una canalización de geometría/función fija 514, así como lógica de función fija adicional 516 para acelerar varios gráficos y calcular operaciones de procesamiento. La lógica de función compartida 510 puede incluir unidades lógicas asociadas con la lógica de función compartida 420 de la Figura 4 (p. ej., muestreador, módulo matemático y/o lógica de comunicación entre hilos) que pueden ser compartidas por cada N subnúcleo dentro del núcleo del procesador gráfico 500. La memoria caché y/o compartida 512 puede ser una memoria caché de último nivel para el conjunto de N subnúcleos 501A-501F dentro del núcleo del procesador gráfico 500, y también puede servir como memoria compartida a la que pueden acceder múltiples subnúcleos. La canalización de geometría/función fija 514 puede incluirse en lugar de la canalización de geometría/función fija 536 dentro del bloque de función fija 530 y puede incluir unidades lógicas iguales o similares.
En una forma de realización, el núcleo del procesador gráfico 500 incluye una lógica de función fija adicional 516 que puede incluir varias lógicas de aceleración de función fija para uso del núcleo de procesador gráfico 500. En una forma de realización, la lógica de función fija adicional 516 incluye una canalización de geometría adicional para uso en sombreado de posición única. En el sombreado de posición única, 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 eliminació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 forma de realización, la canalización de eliminación es una versión recortada de la canalización de geometría completa. La canalización completa y la canalización de eliminación pueden ejecutar diferentes instancias de la misma aplicación, cada instancia con un contexto separado. El sombreado de posición única puede ocultar ejecución de eliminación largas de triángulos descartados, lo que permite que el sombreado se complete antes en algunas instancias. Por ejemplo, y en una forma de realización, la lógica de canalización de eliminació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 suele generar resultados críticos más rápidos que la canalización completa, ya que la canalización de eliminación obtiene y sombrea solamente el atributo de posición de los vértices, sin realizar la rasterización y el renderizado de los píxeles en la memoria intermedia de tramas. La canalización de eliminación puede utilizar los resultados críticos generados para calcular la información de visibilidad de todos los triángulos sin importar si dichos triángulos son objeto de eliminación. 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 eliminados y sombrear solamente los triángulos visibles que finalmente pasan a la fase de rasterización.
En una forma de realización, la lógica de función fija adicional 516 también puede incluir lógica de aceleración de aprendizaje por máquina, tal como lógica de multiplicación de matriz de función fija, para puestas en práctica que incluyen optimizaciones para aprendizaje o inferencia de aprendizaje por máquina.
Dentro de cada subnúcleo de gráficos 501A-501F se incluye un conjunto de recursos de ejecución que se pueden utilizar para realizar gráficos, medios y operaciones de cálculo informático en respuesta a solicitudes de canalización de gráficos, canalización de medios o programas de sombreado. Los subnúcleos de gráficos 501A-501F incluyen varias matrices EU 502A-502F, 504A-504F, lógica de envío de hilos y comunicación entre hilos (TD/IC) 503A-503F, un muestreador 3D (por ejemplo, textura) 505A-505F, un muestreador de medios 506A-506F, un procesador de sombreador 507A-507F y memoria local compartida (SLM) 508A-508F. Cada una de las matrices EU 502A-502F, 504A-504F incluye múltiples unidades de ejecución, que son unidades de procesamiento de gráficos de uso general capaces de realizar operaciones lógicas de coma flotante y entero/coma fija al servicio de una operación gráfica, de medios u operación de cálculo informático, incluyendo gráficos, medios o programas de sombreador de cálculo informático. La lógica TD/IC 503A-503F realiza operaciones de control de hilos y envío de hilos locales para las unidades de ejecución dentro de un subnúcleo y facilita la comunicación entre hilos que se ejecutan en las unidades de ejecución del subnúcleo. El muestreador 3D 505A-505F puede realizar lecturas de las texturas u otros datos relacionados con gráficos 3D en la memoria. El muestreador 3D puede realizar lecturas de datos de texturas de manera diferente según un estado de muestra configurado y el formato de textura asociado con una textura dada. El muestreador de medios 506A-506F puede realizar operaciones de lectura similares en función del tipo y formato asociado con los datos de medios. En una forma de realización, cada subnúcleo de gráficos 501A-501F puede incluir, de manera alternativa, un muestreador de medios y 3D unificado. Los hilos que se ejecutan en las unidades de ejecución dentro de cada uno de los subnúcleos 501A-501F pueden hacer uso de la memoria local compartida 508A-508F dentro de cada subnúcleo, para permitir que los hilos que se ejecutan dentro de un grupo de hilos se ejecuten utilizando un agrupamiento común de memoria en circuito integrado.
Unidades de ejecución
Las Figuras 6A-6B ilustran la lógica de ejecución de hilos 600 que incluye una matriz de elementos de procesamiento empleados en un núcleo de procesador gráfico de conformidad con las formas de realización descritas en este documento. Los elementos de las Figuras 6A-6B que tienen las mismas referencias numéricas (o nombres) que los elementos de cualquier otra figura del presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otro lugar del presente documento, pero no se limitan a ello. La Figura 6A ilustra una descripción general de la lógica de ejecución de hilos 600, que puede incluir una variante de la lógica de hardware ilustrada con cada subnúcleo 501A-501F de la Figura 5. La Figura 6B ilustra ejemplos de detalles internos de una unidad de ejecución.
Tal como se ilustra en la Figura 6A, en algunas formas de realización, la lógica de ejecución de hilos 600 incluye un procesador de sombreador 602, un dispositivo de envío de hilos 604, memoria caché de instrucciones 606, una matriz de unidades 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 forma de realización, la matriz de unidades de ejecución escalable puede escalar de manera dinámica 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 los requisitos de cálculo de una carga de trabajo. En una forma de realización, los componentes incluyendo están interconectados a través de un tejido de interconexión que enlaza con cada uno de los componentes. En algunas formas de realización, la lógica de ejecución de hilos 600 incluye una o más conexiones a la memoria, tal como la memoria del sistema o la memoria caché, a través de una o más memorias caché de instrucciones 606, puerto de datos 614, muestreador 610 y unidades de ejecución 608A-608N. En algunas formas de realización, cada unidad de ejecución (p. ej., 608A) es una unidad informática de uso general programable de manera independiente que es capaz de ejecutar múltiples hilos de hardware de forma simultánea mientras procesa múltiples elementos de datos en paralelo para cada hilo. En varias formas de realización, la matriz de unidades de ejecución 608A-608N es escalable para incluir cualquier número de unidades de ejecución individuales.
En algunas formas de realización, las unidades de ejecución 608A-608N se utilizan principalmente para ejecutar programas de sombreado. Un procesador de sombreador 602 puede procesar los diversos programas de sombreador y enviar hilos de ejecución asociados con los programas de sombreador a través de un dispositivo de envío de hilos 604. En una forma de realización, el dispositivo de envío de hilos incluye lógica para arbitrar las solicitudes de inicio de hilos de las canalizaciones de gráficos y medios e instanciar los hilos solicitados en una o más unidades de ejecución en las unidades de ejecución 608A-608N. Por ejemplo, una canalización de geometría puede enviar sombreadores de vértices, teselados o geometría a la lógica de ejecución de hilos para su procesamiento. En algunas formas de realización, el dispositivo de envío de hilos 604 también puede procesar solicitudes de generación de hilos en tiempo de ejecución desde los programas de sombreador en ejecución.
En algunas formas de realización, las unidades de ejecución 608A-608N admiten un conjunto de instrucciones que incluye soporte nativo para muchas instrucciones de sombreador de gráficos 3D estándar, de modo que los programas de sombreador de bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traslación mínima. Las unidades de ejecución admiten procesamiento de vértices y geometría (p. ej., programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (p. ej., sombreadores de píxeles, sombreadores de fragmentos) y procesamiento de uso general (p. ej., sombreadores de cálculo y de medios). Cada una de las unidades de ejecución 608A-608N es capaz de la ejecución de datos múltiples de instrucción única (SIMD) de múltiple emisión y la operación de hilos múltiples permite un entorno de ejecución eficiente frente a accesos de memoria de mayor latencia. Cada hilo de hardware dentro de cada unidad de ejecución tiene un fichero de registro de gran ancho de banda dedicado y un estado de hilo independiente asociado. La ejecución es de múltiple emisión por reloj para canalizaciones capaces de operaciones de coma flotante de precisión simple y doble, de capacidad de bifurcación SIMD, de operaciones lógicas, de operaciones trascendentales y de otras operaciones diversas. Mientras espera datos de la memoria o una de las funciones compartidas, la lógica de dependencia dentro de las unidades de ejecución 608A-608N hace que un hilo de espera entre en latencia hasta que se devuelvan los datos solicitados. Mientras el hilo en latencia está inactivo, los recursos de hardware pueden dedicarse a procesar otros hilos. Por ejemplo, durante un retraso asociado con una operación de sombreador de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, un sombreador de fragmentos u otro tipo de programa de sombreador, incluyendo un sombreador de vértices diferente.
Cada unidad de ejecución en las unidades de ejecución 608A-608N, opera en 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 del flujo de elementos de datos dentro de las instrucciones. El número de canales puede ser independiente del número de Unidades Lógicas Aritméticas (ALU) físicas o Unidades de Coma flotante (FPU) para un procesador gráfico en particular. En algunas formas de realización, las unidades de ejecución 608A-608N admiten tipos de datos enteros y de coma flotante.
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 los datos de los elementos. Por ejemplo, cuando se opera en un vector de 256 bits de anchura, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera en el vector como cuatro elementos de datos empaquetados separados de 64 bits (elemento de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados separados de 32 bits (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados separados de 16 bits (elementos de datos de tamaño de palabra (W)), o treinta y dos elementos de datos separados de 8 bits (elementos de datos de tamaño byte (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
En una forma de realización, una o más unidades de ejecución se pueden combinar en una unidad de ejecución fusionada 609A-609N que tiene una lógica de control de hilos (607A-607N) que es común a las unidades EUs fusionadas. Se pueden fusionar múltiples EUs en un grupo de UE. Cada EU en el grupo EU fusionado, se puede configurar para ejecutar un hilo de hardware SIMD separado. El número de EUs en un grupo de EU fusionado puede variar según las formas de realización. Además, se pueden realizar varias anchuras de SIMD por UE, incluyendo, pero sin limitación, SIMD8, SIMD16 y SIMD32. Cada unidad de ejecución de gráficos fusionadas 609A-609N incluye al menos dos unidades de ejecución. Por ejemplo, la unidad de ejecución fusionada 609A incluye una primera EU 608A, una segunda EU 608B y una lógica de control de hilos 607A que es común a la primera EU 608A y a la segunda EU 608B. La lógica de control de hilos 607A controla los hilos ejecutados en la unidad de ejecución de gráficos fusionada 609A, permitiendo que cada EU dentro de las unidades de ejecución fusionadas 609A-609N se ejecute utilizando un registro de puntero de instrucción común.
Una o más memoria caché de instrucciones internas (por ejemplo, 606) se incluyen en la lógica de ejecución de hilos 600 para almacenar en memoria caché las instrucciones de hilos para las unidades de ejecución. En algunas formas de realización, se incluyen una o más memorias caché de datos (por ejemplo, 612) para almacenar en memoria caché los datos del hilo durante la ejecución del hilo. En algunas formas de realización, se incluye un muestreador 610 para proporcionar muestreador de textura para operaciones 3D y muestreador de medios para operaciones de medios. En algunas formas de realización, el muestreador 610 incluye una funcionalidad especializada de muestreador de texturas o medios para procesar datos de texturas o de medios durante el proceso de muestreador 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 iniciación de hilos a la lógica de ejecución de hilos 600 a través de la lógica de envío y de la generación de hilos. Una vez que un grupo de objetos geométricos ha sido procesado y rasterizado en datos de píxeles, se solicita la lógica del procesador de píxeles (p. ej., lógica de sombreador de píxeles, lógica de sombreador de fragmentos, etc.) dentro del procesador de sombreador 602 para calcular aún más la información de salida y hacer que se escriban los resultados en las superficies de salida (p. ej., memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de plantilla, etc.). En algunas formas de realización, 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 en el objeto rasterizado. En algunas formas de realización, la lógica del procesador de píxeles dentro del procesador de sombreador 602 ejecuta luego un programa de sombreador de fragmentos o píxeles proporcionado por la interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreador, el procesador de sombreador 602 envía hilos a una unidad de ejecución (por ejemplo, 608A) a través del dispositivo de envío de hilos 604. En algunas formas de realización, el procesador de sombreador 602 utiliza la lógica de muestreador de textura en el muestreador 610 para acceder a los datos de textura en los mapas de textura almacenados en memoria. Las operaciones aritméticas sobre los datos de textura y los datos de geometría de entrada calculan los datos de color de los píxeles para cada fragmento geométrico, o descartan uno o más píxeles del procesamiento posterior.
En algunas formas de realización, el puerto de datos 614 proporciona un mecanismo de acceso a la memoria para que la lógica de ejecución de hilos 600 envíe datos procesados a la memoria para su posterior procesamiento en una canalización de salida del procesador gráfico. En algunas formas de realización, el puerto de datos 614 incluye o se acopla a una o más memorias caché (por ejemplo, memoria caché de datos 612) para almacenar datos en memoria caché para acceder a la memoria a través del puerto de datos.
Tal como se ilustra en la Figura 6B, una unidad de ejecución de gráficos 608 puede incluir una unidad de obtención de instrucciones 637, una matriz de ficheros de registros generales (GRF) 624, una matriz de ficheros de registros arquitectónicos (ARF) 626, un árbitro de hilos 622, una unidad de envío 630, una unidad de bifurcación 632, un conjunto de unidades de coma flotante SIMD (FPUs) 634 y, en una forma de realización, un conjunto de ALUs de SIMD enteras dedicadas 635. El GRF 624 y el ARF 626 incluyen el conjunto de ficheros de registro general y ficheros de registro de arquitectura asociados con cada hilo de hardware simultáneo que puede estar activo en la unidad de ejecución de gráficos 608. En una forma de realización, el estado arquitectónico por hilo se mantiene en el ARF 626, mientras que los datos utilizados durante la ejecución del hilo se almacenan en el GRF 624. El estado de ejecución de cada hilo, incluyendo los punteros de instrucciones para cada hilo, se pueden mantener en registros especificados de hilos en el ARF 626.
En una forma de realización, la unidad de ejecución de gráficos 608 tiene una arquitectura que es una combinación de hilos múltiples simultáneos (SMT) y de hilos múltiples entrelazados (IMT) de granularidad fina. La arquitectura tiene una configuración modular que se puede ajustar en el momento del diseño en función de una cantidad objetivo de hilos simultáneos y de una cantidad de registros por unidad de ejecución, en donde los recursos de la unidad de ejecución se dividen en la lógica utilizada para ejecutar múltiples hilos simultáneos.
En una forma de realización, la unidad de ejecución de gráficos 608 puede co-emitir múltiples instrucciones, cada una de las cuales pueden ser instrucciones diferentes. El árbitro de hilos 622 del hilo de la unidad de ejecución de gráficos 608 puede enviar las instrucciones a una de las unidades de envío 630, unidad de bifurcación 6342 o SIMD FPU 634 para su ejecución. Cada hilo de ejecución puede acceder a 128 registros de uso general dentro del GRF 624, en donde cada registro puede almacenar 32 bytes, accesibles como un vector SIMD de 8 elementos de elementos de datos de 32 bits. En una forma de realización, cada hilo de la unidad de ejecución tiene acceso a 4 Kbytes dentro del GRF 624, aunque las formas de realización no están tan limitadas, y en otras formas de realización se pueden proporcionar más o menos recursos de registro. En una forma de realización, se pueden ejecutar hasta siete hilos de manera simultánea, aunque el número de hilos por unidad de ejecución también puede variar según las formas de realización. En una forma de realización en donde siete hilos pueden acceder a 4 Kbytes, el GRF 624 puede almacenar un total de 28 Kbytes. Los modos de direccionamiento flexibles pueden permitir que los registros se direccionen conjuntamente para construir registros más amplios de manera efectiva o para representar estructuras de datos de bloques rectangulares estriados.
En una forma de realización, las operaciones de memoria, las operaciones de muestreador y otras comunicaciones del sistema de latencia más largas se envían a través de instrucciones de "envío" que son ejecutadas por la unidad de envío de etapa de mensajes 630. En una forma de realización, las instrucciones de bifurcación se envían a una unidad de bifurcación dedicada 632 para facilitar la divergencia SIMD y la eventual convergencia.
En una forma de realización, la unidad de ejecución de gráficos 608 incluye una o más unidades de coma flotante SIMD (FPU(s)) 634 para realizar operaciones de coma flotante. En una forma de realización, la(s) FPU(s) 634 también admiten el cálculo de números enteros. En una forma de realización, la(s) FPU(s) 634 pueden ejecutar SIMD hasta un número M de operaciones de coma flotante (o de números enteros) de 32 bits, o ejecutar SIMD hasta 2M enteros de 16 bits u operaciones de coma flotante de 16 bits. En una forma de realización, al menos una de las FPUs proporciona capacidad matemática extendida para soportar funciones matemáticas trascendentales de alto rendimiento y coma flotante de 64 bits de doble precisión. En algunas formas de realización, también está presente un conjunto de unidades ALUs de SIMD 635 de números enteros de 8 bits, y puede optimizarse específicamente para realizar operaciones asociadas con cálculos de aprendizaje por máquina.
En una forma de realización, las matrices de múltiples instancias de la unidad de ejecución de gráficos 608 se pueden instanciar en un agrupamiento de subnúcleos de gráficos (por ejemplo, un sub-segmento). Para la escalabilidad, los arquitectos de productos pueden elegir el número exacto de unidades de ejecución por agrupamiento de subnúcleos. En una forma de realización, la unidad de ejecución 608 puede ejecutar instrucciones a través de una pluralidad de canales de ejecución. En otra forma de realización, cada hilo ejecutado en la unidad de ejecución de gráficos 608 se ejecuta en un canal diferente.
La Figura 7 es un diagrama de bloques que ilustra los formatos de instrucción 700 de un procesador gráfico según algunas formas de realización. En una o más formas de realización, las unidades de ejecución del procesador gráfico admiten un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Las casillas con líneas continuas ilustran los componentes que se suelen incluir en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solamente se incluyen en un subconjunto de las instrucciones. En algunas formas de realización, el formato de instrucción 700 descrito e ilustrado son macroinstrucciones, ya que son instrucciones suministradas a la unidad de ejecución, a diferencia de las microoperaciones que resultan de la decodificación de instrucciones una vez que se procesa la instrucción.
En algunas formas de realización, las unidades de ejecución del procesador gráfico admiten, de forma nativa, instrucciones en un formato de instrucción 710 de 128 bits. Un formato de instrucción compactado 730 de 64 bits está disponible para algunas instrucciones en función de la instrucción seleccionada, las opciones de instrucción y el número de operandos. El formato de instrucción de 128 bits nativo 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 forma de realización. En algunas formas de realización, 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 basadas en los valores de índice y utiliza las salidas de la 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 opcode 712 define la operación que debe realizar la unidad de ejecución. Las unidades de ejecución ejecutan cada instrucción en paralelo a través de los múltiples elementos de datos de cada operando. Por ejemplo, en respuesta a una instrucción de adición, la unidad de ejecución realiza una operación de adición simultánea en cada canal de color que representa un elemento de textura o un elemento de imagen. De forma predeterminada, la unidad de ejecución ejecuta cada instrucción en todos los canales de datos de los operandos. En algunas formas de realización, el campo de control de instrucciones 714 permite el control sobre ciertas opciones de ejecución, tales como la selección de canales (p. ej., predicación) y la orden de los canales de datos (p. ej., en intercambio). Para 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 formas de realización, el campo de tamaño de ejecución 716 no está disponible para su uso en el formato de instrucción compacto de 64 bits 730.
Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 720, src1 722 y uno de destino 718. En algunas formas de realización, las unidades de ejecución admiten instrucciones de doble destino, en donde uno de los destinos está implícito. Las instrucciones de manipulación de datos pueden tener un tercer operando de origen (por ejemplo, SRC2 724), donde el código de operación de instrucción opcode 712 determina el número de operandos de origen. El último operando origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de forma rígida) que se pasa con la instrucción.
En algunas formas de realización, 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 más operandos se proporciona directamente mediante bits en la instrucción.
En algunas formas de realización, el formato de instrucción de 128 bits 710 incluye un campo de modo de acceso/dirección 726, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una forma de realización, el modo de acceso se utiliza para definir una alineación de acceso a datos para la instrucción. Algunas formas de realización admiten modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de 1 byte, en donde la alineación de bytes del modo de acceso determina la alineación de acceso de los operandos de instrucción. Por ejemplo, cuando está en un primer modo, la instrucción puede utilizar direccionamiento alineado por bytes para los operandos de origen y de destino y cuando está en un segundo modo, la instrucción puede utilizar direccionamiento alineado por 16 bytes para todos los operandos de origen y de destino.
En una forma de realización, la parte de modo de dirección del campo de modo de acceso/dirección 726 determina si la instrucción es para utilizar direccionamiento directo o indirecto. Cuando se utiliza el modo de direccionamiento de registro directo, los bits en la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se 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 de un campo inmediato de dirección en la instrucción.
En algunas formas de realización, las instrucciones se agrupan en función de los campos de bits del código de operación opcode 712 para simplificar la decodificación del código de operación opcode 740. Para un opcode de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código opcode. El agrupamiento preciso de códigos de operación opcode que se muestra, es simplemente un ejemplo. En algunas formas de realización, un grupo opcode de movimiento y lógica 742 incluye instrucciones lógicas y de movimiento de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas formas de realización, el grupo de movimiento y lógica 742 comparte los cinco bits más significativos (MSB), en 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, denominada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones diversas 746 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, esperar, enviar) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones matemáticas paralelas 748 incluye instrucciones aritméticas por componentes (por ejemplo, sumar, multiplicar (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo matemático paralelo 748 realiza las operaciones aritméticas en paralelo a través de los canales de datos. El grupo matemático vectorial 750 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo matemático vectorial realiza operaciones aritméticas, tales como cálculos de productos de puntos en operandos vectoriales.
Canalización de gráficos
La Figura 8 es un diagrama de bloques de otra forma de realización de un procesador gráfico 800. Los elementos de la Figura 8 que tienen las mismas referencias numéricas (o nombres) que los elementos de cualquier otra Figura en este documento pueden operar o funcionar de cualquier manera similar a la descrita en otras partes de este documento, pero no se limitan a las mismas.
En algunas formas de realización, el procesador gráfico 800 incluye una canalización de geometría 820, una canalización de medios 830, un motor de visualización 840, una lógica de ejecución de hilos 850 y una canalización de salida de renderizado 870. En algunas formas de realización, el procesador gráfico 800 es un procesador gráfico dentro de un sistema de procesamiento multinúcleo que incluye uno o más núcleos de procesamiento de uso general. El procesador gráfico se controla mediante escrituras de registro en uno o más registros de control (no ilustrados) o mediante órdenes emitidas al procesador gráfico 800 a través de una interconexión en anillo 802. En algunas formas de realización, la interconexión en anillo 802 acopla el procesador gráfico 800 a otros componentes de procesamiento, tales como otros procesadores gráficos o procesadores de uso general. Las órdenes desde la interconexión de anillo 802 son interpretadas por un transmisor de órdenes 803, que proporciona instrucciones a los componentes individuales de la canalización de geometría 820 o de la canalización de medios 830.
En algunas formas de realización, el transmisor de órdenes 803 dirige la operación de un captador de vértices 805 que realiza la lectura de los datos de vértices desde la memoria y ejecuta órdenes de procesamiento de vértices proporcionadas por el transmisor de órdenes 803. En algunas formas de realización, el captador de vértices 805 proporciona datos de vértices a un sombreador de vértices 807, que realiza operaciones de transformación e iluminación del espacio coordinado para cada vértice. En algunas formas de realización, el captador de vértices 805 y el sombreador de vértices 807 ejecutan instrucciones de procesamiento de vértices enviando hilos de ejecución a las unidades de ejecución 852A-852B a través de un dispositivo de envío de hilos 831.
En algunas formas de realización, las unidades de ejecución 852A-852B son una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones gráficas y de medios. En algunas formas de realización, las unidades de ejecución 852A-852B tienen una memoria caché L1 851 adjunta que es específica para cada matriz o compartida entre las matrices. La memoria caché se puede configurar como una memoria caché de datos, una memoria caché de instrucciones o una sola memoria caché que está dividida para contener datos e instrucciones en diferentes particiones.
En algunas formas de realización, la canalización de geometría 820 incluye componentes de teselado para realizar un teselado acelerado por hardware de objetos 3D. En algunas formas de realización, un sombreador de casco programable 811 configura las operaciones de teselado. Un sombreador de campo programable 817 proporciona una evaluación de extremo posterior de la salida del teselado. Un teselador 813 opera en la dirección del sombreador de casco 811 y contiene una lógica de uso 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 formas de realización, si no se utiliza el teselado, los componentes de teselado (p. ej., sombreador de casco 811, teselador 813 y sombreador de campo 817) se pueden omitir.
En algunas formas de realización, un sombreador de geometría 819 puede procesar objetos geométricos completos a través de uno o más hilos enviados a las unidades de ejecución 852A-852B, o puede proceder directamente al recortador 829. En algunas formas de realización, el sombreador de geometría opera en la totalidad de objetos geométricos, en lugar de vértices o parches de vértices como en etapas anteriores de la canalización de gráficos. Si el teselado está deshabilitado, el sombreador de geometría 819 recibe una entrada del sombreador de vértices 807. En algunas formas de realización, el sombreador de geometría 819 puede programarse mediante un programa de sombreador de geometría para realizar el teselado de geometría si las unidades de teselado 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 tenga funciones de recorte y de sombreador de geometría. En algunas formas de realización, un rasterizador y un componente de prueba de profundidad 873 en la canalización de salida de renderizado 870 envía sombreadores de píxeles para convertir los objetos geométricos en representaciones por píxel. En algunas formas de realización, la lógica del sombreador de píxeles se incluye en la lógica de ejecución de hilos 850. En algunas formas de realización, una aplicación puede omitir el rasterizador y el componente de prueba de profundidad 873 y acceder a los datos de vértice sin rasterizar a través de una unidad de flujo de salida 823.
El procesador gráfico 800 tiene un bus de interconexión, una estructura de interconexión o algún otro mecanismo de interconexión que permite la etapa de datos y mensajes entre los componentes principales del procesador. En algunas formas de realización, las unidades de ejecución 852A-852B y las unidades lógicas asociadas (p. ej., memoria caché L1 851, muestreador 854, memoria caché de textura 858, etc.) se interconectan a través de un puerto de datos 856 para acceder a la memoria y comunicarse con los componentes de canalización de salida de procesamiento del procesador. En algunas formas de realización, el muestreador 854, las memorias caché 851, 858 y las unidades de ejecución 852A-852B tienen rutas de acceso a la memoria separada. En una forma de realización, la memoria caché de texturas 858 también se puede configurar como una memoria caché de muestreador.
En algunas formas de realización, 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 basada en píxeles asociada. En algunas formas de realización, la lógica del rasterizador incluye una unidad de creación de ventana/enmascarador para realizar una función fija de rasterización de líneas y triángulos. Una memoria caché de renderizado asociada 878 y una memoria caché de profundidad 879 también están disponibles en algunas formas de realización. Un componente de operaciones de píxeles 877 realiza operaciones basadas en píxeles en los datos, aunque en algunos casos, las operaciones de píxeles asociadas con operaciones 2D (por ejemplo, transferencias de imágenes de bloques de bits con combinación) son realizadas por el motor 2D 841, o sustituidas en el momento de la visualización por el controlador de visualización 843 utilizando planos de visualización superpuestos. En algunas formas de realización, una memoria caché L3 compartida 875 está disponible para todos los componentes gráficos, lo que permite compartir datos sin el uso de la memoria del sistema principal.
En algunas formas de realización, la canalización de medios del procesador gráfico 830 incluye un motor de medios 837 y un extremo frontal de vídeo 834. En algunas formas de realización, el extremo frontal de vídeo 834 recibe órdenes de canalización del transmisor de órdenes 803. En algunas formas de realización, la canalización de medios 830 incluye un transmisor de orden separado. En algunas formas de realización, el extremo frontal de vídeo 834 procesa las órdenes de medios antes de enviar la orden al motor de medios 837. En algunas formas de realización, el motor de medios 837 incluye la funcionalidad de generación de hilos para generar hilos para enviarlos a la lógica de ejecución de hilos 850 a través del dispositivo de envío de hilos 831.
En algunas formas de realización, el procesador gráfico 800 incluye un motor de visualización 840. En otras formas de realización, el motor de visualización 840 es externo al procesador 800 y se acopla con el procesador gráfico a través de la interconexión en anillo 802, o algún otro bus o estructura de interconexión. En algunas formas de realización, el motor de visualización 840 incluye un motor 2D 841 y un controlador de visualización 843. En algunas formas de realización, el motor de visualización 840 contiene una lógica de uso especial capaz de operar de manera independiente de la canalización 3D. En algunas formas de realización, el controlador de visualización 843 se acopla con un dispositivo de visualización (no ilustrado), que puede ser un dispositivo de visualización integrado en el sistema, tal como en un ordenador portátil, o en un dispositivo de visualización externo conectado a través de un conector de dispositivo de visualización.
En algunas formas de realización, 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 de medios y no son específicas de ninguna interfaz de programación de aplicaciones (API). En algunas formas de realización, el software del controlador para el procesador gráfico traduce las demandas de API que son específicas de una biblioteca multimedia o de gráficos particular en órdenes que pueden ser procesadas por el procesador gráfico. En algunas formas de realización, se proporciona soporte para Open Graphics Library (OpenGL), Open Computing Language (OpenCL) y/o Vulkan Graphics and Compute API, todos del Grupo Khronos. En algunas formas de realización, también se puede proporcionar soporte para la biblioteca Direct3D de Microsoft Corporation. En otras formas de realización, se puede admitir una combinación de estas bibliotecas. También se puede proporcionar soporte para la Biblioteca de Visión Artificial de Código Abierto (OpenCV). También se admitiría una futura API con una canalización 3D compatible si se puede realizar una asignación desde la canalización de la futura API a la canalización del procesador gráfico.
Programación de canalización de gráficos
La Figura 9A es un diagrama de bloques que ilustra un formato de orden de procesador gráfico 900 según algunas formas de realización. La Figura 9B es un diagrama de bloques que ilustra una secuencia de órdenes del procesador gráfico 910 según una forma de realización. Las casillas con líneas continuas en la Figura 9A ilustran los componentes que se suelen incluir en un orden de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solamente se incluyen en un subconjunto de las órdenes de gráficos. El formato de orden de procesador gráfico 900 a modo de ejemplo de la Figura 9A incluye campos de datos para identificar un cliente 902, un código de operación de orden (opcode) 904 y datos 906 para la orden. En algunas órdenes también se incluyen un subcódigo de operación sub-opcode 905 y un tamaño de orden 908.
En algunas formas de realización, el cliente 902 especifica la unidad cliente del dispositivo gráfico que procesa los datos de orden. En otras formas de realización, un analizador de órdenes del procesador gráfico examina el campo de cliente de cada orden para condicionar el procesamiento posterior de la orden y enrutar los datos de la orden a la unidad de cliente apropiada. En algunas formas de realización, las unidades cliente del procesador gráfico incluyen una unidad de interfaz de memoria, una unidad de renderizado, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa las órdenes. Una vez que la unidad de cliente recibe la orden, la unidad de cliente realiza la lectura del código de operación opcode 904 y, si está presente, del subcódigo de operación sub-opcode 905 para determinar la operación a realizar. La unidad de cliente ejecuta la orden utilizando información en el campo de datos 906. Para algunas órdenes, se espera que un tamaño de orden explícito 908 especifique el tamaño de la orden. En otras formas de realización, el analizador de órdenes determina de manera automática el tamaño de al menos algunas de las órdenes basándose en la orden del código de operación opcode. En otras formas de realización, las órdenes se alinean mediante múltiplos de una palabra doble.
El diagrama de flujo en la Figura 9B ilustra una secuencia de órdenes de procesador gráfico 910 a modo de ejemplo. En algunas formas de realización, el software o firmware de un sistema de procesamiento de datos que presenta una forma de realización de un procesador gráfico utiliza una versión de la secuencia de órdenes que se muestra para configurar, ejecutar y finalizar un conjunto de operaciones gráficas. Se muestra y describe una secuencia de órdenes de muestra solamente con fines de ejemplo, ya que las formas de realización no se limitan a estas órdenes específicas o a esta secuencia de órdenes. Además, las órdenes pueden emitirse como un lote de órdenes en una secuencia de órdenes, de modo que el procesador gráfico procesará la secuencia de órdenes al menos parcialmente de forma concurrente.
En otras formas de realización, la secuencia de órdenes del procesador gráfico 910 puede comenzar con una orden de vaciado de canalización 912 para hacer que cualquier canalización de gráficos activa complete las órdenes actualmente pendientes para la canalización. En algunas formas de realización, la canalización 3D 922 y la canalización de medios 924 no funcionan de manera simultánea. El vaciado de la canalización se realiza para que la canalización de gráficos activa complete las órdenes pendientes. En respuesta a un vaciado de canalización, el analizador de órdenes para el procesador gráfico detendrá el procesamiento de órdenes hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las memorias caché de lectura pertinentes. De manera opcional, cualquier dato en la memoria caché de renderizado que esté marcado como 'sucio' se puede vaciar en la memoria. En algunas formas de realización, la orden de vaciado de canalización 912 se puede utilizar para la sincronización de la canalización o antes de poner el procesador gráfico en un estado de bajo consumo.
En algunas formas de realización, se utiliza una orden de selección de canalización 913 cuando una secuencia de órdenes requiere que el procesador gráfico cambie de manera explícita entre canalizaciones. En algunas formas de realización, se requiere una orden de selección de canalización 913 solamente una vez dentro de un contexto de ejecución antes de emitir órdenes de canalización a menos que el contexto sea para emitir órdenes para ambas canalizaciones. En algunas formas de realización, se requiere una orden de vaciado de canalización 912 inmediatamente antes de un cambio de canalización mediante la orden de selección de canalización 913.
En otras formas de realización, una orden de control de canalización 914 configura una canalización de gráficos para su funcionamiento y se utiliza para programar la canalización 3D 922 y la canalización de medios 924. En algunas formas de realización, la orden de control de canalización 914 configura el estado de canalización para la canalización activa. En una forma de realización, la orden de control de canalización 914 se utiliza para la sincronización de canalización y para borrar datos de una o más memorias caché dentro de la canalización activa antes de procesar un lote de órdenes.
En algunas formas de realización, las órdenes de estado de la memoria intermedia de retorno 916 se utilizan para configurar un conjunto de memorias intermedias de retorno para que las canalizaciones respectivas escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o más memorias intermedias de retorno en los que las operaciones escriben datos intermedios durante el procesamiento. En algunas formas de realización, el procesador gráfico también utiliza una o más memorias intermedias de retorno para almacenar datos de salida y realizar una comunicación a través de los hilos. En algunas formas de realización, el estado de la memoria intermedia de retorno 916 incluye seleccionar el tamaño y el número de memorias intermedias de retorno para utilizar para un conjunto de operaciones de canalización.
Las órdenes restantes, en la secuencia de órdenes, difieren en función de la canalización activa para las operaciones. Sobre la base de una determinación de canalización 920, la secuencia de órdenes se adapta a la canalización 3D 922 comenzando con el estado de canalización 3D 930 o la canalización de medios 924 iniciándose en el estado de canalización de medios 940.
Las órdenes para configurar el estado de canalización 3D 930 incluyen órdenes de configuración de estado 3D para el estado de memoria intermedia de vértice, el estado de elemento de vértice, el estado de color constante, el estado de memoria intermedia de profundidad y otras variables de estado que deben configurarse antes de que se procesen las órdenes de primitivos 3D. Los valores de estas órdenes se determinan, al menos en parte, en función de la API 3D particular en uso. En algunas formas de realización, las órdenes de estado de canalización 3D 930 también pueden deshabilitar u omitir de manera selectiva ciertos elementos de canalización si dichos elementos no se van a utilizar.
En otras formas de realización, la orden de primitivo 3D 932 se utiliza para enviar primitivos 3D para que sean procesados por la canalización 3D. Las órdenes y los parámetros asociados que se pasan al procesador gráfico a través de la orden de primitivo 3D 932 se reenvían a la función de captación de vértices en la canalización de gráficos. La función de captación de vértice utiliza los datos de orden de primitivo 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 formas de realización, la orden de primitivo 3D 932 se utiliza para realizar operaciones de vértice en primitivos 3D a mediante sombreadores de vértice. Para procesar los sombreadores de vértices, la canalización 3D 922 envía hilos de ejecución de sombreadores a las unidades de ejecución del procesador gráfico.
En algunas formas de realización, la canalización 3D 922 se activa a través de una orden o evento de ejecución 934. En otras formas de realización, una escritura de registro desencadena la ejecución de una orden. En otras formas de realización, la ejecución se desencadena mediante una orden "go" o "kick" en la secuencia de órdenes. En una forma de realización, la ejecución de la orden se desencadena utilizando una orden de sincronización de canalización para vaciar la secuencia de órdenes a través de la canalización de gráficos. La canalización 3D realizará el procesamiento de geometría para los primitivos 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 órdenes adicionales para controlar el sombreado de píxeles y las operaciones de extremo posterior de píxeles para dichas operaciones.
En algunas formas de realización, la secuencia de órdenes del procesador gráfico 910 sigue la ruta de canalización de medios 924 cuando se realizan operaciones de medios. En general, el uso especificado y la forma de programación para la canalización de medios 924 depende de las operaciones de medios o del cálculo a realizar. Las operaciones específicas de decodificación de medios pueden descargarse a la canalización de medios durante la decodificación de medios. En algunas formas de realización, la canalización de medios también se puede omitir y la decodificación de medios se puede realizar en su totalidad o en parte utilizando los recursos proporcionados por uno o más núcleos de procesamiento de uso general. En una forma de realización, la canalización de medios también incluye elementos para operaciones de unidad de procesador gráfico de uso general (GPGPU), en donde el procesador gráfico se utiliza para realizar operaciones de vector SIMD utilizando programas de sombreador de cálculo informático que no están relacionados explícitamente con el renderizado de primitivos de gráficos.
En algunas formas de realización, la canalización de medios 924 se configura de manera similar a la canalización 3D 922. Un conjunto de órdenes para configurar el estado de la canalización de medios 940 se envían o se colocan en una cola de espera de órdenes antes de las órdenes del objeto de medios 942. En otras formas de realización, las órdenes para el estado de canalización de medios 940 incluyen datos para configurar los elementos de canalización de medios que se utilizarán para procesar los objetos de medios. Lo que antecede incluye datos para configurar la decodificación de vídeo y la lógica de codificación de vídeo dentro de la canalización de medios, tal como el formato de codificación o de decodificación. En algunas formas de realización, las órdenes para el estado de canalización de medios 940 también admiten el uso de uno o más punteros a elementos de estado "indirectos" que contienen un lote de configuraciones de estado.
En algunas formas de realización, las órdenes de objetos de medios 942 proporcionan punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias que contienen datos de vídeo para ser procesados. En algunas formas de realización, todos los estados de la canalización de medios deben ser válidos antes de emitir una orden de objeto de medios 942. Una vez que se configura el estado de la canalización y las órdenes de objetos de medios 942 están en cola de espera, la canalización de medios 924 se activa mediante una orden de ejecución 944 o un evento de ejecución equivalente (p. ej., escritura de registro). La salida desde la canalización de medios 924 puede, a continuación, procesarse posteriormente mediante operaciones proporcionadas por la canalización 3D 922 o la canalización de medios 924. En algunas formas de realización, las operaciones GPGPU se configuran y ejecutan de manera similar a las operaciones de medios.
Arquitectura de software de gráficos
La Figura 10 ilustra una arquitectura de software de gráficos a modo de ejemplo para un sistema de procesamiento de datos 1000 según algunas formas de realización. En algunas formas de realización, la arquitectura de software incluye una aplicación de gráficos en 3D 1010, un sistema operativo 1020 y al menos un procesador 1030. En otras formas de realización, el procesador 1030 incluye un procesador gráfico 1032 y uno o más núcleos de procesador de uso general 1034. La aplicación de gráficos 1010 y el sistema operativo 1020 se ejecutan, cada uno, en la memoria del sistema 1050 del sistema de procesamiento de datos.
En algunas formas de realización, la aplicación de gráficos 3D 1010 contiene uno o más programas de sombreador que incluyen instrucciones de sombreador 1012. Las instrucciones del lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el lenguaje de sombreador de alto nivel (HLSL) o el lenguaje de sombreador OpenGL (GLSL). La aplicación también incluye instrucciones ejecutables 1014 en un lenguaje de máquina adecuado para su ejecución por el núcleo del procesador de uso general 1034. La aplicación también incluye objetos gráficos 1016 definidos por datos de vértice.
En otras formas de realización, el sistema operativo 1020 es un sistema operativo de Microsoft® Windows® de Microsoft Corporation, un sistema operativo patentado similar a UNIX o un sistema operativo similar a UNIX de fuente abierta que utiliza una variante del núcleo de Linux. El sistema operativo 1020 puede soportar una API de gráficos 1022 tal como la API de Direct3D, la API de OpenGL o la API de Vulkan. Cuando la API de Direct3D está en uso, el sistema operativo 1020 utiliza un compilador de sombreador de extremo frontal 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 realizar una precompilación de sombreadores. En algunas formas de realización, 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 formas de realización, las instrucciones de sombreador 1012 se proporcionan en una forma intermedia, tal como una versión de la representación intermedia portátil estándar (SPIR) utilizada por la API de Vulkan.
En otras formas de realización, el controlador de gráficos de modo de usuario 1026 contiene un compilador de sombreador de extremo posterior 1027 para convertir las instrucciones de sombreador 1012 en una representación específica de hardware. Cuando la API de OpenGL está en uso, 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 formas de realización, el controlador de gráficos en modo de usuario 1026 utiliza las funciones de modo kernel (núcleo) del sistema operativo 1028 para comunicarse con un controlador de gráficos en modo kernel 1029. En algunas formas de realización, el controlador de gráficos en modo kernel 1029 se comunica con el procesador gráfico 1032 para enviar órdenes e instrucciones.
Puestas en práctica de núcleos IP
Uno o más aspectos de al menos una forma de realización pueden ponerse en práctica 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 varias lógicas dentro del procesador. Cuando son objeto de lectura por una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en este documento. Dichas representaciones, conocidas como "núcleos de IP", son unidades de lógica reutilizables para un circuito integrado que pueden almacenarse en un medio tangible legible por máquina tal como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware se puede suministrar a varios clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que producen el circuito integrado. El circuito integrado se puede fabricar de manera que el circuito realice las operaciones descritas en asociación con cualquiera de las formas de realización descritas en el presente documento.
La Figura 11A es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 1100 que puede utilizarse para fabricar un circuito integrado para realizar operaciones de conformidad con una forma de realización. El sistema de desarrollo de núcleo IP 1100 puede utilizarse para generar diseños modulares 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 de IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). La simulación de software 1110 puede utilizarse para diseñar, probar y verificar el comportamiento del núcleo de 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. A continuación, 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 realizada utilizando las señales digitales modeladas, además, de un diseño RTL 1115, también pueden crearse, diseñarse o sintetizarse diseños de nivel inferior a nivel lógico o a nivel de transistor. Por lo tanto, los detalles particulares del diseño inicial y de la simulación pueden variar.
El diseño RTL 1115 o equivalente puede sintetizarse aún más mediante la funció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 simularse o probarse además para verificar el diseño del núcleo de IP. El diseño del núcleo de IP se puede almacenar para entregarlo a una instalación de fabricación de 3os 1165 utilizando una memoria no volátil 1140 (por ejemplo, disco duro, memoria instantánea o cualquier medio de almacenamiento no volátil). De manera alternativa, el diseño del núcleo de IP puede transmitirse (por ejemplo, mediante 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 base al menos en parte en el diseño del núcleo de IP. El circuito integrado fabricado puede configurarse para realizar operaciones de conformidad con al menos una forma de realización descrita en este documento.
La Figura 11B ilustra una vista lateral en sección transversal de un conjunto de paquete de circuito integrado 1170, según algunas formas de realización descritas en el presente documento. El conjunto de paquete de circuitos integrados 1170 ilustra una puesta en práctica de uno o más dispositivos procesadores o aceleradores tal como se describe en este 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 ponerse en práctica al menos parcialmente en hardware de lógica configurable o de lógica de funcionalidad fija, y puede incluir una o más partes de cualquiera de el(los) núcleo(s) del procesador, el(los) procesador(es) de gráficos u otros dispositivos aceleradores descritos en este documento. Cada unidad de lógica 1172, 1174 puede ponerse en práctica dentro de una matriz de semiconductores y acoplarse con el sustrato 1180 a través de una estructura de interconexión 1173. La estructura de interconexión 1173 puede configurarse para enrutar señales eléctricas entre la lógica 1172, 1174 y el sustrato 1180, y puede incluir interconexiones tales como, entre otras, protuberancias o pilares. En algunas formas de realización, la estructura de interconexión 1173 puede configurarse para enrutar señales eléctricas tales como, por ejemplo, señales de entrada/salida (E/S) y/o señales de alimentación o de puesta a masa asociadas con el funcionamiento de la lógica 1172, 1174. En algunas formas de realización, el sustrato 1180 es un sustrato laminado a base de epoxi. El sustrato de paquete 1180 puede incluir otros tipos adecuados de sustratos en otras formas de realización. El conjunto de paquete 1170 se puede conectar a otros dispositivos eléctricos a través de una interconexión de paquete 1183. La interconexión de paquete 1183 se puede acoplar a una superficie del sustrato 1180 para enrutar señales eléctricas a otros dispositivos eléctricos, tal como una placa base, otro conjunto de circuito integrado o un módulo de múltiples circuitos impresos.
En otras formas de realización, las unidades de la lógica 1172, 1174 están eléctricamente acopladas con un puente 1182 que está configurado para enrutar señales eléctricas entre la lógica 1172, 1174. El puente 1182 puede ser una estructura de interconexión densa que proporciona una ruta para las señales eléctricas. El puente 1182 puede incluir un sustrato de puente compuesto de vidrio o de un material semiconductor adecuado. Las características de enrutamiento eléctrico se pueden formar en el sustrato del puente para proporcionar una conexión de circuito integrado a circuito integrado entre la lógica 1172, 1174.
Aunque se ilustran dos unidades de lógica 1172, 1174 y un puente 1182, las formas de realización descritas en este documento pueden incluir más o menos unidades lógicas en una o más matrices. Las unas o más matrices pueden estar conectadas por cero o más puentes, ya que el puente 1182 puede excluirse cuando la lógica está incluida en una matriz única. De manera alternativa, se pueden conectar varios matrices o unidades de lógica mediante uno o más puentes. Además, se pueden conectar varias unidades lógicas, matrices y puentes en otras configuraciones posibles, incluyendo las configuraciones tridimensionales.
Sistema, a modo de ejemplo, en un circuito integrado en chip
Las Figuras 12 a 14 ilustran ejemplos de circuitos integrados y de procesadores gráficos asociados que pueden fabricarse utilizando uno o más núcleos de IP, de conformidad con varias formas de realización descritas en este documento, además, de lo que se ilustra, se pueden incluir otras lógicas y circuitos, incluyendo procesadores/núcleos de gráficos adicionales, controladores de interfaz periféricos o núcleos de procesadores de uso general.
La Figura 12 es un diagrama de bloques que ilustra un sistema, a modo de ejemplo, en un circuito integrado chip 1200 que puede fabricarse utilizando uno o más núcleos de IP, según una forma de realización. El circuito integrado a modo de ejemplo 1200 incluye uno o más procesadores de aplicaciones 1205 (por ejemplo, CPUs), al menos un procesador gráfico 1210, y puede incluir de manera adicional un procesador de imágenes 1215 y/o un procesador de vídeo 1220, cualquiera de los cuales puede ser un núcleo de IP modular de la misma o diversas instalaciones de diseño diferentes. El circuito integrado 1200 incluye una lógica de bus o periférico que incluye un controlador USB 1225, un controlador UART 1230, un controlador SPI/SDIO 1235 y un controlador I2S/I2C 1240. Además, el circuito integrado puede incluir un dispositivo de visualización 1245 acoplado a uno o más de entre un controlador de interfaz multimedia de alta definición (HDMI) 1250 y una interfaz de visualización del tipo de interfaz de procesador de industria móvil (MIPI) 1255. El almacenamiento puede ser proporcionado por un subsistema de memoria instantánea 1260 que incluye memoria instantánea y un controlador de memoria instantánea. La interfaz de memoria se puede proporcionar a través de un controlador de memoria 1265 para acceder a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen, además, un motor de seguridad integrado 1270.
Las Figuras 13A a 13B son diagramas de bloques que ilustran ejemplos de procesadores gráficos para utilizar dentro de un SoC, de conformidad con las formas de realización descritas en este documento. La Figura 13A ilustra un procesador gráfico a modo de ejemplo 1310 de un sistema en un circuito integrado en chip que puede fabricarse utilizando uno o más núcleos de IP, según una forma de realización. La Figura 13B ilustra un procesador gráfico a modo de ejemplo adicional 1340 de un sistema en un circuito integrado en chip que puede fabricarse utilizando uno o más núcleos de IP, según una forma de realización. El procesador gráfico 1310 de la Figura 13A es un ejemplo de un núcleo de procesador gráfico de baja potencia. El procesador gráfico 1340 de la Figura 13B es un ejemplo de un núcleo de procesador gráfico de mayor rendimiento. Cada uno de los procesadores gráficos 1310, 1340 pueden ser variantes del procesador gráfico 1210 de la Figura 12.
Tal como se muestra en la Figura 13A, el procesador gráfico 1310 incluye un procesador de vértices 1305 y uno o más procesador(es) de fragmentos 1315A-1315N (por ejemplo, 1315A, 1315B, 1315C, 1315D, 1315N-1 y 1315N). El procesador gráfico 1310 puede ejecutar diferentes programas de sombreador a través de una lógica separada, de modo que el procesador de vértices 1305 esté optimizado para ejecutar operaciones para programas de sombreador de vértices, mientras que los uno o más procesador(es) de fragmentos 1315A-1315N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreador de fragmentos o píxeles. El procesador de vértices 1305 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera primitivos y datos de vértices. El procesador(es) de fragmentos 1315A-1315N utiliza los datos primitivos y de vértice generados por el procesador de vértice 1305 para obtener una memoria intermedia de tramas que se muestra en un dispositivo de visualización. En una forma de realización, el procesador(es) de fragmentos 1315A-1315N está optimizado para ejecutar programas de sombreador de fragmentos según lo dispuesto en la API de OpenGL, que puede utilizarse para realizar operaciones similares tales como un programa de sombreador de píxeles según lo dispuesto en la API Direct 3D.
El procesador gráfico 1310 incluye, además, una o más unidades de gestión de memoria (MMUs) 1320A-1320B, memoria caché(s) 1325A-1325B e interconexión(es) de circuito 1330A-1330B. La(s) Mm U(s) 1320A-1320B proporciona una asignación de dirección virtual a física para el procesador gráfico 1310, incluido el procesador de vértices 1305 y/o el(los) procesador(es) de fragmentos 1315A-1315N, que pueden hacer referencia a datos de vértices o imágenes/texturas almacenadas en la memoria, además, de los datos de vértice o de imagen/textura almacenados en una o más memoria(s) caché 1325A-1325B. En una forma de realización, las una o más MMU(s) 1320A-1320B pueden sincronizarse con otras MMUs dentro del sistema, incluyendo una o más MMUs asociadas con uno o más procesador(es) de aplicación 1205, procesador de imagen 1215 y/o procesador de vídeo 1220 de la Figura 12, de modo que cada procesador 1205-1220 pueda participar en un sistema de memoria virtual compartida o unificada. La(s) interconexión(es) de uno o más circuitos 1330A-1330B permiten que el procesador gráfico 1310 interactúe con otros núcleos IP dentro del SoC, ya sea a través de un bus interno del SoC o mediante una conexión directa, según las formas de realización.
Tal como se muestra en la Figura 13B, el procesador gráfico 1340 incluye las una o más MMU(s) 1320A-1320B, memoria caché 1325A-1325B e interconexiones de circuito 1330A-1330B del procesador gráfico 1310 de la Figura 13A. El procesador gráfico 1340 incluye uno o más núcleo(s) de sombreador 1355A-1355N (por ejemplo, 1455A, 1355B, 1355C, 1355D, 1355E, 1355F, hasta 1355N-1 y 1355N), que proporciona una arquitectura de núcleo de sombreador unificada en donde un único núcleo o tipo de núcleo puede ejecutar todo tipo de código de sombreador programable, incluido el código de programa de sombreador para poner en práctica sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cálculo informático. El número exacto de núcleos de sombreador presentes puede variar entre formas de realización y puestas en práctica. Además, el procesador gráfico 1340 incluye un administrador de tareas entre núcleos 1345, que actúa como un dispositivo de envío de hilos para enviar hilos 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 donde las operaciones de renderizado de una escena se subdividen en espacio de imagen, por ejemplo, para utilizar la coherencia espacial local dentro de una escena o para optimizar el uso de memoria caché interna.
Las Figuras 14A-14B ilustran una lógica de procesador gráfico a modo de ejemplo adicional de conformidad con las formas de realización descritas en el presente documento. La Figura 14A ilustra un núcleo de gráficos 1400 que se puede incluir dentro del procesador gráfico 1210 de la Figura 12, y puede ser un núcleo de sombreador unificado 1355A-1355N tal como en la Figura 13B. La Figura 14B ilustra una unidad adicional de procesamiento de gráficos de uso general altamente paralela 1430, que es una unidad de procesamiento de gráficos de uso general altamente paralela adecuada para el despliegue en un módulo de múltiples circuitos integrados.
Tal como se muestra en la Figura 14A, el núcleo de gráficos 1400 incluye una memoria caché de instrucciones compartida 1402, una unidad de textura 1418 y una memoria caché/memoria compartida 1420 que son comunes a los recursos de ejecución dentro del núcleo de gráficos 1400. El núcleo de gráficos 1400 puede incluir múltiples segmentos 1401A-1401N o partición para cada núcleo, y un procesador gráfico puede incluir múltiples instancias del núcleo de gráficos 1400. Los segmentos 1401A-1401N pueden incluir lógica de soporte que comprende una memoria caché de instrucciones local 1404A-1404N, un planificador de hilos 1406A-1406N, un dispositivo de envío de hilos 1408A-1408N y un conjunto de registros 1410A-1440N. Para realizar operaciones lógicas, los segmentos 1401A-1401N pueden incluir un conjunto de unidades de funciones adicionales (AFUs 1412A-1412N), unidades de coma flotante (FPU 1414A-1414N), unidades lógicas aritméticas de enteros (ALUs 1416-1416N), unidades de cálculo de direcciones (ACU 1413A-1413N), unidades de coma flotante de doble precisión (DPFPU 1415A-1415N) y unidades de procesamiento matricial (MPU 1417A-1417N).
Algunas de las unidades de cálculo operan con una precisión específica. Por ejemplo, las FPUs 1414A-1414N pueden realizar operaciones de coma flotante de precisión simple (32 bits) y de semiprecisión (16 bits), mientras que las DPFPUs 1415A-1415N realizan operaciones de coma flotante de doble precisión (64 bits). Las ALUs 1416A-1416N pueden realizar operaciones con enteros de precisión variable con precisión de 8 bits, 16 bits y 32 bits, y se pueden configurar para operaciones de precisión mixta. Las MPUs 1417A-1417N también se pueden configurar para operaciones matriciales de precisión mixta, incluyendo operaciones de coma flotante de semiprecisión y operaciones de enteros de 8 bits. Las MPUs 1417-1417N pueden realizar una variedad de operaciones matriciales para acelerar las estructuras de aplicaciones de aprendizaje por máquina, incluyendo la habilitación del soporte para la multiplicación general acelerada de matriz a matriz (GEMM). Las AFUs 1412A-1412N pueden realizar operaciones lógicas adicionales que no son compatibles con las unidades de números enteros o de coma flotante, incluyendo las operaciones trigonométricas (p. ej., Seno, Coseno, etc.).
Tal como se muestra en la Figura 14B, una unidad de procesamiento de uso general (GPGPU) 1430 puede configurarse 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 un agrupamiento multi-GPU para mejorar la velocidad de aprendizaje para redes neuronales particularmente profundas. La GPGPU 1430 incluye una interfaz de host 1432 para permitir una conexión con un procesador de host. En una forma de realización, la interfaz de host 1432 es una interfaz PCI Express. Sin embargo, la interfaz de host también puede ser una interfaz de comunicaciones o un tejido de comunicaciones especificado del proveedor. La GPGPU 1430 recibe órdenes del procesador principal y utiliza un planificador global 1434 para distribuir hilos de ejecución asociados con esas órdenes a un conjunto de agrupamientos de cálculo informático 1436A-1436H. Los agrupamientos de cálculo informático 1436A-1436H comparten una memoria caché 1438. La memoria caché 1438 puede servir como memoria caché de nivel superior para las memorias caché dentro de los agrupamientos de cálculo informático 1436A-1436H.
La GPGPU 1430 incluye la memoria 14434A-14434B acoplada con los agrupamientos de cálculo informático 1436A-1436H a través de un conjunto de controladores de memoria 1442A-1442B. En varias formas de realización, la memoria 1434A-1434B puede incluir varios tipos de dispositivos de memoria, incluyendo la memoria de acceso aleatorio dinámico (DRAM) o la memoria de acceso aleatorio de gráficos, tal como la memoria de acceso aleatorio de gráficos sincrónicos (SGRAM), incluyendo la memoria de doble tasa de datos gráficos (GDDR).
En una forma de realización, los agrupamientos de cálculo informático 1436A-1436H incluyen, cada uno, un conjunto de núcleos de gráficos, tal como el núcleo de gráficos 1400 de la Figura 14A, que puede incluir varios tipos de unidades lógicas de números enteros y de coma flotante que pueden realizar operaciones de cálculo informático en un margen de precisiones, incluyendo las adecuadas para cálculos de aprendizaje por máquina. Por ejemplo, y en una forma de realización, al menos un subconjunto de las unidades de coma flotante en cada uno de los agrupamientos de cálculo informático 1436A-1436H se puede configurar para realizar operaciones de coma flotante de 16 bits o 32 bits, mientras que un subconjunto diferente de las unidades de coma flotante se puede configurar para realizar operaciones de coma flotante de 64 bits.
Se pueden configurar múltiples instancias de la GPGPU 1430 para operar como un agrupamiento de cálculo informático. El mecanismo de comunicación utilizado por el agrupamiento de cálculo informático para la sincronización y el intercambio de datos varía según las formas de realización. En una forma de realización, las múltiples instancias de la GPGPU 1430 se comunican a través de la interfaz del host 1432. En una forma de realización, la GPGPU 1430 incluye un concentrador de E/S 1439 que acopla la GPGPU 1430 con un enlace GPU 1440 que permite una conexión directa a otras instancias de la GPGPU. En una forma de realización, el enlace de GPU 1440 está acoplado a un puente de GPU a GPU dedicado que permite la comunicación y sincronización entre múltiples instancias de GPGPU 1430. En una forma de realización, el enlace de GPU 1440 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPUs o procesadores paralelos. En una forma de realización, las instancias múltiples 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 host 1432. En una forma de realización, el enlace GPU 1440 puede configurarse para permitir una conexión a un procesador host, además de, o como una alternativa a, la interfaz de host 1432.
Mientras que la configuración ilustrada de la GPGPU 1430 se puede configurar para redes neuronales en formación, una forma de realización proporciona una configuración alternativa de la GPGPU 1430 que se pueda configurar para su desarrollo dentro de una plataforma de inferencia de alto rendimiento o de baja potencia. En una configuración de inferencia, la GPGPU 1430 incluye menos agrupamientos de cálculo informático 1436A-1436H en relación con la configuración de formación. Además, la tecnología de memoria asociada con la memoria 1434A-1434B puede diferir entre configuraciones de inferencia y de formación, con tecnologías de memoria de mayor ancho de banda dedicadas a configuraciones de formación. En una forma de realización, la configuración de inferencia de la GPGPU 1430 puede admitir instrucciones específicas de inferencia. Por ejemplo, una configuración de inferencia puede proporcionar soporte para una o más instrucciones de productos de puntos de enteros de 8 bits, que se suelen utilizar durante las operaciones de inferencia para las redes neuronales puesta en práctica.
TRAZADO DE RAYOS CON APRENDIZAJE POR MÁQUINA
Ta como se mencionó con anterioridad, el trazado de rayos es una técnica de procesamiento de gráficos en donde se simula un transporte de luz a través de un renderizado con base física. Una de las operaciones clave en el trazado de rayos es procesar una consulta de visibilidad que requiera pruebas transversales y de intersección de nodos en una jerarquía de volumen límite (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 muestreado aleatorio para calcular efectos avanzados tales como sombras, brillo, iluminación indirecta, etc.. Utilizar solamente unas pocas muestras es rápido, pero produce imágenes ruidosas mientras que utilizar muchas muestras produce imágenes de alta calidad, pero su coste es prohibitivo.
En los últimos años, una solución innovadora para el trazado de rayos/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/eliminadas de ruido de alta calidad de entradas ruidosas de bajo conteo de muestras. Las técnicas de eliminación de ruido más efectivas se basan en técnicas de aprendizaje por máquina en las que un motor de aprendizaje por máquina aprende cómo se vería probablemente una imagen con ruido si se hubiera calculado con más muestras. En una puesta en práctica particular, el aprendizaje por máquina lo realiza una red neuronal convolucional (CNN); sin embargo, los principios subyacentes de la invención no se limitan a una puesta en práctica de CNN. En una puesta en práctica de este tipo, los datos de formación se producen con entradas de bajo conteo de muestras y verificación in situ. La CNN es objeto de formación para predecir el píxel convergente a partir de una proximidad de entradas de píxeles ruidosos alrededor del píxel en cuestión.
Aunque no es perfecta, esta técnica de eliminación de ruido basada en AI ha demostrado ser sorprendentemente eficaz. Sin embargo, la advertencia es que se requieren buenos datos de formación, ya que, de lo contrario, la red podría predecir resultados incorrectos. Por ejemplo, si un estudio de cine animado promociona una CNN de eliminación de ruido en películas anteriores con escenas sobre el terreno y luego intentó utilizar la CNN en formación para eliminar tramas 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 forma de realización de la invención recopila datos de aprendizaje de forma dinámica, mientras se renderiza, y es objeto de formación de manera continua un motor de aprendizaje por máquina, tal como una CNN, en función de los datos en los que se está ejecutando actualmente, mejorando así de manera continua el motor de aprendizaje por máquina para la tarea en cuestión. Esta forma de realización aún puede realizar una fase de formación antes del tiempo de ejecución, pero continúa ajustando los pesos de aprendizaje por máquina según sea necesario durante el tiempo de ejecución. Además, esta forma de realización evita el alto coste de calcular los datos de referencia requeridos para la formación restringiendo la generación de datos de aprendizaje a una subzona de la imagen en cada trama o en cada N tramas. En particular, las entradas ruidosas de una trama se generan para eliminar el ruido de la trama completa con la red actual, además, se genera una pequeña zona de píxeles de referencia y se utiliza para una formación continua, tal como se describe a continuación.
Si bien se describe una puesta en práctica de CNN con respecto a algunas formas de realización, se puede utilizar cualquier forma de motor de aprendizaje por máquina que incluya, pero sin limitación, sistemas que realizan un aprendizaje supervisado (p. ej., la construcción de un modelo matemático de un conjunto de datos que contiene tanto las entradas y las salidas deseadas), el aprendizaje no supervisado (por ejemplo, que evalúan los datos de entrada para ciertos tipos de estructura), y/o una combinación de aprendizaje supervisado y no supervisado.
Las puestas en práctica de eliminación de ruido existentes operan en una fase de formación y en una fase de tiempo de ejecución. Durante la fase de formación, se define una topología de red que recibe una zona de NxN píxeles con varios canales de datos por píxel, tales como color de píxel, profundidad, normal, desviación normal, ID primitivos y albedo, y genera un color de píxel final. Se genera un conjunto de datos de formación "representativos" utilizando el valor de una trama de entradas de bajo conteo de muestra y haciendo referencia a los colores de píxeles "deseados" calculados con un muy alto conteo de muestra. La red está en formación hacia estas entradas, generando un conjunto de pesos "ideales" para la red. En estas puestas en práctica, los datos de referencia se utilizan para la formación los pesos de ponderación de la red para que coincidan lo más posible con la salida de la red con el resultado deseado.
En tiempo de ejecución, se cargan los pesos de red ideales precalculados dados y se inicializa la red. Para cada trama, se genera una imagen de bajo conteo de muestra de entradas de eliminación de ruido (es decir, la misma que se utiliza para la formación). Para cada píxel, la proximidad dada de entradas de píxeles se ejecuta a través de la red para predecir el color del píxel "sin ruido", generando una estructura sin ruido.
La Figura 15 ilustra una forma de realización de una puesta en práctica de formación inicial. Un motor de aprendizaje por máquina 1500 (p. ej., una CNN) recibe una zona de N x N píxeles como datos de imagen de alto conteo de muestra 1702 con varios canales de datos por píxel, tal como color de píxel, profundidad, normal, desviación normal, ID primitivos y albedo y genera colores de píxeles finales. Los datos de aprendizaje representativos se generan utilizando el valor de una sola trama de entradas de bajo conteo de muestra 1501. La red está en formación hacia estas entradas, generando un conjunto de pesos "ideales" 1505 que el motor de aprendizaje por máquina 1500 utilizará posteriormente para eliminar el ruido de las imágenes de bajo conteo de muestra en tiempo de ejecución.
Para mejorar las técnicas anteriores, una forma de realización de la invención aumenta la fase de eliminación de ruido para generar nuevos datos de formación en cada trama o en un subconjunto de tramas (por ejemplo, cada N tramas donde N = 2, 3, 4, 10, 25, etc.). En particular, tal como se ilustra en la Figura 16, esta forma de realización elige una o más zonas en cada trama, aquí demandas "nuevas zonas de referencia" 1602 que son objeto de renderizado con un alto conteo de muestras en una memoria intermedia de alto conteo de muestras separado 1604. Una memoria intermedia de conteo 1603 almacena la trama de entrada de bajo conteo de muestra 1601 (incluyendo la zona de bajo conteo de muestra 1604 correspondiente a la nueva zona de referencia 1602).
En una forma de realización, la ubicación de la nueva zona de referencia 1602 se selecciona de manera aleatoria. De manera alternativa, la ubicación de la nueva zona de referencia 1602 se puede ajustar de una manera preespecificada para cada nueva trama (por ejemplo, utilizando un movimiento predefinido de la zona entre tramas, limitado a una zona específica en el centro de la trama, etc.).
De manera independiente de cómo se seleccione la nueva zona de referencia, el motor de aprendizaje por máquina 1600 la utiliza para refinar y actualizar de manera continua los pesos de ponderación en formación 1605 utilizados para la eliminación de ruido. En particular, son objeto de renderizado los colores de píxeles de referencia de cada nueva zona de referencia 1602 y las entradas de píxeles de referencia ruidosas de una zona de bajo conteo de muestra correspondiente 1607. A continuación, se realiza una formación complementaria en el motor de aprendizaje por máquina 1600 utilizando la zona de referencia de alto conteo de muestras 1602 y la zona de bajo conteo de muestras 1607 correspondiente. En contraste con la formación inicial, esta formación se realiza de manera continua durante el tiempo de ejecución para cada nueva zona de referencia 1602 con lo que se asegura así que el motor de aprendizaje por máquina 1600 sea objeto de una formación precisa. Por ejemplo, pueden evaluarse canales de datos por píxel (p. ej., color de píxel, profundidad, normal, desviación normal, etc.), que el motor de aprendizaje por máquina 1600 utilice para realizar ajustes en los pesos de ponderación en formación 1605. Como en el caso de formación (Figura 15), el motor de aprendizaje por máquina 1600 es objeto de formación hacia un conjunto de pesos ideales 1605 para eliminar el ruido de la trama de entrada de bajo conteo de muestras 1601 para generar la trama sin ruido 1620. Sin embargo, en esta forma de realización, los pesos de ponderación en formación 1605 se actualizan de manera continua, en base a nuevas características de imagen de nuevos tipos de tramas de entrada de bajo conteo de muestras 1601.
En una forma de realización, las operaciones de re-formación realizadas por el motor de aprendizaje por máquina 1600 se ejecutan de manera simultánea en un proceso en segundo plano en la unidad del procesador gráfico (GPU) o en el procesador host. El bucle de renderizado, que puede ponerse en práctica como un componente de controlador y/o un componente de hardware de GPU, produce de manera continua nuevos datos de formación (por ejemplo, en forma de nuevas zonas de referencia 1602) que coloca en una cola de espera. El proceso de formación en segundo plano, ejecutado en la GPU o en el procesador host, realiza la lectura continua de los nuevos datos de formación a partir de esta cola de espera, efectúa la re-formación del motor de aprendizaje por máquina 1600 y lo actualiza con nuevos pesos 1605 a intervalos apropiados.
La Figura 17 ilustra un ejemplo de una puesta en práctica de este tipo en donde el proceso de formación en segundo plano 1700 es puesto en práctica por la CPU host 1710. En particular, en esta forma de realización, el proceso de formación en segundo plano 1700 utiliza la nueva zona de referencia de alto conteo de muestras 1602 y la zona de bajo conteo de muestra 1604 correspondiente para actualizar de manera continua los pesos de ponderación en formación 1605, actualizando así el motor de aprendizaje por máquina 1600.
Tal como se ilustra en la Figura 18A, en una puesta en práctica, tal como en un juego online para varios jugadores, diferentes máquinas host 1820-1822 generan, de manera individual, zonas de referencia que un proceso de formación en segundo plano 1700A-C transmite a un servidor 1800 (por ejemplo, tal como un servidor de juegos). El servidor 1800 a continuación realiza la formación en un motor de aprendizaje por máquina 1810 utilizando las nuevas zonas de referencia recibidas desde cada uno de los hosts 1821-1822, actualizando los pesos 1805 tal como se describió con anterioridad. Transmite estos pesos 1805 a las máquinas hosts 1820 que almacenan los pesos 1605A-C, actualizando así cada motor de aprendizaje por máquina individual (no ilustrado). Debido a que al servidor 1800 se le puede proporcionar una gran cantidad de zonas 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 online) que ejecutan los usuarios.
Tal como se ilustra en la Figura 18B, las diferentes máquinas hosts pueden generar nuevos pesos de ponderación en formación (p. ej., en función de las zonas de formación/referencia 1602 tal como se describió con anterioridad) y compartir los nuevos pesos de ponderación en formación con un servidor 1800 (p. ej., tal como un servidor de juegos) o, de manera alternativa, utilice un protocolo de intercambio de igual a igual. Un componente de gestión de aprendizaje por máquina 1810 en el servidor genera un conjunto de pesos combinados 1805 utilizando los nuevos pesos recibidos desde cada una de las máquinas hosts. Los pesos combinados 1805, por ejemplo, pueden ser una media generada a partir de los nuevos pesos y actualizados de manera continua tal como se describe en este documento. Una vez generadas, las copias de los pesos combinados 1605A-C pueden transmitirse y almacenarse en cada una de las máquinas hosts 1820-1821 que luego pueden utilizar los pesos combinados tal como se describe en este documento para realizar operaciones de eliminación de ruido.
En una forma de 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 del hardware. A medida que el controlador genera nuevos datos de formación utilizando las técnicas descritas en este documento y los envía de nuevo al fabricante del hardware, el fabricante del hardware utiliza esta información para continuar mejorando sus puestas en práctica de aprendizaje por máquina para la próxima actualización del controlador.
En una puesta en práctica (p. ej., en el renderizado de películas por lotes en una instalación de renderizado), el renderizador transmite las zonas de formación recién generadas a un servidor o base de datos dedicado (en la instalación de renderizado de ese estudio) que agrega estos datos de múltiples nodos de renderizado a lo largo del tiempo. Un proceso separado en una máquina separada mejora de manera continua la red de eliminación de ruido dedicada del estudio, y los nuevos trabajos de renderizado siempre utilizan la más reciente red formada.
En la Figura 19 se ilustra un método de conformidad con una forma de realización de la invención. El método puede ponerse en práctica en las arquitecturas descritas en este documento, pero no se limita a ningún sistema o arquitectura de procesamiento de gráficos en particular.
En 1901, como parte de la fase de formación inicial, se generan datos de imagen de bajo conteo de muestras y datos de imagen de alto conteo de muestras para una pluralidad de tramas de imagen. En 1902, un motor de aprendizaje por máquina para eliminación de ruido es objeto de formación utilizando los datos de imagen de alto/bajo conteo de muestra. En una forma de realización, por ejemplo, un conjunto de pesos de redes neuronales convolucionales asociados con características de píxeles puede actualizarse de conformidad con la formación. Sin embargo, se puede utilizar cualquier arquitectura de aprendizaje por máquina.
En 1903, en el tiempo de ejecución, se generan tramas de imagen de bajo conteo de muestras junto con al menos una zona de referencia que tiene un alto conteo de muestras. En 1904, el motor de aprendizaje por máquina utiliza la zona de referencia de alto conteo de muestras y/o la lógica de formación separada (por ejemplo, el módulo de formación en segundo plano 1700) para refinar de manera continua la formación del motor de aprendizaje por máquina. Por ejemplo, en una forma de realización, la zona de referencia de alto conteo de muestras se utiliza en combinación con una parte correspondiente de la imagen de bajo conteo de muestras para seguir la formación del motor de aprendizaje por máquina 1904 tal cómo realizar la eliminación de ruido de la forma más eficaz. En una puesta en práctica de CNN, por ejemplo, lo que antecede puede implicar actualizar los pesos asociados con CNN.
Se pueden poner en práctica múltiples variaciones de las formas de realización descritas con anterioridad, como la manera en que se configura el bucle de realimentación al motor de aprendizaje por máquina, las entidades que generan los datos de formación, la manera en que los datos de formación se retroalimentan al motor de aprendizaje y cómo se proporciona la red mejorada a los motores de renderizado. Además, aunque las formas de realización descritas con anterioridad realizan una formación continúa utilizando una única zona de referencia, se puede utilizar cualquier número de zonas de referencia. Además, tal como se mencionó con anterioridad, las zonas de referencia pueden ser de diferentes tamaños, pueden utilizarse en diferentes números de tramas de imagen y pueden colocarse en diferentes ubicaciones dentro de las tramas de imagen utilizando diferentes técnicas (p. ej., de forma aleatoria, de conformidad con un patrón predeterminado, etc.).
Además, mientras que una red neuronal convolucional (CNN) se describe como un ejemplo de un motor de aprendizaje por máquina 1600, los principios subyacentes de la invención pueden ponerse en práctica utilizando cualquier forma de motor de aprendizaje por máquina que sea capaz de refinar, de manera continua, sus resultados utilizando nuevos datos de formación. A modo de ejemplo, y no de limitación, otras puestas en práctica de aprendizaje por máquina incluyen el método grupal de gestión de datos (GMDH), la memoria a corto plazo, el cálculo de depósito de profundidad, las redes de formación profundas, las redes de apilamiento profundo de tensores y las redes de codificación predictiva profunda, por nombrar algunas.
APARATO Y MÉTODO PARA
ELIMINACIÓN DE RUIDO DISTRIBUIDO EFICIENTE
Tal como se describió con anterioridad, la eliminación de ruido se ha convertido en una característica crítica del trazado de rayos en tiempo real con imágenes uniformes y sin ruido. El renderizado se puede realizar en un sistema distribuido en varios dispositivos, pero hasta ahora todas las estructuras de eliminación de ruido existentes funcionan en una sola instancia en una única máquina. Si el renderizado se realiza en varios dispositivos, es posible que no tengan todos los píxeles renderizados accesibles para calcular una parte sin ruido de la imagen.
Una forma de 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 no basadas en IA. Las zonas de la imagen ya están distribuidas entre nodos a partir de una operación de renderizado distribuida, o se dividen y distribuyen desde una única memoria intermedia de tramas. Las zonas fantasma de las zonas próximas necesarias para calcular la eliminación de ruido suficiente se recopilan de los nodos próximos cuando es necesario, y los mosaicos resultantes finales se componen en una imagen final.
PROCESAMIENTO DISTRIBUIDO
La Figura 20 ilustra una forma de realización de la invención en donde varios nodos 2021 -2023 realizan el renderizado. Si bien solamente se ilustran tres nodos por simplicidad, los principios subyacentes de la invención no se limitan a ningún número particular de nodos. De hecho, se puede utilizar un único nodo para poner en práctica ciertas formas de realización de la invención.
Cada uno de los nodos 2021-2023 representa una parte de una imagen, lo que da como resultado las zonas 2011­ 2013 en este ejemplo. Mientras que las zonas rectangulares 2011 -2013 se muestran en la Figura 20, se pueden utilizar zonas de cualquier forma y cualquier dispositivo puede procesar cualquier número de zonas. Las zonas que necesita un nodo para realizar una operación de eliminación de ruido lo suficientemente suave se denominan zonas fantasma 2011 -2013. Dicho de otro modo, las zonas fantasma 2001 -2003 representan la totalidad de los datos necesarios para realizar la eliminación de ruido con un nivel de calidad especificado. Reducir el nivel de calidad reduce el tamaño de la zona fantasma y, por lo tanto, la cantidad de datos necesarios y aumentar el nivel de calidad aumenta la zona fantasma y los datos correspondientes necesarios.
En una forma de realización, si un nodo, tal como el nodo 2021, tiene una copia local de una parte de la zona fantasma 2001 requerida para eliminar el ruido de su zona 2011 en 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 parte de la zona fantasma 2001 tal como se ilustra. De manera similar, si el nodo 2022 tiene una copia local de una parte de la zona fantasma 2002 requerida para eliminar el ruido de su zona 2012 al nivel de calidad especificado, el nodo 2022 recuperará los datos de la zona fantasma 2032 requeridos del nodo 2021. La recuperación se puede realizar sobre un bus, una interconexión, una estructura de memoria de alta velocidad, una red (p. ej., una red Ethernet de alta velocidad), o incluso puede ser una interconexión de circuito integrado realizada en un circuito integrado multinúcleo capaz de distribuir el trabajo de renderizado entre una pluralidad de núcleos (p. ej., utilizado para renderizar imágenes grandes en resoluciones extremas o variables en el tiempo). En una forma de 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 gráfico.
La cantidad específica de datos a enviar depende de las técnicas de eliminación de ruido que se utilicen. Además, los datos de la zona fantasma pueden incluir cualquier dato necesario para mejorar la eliminación de ruido de cada zona respectiva. En una forma de realización, por ejemplo, los datos de la zona fantasma incluyen colores de imagen/longitudes de onda, datos de intensidad/alfanuméricos y/o normales. Sin embargo, los principios subyacentes de la invención no se limitan a ningún conjunto particular de datos de la zona fantasma.
DATOS ADICIONALES DE UNA FORMA DE REALIZACIÓN
Para redes o interconexiones más lentas, la compresión de estos datos se puede utilizar usando la compresión existente de uso general sin pérdidas o con pérdidas. Los ejemplos incluyen, pero sin limitación, 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 choques de rayos entre tramas puede ser bastante escaso, y solamente las muestras que contribuyen a ese delta deben enviarse cuando el nodo ya tiene los deltas recopilados desde tramas anteriores. Estos se pueden enviar de forma selectiva a los nodos que recopilan dichas muestras, i, o el nodo i puede solicitar muestras de otros nodos. En una forma de realización, la compresión sin pérdidas se utiliza para ciertos tipos de datos y código de programa, mientras que los datos con pérdidas se usan para otros tipos de datos.
La Figura 21 ilustra detalles adicionales de las interacciones entre los nodos 2021-2022, de conformidad con una forma de realización de la invención. Cada nodo 2021-2022 incluye un circuito de renderizado de trazado de rayos 2081-2082 para renderizar las zonas de imagen respectivas 2011-2012 y las zonas fantasma 2001-2002. Los eliminadores de ruido 2100-2111 ejecutan operaciones de eliminación de ruido en las zonas 2011-2012, respectivamente, de las que cada nodo 2021-2022 es responsable de generar y eliminar ruido. Los eliminadores de ruido 2021-2022, por ejemplo, pueden comprender circuitos, software o cualquier combinación de los mismos para generar las zonas eliminadas de ruido 2121-2122, respectivamente. Tal como se mencionó, al generar zonas eliminadas de ruido, es posible que los eliminadores de ruido 2021-2022 deban confiar en datos dentro de una zona fantasma propiedad de un nodo diferente (por ejemplo, el eliminador de ruido 2100 puede necesitar datos de la zona fantasma 2002 propiedad del nodo 2022).
Por lo tanto, en una forma de realización, los eliminadores de ruido 2100-2111 generan las zonas eliminadas de ruido 2121 -2122 utilizando datos de las zonas 2011 -2012 y de las zonas fantasma 2001 -2002, respectivamente, al menos una parte de los cuales puede recibirse desde otro nodo. Los gestores de datos de zona 2101-2102 administran transferencias de datos desde zonas fantasma 2001 -2002 tal como se describe en este documento. En una forma de realización, las unidades compresoras/descompresoras 2131-2132 realizan la compresión y descompresión de los datos de la zona fantasma intercambiados entre los nodos 2021-2022, respectivamente.
Por ejemplo, el gestor de datos de la zona 2101 del nodo 2021 puede, a demanda del nodo 2022, enviar datos de la zona fantasma 2001 al compresor/descompresor 2131, que comprime los datos para generar datos comprimidos 2106 que transmite al nodo 2022, con lo que se reduce el ancho de banda sobre la interconexión, la red, el bus u otro enlace de comunicación de datos. El compresor/descompresor 2132 del nodo 2022 a continuación descomprime los datos comprimidos 2106 y el eliminador de ruido 2111 utiliza los datos fantasmas descomprimidos para generar una zona eliminada de ruido 2012 de mayor calidad que la que sería posible con únicamente datos de la zona 2012. El gestor de datos de zona 2102 puede almacenar los datos descomprimidos desde la zona fantasma 2001 en una memoria caché, memoria, fichero de registro u otro almacenamiento para que esté disponible para el eliminador de ruido 2111 al generar la zona eliminada de ruido 2122. Se puede realizar un conjunto similar de operaciones para proporcionar los datos desde la zona fantasma 2002 al eliminador de ruido 2100 en el nodo 2021 que utiliza los datos en combinación con los datos de la zona 2011 para generar una zona 2121 sin ruido de mayor calidad.
SOLICITAR DATOS O RENDERIZAR
Si la conexión entre dispositivos tales como los nodos 2021-2022 es lenta (es decir, inferior a un umbral de latencia y/o umbral de ancho de banda), puede ser más rápido renderizar zonas fantasma de manera local en lugar de solicitar los resultados de otros dispositivos. Lo que antecede se puede determinar en tiempo de ejecución mediante el seguimiento de las velocidades de transacción de la red y de los tiempos de procesamiento extrapolados linealmente para el tamaño de la zona fantasma. En los casos en que es más rápido renderizar toda la zona fantasma, es posible que varios dispositivos terminen renderizando las mismas partes de la imagen. La resolución de la parte renderizada de las zonas fantasma se puede ajustar en función de la variación de la zona base y del grado determinado de desenfoque.
EQUILIBRIO DE LA CARGA
En una forma de realización, se pueden utilizar sistema 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 de carga dinámico, la varianza determinada por el filtro de eliminación de ruido puede requerir más tiempo para eliminar el ruido, pero también impulsar la cantidad de muestras utilizadas para renderizar una zona particular de la escena, con una baja varianza y zonas borrosas de la imagen que requieren menos muestras. Las zonas específicas asignadas a nodos especificados pueden ajustarse de manera dinámica en función de los datos de tramas anteriores o comunicarse de manera dinámica entre dispositivos a medida que se procesan para que todos los dispositivos tengan la misma cantidad de trabajo.
La Figura 22 ilustra una forma de realización en donde un monitor 2201 -2202 que se ejecuta en cada nodo respectivo 2021-2022 recopila datos de métricas de rendimiento que incluyen, pero sin limitación, el tiempo consumido para transmitir datos a través de la interfaz de red 2211 -2212, el tiempo consumido al eliminar el ruido de una zona (con y sin datos de la zona fantasma) y el tiempo consumido en el renderizado de cada zona/zona fantasma. Los monitores 2201-2202 informan estas métricas de rendimiento de nuevo a un gestor o nodo equilibrador de carga 2201, que analiza los datos para identificar la carga de trabajo actual en cada nodo 2021-2022 y determina de manera potencial un modo más eficiente de procesar las diversas zonas eliminadas de ruido 2121-2122. El nodo gestor 2201 a continuación distribuye nuevas cargas de trabajo para nuevas zonas a los nodos 2021-2022 de conformidad con la carga detectada. Por ejemplo, el nodo gestor 2201 puede transmitir más trabajo a aquellos nodos que no están muy cargados y/o reasignar trabajo desde aquellos nodos que están sobrecargados. Además, el nodo equilibrador de carga 2201 puede transmitir una orden de reconfiguración para ajustar la manera específica en donde cada uno de los nodos realiza el renderizado y/o eliminación de ruido (algunos ejemplos de los cuales se describen con anterioridad).
DETERMINACIÓN DE ZONAS FANTASMAS
En una forma de realización, los tamaños y formas de las zonas fantasma 2001-2002 se determinan en base al algoritmo de eliminación de ruido puesto en práctica por los eliminadores de ruido 2100-2111. Sus respectivos tamaños se pueden modificar de manera dinámica en función de la varianza detectada de las muestras que se eliminan. El algoritmo de aprendizaje utilizado para la eliminación de ruido de la IA se puede utilizar para determinar los tamaños de zona apropiados o, en otros casos, como un desenfoque bilateral, la anchura de filtro predeterminada determinará el tamaño de las zonas fantasma 2001-2002. En una puesta en práctica que utiliza un algoritmo de aprendizaje, el motor de aprendizaje por máquina puede ejecutarse en el nodo gestor 2201 y/o partes del aprendizaje por máquina pueden ejecutarse en cada uno de los nodos individuales 2021-2023 (véanse, por ejemplo, las Figuras 18A-B y el texto asociado anterior).
AGRUPAMIENTO DE LA IMAGEN FINAL
En una forma de realización, la imagen final se genera reuniendo las zonas renderizadas y sin ruido de cada uno de los nodos 2021 -2023, sin necesidad de zonas fantasma o normales. En la Figura 22, por ejemplo, las zonas sin ruido 2121 -2122 se transmiten al procesador de zonas 2280 del nodo gestor 2201 que combina las zonas para generar la imagen final sin ruido 2290, que luego se muestra en una pantalla 2290. El procesador de zonas 2280 puede combinar las zonas utilizando una variedad de técnicas de composición 2D. Aunque se ilustran como componentes separados, el procesador de zona 2280 y la imagen sin ruido 2290 pueden ser parte integral de la pantalla 2290. En esta forma de realización, los diversos nodos 2021 -2022 pueden utilizar una técnica de envío directo para transmitir las zonas sin ruido 2121 -2122 y potencialmente utilizar varias compresiones con pérdida o sin pérdida de los datos de la zona.
La eliminación de ruido de la IA sigue siendo una operación costosa y, a medida que los juegos se trasladan a la nube informática. En consecuencia, la distribución del procesamiento de eliminación de ruido en varios nodos 2021-2022 puede ser necesaria para lograr tasas de tramas en tiempo real para juegos tradicionales o realidad virtual (VR), que requieren tasas de tramas más altas. Los estudios de cine también suelen renderizar en grandes instalaciones de renderizado que se pueden utilizar para una eliminación de ruido más rápida.
En la Figura 23 se ilustra una forma de realización de un método para realizar el renderizado distribuido y la eliminación de ruido. El método puede ponerse en práctica dentro del contexto de las arquitecturas de sistema descritas con anterioridad, 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 zona de una trama de imagen. En una forma de realización, cada nodo ya puede tener 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 ya tener datos almacenados desde operaciones de trazado de rayos anteriores. De manera alternativa o, además, se pueden transmitir ciertos datos a cada nodo.
En 2302, se determina la "zona fantasma" requerida para un nivel especificado de eliminación de ruido (es decir, a un nivel aceptable de rendimiento). La zona fantasma comprende todos los datos necesarios para realizar el nivel especificado de eliminación de ruido, incluyendo los datos propiedad de uno o más nodos.
En 2303, los datos relacionados con las zonas fantasma (o partes de las mismas) se intercambian entre nodos. En 2304, cada nodo realiza la eliminación de ruido en su zona respectiva (por ejemplo, utilizando los datos intercambiados) y en 2305, los resultados se combinan para generar la trama de imagen eliminada final.
En una forma de realización, un nodo gestor o nodo principal tal como se muestra en la Figura 22 envía el trabajo a los nodos y luego combina el trabajo realizado por los nodos para generar la trama de imagen final. En otra forma de realización, se utiliza una arquitectura basada en pares en donde los nodos son pares que intercambian datos para renderizar y eliminar el ruido de la trama 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. De manera alternativa, los nodos pueden ser elementos de procesamiento individuales acoplados a un tejido de memoria de alta velocidad. En esta forma de realización, todos los nodos pueden compartir un espacio de memoria virtual común y/o una memoria física común. En otra forma de realización, los nodos pueden ser una combinación de unidades CPUs y GPUs. Por ejemplo, el nodo gestor 2201, descrito con anterioridad, puede ser una CPU y/o software ejecutado en la CPU y los nodos 2021-2022 pueden ser unidades GPUs y/o software ejecutado en las GPUs. Se pueden utilizar varios tipos diferentes de nodos sin dejar de cumplir con los principios subyacentes de la invención.
EJEMPLOS DE PUESTAS EN PRÁCTICA DE REDES NEURONALES
Existen numerosos tipos de redes neuronales; un tipo simple de red neuronal es una red prealimentada (feedforward). Una red prealimentada puede ponerse en práctica como un gráfico acíclico en donde los nodos están dispuestos en capas. Por lo general, una topología de red prealimentada 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 de utilidad para generar salida en la capa de salida. Los nodos de la red están completamente conectados a través de los bordes a los nodos en las capas adyacentes, pero no existen bordes entre los nodos dentro de cada capa. Los datos recibidos en los nodos de una capa de entrada de una red prealimentada se propagan (es decir, "feedforward") a los nodos de la capa de salida a través de una función de activación que calcula los estados de los nodos de cada capa sucesiva en la red basándose en coeficientes ("pesos") respectivamente asociados con cada uno de los bordes que conectan las capas. Dependiendo del modelo específico representado por el algoritmo que se está ejecutando, la salida del algoritmo de red neuronal puede adoptar varias formas.
Antes de que se pueda utilizar un algoritmo de aprendizaje por máquina para modelar un problema particular, el algoritmo es objeto de formación utilizando un conjunto de datos de formación. La formación de una red neuronal implica seleccionar una topología de red, utilizar un conjunto de datos de formación que representan un problema que está modelando la red y ajustar los pesos hasta que el modelo de red funcione con un error mínimo para todas las instancias del conjunto de datos de formación. Por ejemplo, durante un proceso de formación por 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 formación se compara con la salida etiquetada "correcta" para dicha instancia, representando una señal de error la diferencia entre la salida y la salida etiquetada que se calcular, y los pesos asociados con las conexiones se ajustan para minimizar dicho 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 "que es objeto de formación" cuando se minimizan los errores de cada una de las salidas generadas a partir de las instancias del conjunto de datos de aprendizaje.
La precisión de un algoritmo de aprendizaje por máquina puede verse afectada, de manera significativa, por la calidad del conjunto de datos utilizado para la formación del algoritmo. El proceso de formación puede ser de cálculo intensivo y puede requerir una cantidad significativa de tiempo en un procesador de uso general convencional. En consecuencia, el hardware de procesamiento paralelo se utiliza para la formación de numerosos tipos de algoritmos de aprendizaje por máquina. Lo que antecede es particularmente útil para optimizar la formación de las redes neuronales, ya que los cálculos realizados para ajustar los coeficientes en las redes neuronales se prestan de manera natural a puestas en práctica paralelas. Concretamente, muchos algoritmos de aprendizaje por máquina y aplicaciones de software se han adaptado para hacer uso del hardware de procesamiento paralelo dentro de los dispositivos de procesamiento de gráficos de uso general.
La Figura 24 es un diagrama generalizado de una pila de software de aprendizaje por máquina 2400. Una aplicación de aprendizaje por máquina 2402 puede configurarse para la formación de una red neuronal utilizando un conjunto de datos de formación o para utilizar una red neuronal profunda que sea objeto de formación para poner en práctica inteligencia de la máquina. La aplicación de aprendizaje por máquina 2402 puede incluir funcionalidad de formación y de inferencias para una red neuronal y/o un software especializado que pueda utilizarse para la formación de una red neuronal antes de su desarrollo. La aplicación de aprendizaje por máquina 2402 puede poner en práctica cualquier tipo de inteligencia artificial, incluyendo, pero sin limitación, reconocimiento de imágenes, mapeo y localización, navegación autónoma, síntesis de voz, imágenes médicas o traslación de idiomas.
La aceleración de hardware para la aplicación de aprendizaje por máquina 2402 se puede habilitar a través de una estructura de aprendizaje por máquina 2404. La estructura de aprendizaje por máquina 2404 puede proporcionar una biblioteca de primitivos de aprendizaje por máquina. Los primitivos de aprendizaje por máquina son operaciones básicas que se suelen realizar mediante algoritmos de aprendizaje por máquina. Sin la estructura de aprendizaje por máquina 2404, los desarrolladores de algoritmos de aprendizaje por máquina tendrían que crear y optimizar la lógica de cálculo informático principal asociada con el algoritmo de aprendizaje por máquina y luego volver a optimizar la lógica de cálculo informático a medida que se desarrollan nuevos procesadores paralelos. En su lugar, la aplicación de aprendizaje por máquina se puede configurar para realizar los cálculos necesarios utilizando los primitivos proporcionados por la estructura de aprendizaje por máquina 2404. Los primitivos a modo de ejemplo incluyen convoluciones de tensor, funciones de activación y de agrupamiento, que son operaciones de cálculo que se realizan mientras se es objeto de formación una red neuronal convolucional (CNN). La estructura de aprendizaje por máquina 2404 también puede proporcionar primitivos para poner en práctica subprogramas básicos de álgebra lineal realizados por numerosos algoritmos de aprendizaje por máquina, tales como operaciones matriciales y vectoriales.
La estructura de aprendizaje por máquina 2404 puede procesar los datos de entrada recibidos desde la aplicación de aprendizaje por máquina 2402 y generar la entrada apropiada para una estructura de cálculo informático 2406. La estructura de cálculo informático 2406 puede abstraer las instrucciones subyacentes proporcionadas al controlador GPGPU 2408 para permitir que la estructura de aprendizaje por máquina 2404 se aproveche de la aceleración de hardware a través del hardware GPGPU 2410 sin requerir que la estructura de aprendizaje por máquina 2404 tenga un conocimiento profundo de la arquitectura del hardware GPGPU 2410. Además, la estructura de cálculo informático 2406 puede habilitar la aceleración de hardware para la estructura de aprendizaje por máquina 2404 en una variedad de tipos y generaciones del hardware GPGPU 2410.
Aceleración del aprendizaje por máquina GPGPU
La Figura 25 ilustra un sistema informático multi-GPU 2500, según una forma de realización. El sistema informático multi-GPU 2500 puede incluir un procesador 2502 acoplado a múltiples GPGPUs 2506A-D a través de un conmutador de interfaz de host 2504. El conmutador de interfaz de host 2504, en una forma de realización, es un dispositivo conmutador PCI Express que acopla el procesador 2502 a un bus PCI Express sobre el cual el procesador 2502 puede comunicarse con el conjunto de GPGPUs 2506A-D. Cada una de las múltiples GPGPUs 2506A-D puede ser una instancia de la GPGPU descrita con anterioridad. Las GPGPUs 2506A-D pueden interconectarse a través de un conjunto de enlaces de GPU a GPU, punto a punto, de alta velocidad 2516. Los enlaces de GPU a GPU de alta velocidad pueden conectarse a cada una de las GPGPUs 2506A-D a través de un enlace GPU dedicado. Los enlaces de GPU P2P 2516 permiten la comunicación directa entre cada una de las GPGPUs 2506A-D sin requerir comunicación a través del bus de interfaz de host al que está conectado el procesador 2502. Con el tráfico de GPU a GPU dirigido a los enlaces de GPU P2P, el bus de interfaz del host permanece disponible para acceder a la memoria del sistema o para comunicarse con otras instancias del sistema informático multi-GPU 2500, por ejemplo, a través de uno o más dispositivos de red. Mientras que en la forma de realización ilustrada las GPGPUs 2506A-D se conectan al procesador 2502 a través del conmutador de interfaz de host 2504, en una forma de realización, el procesador 2502 incluye soporte directo para los enlaces GPU P2P 2516 y puede conectarse directamente a las GPGPUs 2506A-D.
Puestas en práctica de redes neuronales de aprendizaje por máquina
La arquitectura informática proporcionada por las formas de realización descritas en el presente documento se puede configurar para realizar los tipos de procesamiento en paralelo que son particularmente adecuados para la formación y desarrollo de redes neuronales para el aprendizaje por máquina. Una red neuronal se puede generalizar como una red de funciones que tienen una relación gráfica. Como es bien conocido en esta técnica, existe una diversidad de tipos de puestas en práctica de redes neuronales utilizadas en el aprendizaje por máquina. Un tipo, a modo de ejemplo, de red neuronal es la red prealimentada, tal como se describió con anterioridad.
Un segundo tipo, a modo de ejemplo, de red neuronal es la Red Neural Convolucional (CNN). Una CNN es una red neuronal prealimentada especializada para procesar datos que tienen una topología similar a una cuadrícula conocida, tal como datos de imágenes. En consecuencia, las CNNs se suelen utilizar para aplicaciones de reconocimiento de imágenes y de visión informática, pero también se pueden utilizar para otros tipos de reconocimiento de patrones, tal como el procesamiento de voz y del lenguaje. Los nodos en la capa de entrada de CNN están organizados en un conjunto de "filtros" (detectores de funciones inspirados en los campos receptivos que se encuentran en la retina), y la salida de cada conjunto de filtros se propaga a los nodos en capas sucesivas de la red. Los cálculos para una CNN incluyen aplicar la operación matemática de convolución a cada filtro para obtener la salida de dicho filtro. La convolución es un tipo especializado de operación matemática realizada por dos funciones para obtener una tercera función que es una versión modificada de una de las dos funciones originales. En la terminología de red convolucional, 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, en donde los parámetros son adaptados por el proceso de formación para la red neuronal.
Las Redes Neuronales Recurrentes (RNNs) son una familia de redes neuronales prealimentadas que incluyen conexiones de realimentación entre capas. Las redes RNNs permiten el modelado de datos secuenciales al compartir datos de parámetros en diferentes partes de la red neuronal. La arquitectura de una red 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 desde la red RNN se utiliza como realimentación para procesar la entrada posterior en una secuencia. Esta característica hace que las redes RNNs sean particularmente útiles para el procesamiento del lenguaje debido a la naturaleza variable en donde se pueden componer los datos del lenguaje.
Las figuras descritas a continuación presentan redes prealimentadas, CNN y RNN, a modo de ejemplo, así como también describen un proceso general para la formación y despliegue respectivo de cada uno de esos tipos de redes. Se entenderá que estas descripciones son a modo de ejemplo y no limitativas en cuanto a cualquier forma de realización específica descrita en el presente documento y los conceptos ilustrados se pueden aplicar, en general, a redes neuronales profundas y técnicas de aprendizaje por máquina en general.
Las redes neuronales, a modo de ejemplo, descritas con anterioridad se pueden utilizar para realizar un aprendizaje profundo. El aprendizaje profundo es el aprendizaje por máquina que utiliza en redes neuronales profundas. Las redes neuronales profundas utilizadas en el aprendizaje profundo son redes neuronales artificiales compuestas de múltiples capas ocultas, a diferencia de las redes neuronales superficiales que incluyen solamente una capa oculta. Las redes neuronales más profundas suelen ser de cálculo informático más intensivo para su formación. 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 superficiales de aprendizaje por máquina.
Las redes neuronales profundas utilizadas en el aprendizaje profundo suelen incluir una red de extremo frontal para realizar el reconocimiento de características acopladas a una red de extremo posterior que representa un modelo matemático que puede realizar operaciones (p. ej., clasificación de objetos, reconocimiento de voz, etc.) basadas en Rennes la representación de características proporcionadas al modelo. El aprendizaje profundo permite realizar el aprendizaje por máquina sin necesidad de realizar una ingeniería de características artesanales para el modelo. En cambio, las redes neuronales profundas pueden aprender características basadas en la estructura estadística o la correlación dentro de los datos de entrada. Las funciones aprendidas se pueden proporcionar a un modelo matemático que puede asignar las funciones detectadas a una salida. El modelo matemático utilizado por la red suele estar especializado para la tarea específica a realizar, y se utilizarán diferentes modelos para realizar diferentes tareas.
Una vez que se estructura la red neuronal, se puede aplicar un modelo de aprendizaje a la red para la formación de la red para realizar tareas específicas. El modelo de aprendizaje describe cómo ajustar los pesos dentro del modelo para reducir el error de salida de la red. La retropropagación de errores es un método común utilizado para la formación de redes neuronales. Un vector de entrada se presenta a la red para su procesamiento. La salida de la red se compara con la salida deseada utilizando una función de pérdida y se calcula un valor de error para cada una de las neuronas en la capa de salida. A continuación, los valores de error se propagan hacia atrás hasta que cada neurona tenga un valor de error asociado que represente aproximadamente su aportación a la salida original. Luego, la red puede aprender de dichos errores utilizando un algoritmo, tal como el algoritmo de descenso de gradiente estocástico, para actualizar los pesos de la red neuronal.
Las Figuras 26 a 27 ilustran una red neuronal convolucional a modo de ejemplo. La Figura 26 ilustra varias capas dentro de una red CNN. Tal como se muestra en la Figura 26, un ejemplo de red CNN utilizado para modelar el procesamiento de imágenes puede recibir la entrada 2602 que describe los componentes rojo, verde y azul (RGB) de una imagen de entrada. La entrada 2602 puede ser procesada por múltiples capas convolucionales (por ejemplo, capa convolucional 2604, capa convolucional 2606). La salida desde las múltiples capas convolucionales puede ser procesada de manera opcional 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, tal como se describió con anterioridad para una red de realimentada. La salida de las capas 2608 completamente conectadas se puede utilizar para generar un resultado desde salida de la red. Las activaciones dentro de las capas 2608 completamente conectadas se pueden calcular utilizando la multiplicación de matrices en lugar de la convolución. No todas las puestas en práctica de la red CNN utilizan capas totalmente conectadas. Por ejemplo, en algunas puestas en práctica, la capa convolucional 2606 puede generar una salida para la red 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 2608 totalmente conectadas. Las capas de red neuronal tradicionales están totalmente conectadas, de modo que cada unidad de salida interactúa con cada unidad de entrada. Sin embargo, las capas convolucionales están escasamente conectadas porque la salida de la convolución de un campo se introduce (en lugar del valor de estado respectivo de cada uno de los nodos en el campo) a los nodos de la capa subsiguiente, tal 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 la dimensionalidad realizada dentro de las capas convolucionales es un aspecto que permite escalar la red CNN para procesar imágenes grandes.
La Figura 27 ilustra etapas de cálculo, a modo de ejemplo, dentro de una capa convolucional de una red CNN. La entrada a una capa convolucional 2712 de una red CNN puede procesarse en tres etapas de una capa convolucional 2714. Las tres etapas pueden incluir una etapa convolucional 2716, una etapa detectora 2718 y una etapa de agrupamiento 2720. La capa convolucional 2714 puede generar datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de mapa de características de salida o proporcionar entrada a una capa completamente conectada, por ejemplo, para generar un valor de clasificación para la entrada a la red CNN.
En la etapa de convolución 2716 se realiza varias convoluciones en paralelo para obtener un conjunto de activaciones lineales. La etapa de convolución 2716 puede incluir una transformación afín, que es cualquier transformación que pueda especificarse como una transformación lineal más una traslación. Las transformaciones afines incluyen rotaciones, traslaciones, puesta en escala y combinaciones de estas transformaciones. La etapa de convolución calcula la salida de funciones (por ejemplo, neuronas) que están conectadas a zonas específicas en la entrada, que se puede determinar como la zona local asociada con la neurona. Las neuronas calculan un producto escalar entre los pesos de las neuronas y la zona en la entrada local a la que están conectadas las neuronas. La salida desde la etapa de convolución 2716 define un conjunto de activaciones lineales que son procesadas por etapas sucesivas de la capa convolucional 2714.
Las activaciones lineales pueden ser procesadas por una etapa detectora 2718. En la etapa detectora 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 general sin afectar los campos receptivos de la capa de convolución. Se pueden utilizar varios tipos de funciones de activación no lineales. Un tipo particular es la unidad lineal rectificada (ReLU), que utiliza una función de activación definida como f(x)=max (0,x), de modo que la activación tiene un umbral de cero.
La etapa de agrupamiento 2720 utiliza una función de agrupamiento que sustituye la salida de la capa convolucional 2706 con una estadística de resumen de las salidas próximas. La función de agrupamiento se puede utilizar para introducir la invarianza de la traslación en la red neuronal, de modo que las pequeñas traslaciones a la entrada no cambien las salidas agrupadas. La invarianza a la traslación local puede ser útil en escenarios en donde la presencia de una característica en los datos de entrada es más importante que la ubicación precisa de dicha característica. Se pueden utilizar varios tipos de funciones de agrupamiento durante la etapa de agrupamiento 2720, incluyendo el agrupamiento máximo, el agrupamiento medio y el agrupamiento I2-norma. Además, algunas puestas en práctica de la red CNN no incluyen una etapa de agrupamiento. En su lugar, dichas puestas en práctica sustituyen una etapa de convolución adicional que tiene una etapa mayor en relación con las etapas de convolución anteriores.
La salida desde la capa convolucional 2714 puede luego ser procesada 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 enviar a la segunda capa convolucional 2706, mientras que la segunda capa convolucional puede enviar a una primera capa de las capas completamente conectadas 2808.
La Figura 28 ilustra una red neuronal recurrente 2800 a modo de ejemplo. En una red neuronal recurrente (RNN), el estado anterior de la red influye en la salida del estado actual de la red. Las redes RNNs se pueden construir de varias maneras utilizando una diversidad de funciones. El uso de redes RNNs suele girar en torno a la utilización de modelos matemáticos para predecir el futuro en función de una secuencia previa de entradas. Por ejemplo, se puede utilizar una red RNN para realizar un modelado estadístico del lenguaje para predecir una próxima palabra dada una secuencia previa de palabras. La red RNN 2800 ilustrada se puede describir con una capa de entrada 2802 que recibe un vector de entrada, capas ocultas 2804 para poner en práctica una función recurrente, un mecanismo de realimentación 2805 para habilitar una "memoria" de estados previos y una capa de salida 2806 para generar un resultado. La red RNN 2800 opera en base a etapas de tiempo. El estado de la red RNN en una etapa de tiempo determinado se ve influenciado en función de la etapa de tiempo anterior a través del mecanismo de realimentación 2805. Para una etapa de tiempo dado, el estado de las capas ocultas 2804 se define por el estado anterior y la entrada en la etapa de tiempo actual. La capa oculta 2804 puede procesar una entrada inicial (x1) en una primera etapa de tiempo. La capa oculta 2804 puede procesar una segunda entrada (x2) 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)), en donde U y W son matrices de parámetros. La función f es por lo general una no linealidad, tal como la función de 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 según los datos de puesta en práctica específicos del RNN 2800.
Además, de las redes CNN y RNN básicas descritas, se pueden habilitar variaciones en dichas redes. Un ejemplo de variante de RNN es la RNN de memoria a largo plazo (LSTM). Las redes RNNs de LSTM son capaces de aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias de lenguaje más largas. Una variante de la red CNN es una red de creencias profundas convolucional, que tiene una estructura similar a una CNN y está en formación de una manera similar a una red de creencias profundas. Una red de creencias profundas (DBN) es una red neuronal generativa que se compone de múltiples capas de variables estocásticas (aleatorias). Las redes DBNs pueden ser objeto de formación del tipo capa por capa mediante un aprendizaje ávido no supervisado. Los pesos aprendidos de la DBN se pueden utilizar luego para proporcionar redes neuronales previas a la formación mediante la determinación de un conjunto inicial óptimo de pesos para la red neuronal.
La Figura 29 ilustra la formación y el desarrollo de una red neuronal profunda. Una vez que se ha estructurado una red determinada para una tarea, la red neuronal es objeto de formación utilizando un conjunto de datos de formación 2902. Se han desarrollado varias estructuras de formación 2904 para permitir la aceleración del hardware del proceso de formación. Por ejemplo, la estructura de aprendizaje por máquina descrita con anterioridad se puede configurar como una estructura de formación. La estructura de formación 2904 puede conectarse a una red neuronal no objeto de formación 2906 y permitir que la red neuronal no en formación sea objeto de formación utilizando los recursos de procesamiento paralelo descritos en este documento para generar una red neuronal con formación 2908.
Para iniciar el proceso de formación, los pesos iniciales pueden elegirse al azar o mediante una formación previa utilizando una red de creencias profundas. A continuación, el ciclo de formación puede realizarse de forma supervisada o no supervisada.
El aprendizaje supervisado es un método de aprendizaje en donde la formación se realiza como una operación mediada, tal como cuando el conjunto de datos de formación 2902 incluye una entrada emparejada con la salida deseada para la entrada, o cuando el conjunto de datos de formación incluye una entrada que tiene una salida conocida y la salida de la red neuronal se califica de manera manual. La red procesa las entradas y compara las salidas resultantes con un conjunto de salidas esperadas o deseadas. A continuación, los errores se propagan a través del sistema. La estructura de formación 2904 puede ajustarse para el correspondiente ajuste de los pesos que controlan la red neuronal no objeto de formación 2906. La estructura de formación 2904 puede proporcionar herramientas para supervisar que se realiza correctamente la red neuronal no objeto de formación 2906 que está convergiendo hacia un modelo adecuado para generar respuestas correctas basadas en datos de entrada conocidos. El proceso de formación ocurre de manera repetida a medida que se ajustan los pesos de la red para refinar la salida generada por la red neuronal. El proceso de formación puede continuar hasta que la red neuronal alcance una precisión estadísticamente deseada asociada con una red neuronal con formación 2908. La red neuronal con formación 2908 puede desplegarse entonces para poner en práctica cualquier número de operaciones de aprendizaje por máquina.
El aprendizaje no supervisado es un método de aprendizaje en donde la red intenta autoformarse utilizando datos no etiquetados. Por lo tanto, para el aprendizaje no supervisado, el conjunto de datos de formación 2902 incluirá datos de entrada sin ningún dato de salida asociado. La red neuronal no objeto de formación 2906 puede aprender agrupamientos dentro de la entrada no etiquetada y puede determinar cómo se relacionan las entradas individuales con el conjunto de datos general. La formación no supervisada se puede utilizar para generar un mapa autoorganizado, que es un tipo de red neuronal objeto de formación 2907 capaz de realizar operaciones útiles para reducir la dimensionalidad de los datos. La formación no supervisada 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 se pueden emplear variaciones en la formación supervisada y no supervisada. El aprendizaje semisupervisado es una técnica en donde el conjunto de datos de formación 2902 incluye una combinación de datos etiquetados y no etiquetados de la misma distribución. El aprendizaje incremental es una variante del aprendizaje supervisado en donde los datos de entrada se utilizan de manera continua para la formación adicional del modelo. El aprendizaje incremental permite que la red neuronal con formación 2908 se adapte a los nuevos datos 2912 sin olvidar el conocimiento inculcado dentro de la red durante la formación inicial.
Ya sea supervisado o no supervisado, el proceso de formación para redes neuronales particularmente profundas puede ser demasiado intensivo desde el punto de vista de cálculo informático para un nodo de cálculo único. En lugar de utilizar un nodo de cálculo informático único, se puede utilizar una red distribuida de nodos de cálculo informático para acelerar el proceso de formación.
La Figura 30A es un diagrama de bloques que ilustra el aprendizaje distribuido. El aprendizaje distribuido es un modelo de formación que utiliza varios nodos informáticos distribuidos, tales como los nodos descritos con anterioridad, para realizar una formación supervisada o no supervisada de una red neuronal. Cada uno de los nodos de cálculo distribuidos puede incluir uno o más procesadores host y uno o más de los nodos de procesamiento de uso general, tal como una unidad de procesamiento de gráficos de uso general altamente paralela. Tal como se ilustra, el aprendizaje distribuido se puede realizar con paralelismo de modelos 3002, paralelismo de datos 3004 o una combinación de paralelismo de modelos y de datos.
En el paralelismo de modelo 3002, diferentes nodos de cálculo en un sistema distribuido pueden realizar cálculos de formación para diferentes partes de una sola red. Por ejemplo, cada capa de una red neuronal puede ser objeto de formación mediante un nodo de procesamiento diferente del sistema distribuido. Los beneficios del paralelismo de modelos incluyen la capacidad de escalar a modelos particularmente grandes. Dividir los cálculos asociados con diferentes capas de la red neuronal permite la formación de redes neuronales muy grandes en las que los pesos de todas las capas no cabrían en la memoria de un nodo de cálculo informático único. En algunos casos, el paralelismo de modelos puede ser particularmente útil para realizar una formación no supervisada de grandes redes neuronales.
En el paralelismo de datos 3004, los diferentes nodos de la red distribuida tienen una instancia completa del modelo y cada nodo recibe una parte diferente de los datos. A continuación, se combinan los resultados de los diferentes nodos. Si bien son posibles diferentes enfoques para el paralelismo de datos, todos los enfoques de formación en paralelo de datos requieren una técnica de combinación de resultados y de sincronización de los parámetros del modelo entre cada nodo. Los enfoques, a modo de ejemplo, para combinar datos incluyen la promediación de parámetros y el paralelismo de datos basado en actualizaciones. La promediación de parámetros proporcionar formación a cada nodo en un subconjunto de los datos de formación y establece los parámetros globales (p. ej., pesos, sesgos) en el promedio de los parámetros de cada nodo. La promediación de parámetros utiliza un servidor de parámetros central que mantiene los datos de los parámetros. El paralelismo de datos basado en actualizaciones es similar a la promediación de parámetros, excepto 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, en donde las actualizaciones se comprimen y transfieren entre nodos.
El modelo combinado y el paralelismo de datos 3006 se pueden poner en práctica, por ejemplo, en un sistema distribuido en donde cada nodo de cálculo informático incluye múltiples GPUs. Cada nodo puede tener una instancia completa del modelo con GPUs separadas dentro de cada nodo que se utiliza para la formación de diferentes partes del modelo.
La formación distribuida ha aumentado los gastos generales en relación con la formación en una máquina única. Sin embargo, los procesadores paralelos y las GPGPUs descritas en este documento pueden poner en práctica varias técnicas para reducir la sobrecarga de la formación distribuida, incluyendo técnicas para permitir la transferencia de datos GPU a GPU de gran ancho de banda y la sincronización acelerada de datos remotos.
Aplicaciones, a modo de ejemplo, del aprendizaje por máquina
El aprendizaje por máquina se puede aplicar para resolver una variedad de problemas tecnológicos, que incluyen, pero sin limitación, visión por ordenador, conducción y navegación autónomas, reconocimiento de voz y procesamiento del lenguaje. La visión artificial ha sido tradicionalmente una de las zonas de investigación más activas para las aplicaciones de aprendizaje por máquina. Las aplicaciones de la visión artificial van desde la reproducción de las capacidades visuales humanas, tal como el reconocimiento de rostros, hasta la creación de nuevas categorías de capacidades visuales. Por ejemplo, las aplicaciones de visión por ordenador se pueden configurar para reconocer ondas acústicas a partir de las vibraciones inducidas en los objetos visibles en un vídeo. El aprendizaje por máquina acelerado por procesador paralelo permite que las aplicaciones de visión por ordenador sean objeto de formación utilizando un conjunto de datos de formación de manera significativa más grande que lo que era posible con anterioridad y permite que los sistemas de inferencia se pongan en práctica utilizando procesadores paralelos de bajo consumo.
El aprendizaje por máquina acelerado por procesador paralelo tiene aplicaciones de conducción autónoma que incluyen el reconocimiento de señales de tráfico y carriles, la evitación de obstáculos, la navegación y el control de conducción. Las técnicas de aprendizaje por máquina acelerado se pueden utilizar para la formación de modelos de conducción basados en conjuntos de datos que definen las respuestas apropiadas a entradas de formación específicas. Los procesadores paralelos descritos en este documento pueden permitir la formación rápida de las redes neuronales cada vez más complejas que se utilizan para las soluciones de conducción autónoma y permiten el despliegue de procesadores de inferencia de bajo consumo en una plataforma móvil adecuada para la integración en vehículos autónomos.
Las redes neuronales profundas aceleradas por procesador paralelo han permitido enfoques de aprendizaje por máquina para el reconocimiento automático de voz (ASR). El reconocimiento ASR incluye la creación de una función que calcula la secuencia lingüística más probable dada de una secuencia acústica de entrada. El aprendizaje por máquina acelerado que utiliza redes neuronales profundas ha permitido la sustitución de los modelos ocultos de Markov (HMMs) y de los modelos de mezcla gausiana (GMMs) que se utilizaban con anterioridad para el reconocimiento ASR.
El aprendizaje por máquina acelerado por procesador paralelo también se puede utilizar para acelerar el procesamiento del lenguaje natural. Los procedimientos de aprendizaje por máquina pueden hacer uso de algoritmos de inferencia estadística para obtener modelos resistentes a entradas erróneas o desconocidas. Las aplicaciones a modo de ejemplo del procesador de lenguaje natural incluyen la traducción automática entre lenguajes humanos.
Las plataformas de procesamiento paralelo utilizadas para el aprendizaje por máquina se pueden dividir en plataformas de formación y en plataformas de puesta en práctica. Las plataformas de formación suelen ser muy paralelas e incluyen optimizaciones para acelerar la formación de un nodo único de multi-GPU y la formación de múltiples nodos y multi-GPU. Los procesadores paralelos, a modo de ejemplo, adecuados para la formación incluyen la unidad de procesamiento de gráficos de uso general altamente paralela y/o los sistemas informáticos multi-GPU descritos en este documento. Por el contrario, las plataformas de aprendizaje por máquina, puestas en práctica, suelen incluir procesadores paralelos de menor potencia adecuados para su uso en productos tales como cámaras, robots autónomos y vehículos autónomos.
La Figura 30B ilustra un sistema de inferencia, a modo de ejemplo, en un circuito integrado (SOC) 3100 adecuado para realizar inferencias utilizando un modelo objeto de formación. El circuito 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 multinúcleo 3108. El circuito SOC 3100 puede incluir, además, una memoria en circuito integrado 3105 que puede habilitar un grupo de datos en circuito integrado compartido que es accesible por cada uno de los componentes de procesamiento. Los componentes de procesamiento se pueden optimizar para una operación de baja potencia para permitir la puesta en práctica en una variedad de plataformas de aprendizaje por máquina, incluyendo vehículos autónomos y robots autónomos. Por ejemplo, una puesta en práctica del circuito SOC 3100 puede utilizarse como parte del sistema de control principal para un vehículo autónomo. Cuando el circuito SOC 3100 está configurado para su uso en vehículos autónomos, el SOC está diseñado y configurado para cumplir con las normas de seguridad funcional pertinentes de la jurisdicción del lugar de puesta en práctica.
Durante la operación, 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 habilitar la decodificación de baja latencia de múltiples flujos de vídeo de alta resolución (por ejemplo, 4K, 8K). Los flujos de vídeo decodificados se pueden escribir en una memoria intermedia en la memoria en circuito integrado 3105. El procesador de visión 3104 puede luego analizar el vídeo decodificado y realizar operaciones de procesamiento preliminares en las tramas del vídeo decodificado en preparación del procesamiento de las tramas utilizando un modelo de reconocimiento de imagen objeto de formación. Por ejemplo, el procesador de visión 3104 puede acelerar las operaciones de convolución para una red CNN que se utiliza para realizar el reconocimiento de imágenes en los datos de vídeo de alta resolución, mientras que la GPGPU 3106 realiza los cálculos del modelo de extremo posterior.
El procesador multinúcleo 3108 puede incluir lógica de control para ayudar con la secuenciación y sincronización de transferencias de datos y de operaciones de memoria compartida realizadas por el procesador de medios 3102 y el procesador de visión 3104. El procesador multinúcleo 3108 también puede funcionar como un procesador de aplicación para ejecutar aplicaciones de software que pueden hacer uso de la capacidad de cálculo de inferencia de la GPGPU 3106. Por ejemplo, al menos una parte de la lógica de navegación y conducción puede ponerse en práctica en el software que se ejecuta en el procesador multinúcleo 3108. Dicho software puede emitir cargas de trabajo de cálculo a la GPGPU 3106 o las cargas de trabajo de cálculo se pueden emitir al procesador multinúcleo 3108, que puede descargar, al menos, una parte de dichas operaciones a la GPGPU 3106.
La GPGPU 3106 puede incluir agrupamientos de cálculo informático tales como una configuración de bajo consumo de los agrupamientos informáticos DPLAB06A-DPLAB06H dentro de la unidad de procesamiento de gráficos de uso general altamente paralela DPLAB00. Los agrupamientos de cálculo informático dentro de la GPGPU 3106 pueden admitir instrucciones que están específicamente optimizadas para realizar cálculos de inferencia en una red neuronal objeto de formación. Por ejemplo, la GPGPU 3106 puede admitir instrucciones para realizar cálculos de baja precisión, tales como operaciones de vectores enteros de 8 y 4 bits.
ARQUITECTURA DE TRAZADO DE RAYOS
En una puesta en práctica, el procesador gráfico incluye circuitos y/o código de programa para realizar el trazado de rayos en tiempo real. En algunas formas de realización, se incluye un conjunto dedicado de núcleos de trazado de rayos en el procesador gráfico para realizar las diversas operaciones de trazado de rayos descritas en este documento, incluyendo las operaciones de cruce de rayos y/o intersección de rayos, además, de los núcleos de trazado de rayos, incluyendo una forma de realización múltiples conjuntos de núcleos de procesamiento de gráficos para realizar operaciones de sombreado programable y múltiples conjuntos de núcleos de tensor para realizar operaciones matriciales en datos de tensor.
La Figura 31 ilustra una parte a modo de ejemplo de una unidad de procesamiento de gráficos (GPU) 3105 de este tipo que incluye conjuntos dedicados de recursos de procesamiento de gráficos dispuestos en grupos multinúcleo 3100A-N. Si bien se proporcionan los datos de un solamente un grupo multinúcleo único 3100A, se apreciará que los otros grupos multinúcleo 3100B-N pueden estar equipados con los mismos o similares conjuntos de recursos de procesamiento de gráficos.
Tal como se ilustra, un grupo multinúcleo 3100A puede incluir un conjunto de núcleos de gráficos 3130, un conjunto de núcleos de tensor 3140 y un conjunto de núcleos de trazado de rayos 3150. Un planificador/dispositivo de envío 3110 programa y envía los hilos de gráficos para su ejecución en los diversos núcleos 3130, 3140, 3150. Un conjunto de ficheros de registro 3120 almacena valores de operandos utilizados por los núcleos 3130, 3140, 3150 cuando ejecutan los hilos de gráficos. Estos pueden incluir, por ejemplo, registros enteros para almacenar valores enteros, registros de coma flotante para almacenar valores de coma flotante, registros vectoriales para almacenar elementos de datos empaquetados (elementos de datos enteros y/o de coma flotante) y registros de mosaico para almacenar valores de tensor/matrices. En una forma de realización, los registros de mosaico se ponen en práctica como conjuntos combinados de registros vectoriales.
Una o más memorias caché de nivel 1 (L1) y unidades de textura 3160 almacenan datos gráficos tales como datos de textura, datos de vértice, datos de píxeles, datos de rayos, datos de volumen límite, etc., localmente dentro de cada grupo multinúcleo 3100A. Una memoria caché de nivel 2 (L2) 3180 compartida por todos o un subconjunto de los grupos multinúcleo 3100A-N almacena datos de gráficos y/o instrucciones para múltiples hilos de gráficos concurrentes. Tal como se ilustra, la memoria caché L2 3180 se puede compartir entre una pluralidad de grupos multinúcleo 3100A-N. Uno o más controladores de memoria 3170 acoplan la GPU 3105 a una memoria 3198 que puede ser una memoria del sistema (por ejemplo, memoria DRAM) y/o una memoria gráfica dedicada (por ejemplo, memoria GDDR6).
El circuito de entrada/salida (I/O) 3195 acopla la GPU 3105 a uno o más dispositivos I/O 3195 tales como procesadores de señales digitales (DSPs), controladores de red o dispositivos de entrada de usuario. Se puede utilizar una interconexión en circuito integrado para acoplar los dispositivos de E/S 3190 a la GPU 3105 y a la memoria 3198. Una o más unidades de gestión de memoria de E/S (IOMMUs) 3170 del circuito de E/S 3195 acoplan los dispositivos de E/S 3190 directamente a la memoria del sistema 3198. En una forma de realización, la IOMMU 3170 gestiona varios conjuntos de tablas de páginas para asignar direcciones virtuales a direcciones físicas en la memoria del sistema 3198. En esta forma de realización, los dispositivos I/O 3190, CPU(s) 3199 y GPU(s) 3105 pueden compartir el mismo espacio de direcciones virtuales.
En una puesta en práctica, la IOMMU 3170 admite la virtualización. En este caso, puede gestionar un primer conjunto de tablas de páginas para asignar direcciones virtuales de invitados/gráficos a direcciones físicas de invitados/gráficos y un segundo conjunto de tablas de páginas para asignar direcciones físicas de invitados/gráficos a direcciones físicas de sistema/host (por ejemplo, dentro de la memoria del sistema 3198). Las direcciones base de cada uno de los conjuntos primero y segundo de tablas de páginas pueden almacenarse en registros de control e intercambiarse en un cambio de contexto (por ejemplo, para que el nuevo contexto tenga acceso al conjunto pertinente 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 de los grupos de multi­ núcleo 3100A-N pueden incluir memorias intermedias de búsqueda de traslación (TLBs) para almacenar en memoria caché las traslaciones de huésped virtual a huésped físico, las traslaciones de huésped físico a host físico, y las traslacciones de huésped virtual a host físico.
En una forma de realización, las CPUs 3199, las GPUs 3105 y los dispositivos I/O 3190 están integrados en un único circuito integrado de semiconductor y/o paquete de circuito integrado. La memoria ilustrada 3198 puede integrarse en el mismo circuito integrado o puede acoplarse a los controladores de memoria 3170 a través de una interfaz fuera del circuito integrado. En una puesta en práctica, la memoria 3198 comprende una memoria GDDR6 que comparte el mismo espacio de direcciones virtuales que otras memorias a nivel de sistema físico, aunque los principios subyacentes de la invención no se limitan a esta puesta en práctica específica.
En una forma de 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 utilizada para realizar operaciones de aprendizaje profundo. Por ejemplo, las operaciones simultáneas de multiplicación de matrices se pueden utilizar para la inferencia y formación de redes neuronales. Los núcleos de tensor 3140 pueden realizar un procesamiento matricial utilizando una variedad de precisiones de operandos que incluyen coma flotante de precisión simple (p. ej., 32 bits), coma flotante de semiprecisión (p. ej., 16 bits), palabras enteras (16 bits), bytes (8 bits), y semibytes (4 bits). En una forma de realización, una puesta en práctica de red neuronal extrae características de cada escena renderizada, combinando de manera potencial datos de múltiples tramas, para construir una imagen final de alta calidad.
En puestas en práctica de aprendizaje profundo, el trabajo de multiplicación de matrices en paralelo se puede programar para su ejecución en los núcleos de tensor 3140. La formación de redes neuronales, en particular, requiere un número significativo de operaciones de producto de punto de matriz. 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 de puntos. Antes de que comience la multiplicación de matrices, se carga una matriz completa en los registros de mosaico y se carga al menos una columna de una segunda matriz en cada ciclo durante N ciclos. En cada ciclo, existen N productos de puntos que se procesan.
Los elementos de matriz pueden almacenarse con diferentes precisiones dependiendo de la puesta en práctica particular, incluyendo palabras de 16 bits, bytes de 8 bits (p. ej., INT8) y semi-bytes de 4 bits (p. ej., INT4). Se pueden especificar diferentes modos de precisión para los núcleos de tensor 3140 para garantizar que se utilice la precisión más eficiente para diferentes cargas de trabajo (por ejemplo, cargas de trabajo de inferencia que pueden tolerar la cuantificación en bytes y semi-bytes).
En una forma de realización, los núcleos de trazado de rayos 3150 aceleran las operaciones de trazado de rayos para puestas en práctica de trazado de rayos en tiempo real y no en tiempo real. En particular, los núcleos de trazado de rayos 3150 incluyen un circuito de cruce/intersección de rayos para realizar el cruce de rayos utilizando jerarquías de volumen límite (BVHs) e identificar intersecciones entre rayos y primitivos encerrados dentro de los volúmenes BVH. Los núcleos de trazado de rayos 3150 también pueden incluir circuitos para realizar pruebas de profundidad y de selección (por ejemplo, utilizando una memoria intermedia Z o una disposición similar). En una puesta en práctica, los núcleos de trazado de rayos 3150 realizan operaciones de cruce transversal e intersección junto con las técnicas de eliminación de ruido de imagen descritas en este documento, pudiendo al menos una parte de las cuales ejecutarse en los núcleos de tensor 3140. Por ejemplo, en una forma de realización, los núcleos de tensor 3140 ponen en práctica una red neuronal de aprendizaje profundo para eliminar el ruido de las estructuras generadas por los núcleos de trazado de rayos 3150. Sin embargo, las CPU(s) 3199, los núcleos de gráficos 3130 y/o los núcleos de trazado de rayos 3150 también pueden poner en práctica la totalidad o una parte de la eliminación de ruido y/o algoritmos de aprendizaje profundo.
Además, tal como se describió con anterioridad, se puede emplear un enfoque distribuido para eliminar el ruido en donde 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 forma de realización, los dispositivos informáticos interconectados comparten datos de aprendizaje/formación de redes neuronales para mejorar la velocidad con la que el sistema general aprende a realizar la eliminación de ruido para diferentes tipos de tramas de imagen y/o diferentes aplicaciones gráficas.
En una forma de realización, los núcleos de trazado de rayos 3150 procesan todas las intersecciones transversales BVH y de primitivos-rayos, evitando que los núcleos de gráficos 3130 se sobrecarguen con miles de instrucciones por rayo. En una forma de realización, cada núcleo de trazado de rayos 3150 incluye un primer conjunto de circuitos especializados para realizar pruebas de casilla límite (p. ej., para operaciones transversales) y un segundo conjunto de circuitos especializados para realizar las pruebas de intersección de rayos y triángulos (p. ej., intersección de rayos que se han cruzado). Por lo tanto, en una forma de realización, el grupo multinúcleo 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 choques (p. ej., un choque, sin choque, múltiples choques, etc.) al contexto de los hilos. Los otros núcleos 3130, 3140 están libres para realizar otros gráficos o trabajos de cálculo informático mientras que los núcleos de trazado de rayos 3150 realizan las operaciones de cruce e intersección.
En una forma de realización, cada núcleo de trazado de rayos 3150 incluye una unidad transversal para realizar operaciones de prueba de BVH y una unidad de intersección que realiza pruebas de intersección de primitivos-rayos. La unidad de intersección genera una respuesta de "choque", "sin choque" o "múltiple choque", que proporciona al hilo adecuado. 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 de gráficos.
En una forma de realización particular que se describe a continuación, se utiliza un enfoque híbrido de rasterizado/trazado de rayos en donde el trabajo se distribuye entre los núcleos de gráficos 3130 y los núcleos de trazado de rayos 3150.
En una forma de 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 tales como DirectX Ray Tracing (DXR) de Microsoft que incluye una orden DispatchRays, así como generación de rayos, sombreadores de choque más próximo, cualquier choque y sin choque, que permiten la asignación de conjuntos únicos de sombreadores y de texturas para cada objeto. Otra plataforma de trazado de rayos que puede ser compatible con 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. Conviene señalar, sin embargo, que los principios subyacentes de la invención no se limitan a ningún ISA de trazado de rayos en particular.
En general, los diversos 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 choque más próximo, cualquier choque, intersección de primitivos-rayos, construcción de trama delimitadora jerárquica y por primitivo, sin choque, visita y excepciones. Más concretamente, una forma de 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.
Choque más próximo: Se puede ejecutar una instrucción de choque más próximo para ubicar el punto de intersección más próximo de un rayo con primitivos dentro de una escena.
Cualquier choque: Una instrucción de cualquier choque identifica múltiples intersecciones entre un rayo y primitivos dentro de una escena, potencialmente para identificar un nuevo punto de intersección más próximo.
Intersección: Una instrucción de intersección realiza una prueba de intersección de primitivos-rayos y genera un resultado.
Construcción de casilla límite por primitivo: Esta instrucción crea una casilla límite alrededor de un primitivo o grupo de primitivos dado (p. ej., al crear un nuevo BVH u otra estructura de datos de aceleración).
Sin choque: Indica que un rayo pasa por alto toda la geometría dentro de una escena o en una zona especificada de una escena.
Visita: Indica los volúmenes secundarios que atravesará un rayo.
Excepciones: Incluye varios tipos de controladores de excepciones (por ejemplo, solicitados para varias condiciones de error).
TRAZADO DE HACES JERÁRQUICO
Las jerarquías de volumen límite se suelen utilizar para mejorar la eficiencia con la que se realizan operaciones en primitivos de gráficos y otros objetos gráficos. Una jerarquía BVH es una estructura de árbol jerárquico que se construye en base a un conjunto de objetos geométricos. En la parte superior de la estructura de árbol está el nodo raíz que encierra todos los objetos geométricos en una escena determinada. Los objetos geométricos individuales están envueltos en volúmenes delimitadores que forman los nodos de hojas del árbol. Estos nodos a continuación se agrupan como pequeños conjuntos y se encierran dentro de volúmenes delimitadores más grandes. Estos, a su vez, también se agrupan y se encierran dentro de otros volúmenes delimitadores más grandes de forma recursiva, lo que finalmente da como resultado una estructura de árbol con un único 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, tal como la detección de colisiones, la selección de elementos primitivos y las operaciones de cruce/intersección de rayos utilizadas en el trazado de rayos.
En las arquitecturas de trazado de rayos, los rayos se atraviesan a través de una jerarquía BVH para determinar las intersecciones de primitivos-rayos. Por ejemplo, si un rayo no pasa por el nodo raíz de la BVH, entonces el rayo no intersecta ninguno de los primitivos encerrados por la BVH y no se requiere procesamiento adicional para el rayo con respecto a este conjunto de primitivos. Si un rayo pasa a través de un primer nodo secundario de la jerarquía BVH pero no a través del segundo nodo secundario, entonces el rayo no necesita ser probado contra ningún primitivo encerrado por el segundo nodo secundario. De esta manera, una jerarquía BVH proporciona un mecanismo eficiente para probar las intersecciones de primitivos-rayos.
En una forma de realización de la invención, los grupos de rayos contiguos, denominados "haces" se prueban contra la BVH, en lugar de rayos individuales. La Figura 32 ilustra un ejemplo de haz 3201 perfilado por cuatro rayos diferentes. Cualquier rayo que intersecte con el parche 3200 definido por los cuatro rayos se considera que está dentro del mismo rayo. Mientras que el haz 3201 en la Figura 32 está 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.).
La Figura 33 ilustra una forma de realización, a modo de ejemplo, en donde un motor de trazado de rayos 3310 de una GPU 3320 pone en práctica las técnicas de trazado de haces descritas en este documento. En particular, el circuito de generación de rayos 3304 genera una pluralidad de rayos para los que se van a realizar operaciones de cruce y de intersección. Sin embargo, en lugar de realizar operaciones de cruce e intersección en rayos individuales, la forma de 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 forma de realización, la jerarquía de haces es análoga a la jerarquía de volumen límite (BVH). Por ejemplo, la Figura 34 proporciona un ejemplo de un haz primario 3400 que puede subdividirse en una pluralidad de componentes diferentes. En particular, el haz primario 3400 se puede dividir en cuadrantes 3401 -3404 y cada cuadrante se puede dividir, a su vez, en subcuadrantes tales como los subcuadrantes A-D dentro del cuadrante 3404. El haz primario se puede subdividir de diversas formas. Por ejemplo, en una forma de realización, el haz primario se puede dividir por la mitad (en lugar de cuadrantes) y cada mitad se puede dividir por la mitad, y así sucesivamente. De manera independiente de cómo se realicen las subdivisiones, en una forma de realización, se genera una estructura jerárquica de manera similar a una jerarquía BVH, por ejemplo, con un nodo raíz que representa el haz primario 3400, un primer nivel de nodos secundarios, cada uno representado por un cuadrante 3401-3404, nodos secundarios de segundo nivel para cada subcuadrante A-D, y así sucesivamente.
En una forma de 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 partes del haz que no intersecten cualquier parte de la BVH. Utilizando los datos que se muestran en la Figura 34, por ejemplo, si los sub-haces asociados con las subzonas 3402 y 3403 no se intersectan con la BVH o una bifurcación particular de la BVH, entonces podrán descartarse con respecto a la BVH o a la bifurcación. Las partes restantes 3401, 3404 pueden probarse frente a la BVH realizando una búsqueda en profundidad u otro algoritmo de búsqueda.
En la Figura 35 se ilustra un método de conformidad con una forma de realización de la invención. El método puede ponerse en práctica dentro del contexto de las arquitecturas de procesamiento de gráficos descritas con anterioridad, 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 forma de realización, las operaciones 3500-3501 se realizan como una única operación 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 jerarquía BVH para eliminar rayos (de la jerarquía de haces) y/o nodos/primitivos de la BVH. En 3503, se determinan las intersecciones de rayos y primitivos para los restantes rayos y primitivos.
COMPRESIÓN DE PAQUETES CON PÉRDIDA Y SIN PÉRDIDA
EN UN SISTEMA DE TRAZADO DE RAYOS DISTRIBUIDOS
En una forma de realización, las operaciones de trazado de rayos se distribuyen a través de una pluralidad de nodos informáticos acoplados entre sí a través de una red. La Figura 36, por ejemplo, ilustra un agrupamiento 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 de manera potencial los resultados en uno de los nodos. En la arquitectura ilustrada, los nodos de trazado de rayos 3610-3613 están acoplados de forma comunicativa a una aplicación de trazado de rayos del lado del cliente 3630 a través de una pasarela.
Una de las dificultades con una arquitectura distribuida es la gran cantidad de datos empaquetados que deben transmitirse entre cada uno de los nodos de trazado de rayos 3610-3613. En una forma de realización, tanto las técnicas de compresión sin pérdida como las técnicas de compresión con pérdida se utilizan para reducir los datos transmitidos entre los nodos de trazado de rayos 3610-3613.
Para poner en práctica la compresión sin pérdidas, en lugar de enviar paquetes llenos con los resultados de ciertos tipos de operaciones, se envían datos u órdenes que permiten que el nodo receptor reconstruya los resultados. Por ejemplo, las luces de zona muestreadas de manera estocástica y las operaciones de oclusión ambiental (AO) no necesariamente necesitan instrucciones. En consecuencia, en una forma de realización, un nodo transmisor simplemente enviará una semilla aleatoria que luego utilizará 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, solamente es necesario enviar el ID de la luz y los orígenes a los nodos 3610-3612. Cada uno de los nodos puede muestrear de manera estocástica la luz de forma independiente. En una forma de 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 suaves se pueden calcular en los nodos 3610-3612 sin esperar los puntos originales para tramas sucesivos. De manera adicional, si se conoce que un conjunto de rayos se dirigirá a la misma fuente de luz puntual, se pueden enviar instrucciones identificando la fuente de luz al nodo receptor que la aplicará al conjunto de rayos. Como otro ejemplo, si existen N rayos de oclusión ambiental transmitidos en un único punto, se puede enviar una orden para generar N muestras desde dicho punto.
Se pueden aplicar diversas técnicas adicionales para la compresión con pérdidas. Por ejemplo, en una forma de realización, puede emplearse un factor de cuantificación para cuantificar todos los valores de coordenadas asociados con la BVH, los primitivos y los rayos. Además, los valores de coma flotante de 32 bits utilizados para datos como nodos de BVH y primitivos pueden convertirse en valores enteros de 8 bits. En una puesta en práctica particular, los límites de los paquetes de rayos se almacenan con total precisión, 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 total (por ejemplo, coma flotante de 32 bits), conectando de manera efectiva los sistemas de coordenadas globales y locales.
El siguiente es un ejemplo de compresión sin pérdidas empleada en una forma de 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 como sigue:
struct Ray
|uint32 pixId;
uint32 materialID;
uint32 instanceID;
uint64 primitiveID;
uint32 geometryID;
uint32 lightID;
float origin[3];
float direction[3];
float t0;
float t;
float time;
float normal[3]; //usado para intersecciones de geometría;
float u;
float v;
float wavelength;
float phase; //Interferometría
float refractedOffset; //Schlieren-esque
float amplitude;
float weight;
};
En lugar de enviar los datos sin procesar para todos y cada uno de los nodos generados, estos datos pueden comprimirse agrupando valores y creando rayos implícitos utilizando metadatos aplicables cuando sea posible.
Formación de haces y agrupamiento de datos de rayos
Una forma de 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
Todos los datos de rayos se empaquetan, excepto que solamente se almacena un único origen en todos los rayos. RayPacket.flags está configurado para Ra YpAc KET_COMMON_ORIGIN. Cuando RayPacket se desempaqueta cuando se recibe, los orígenes se completan a partir del valor de origen único.
Los orígenes se comparten solamente 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. Dicha operación se puede realizar en cualquier valor compartido entre nodos, tal como IDs de materiales, IDs de primitivos, 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 generar múltiples rayos secundarios para muestrear estocásticamente una zona. En lugar de que el remitente genere un rayo secundario, lo envía y el receptor opere con el mismo, pudiendo el remitente enviar una orden de que se debe generar un rayo con cualquier información dependiente, y el rayo se genera en el extremo receptor. En el caso de que el emisor deba generar en primer lugar el rayo para determinar a qué receptor enviarlo, se generará el rayo y se podrá enviar la semilla aleatoria para regenerar exactamente el mismo rayo.
Por ejemplo, para muestrear un punto de impacto con 64 rayos de sombra muestreando una fuente de luz de zona, los 64 rayos se intersectan con zonas del mismo cálculo N4. Se crea un RayPacket con origen común y normal. Se podrían enviar más datos si se desea que el receptor sombree la aportación de píxeles resultante, pero para este ejemplo, se supone que deseamos solamente devolver si un rayo choquea los datos de otros nodos. Se crea una RayOperation para una operación de generación de rayos de sombra y se le asigna el valor de la ID de luz que se va a muestrear y la semilla del número aleatorio. Cuando N4 recibe el paquete de rayos, genera los datos de rayos completos al completar los datos de origen compartidos para todos los rayos y establecer 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, solamente se deben devolver los resultados binarios para cada rayo, que se pueden mostrar mediante una máscara sobre los rayos.
Enviar los 64 rayos originales en este ejemplo se hubiera utilizado 104 Bytes x 64 rayos = 6656 Bytes. Si los rayos que retornan también se enviaron en su forma sin procesar, esto también se duplica a 13312 bytes. Al utilizar la compresión sin pérdidas con solamente enviar el origen del rayo común, la normalidad y la operación de generación de rayos con semilla e ID, solamente se envían 29 bytes con 8 bytes de retorno para la máscara que fue intersectada. Lo que antecede da como resultado una tasa de compresión de datos que debe enviarse a través de la red de aproximadamente 360:1. Esto no incluye la sobrecarga para procesar el mensaje en sí mismo, que debería identificarse de alguna manera, pero eso se deja a la puesta en práctica. Se pueden realizar otras operaciones para volver a calcular el origen y las direcciones de los rayos desde el pixellDs para los rayos primarios, volviendo a calcular los IDs de píxeles en función de los márgenes en el paquete de rayos y muchas otras puestas en práctica posibles para volver a calcular los valores. Se pueden utilizar operaciones similares para cualquier rayo individual o grupo de rayos enviados, incluyendo sombras, reflexiones, refracción, oclusión ambiental, intersecciones, intersecciones de volumen, sombreado, reflejos rebotados en el trazado de rutas, etc.
La Figura 37 ilustra datos adicionales para dos nodos de trazado de rayos 3710-3711 que realizan la compresión y descompresión de paquetes de trazado de rayos. En particular, en una forma de 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 tal como se describe en este documento (por ejemplo, convirtiendo valores de 32 bits a valores de 8 bits, sustituyendo los 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 a continuación descomprime los paquetes de rayos cuando es apropiado. Por ejemplo, puede ejecutar órdenes para reconstruir los datos de trazado de rayos (por ejemplo, utilizar una semilla aleatoria para realizar un muestreado 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 la Figura 37, el circuito de descompresión de rayos 3740-3741 puede integrarse dentro de los motores de trazado de rayos 3730-3731, respectivamente. Por ejemplo, en la medida en que los datos de rayos comprimidos comprimen órdenes para reconstruir los datos de rayos, estas órdenes pueden ser ejecutadas por cada motor de trazado de rayos respectivo 3730-3731.
Tal como se ilustra en la Figura 38, el circuito de compresión de rayos 3720 puede incluir un circuito de compresión con pérdida 3801 para realizar las técnicas de compresión con pérdida descritas en este documento (p. ej., convertir coordenadas de coma flotante de 32 bits a coordenadas enteras de 8 bits) y un circuito de compresión sin pérdida 3803 para realizar las técnicas de compresión sin pérdidas (por ejemplo, transmitir órdenes 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 la Figura 39 se ilustra un método de conformidad con una forma de realización. El método puede ponerse en práctica 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, el circuito de compresión con pérdidas realiza una compresión con pérdidas en los primeros datos de trazado de rayos y, en 3902, el circuito de compresión sin pérdidas realiza 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, el circuito de descompresión con/sin pérdidas realiza una descompresión con/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 a partir de los datos descomprimidos.
PROCESADOR GRÁFICO CON HARDWARE
TRAZADO DE RAYOS HÍBRIDO ACELERADO
Una forma de 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, núcleos de gráficos 3130 y/o núcleos de CPU 3199. Por ejemplo, se pueden realizar pruebas de rasterización y de profundidad en los núcleos de gráficos 3130 en lugar de la etapa de emisión de rayos primaria. Los núcleos de trazado de rayos 3150 pueden entonces generar rayos secundarios para reflexiones, refracciones y sombras de rayos. Además, ciertas formas de realización pueden seleccionar ciertas zonas 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 los umbrales de propiedad del material, tales como niveles de reflectividad altos), mientras que otras zonas de la escena se renderizarán con rasterización en los núcleos de gráficos 3130. En una forma de realización, esta puesta en práctica híbrida se utiliza para aplicaciones de trazado de rayos en tiempo real, en donde la latencia es una cuestión crítica.
Una forma de realización de la arquitectura de cruce de rayos descrita a continuación realiza sombreado programable y control de cruce de rayos utilizando procesadores gráficos existentes de datos múltiples de instrucción única (SIMD) y/o hilo múltiple de instrucción única (SIMT) mientras acelera funciones críticas, tales como los cruces y/o intersecciones de BVH, utilizando hardware dedicado. En esta forma de realización, la ocupación de SIMD para rutas incoherentes se mejora reagrupando sombreadores generados en puntos específicos durante el cruce transversal y antes del sombreado. Lo que antecede se logra utilizando hardware dedicado que ordena los sombreadores de manera dinámica, en el circuito integrado. La recursión se gestiona dividiendo una función en continuaciones que se ejecutan al retornar y reagrupando las continuaciones antes de la ejecución para mejorar la ocupación de SIMD.
El control programable de cruce/intersección de rayos se logra descomponiendo la funcionalidad transversal en un cruce transversal interno que se puede poner en práctica como hardware de función fija y un cruce externo que se ejecuta en procesadores GPU y permite el control programable a través de sombreadores transversales definidos por el usuario. El coste de transferir el contexto transversal entre el hardware y el software se reduce al truncar de manera conservadora el estado transversal interno durante la transición entre los cruces interno y externo.
El control programable del trazado de rayos se puede expresar a través de los diferentes tipos de sombreadores enumerados en la Tabla A siguiente. Puede haber múltiples sombreadores para cada tipo. Por ejemplo, cada material puede tener un sombreador de impacto diferente.
TABLA A
Figure imgf000041_0001
En una forma de realización, el trazado de rayos recursivo se inicia mediante una función API que ordena al procesador gráfico que inicie un conjunto de sombreadores primarios o circuitos de intersección que pueden generar intersecciones de rayos-escena para rayos primarios. Lo que antecede, a su vez, genera otros sombreadores tales como transversales, sombreadores de choques o sombreadores sin choque. Un sombreador que genera un sombreador secundario también puede recibir un valor de retorno de dicho sombreador secundario. Los sombreadores a los que se puede solicitar son funciones de uso general que pueden ser generados directamente por otro sombreador y también pueden devolver valores al sombreador que hace la solicitud.
La Figura 40 ilustra una forma de realización de una arquitectura de procesamiento de gráficos que incluye un circuito de ejecución de sombreador 4000 y un circuito de función fija 4010. El subsistema de hardware de ejecución de uso general incluye una pluralidad de datos múltiples de instrucción única (SIMD) y/o hilos múltiples de instrucciones únicas (SIMT), núcleos/unidades de ejecución (EUs) 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 la unidad de mensajes 4004, un planificador 4007, un circuito de cruce/intersección de rayo-BVH 4005, un circuito de clasificación 4008 y una memoria caché L1 local 4006.
En funcionamiento, el dispositivo de envío primario 4009 envía un conjunto de rayos primarios al planificador 4007, que programa el trabajo de los sombreadores ejecutados en los núcleos SIMD/SIMT/EUs 4001. Los núcleos SIMD/EUs 4001 pueden ser núcleos de trazado de rayos 3150 y/o núcleos de gráficos 3130 descritos con anterioridad. La ejecución de los sombreadores primarios genera trabajo adicional a realizar (por ejemplo, para ser ejecutado por uno o más sombreadores secundarios y/o hardware de función fija). La unidad de mensajes 4004 distribuye el trabajo generado por los núcleos SIMD/EUs 4001 al planificador 4007, accediendo al grupo de pila 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, está programado para su procesamiento en los núcleos SIMD/SIMT/EUs 4001. Antes de la programación, el circuito de clasificación 4008 puede clasificar los rayos en grupos o contenedores tal como se aquí describe (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 de BVH. Por ejemplo, el circuito de intersección del rayo-BVH 4005 puede comparar las coordenadas del rayo con cada nivel de la jerarquía BVH para identificar los volúmenes que intersecta 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 SIMD/EUs 4001. Cada instancia de ejecución de un sombreador está asociada con una pila de demandas que se puede utilizar para almacenar argumentos pasados entre un sombreador primario y un sombreador secundario. Las pilas de demandas también pueden almacenar referencias a las funciones de continuación que se ejecutan cuando se devuelve una demanda.
La Figura 41 ilustra un conjunto de ejemplo de pilas asignadas 4101 que incluye una pila de sombreadores primarios, una pila de sombreadores de impacto, una pila de sombreadores transversales, una pila de funciones de continuación y una pila de intersección de rayo-BVH (que, tal como se describe, puede ser ejecutado por el hardware de función fija 4010). Las nuevas solicitaciones de sombreador pueden poner en práctica nuevas pilas a partir de una agrupación de pilas libres 4102. Las pilas de demandas pueden almacenarse en memoria caché en una memoria caché L1 local 4003, 4006 para reducir la latencia de los accesos.
En una forma de realización, existe un número finito de pilas de demandas, cada una con un tamaño máximo fijo "Sstack" asignado en una zona contigua de la 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 forma de realización, el planificador 4007 asigna y desasigna los IDs de pila cuando programa el trabajo a los núcleos SIMD/EUs 4001.
En una forma de realización, el dispositivo de envío primario 4009 comprende un procesador de órdenes de procesador gráfico que envía sombreadores primarios en respuesta a una orden de envío del host (por ejemplo, una CPU). El planificador 4007 recibe estas solicitudes de envío y pone en marcha un sombreador primario en un hilo del procesador SIMD si puede asignar un ID de pila para cada carril SIMD. Los IDs de pila se asignan desde el grupo de pila libre 4102 que se inicializa al comienzo de la orden de envío.
Un sombreador en ejecución puede generar un sombreador secundario enviando un mensaje de generación a la unidad de mensajería 4004. Esta orden incluye los IDs de pila asociados con el sombreador y también incluye un puntero al registro de sombreador secundario para cada carril SIMD activo. Un sombreador primario solamente puede emitir este mensaje una vez para un carril activo. En una forma de realización, después de enviar mensajes de generación para todos los carriles pertinentes, el sombreador primario finaliza su función.
Un sombreador ejecutado en los núcleos SIMD/EUs 4001 también puede generar tareas de función fija tales como intersecciones de rayo-BVH utilizando un mensaje generado con un puntero de registro de sombreador reservado para el hardware de función fija. Tal como se mencionó con anterioridad, 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 sombreadores que pueden llamarse directamente al circuito de clasificación 4008. En una forma de 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 IDs de pila de diferentes sombreadores primarios 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 gráfica 2511 o de la memoria caché de último nivel (LLC) 4020 y lanza el sombreador en un hilo del procesador.
En una forma de realización, las continuaciones se tratan como sombreadores solicitables y también se pueden hacer referencia a través de registros de sombreadores. Cuando se genera un sombreador secundario y devuelve valores al sombreador primario, se inserta un puntero al registro del sombreador de continuación en la pila de demandas 4101. Cuando retorna un sombreador secundario, el registro del sombreador de continuación se extrae de la pila de demandas 4101 y un sombreador de continuación se genera. Las continuaciones generadas pasan por la unidad de clasificación de forma similar a los sombreadores solicitables y se inician en un hilo del procesador.
Tal como se ilustra en la Figura 42, una forma de realización del circuito de clasificación 4008 agrupa tareas generadas por punteros de registro de sombreador 4201A, 4201B, 4201n para crear lotes SIMD para sombreado. Los IDs de pila o los IDs de contexto en un lote ordenado se pueden agrupar desde diferentes envíos y desde diferentes carriles SIMD de entrada. En una forma de realización, el circuito de agrupamiento 4210 realiza la clasificación utilizando una estructura de memoria direccionable de contenido (CAM) 4201 que comprende una pluralidad de entradas con cada entrada identificada con una etiqueta 4201. Tal como se mencionó con anterioridad, en una forma de realización, la etiqueta 4201 es un puntero de registro de sombreador correspondiente 4201A, 4201B, 4201n. En una forma de 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 una orden de generación entrante, cada carril SIMD tiene una ID de pila correspondiente (que se muestra 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 forma de 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, lo que posiblemente desaloje una entrada anterior con un lote incompleto.
Un sombreador en ejecución puede desasignar la pila de demandas 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 IDs de pila/ID de contexto para los carriles SIMD activos al agrupamiento libre.
Una forma de realización de la invención pone en práctica un enfoque híbrido para 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. La Figura 43 muestra una estructura de aceleración que se puede utilizar para el cruce híbrido, que es un árbol de dos niveles con un único BVH 4300 de nivel superior y varios BVHs 4301 y 4302 de nivel inferior. Los elementos gráficos se muestran a la derecha para indicar las 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 primitivos personalizados 4307.
Los nodos hoja con triángulos 4306 en la BVH 4300 de nivel superior pueden hacer referencia a triángulos, registros de sombreador de intersección para primitivos personalizados o registros de sombreador de cruce. Los nodos de hoja con triángulos 4306 de las BVHs de nivel inferior 4301 -4302 solamente pueden hacer referencia a triángulos y registros de sombreador de intersección para primitivos personalizados. 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 de BVH 4300­ 4302 que se conoce como cruce externas. Las operaciones de cruce internas se pueden poner en práctica de manera eficiente en hardware de función fija, mientras que las operaciones de cruce externas se pueden realizar con un rendimiento aceptable con sombreadores programables. En consecuencia, una forma de realización de la invención realiza operaciones de cruce internas utilizando un circuito de función fija 4010 y realiza operaciones de cruce externas utilizando el circuito de ejecución de sombreador 4000 que incluye núcleos SIMD/SIMT/EUs 4001 para ejecutar sombreadores programables.
Conviene señalar que los núcleos SIMD/SIMT/EUs 4001 a veces se denominan en este caso simplemente "núcleos", "núcleos SIMD", "EUs" o "procesadores SIMD" para simplificar. De manera similar, el circuito de cruce/intersección de rayo-BVH 4005 a veces se denomina simplemente "unidad de cruce", "unidad de cruce/intersección" o "circuito de cruce/intersección". Cuando se utiliza un término alternativo, el nombre particular utilizado para designar el circuito/lógica respectivo no altera las funciones subyacentes que realiza el circuito/lógica, tal como se describe en este documento.
Además, aunque se ilustra como un único componente en la Figura 40 con 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 ponerse en práctica en circuitos y/o lógica tal como lo descrito en este documento.
En una forma de realización, cuando un rayo intersecta 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 para crear un lote SIMD que es lanzado por el planificador 4007 para la ejecución de SIMD en los núcleos gráficos SIMD/EUs 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 jerarquía BVH en un nivel de detalle (LOD) más grueso o transformar el rayo para permitir transformaciones de cuerpo rígido. El sombreador de cruce a continuación genera un cruce interno para la BVH seleccionada.
El cruce interno calcula las intersecciones de rayo-BVH atravesando la BVH y calculando las intersecciones de caja de rayos y triángulo de rayos. 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 forma de 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 intersecta con un nodo de hoja correspondiente a un sombreador de cruce o un sombreador de intersección, el cruce interno finaliza y la pila interna se trunca. La pila truncada junto con un puntero dirigido al rayo y a la BVH es objeto de escritura en la memoria en una posición especificada por el sombreador demandante y luego se genera el sombreador de cruce o sombreador de intersección correspondiente. Si el rayo intersecta con cualquier triángulo durante el cruce interno, la información de choque correspondiente se proporciona como argumentos de entrada para estos sombreadores, tal como se muestra en el código siguiente. Estos sombreadores generados son agrupados por el circuito de clasificación 4008 para crear lotes SIMDs para su ejecución.
struct HitInfo {
float barycentrics[2];
float tmax;
bool innerTravComplete;
uint primID;
uint geomID;
ShaderRecord* leafShaderRecord; }
El truncamiento de la pila transversal interna reduce el coste de volcarlo en la memoria. Una forma de realización de la invención utiliza el métod descrito en Restart Trail for Stackles BVH TraversaI, Gráficos de Alto Rendimiento (2010), págs. 107-111, para truncar la pila a un pequeño número de entradas en la parte superior de la pila, una cola de reinicio de 42 bits y un valor de profundidad de 6 bits. La cola de reinicio indica bifurcaciones 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 es suficiente para reanudar el cruce interno en un momento posterior.
El cruce interno se completa cuando la pila interna está vacía y no existen más nodos BVH para probar. En este caso, se genera un controlador de pila exterior que abre la parte superior de la pila exterior y reanuda el cruce si la pila exterior no está vacía.
En una forma de realización, el cruce externo ejecuta la máquina de estado de cruce principal y se pone en práctica en el código de programa ejecutado por el circuito de ejecución de sombreador 4000. Genera una consulta de cruce interno bajo las siguientes condiciones: (1) cuando un nuevo rayo es generado por un sombreador de choque o un sombreador primario; (2) cuando un sombreador de cruce selecciona una jerarquía BVH para el cruce; y (3) cuando un controlador de pila exterior reanuda el cruce interno para una jerarquía BVH.
Tal como se ilustra en la Figura 44, antes de que se genere el cruce interno, se asigna espacio en la pila de demandas 4405 para que el circuito de función fija 4010 almacene la pila interna truncada 4410. Los desplazamientos 4403-4404 a la parte superior de la pila de demandas 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 choques para el primitivo de intersección más próximo.
El sombreador de cruce, el sombreador de intersección y el controlador de pila exterior son generados por el circuito de intersección de rayo-BVH 4005. El sombreador de cruce se asigna en la pila de demandas 4405 antes de iniciar un nuevo cruce interno para la BVH de segundo nivel. El controlador de pila externo es un sombreador que es responsable de actualizar la información de choque y de reanudar cualquier tarea de cruce interno pendiente. El controlador de pila externo también es responsable de generar sombreadores de choque o sin choque cuando se completa el cruce. El cruce está completo cuando no existen demandas de cruce interno pendientes para generar. Cuando se completa el cruce y se encuentra una intersección, se genera un sombreador de choques; de lo contrario, se genera un sombreador sin choque.
Mientras que el sistema de cruce híbrido descrito con anterioridad utiliza una jerarquía BVH de dos niveles, las formas de realización de la invención descritas en el presente documento pueden utilizar un número arbitrario de niveles BVH con un cambio correspondiente en la puesta en práctica del cruce externo.
Además, mientras que el circuito de función fija 4010 se describe para realizar intersecciones de rayo-BVH en las formas de realización anteriores, también se pueden poner en práctica otros componentes del sistema en el circuito de función fija. Por ejemplo, el controlador de pila externo descrito con anterioridad puede ser un sombreador interno (no visible para el usuario) que podría ponerse en práctica de manera potencial en el circuito de cruce/intersección BVH de función fija 4005. Esta puesta en práctica se puede utilizar para reducir el número de etapas de sombreador enviadas y redondear los desplazamientos entre el hardware de intersección de función fija 4005 y el procesador.
Las formas de realización de la invención aquí descritas permiten un sombreado programable y el control de cruce de rayos utilizando funciones definidas por el usuario que pueden ejecutarse con mayor eficiencia de SIMD en procesadores GPU existentes y futuros. El control programable del cruce de rayos permite varias funciones importantes, tales como instancias de procedimientos, selección de nivel de detalle estocástico, intersección de primitivo personalizada y actualizaciones negligentes de BVH.
EJECUCIÓN ESPECULATIVA DE SOMBREADORES DE CHOQUE Y DE INTERSECCIÓN
Una forma de realización de la invención incluye una arquitectura programable de trazado de rayos de datos múltiples de instrucciones múltiples (MIMD) que admite la ejecución especulativa de sombreadores de choques y de intersección. En particular, una forma de realización se enfoca en reducir la sobrecarga de programación y de comunicación entre los núcleos SIMD/SIMT programables/unidades de ejecución 4001 descritas con anterioridad con respecto a la Figura 40 y las unidades transversales/intersección MIMD de función fija 4005 en una arquitectura híbrida de trazado de rayos. A continuación, se describen múltiples sistemas de ejecución especulativa de sombreadores de choques e intersección que se pueden enviar en un único lote a partir del hardware de cruce, evitando varios viajes de ida y vuelta de cruce y de sombreado. Una forma de realización incluye circuitos dedicados para poner en práctica estas técnicas.
Las formas de realización de la invención son particularmente beneficiosas en los casos de uso en donde se desea la ejecución de múltiples sombreadores de choques o de intersección a partir de una consulta de cruce de rayos que impondría una sobrecarga significativa cuando se pone en práctica sin soporte de hardware dedicado. Estos incluyen, pero sin limitación, la consulta de k choques más próxima (puesta en marcha de un sombreador de choque para las k intersecciones más próximas) y múltiples sombreadores de intersección programables.
Las técnicas aquí descritas pueden ponerse en práctica como extensiones de la arquitectura ilustrada en la Figura 40 (y descrita con respecto a las Figuras 40 a 44). En particular, las presentes formas de realización de la invención se basan en esta arquitectura con ampliaciones para mejorar el rendimiento de los casos de uso mencionados con anterioridad.
Una limitación de rendimiento de las arquitecturas transversales híbridas de trazado de rayos es la sobrecarga de iniciar consultas transversales desde las unidades de ejecución y la sobrecarga de solicitar sombreadores programables desde el hardware de trazado de rayos. Cuando se solicitan múltiples sombreadores de choque o de intersección durante el cruce del mismo rayo, esta sobrecarga genera "viajes de ida y vuelta de ejecución" entre los núcleos programables 4001 y la unidad de cruce/intersección 4005. Lo que antecede también ejerce una presión adicional sobre la unidad de clasificación 4008 que necesita extraer coherencia de SIMD/ SIMT de las solicitaciones de sombreador individuales.
Varios aspectos del trazado de rayos requieren un control programable que se pueda expresar a través de los diferentes tipos de sombreadores enumerados en la TABLA A anterior (es decir, Primario, Choque, Cualquier choque, Sin choque, Intersección, Cruce y Solicitable). Puede haber múltiples sombreadores para cada tipo. Por ejemplo, cada material puede tener un sombreador de choque diferente. Algunos de estos tipos de sombreadores están definidos en la API actual de Microsoft® Ray Tracing.
Como breve revisión, el trazado de rayos recursivo se inicia mediante una función API que ordena a la GPU que inicie un conjunto de sombreadores primarios que pueden generar intersecciones de rayo-escena (puesto en práctica en hardware y/o software) para rayos primarios. Lo que antecede, a su vez, puede generar otros sombreadores tales como sombreadores de cruce, de choque o sin choque. Un sombreador que genera un sombreador secundario también puede recibir un valor de retorno de dicho sombreador. Los sombreadores solicitables son funciones de uso general que pueden ser generados directamente por otro sombreador y también pueden devolver valores al sombreador solicitante.
El cruce de rayos calcula las intersecciones de rayo-escena atravesando e intersectando nodos en una jerarquía de volumen límite (BVH). Investigaciones recientes han demostrado que la eficiencia del cálculo de intersecciones de rayos-escena se puede mejorar en un orden de magnitud utilizando técnicas que se adaptan mejor al hardware de función fija, tales como aritmética de precisión reducida, compresión BVH, máquinas de estado por rayo, canalizaciones de intersección dedicadas y memorias caché personalizadas.
La arquitectura que se muestra en la Figura 40 comprende un sistema de este tipo en donde una matriz de núcleos SIMD/SIMT/unidades de ejecución 4001 interactúan con una unidad de intersección/trazado de rayos de función fija 4005 para realizar un trazado de rayos programable. Los sombreadores programables se asignan a hilos SIMD/SIMT en las unidades de ejecución/núcleos 4001, en donde la utilización, la ejecución y la coherencia de datos de SIMD/SIMT son fundamentales para un rendimiento óptimo. Las consultas de rayos a menudo rompen la coherencia por diversas razones, tales como:
• Divergencia de cruce: La duración del cruce de BVH varía mucho
• entre rayos que favorecen el procesamiento asincrónico de rayos.
• Divergencia de ejecución: Los rayos generados desde diferentes carriles del mismo hilo SIMD/SIMT pueden dar como resultado diferentes solicitaciones de sombreador.
• Divergencia de acceso a datos: Los rayos que inciden diferentes superficies muestrean diferentes nodos BVH y primitivos y sombreadores acceden a diferentes texturas, a modo de ejemplo. Una variedad de otros escenarios operativos puede causar divergencia en el acceso a los datos.
En una forma de realización, la unidad de intersección/trazado de rayos de función fija 4005 supera los dos primeros retos al procesar cada rayo de manera individual y fuera de servicio. Lo que antecede, sin embargo, rompe los grupos SIMD/SIMT. La unidad de clasificación 4008 es, por lo tanto, responsable de formar nuevos grupos SIMD/SIMT coherentes de solicitaciones de sombreador para enviarse de nuevo a las unidades de ejecución.
Es fácil constatar los beneficios de dicha arquitectura en comparación con una puesta en práctica de trazado de rayos basada en software puro directamente en los procesadores SIMD/SIMT. Sin embargo, existe una sobrecarga asociada con la mensajería entre los núcleos SIMD/SIMT/unidades de ejecución 4001 (a veces denominados aquí simplemente procesadores SIMD/SIMT o núcleos/EUs) y la unidad de cruce/intersección 4005 de MIMD. Además, la unidad de clasificación 4008 puede no extraer la utilización perfecta de SIMD/SIMT de solicitaciones de sombreadores incoherentes.
Una forma de realización de la invención identifica casos de uso en los que las solicitaciones de sombreador pueden ser particularmente frecuentes durante el cruce. Se describen mejoras para los procesadores de trazado de rayos MIMD híbridos para reducir, de manera significativa, la sobrecarga de comunicación entre los núcleos/EUs 4001 y las unidades de cruce/intersección 4005. Esta forma de realización puede ser particularmente beneficiosa al encontrar las k-intersecciones más próximas y la puesta en práctica de sombreadores de intersección programables. Conviene señalar que, sin embargo, las técnicas aquí descritas no se limitan a ningún escenario de procesamiento en particular.
A continuación, se proporciona un resumen de los costes de alto nivel del cambio de contexto de trazado de rayos entre los núcleos/EUs 4001 y la unidad de cruce/intersección de función fija 4005. La mayor parte de la sobrecarga de rendimiento es causada por estos dos cambios de contexto cada vez que la solicitación del sombreador es necesaria durante el cruce de un único rayo.
Cada carril SIMD/SIMT que lanza un rayo genera un mensaje de generación a la unidad de cruce/intersección 4005 asociada con una jerarquía BVH para atravesar. Los datos (contexto de cruce de rayos) se retransmiten a la unidad de cruce/intersección 4005 a través del mensaje de generación y la memoria (almacenada). Cuando la unidad de cruce/intersección 4005 está lista para asignar un nuevo hilo de hardware al mensaje de generación, carga el estado de cruce y realiza el cruce en la BVH. También existe un coste de configuración que debe realizarse antes de la primera etapa cruce en la BVH.
La Figura 45 ilustra un flujo operativo de una canalización de trazado de rayos programable de conformidad con una forma de realización de la invención. En la forma de realización ilustrada, los elementos sombreados que incluyen el cruce 4502 y la intersección 4503 se ponen en práctica en un circuito de función fija, mientras que los elementos restantes se ponen en práctica con núcleos/unidades de ejecución programables.
Un sombreador de rayos primarios 4501 envía trabajo al circuito de cruce en 4502 que atraviesa el(los) rayo(s) actual(es) a través de la BVH (u otra estructura de aceleración). Cuando se alcanza un nodo de hoja, el circuito de cruce solicita al circuito de intersección en 4503 que, al identificar una intersección de rayo-triángulo, solicita un sombreador de choque en 4504 (que puede proporcionar resultados al circuito de cruce tal como se indica).
De manera alternativa, el cruce puede terminarse antes de llegar a un nodo de hoja y se solicita un sombreador de choque más próximo en 4507 (si se registró un choque) o un sombreador sin choque en 4506 (en caso de falta de choque).
Tal como se indica en 4505, se puede solicitar un sombreador de intersección si el circuito de cruce alcanza un nodo de hoja de primitivo personalizado. Un primitivo personalizado puede ser cualquier primitivo que no sea un triángulo, tal como un polígono o un poliedro (por ejemplo, tetraedros, vóxeles, hexaedros, cuñas, pirámides u otro volumen "no estructurado"). El sombreador de intersección 4505 identifica cualquier intersección entre el rayo y el primitivo personalizado para el sombreador de cualquier choque 4504 que pone en práctica cualquier procesamiento de choque.
En una forma de realización, cuando el cruce de hardware 4502 alcanza una etapa programable, la unidad de cruce/intersección 4005 genera un mensaje de envío de sombreador a un sombreador pertinente 4505-4507, que corresponde a un único carril SIMD de la(s) unidad(es) de ejecución utilizada(s) para ejecutar el sombreado. Puesto que los envíos ocurren en un orden arbitrario de rayos, y son divergentes en los programas solicitados, una forma de realización de la unidad de clasificación 4008 acumula múltiples solicitudes de envío para extraer lotes SIMD coherentes. El estado de cruce actualizado y los argumentos de sombreador opcionales pueden escribirse en la memoria 2511 por la unidad de cruce/intersección 4005.
En el problema de las k intersecciones más próximas, se ejecuta un sombreador 4507 de choques más próximos para las primeras k intersecciones. En la forma convencional, lo que antecede significaría finalizar el cruce de rayos al encontrar la intersección más próxima, solicitar un sombreador de choque y generar un nuevo rayo desde el sombreador de choque para encontrar la siguiente intersección más próxima (con el origen del rayo desplazado, por lo que la misma intersección no vuelva a ocurrir). Es fácil constatar que esta puesta en práctica requeriría generaciones de k rayos para un solo rayo. Otra puesta en práctica opera con sombreadores de cualquier choque 4504, solicitados para todas las intersecciones y manteniendo una lista global de las intersecciones más próximas, utilizando una operación de clasificación por inserción. El principal problema con este enfoque es que no existe un límite superior para las solicitaciones de sombreador de cualquier choque.
Tal como se mencionó con anterioridad, se puede solicitar un sombreador de intersección 4505 en primitivos no triangulares (personalizados). Según el resultado de la prueba de intersección y el estado de cruce (nodo pendiente e intersecciones de primitivos), el cruce del mismo rayo puede continuar después de la ejecución del sombreador de intersección 4505. Por lo tanto, encontrar el choque más próximo puede requerir varios viajes de ida y vuelta a la unidad de ejecución.
La invención se centra en la reducción de los cambios de contexto SIMD-MIMD para sombreadores de intersección 4505 y sombreadores de choques 4504, 4507 a través de cambios en el hardware de cruce y el modelo de programación de sombreadores. En primer lugar, el circuito de cruce de rayos 4005 difiere las solicitaciones de sombreador acumulando múltiples solicitaciones potenciales y enviándolas en un lote más grande. Además, ciertas solicitaciones que resultan innecesarias pueden ser eliminadas en esta etapa. Además, una forma de realización del planificador de sombreador 4007 agrega múltiples solicitaciones de sombreador desde el mismo contexto de cruce en un único lote SIMD, lo que da como resultado un mensaje de generación de un único rayo. En una puesta en práctica, el hardware de cruce 4005 suspende el hilo de cruce y espera los resultados de múltiples solicitaciones de sombreador. Este modo de operación se denomina, en el presente documento, ejecución de sombreadores "especulativa" porque permite el envío de múltiples sombreadores, algunos de los cuales pueden no ser solicitados cuando se utilizan solicitaciones secuenciales.
La Figura 46A ilustra un ejemplo en donde la operación de cruce encuentra múltiples primitivos personalizados 4650 en un subárbol y la Figura 46B ilustra cómo se puede resolver lo que antecede con tres ciclos de envío de intersección C1-C3. En particular, el planificador 4007 de esta forma de realización requiere tres ciclos para enviar el trabajo al procesador SIMD 4001 y el circuito de cruce 4005 requiere tres ciclos para proporcionar los resultados a la unidad de clasificación 4008. El estado de cruce 4601 requerido por el circuito de cruce 4005 es almacenado en una memoria tal como una memoria caché local (por ejemplo, una memoria caché L1 y/o una memoria caché L2).
A. Solicitaciones diferidas de sombreador de trazados de rayos
Una forma de realización de la invención modifica la manera en que se gestiona el estado de cruce del hardware 4601 para permitir la acumulación de múltiples intersecciones potenciales o solicitaciones de choques en una lista. En un momento dado durante el cruce, cada entrada en la lista puede utilizarse para generar una solicitación de sombreado. Por ejemplo, los k puntos de intersección más próximos se pueden acumular en el hardware de cruce 4005 y/o en el estado de cruce 4601 en la memoria, y se pueden solicitar sombreadores de choques para cada elemento si se completa el cruce. Para los sombreadores de choque, se pueden acumular múltiples intersecciones potenciales para un subárbol en la BVH.
Para el caso de uso de k más próximo, el beneficio de este enfoque es que, en lugar de k-1 viajes de ida y vuelta al núcleo SIMD/EU 4001 y k-1 nuevos mensajes de generación de rayos, todos los sombreadores de choques se solicitan desde el mismo hilo de cruce durante una única operación de cruce en el circuito de cruce 4005. Un reto para las puestas en práctica potenciales es que no es trivial garantizar la orden de ejecución de los sombreadores de choque (el enfoque estándar de "ida y vuelta" garantiza que el sombreador de choque de la intersección más próxima se ejecute en primer lugar, etc..). En una forma de realización, esto se soluciona mediante la sincronización de los sombreadores de choques o la relajación de la ordenación.
Para el caso de uso del sombreador de intersección, el circuito de cruce 4005 no conoce de antemano si un sombreador dado devolvería una prueba de intersección positiva. Sin embargo, es posible ejecutar de manera especulativa varios sombreadores de intersección y si al menos uno devuelve un resultado de choque positivo, se fusiona con el choque global más próximo. Las puestas en práctica específicas deben encontrar un número óptimo de pruebas de intersección diferidas para reducir la cantidad de demandas de envío, pero evitar solicitar a demasiados sombreadores de intersección redundantes.
B. Solicitaciones de sombreador agregados desde el circuito de cruce
Cuando se envían múltiples sombreadores desde la misma generación de rayos en el circuito de cruce 4005, una forma de realización crea bifurcaciones en el flujo del algoritmo de cruce de rayos. Lo que antecede puede ser problemático para los sombreadores de intersección porque el resto del cruce BVH depende del resultado de todas las pruebas de intersección enviadas. Lo que antecede significa que es necesaria una operación de sincronización para esperar el resultado de las solicitaciones de sombreador, lo que puede ser un desafío en hardware asíncrono.
Una forma de realización de la invención se basa en dos puntos de fusión de los resultados de las demandas de sombreador: el procesador SIMD 4001 y el circuito de cruce 4005. Con respecto al procesador SIMD 4001, múltiples sombreadores pueden sincronizar y agregar sus resultados utilizando modelos de programación estándar. Una forma relativamente simple de hacer lo que antecede es utilizar elementos atómicos globales y resultados agregados en una estructura de datos compartida en la memoria, en donde se pueden almacenar los resultados de la intersección de múltiples sombreadores. A continuación, el último sombreador puede resolver la estructura de datos y devolver la solicitada al circuito de cruce 4005 para continuar el cruce.
Una forma de realización de la invención pone en práctica un método más eficiente que limita la ejecución de múltiples solicitaciones de sombreador a carriles del mismo hilo SIMD en el procesador SIMD 4001. Las pruebas de intersección luego se reducen a nivel local utilizando operaciones de reducción SIMD/SIMT (en lugar de confiar en los elementos atómicos globales). Esta forma de realización puede basarse en nuevos circuitos dentro de la unidad de clasificación 4008 para permitir que un pequeño lote de solicitaciones de sombreador permanezca en el mismo lote SIMD.
Una forma de realización de la invención suspende la ejecución del hilo de cruce en el circuito de cruce 4005. Utilizando el modelo de ejecución convencional, cuando se envía un sombreador durante el cruce, el hilo de cruce finaliza y el estado de cruce de rayos se guarda en la memoria para permitir la ejecución de otras órdenes de generación de rayos mientras las unidades de ejecución 4001 procesan los sombreadores. Si el hilo de cruce simplemente se suspende, no es necesario almacenar el estado de cruce y puede esperarse el resultado de cada sombreador por separado. Esta forma de realización puede incluir circuitos para evitar interbloqueos y proporcionar una utilización suficiente del hardware.
Las Figuras 47 a 48 ilustran formas de realización de un modelo diferido que solicita una única solicitación de sombreador en los núcleos SIMD/unidades de ejecución 4001 con tres sombreadores 4701. Cuando se conservan, todas las pruebas de intersección se evalúan dentro del mismo grupo SIMD/SIMT. En consecuencia, la intersección más próxima también se puede calcular en los núcleos programables/unidades de ejecución 4001.
Tal como se mencionó con anterioridad, la totalidad o una parte de la agregación y/o aplazamiento de sombreador puede ser realizada por el circuito de cruce/intersección 4005 y/o el planificador central/EU 4007. La Figura 47 ilustra una forma de realización en donde el aplazamiento/agregador de sombreador 4706 dentro del planificador 4007 difiere de la programación de sombreadores asociados con un hilo/carril SIMD/SIMT particular hasta que se haya producido un evento desencadenante especifico. Al detectar el evento de activación, el planificador 4007 envía los sombreadores agregados múltiples en un único lote SIMD/SIMT a los núcleos/EUs 4001.
La Figura 48 ilustra una forma de realización en donde el circuito diferido/agregador de sombreadores 4805 dentro del circuito de cruce/intersección 4005 difiere de la programación de sombreadores asociados con un hilo/carril SIMD particular hasta que se produzca un evento de activación especificado. Al detectar el evento de activación, el circuito de cruce/intersección 4005 envía los sombreadores agregados a la unidad de clasificación 4008 en un único lote SIMD/SIMT.
Conviene señalar, sin embargo, que las técnicas de diferido y agregación de sombreadores se pueden poner en práctica dentro de varios otros componentes, tales como la unidad de clasificación 4008, o se pueden distribuir entre múltiples componentes. Por ejemplo, el circuito de cruce/intersección 4005 puede realizar un primer conjunto de operaciones de agregación de sombreadores y el planificador 4007 puede realizar un segundo conjunto de operaciones de agregación de sombreadores para garantizar que los sombreadores para un hilo SIMD se programen de manera eficiente en los núcleos/EUs 4001.
El "evento desencadenante" para hacer que los sombreadores agregados se envíen a los núcleos/UEs puede ser un evento de procesamiento tal como un número particular de sombreadores acumulados o una latencia mínima asociada con un hilo particular. De manera alternativa, o adicional, el evento desencadenante puede ser un evento temporal tal como una cierta duración desde el aplazamiento del primer sombreador o un número particular de ciclos de procesador. Otras variables tales como la carga de trabajo actual en los núcleos/EUs 4001 y la unidad de cruce/intersección 4005 también pueden ser evaluadas por el planificador 4007 para determinar cuándo enviar el lote de sombreador SIMD/SIMT.
Se pueden poner en práctica diferentes formas de realización de la invención utilizando diferentes combinaciones de los métodos anteriores, en función de la arquitectura de sistema particular que se utilice y de los requisitos de la aplicación.
En formas de realización, 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 memoria (compartida, dedicada o en grupo) que ejecutan uno o más programas de software o firmware, un circuito lógico combinacional y/u otros componentes adecuados que proporcionan la funcionalidad descrita. En formas de realización, un motor, módulo o lógica pueden ponerse en práctica en firmware, hardware, software o cualquier combinación de firmware, hardware y software.
Las formas de realización de la invención pueden incluir varias etapas, que se han descrito con anterioridad. Las etapas pueden incorporarse en instrucciones ejecutables por máquina que pueden utilizarse para hacer que un procesador de uso general o de uso especial realice las etapas. De manera alternativa, estas etapas pueden ser realizadas por componentes de hardware especificados que contienen lógica cableada para realizar las etapas, o por cualquier combinación de componentes de ordenador programados y componentes de hardware personalizados.
Tal como se describe en este documento, las instrucciones pueden referirse a configuraciones específicas de hardware, tales como circuitos integrados especificados de la aplicación (ASICs) configurados para realizar ciertas operaciones o tener una funcionalidad predeterminada o instrucciones de software almacenadas en la memoria incorporada en un medio legible por ordenador no transitorio. Por lo tanto, las técnicas que se muestran en las figuras se pueden poner en práctica 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ódigos y datos utilizando medios informáticos legibles por máquina, tales como medios de almacenamiento informáticos no transitorios legibles por máquina (p. ej., discos magnéticos; discos ópticos; memoria de acceso aleatorio; memoria de solamente lectura; dispositivos de memoria instantánea; memoria de cambio de fase) y medios de comunicación transitorios legibles por ordenador (por ejemplo, señales eléctricas, ópticas, acústicas u otras formas de señales de propagación, tales como ondas portadoras, señales infrarrojas, señales digitales, etc).
Además, dichos dispositivos electrónicos suelen incluir un conjunto de uno o más procesadores acoplados a uno o más componentes, tal como uno o más dispositivos de almacenamiento (medios de almacenamiento legibles por máquina no transitorios), dispositivos de entrada/salida del usuario (p. ej., un teclado, una pantalla táctil y/o una pantalla) y conexiones de red. El acoplamiento del conjunto de procesadores y otros componentes se realiza normalmente 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 transportan el tráfico de la red representan, respectivamente, uno o más medios de almacenamiento legibles por máquina y medios de comunicación legibles por máquina. Así, el dispositivo de almacenamiento de un dispositivo electrónico dado normalmente almacena 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 forma de realización de la invención pueden ponerse en práctica utilizando diferentes combinaciones de software, firmware y/o hardware. A lo largo de esta descripción detallada, con fines explicativos, se establecieron numerosos datos específicos para proporcionar una comprensión completa de la presente invención. Será evidente, sin embargo, para un experto en esta técnica que la invención se puede poner en práctica sin algunos de estos datos específicos. En ciertos casos, las estructuras y funciones bien conocidas no se describieron con datos elaborados para evitar oscurecer el objeto de la presente invención. En consecuencia, el alcance de la invención debe juzgarse en términos de las reivindicaciones que siguen.

Claims (13)

REIVINDICACIONES
1. Un aparato que comprende:
unidades de ejecución (EUs) (4001) de datos múltiples de instrucción única (SIMD) o de hilos múltiples de instrucción única (SIMT) para ejecutar sombreadores;
circuitos de trazado de rayos para ejecutar un hilo cruce de rayos, comprendiendo el circuito de trazado de rayos: circuitos transversales/de intersección (4005), en respuesta al hilo transversal, para atravesar un rayo a través de una estructura de datos de aceleración que comprende una pluralidad de nodos dispuestos de forma jerárquica y para intersectar el rayo con una primitiva contenida dentro de al menos uno de los nodos; y
circuitos diferidos de sombreadores para aplazar y agregar múltiples solicitaciones de sombreadores múltiples resultantes del hilo transversal hasta que se detecte un evento desencadenante particular, en donde los sombreadores múltiples deben enviarse en las unidades EUs (4001) en un solo lote de sombreador tras la detección del evento desencadenante; y
circuitos de eliminación de solicitaciones de sombreador para eliminar una o más de las múltiples solicitaciones de sombreadores múltiples al determinarse que una o más de las múltiples solicitaciones de sombreador son innecesarias, en donde el único lote de sombreador debe enviarse sin la una o más solicitaciones de sombreador eliminadas.
2. El aparato según la reivindicación 1, en donde el evento desencadenante comprende un evento temporal particular o un evento de procesamiento.
3. El aparato según la reivindicación 1 o 2 que comprende, además:
un planificador (4007) para enviar el lote de sombreador único en las unidades EUs (4001) en respuesta al evento desencadenante.
4. El aparato según la reivindicación 1 o 2, en donde el hilo transversal se suspenderá en latencia de los resultados de ejecución del lote de sombreador ejecutado en las unidades EUs (4001), en donde un primer contexto transversal del hilo transversal ha de mantenerse mientras se suspende el hilo transversal.
5. El aparato según la reivindicación 4, en donde los circuitos diferidos de sombreador han de agregar las múltiples solicitaciones de sombreador basándose en las múltiples solicitaciones de sombreador que están asociadas con el primer contexto transversal.
6. El aparato según la reivindicación 1 o 5, en donde un hilo principal de sombreador de rayos ejecutado en las unidades EUs (4001) es para generar el hilo transversal.
7. El aparato según la reivindicación 1 o 5 que comprende, además:
circuitos de clasificación (4008) para reagrupar datos asociados con el lote de sombreador úni
ocupación para operaciones SIMD y/o SIMT realizadas por las unidades de ejecución (4001).
8. El aparato según la reivindicación 1 o 5, en donde aplazar y agregar múltiples solicitaciones de sombreador comprende almacenar una entrada de datos en una estructura de lista o de tabla en una memoria, comprendiendo la lista o tabla al menos una entrada para cada sombreador, siendo cada entrada utilizable para identificar datos de sombreador y/o código de programa, necesarios para ejecutar un sombreador correspondiente.
9. Un método que comprende:
ejecutar sombreadores en unidades de ejecución (EUs) de una instrucción única y múltiples datos (SIMD) o de una instrucción única y múltiples hilos (SIMT);
ejecutar un hilo cruce de rayos en un circuito de trazado de rayos;
en respuesta al hilo transversal, atravesar un rayo en los circuitos de trazado de rayos a través de una estructura de datos de aceleración que comprende una pluralidad de nodos dispuestos de forma jerárquica;
intersectar el rayo utilizando circuitos transversales/de intersección de los circuitos de trazado de rayos con una primitiva contenida dentro de al menos uno de los nodos;
aplazar y agregar múltiples solicitaciones de sombreador utilizando circuitos diferido de sombreador (4085) de los circuitos de trazado de rayos que resulta del hilo transversal hasta que se detecta un evento desencadenante particular;
enviar los sombreadores múltiples en las unidades EUs en un único lote de sombreador tras la detección del evento desencadenante;
eliminar una o más de las múltiples solicitaciones de sombreador utilizando circuitos de eliminación de solicitaciones de sombreador de un aparato cuando se determina que una o más de las múltiples solicitaciones de sombreador son innecesarias, en donde el único lote de sombreador debe enviarse sin la una o más solicitaciones de sombreador eliminadas.
10. El método según la reivindicación 9, en donde el evento desencadenante comprende un evento temporal particular o un evento de procesamiento.
11. El método según la reivindicación 9 o 10 que comprende, además:
enviar el lote de sombreador único en las unidades EUs en respuesta al evento desencadenante.
12. El método según la reivindicación 9 o 10, en donde el hilo transversal debe suspenderse en latencia de los resultados de ejecución del lote de sombreador ejecutado en las EUs, en donde debe mantenerse un primer contexto transversal del hilo transversal mientras el hilo transversal está suspendido.
13. El método según la reivindicación 12, en donde las solicitaciones de sombreadores múltiples se van a agregar basándose en las solicitaciones de sombreadores múltiples que se asocian con el primer contexto transversal.
ES19204264T 2018-12-28 2019-10-21 Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos Active ES2907861T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US16/236,176 US10909741B2 (en) 2018-12-28 2018-12-28 Speculative execution of hit and intersection shaders on programmable ray tracing architectures

Publications (1)

Publication Number Publication Date
ES2907861T3 true ES2907861T3 (es) 2022-04-26

Family

ID=68296216

Family Applications (1)

Application Number Title Priority Date Filing Date
ES19204264T Active ES2907861T3 (es) 2018-12-28 2019-10-21 Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos

Country Status (5)

Country Link
US (4) US10909741B2 (es)
EP (2) EP3675046B1 (es)
CN (1) CN111402376A (es)
ES (1) ES2907861T3 (es)
PL (1) PL3675046T3 (es)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US12007935B2 (en) 2019-03-15 2024-06-11 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
CN112534405A (zh) 2019-03-15 2021-03-19 英特尔公司 用于脉动阵列上的块稀疏操作的架构
EP4130988A1 (en) * 2019-03-15 2023-02-08 INTEL Corporation Systems and methods for cache optimization
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
EP3973710A4 (en) * 2019-05-22 2023-05-03 Nokia Technologies Oy METHOD, DEVICE AND COMPUTER PROGRAM PRODUCT FOR ENCODING AND DECODING VOLUMETRIC VIDEO
WO2020247145A1 (en) * 2019-06-03 2020-12-10 Nvidia Corporation Bayesian machine learning system for adaptive ray-tracing
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11367242B2 (en) * 2020-07-30 2022-06-21 Apple Inc. Ray intersect circuitry with parallel ray testing
US11335061B2 (en) 2020-07-30 2022-05-17 Apple Inc. Ray intersection data structure with many-to-many mapping between bounding regions and primitives
GB2607350B (en) * 2021-06-04 2023-12-13 Advanced Risc Mach Ltd Graphics processing
US11854139B2 (en) 2021-12-28 2023-12-26 Advanced Micro Devices, Inc. Graphics processing unit traversal engine
WO2024102165A1 (en) * 2022-11-07 2024-05-16 Innopeak Technology, Inc. Methods and systems for rendering video graphics

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9478062B2 (en) * 2006-09-19 2016-10-25 Imagination Technologies Limited Memory allocation in distributed memories for multiprocessing
US10262456B2 (en) * 2015-12-19 2019-04-16 Intel Corporation Method and apparatus for extracting and using path shading coherence in a ray tracing architecture
GB2560709B (en) * 2017-03-14 2021-02-24 Imagination Tech Ltd Graphics processing method and system for processing sub-primitives
US10957095B2 (en) 2018-08-06 2021-03-23 Intel Corporation Programmable ray tracing with hardware acceleration on a graphics processor

Also Published As

Publication number Publication date
US11769288B2 (en) 2023-09-26
EP3675046A1 (en) 2020-07-01
US20210287419A1 (en) 2021-09-16
US20200211253A1 (en) 2020-07-02
EP4030389A1 (en) 2022-07-20
PL3675046T3 (pl) 2022-03-28
US20220414970A1 (en) 2022-12-29
CN111402376A (zh) 2020-07-10
US10909741B2 (en) 2021-02-02
EP3675046B1 (en) 2021-12-22
US11398068B2 (en) 2022-07-26
US20240013470A1 (en) 2024-01-11

Similar Documents

Publication Publication Date Title
ES2907861T3 (es) Ejecución especulativa de sombreadores de choque e intersección en arquitecturas programables de trazado de rayos
US11593909B2 (en) Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources
US11727528B2 (en) Unified architecture for BVH construction based on hardware pre-sorting and a parallel, reconfigurable clustering array
US20210407177A1 (en) Apparatus and method for ray tracing with grid primitives
JP7525091B2 (ja) 非同期レイトレーシング用の装置及び方法
US11900523B2 (en) Early termination in bottom-up acceleration data structure refit
US20240233244A1 (en) Apparatus and method for a hierarchical beam tracer
US11670035B2 (en) Apparatus and method for performing non-local means filtering using motion estimation circuitry of a graphics processor
US11900498B2 (en) Apparatus and method for performing a stable and short latency sorting operation
CN112085827B (zh) 用于加速数据结构修整的装置和方法
US11989817B2 (en) Apparatus and method for high quality ray-traced level of detail transitions